Unusual performance drops for Tex.SetColors

Description
When testing my HL2 application, I started to notice my color image sprites would occasionally have "performance hiccups" in their IStepper's Step function. If this function call takes too long in the main thread, it will block all the other ISteppers from rendering. I then noticed the inconsistency in performance for their texture's SetColors method. The main variables to take into consideration for quicker updates of a texture's color data seemed to be:

Which architecture (ARM vs ARM64 for HL2 applications, PC as "ground truth")
NoMips vs Dynamic textures

Platform / Environment

Razer Blade 15 Laptop (x64)
HoloLens 2 (ARM / ARM64)
Using StereoKit's latest NuGet package (preview 3.7.3).

Test Program
A simple UWP C# single-file (Program.cs) application was used for testing:
namespace SetColorsSpeedTest
{
    using StereoKit;
    using StereoKit.Framework;
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;

    public class ImagePlane : IStepper
    {
        private Tex tex;
        private Sprite sprite;
        private int imageWidth = 896;
        private int imageHeight = 504;
        private Pose windowPose = Matrix.T(new Vec3(0, 0, -1)).Pose;

        private Vec2 imageAspectRatio;

        private Stopwatch stopwatch = new Stopwatch();

        public ImagePlane()
        {
            this.tex = new Tex(TexType.Dynamic | TexType.ImageNomips, TexFormat.Rgba32);
            this.tex.SetColors(this.imageWidth, this.imageHeight, new Color32[this.imageWidth * this.imageHeight]);
            this.sprite = Sprite.FromTex(tex, SpriteType.Single);

            this.imageAspectRatio.x = 60.0f * U.cm;

            this.diagnosticTimes = new List<long>(numValues);
        }

        public bool Enabled => true;

        public bool Initialize()
        {
            return true;
        }

        public void Shutdown()
        {

        }

        // diagnostic states
        private static int numValues = 100;
        private int numOutliers = 5;

        private List<long> diagnosticTimes;

        public void Step()
        {
            if (this.diagnosticTimes.Count == numValues)
            {
                this.diagnosticTimes.Sort();

                // print diagnostics information
                Trace.WriteLine($"min: {this.diagnosticTimes[0]}ms, " +
                                $"max: {this.diagnosticTimes[numValues - 1]}ms, " +
                                $"median: {this.diagnosticTimes[numValues / 2 - 1]}ms");

                Trace.WriteLine($"printing top {numOutliers} longest times:");

                for (int i = numValues - numOutliers - 1; i < numValues; i++)
                {
                    long outlier = this.diagnosticTimes[i];
                    Trace.WriteLine($"#{i + 1}: {outlier}ms");
                }

                // safely exit the application
                SK.Quit();
                return;
            }

            Color32[] newColors = new Color32[this.imageWidth * this.imageHeight];

            stopwatch.Start();

            this.tex.SetColors(this.imageWidth, this.imageHeight, newColors);

            long l = stopwatch.ElapsedMilliseconds;
            stopwatch.Reset();

            UI.WindowBegin("image plane", ref this.windowPose, moveType: UIMove.FaceUser);
            UI.Image(this.sprite, this.imageAspectRatio);
            UI.WindowEnd();

            diagnosticTimes.Add(l);
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            // Initialize StereoKit
            SKSettings settings = new SKSettings
            {
                appName = "SetColorsSpeedTest",
                assetsFolder = "Assets",
            };
            if (!SK.Initialize(settings))
                Environment.Exit(1);

            SK.AddStepper(new ImagePlane());

            // Create assets used by the app
            Pose cubePose = new Pose(0, 0, -0.5f, Quat.Identity);
            Model cube = Model.FromMesh(
                Mesh.GenerateRoundedCube(Vec3.One * 0.1f, 0.02f),
                Default.MaterialUI);

            Matrix floorTransform = Matrix.TS(0, -1.5f, 0, new Vec3(30, 0.1f, 30));
            Material floorMaterial = new Material(Shader.FromFile("floor.hlsl"));
            floorMaterial.Transparency = Transparency.Blend;

            // Core application loop
            while (SK.Step(() =>
            {
                if (SK.System.displayType == Display.Opaque)
                    Default.MeshCube.Draw(floorMaterial, floorTransform);

                UI.Handle("Cube", ref cubePose, cube.Bounds);
                cube.Draw(cubePose.ToMatrix());
            })) ;
            SK.Shutdown();
        }
    }
}

Logs or exception details
All timing measurements were made over 100 render frames. For each variable, I performed the measurement 3 times and kept the most average-looking results.
Legend

key
meaning

min
Minimum time of one function call for n frames

max
Maximum time of one function call for n frames

median
Time of one function call for frame # n/2

outliers
Top 5 longest times of the function call over n frames

Diagnostic times

NoMips
Dynamic

x64 (PC)

min: 4ms, max: 22ms, median: 5ms
printing top 5 outliers:
#95: 10ms
#96: 10ms
#97: 11ms
#98: 11ms
#99: 13ms
#100: 22ms

min: 4ms, max: 13ms, median: 4ms
printing top 5 outliers:
#95: 7ms
#96: 7ms
#97: 8ms
#98: 8ms
#99: 9ms
#100: 13ms

ARM (HL2)

min: 4ms, max: 37ms, median: 6ms
printing top 5 outliers:
#95: 11ms
#96: 15ms
#97: 23ms
#98: 25ms
#99: 30ms
#100: 37ms

min: 3ms, max: 33ms, median: 5ms
printing top 5 outliers:
#95: 8ms
#96: 8ms
#97: 9ms
#98: 9ms
#99: 23ms
#100: 33ms

ARM64 (HL2)

min: 10ms, max: 51ms, median: 13ms
printing top 5 outliers:
#95: 26ms
#96: 27ms
#97: 27ms
#98: 34ms
#99: 45ms
#100: 51ms

min: 10ms, max: 40ms, median: 12ms
printing top 5 outliers:
#95: 20ms
#96: 20ms
#97: 22ms
#98: 27ms
#99: 37ms
#100: 40ms

Discussion

As you can see above in the ARM architecture, there are always outliers 5-10x slower than the median frame. What could be the reason for these significant outliers?
~Why aren't we allowed to set a Texture as Dynamic and ImageNomips from the start? Could this be contributing to the two outliers as seen in ARM -> Dynamic -> Atlased/Single?~
Why would ARM be much faster than ARM64 when copying this color data to the GPU?

I'll look into this in detail in the morning, thanks a bunch for writing this up! The ARM vs ARM64 thing is ...unexpected to say the least, the big difference being that ARM64 uses .NET Native, and ARM generally does not.
I'll also note that you can specify more than one TexType, it's a bit flag. So TexType.Dynamic | TexType.ImageNomips will get you both at the same time.

Thanks so much for the speedy response!
I did a big facepalm after seeing the docs about Atlased not being implemented after making the table 😅 That's awesome that TexType is a bit flag!
So, I just tested the ARM application again with the TexType set to TexType.Dynamic | TexType.ImageNomips and still am receiving the following outliers:
min: 3ms, max: 46ms, median: 5ms
printing top 5 longest times:
#95: 7ms
#96: 7ms
#97: 8ms
#98: 10ms
#99: 19ms
#100: 46ms

These outliers are my main concern for creating the issue, but the ARM vs ARM64 comparison just peaks my curiosity too!

I also noticed calling Mesh.SetVerts without calculating the bounds looks like it should simply be copying data in:
https://github.com/StereoKit/StereoKit/blob/dce5945141c000a16fd7497243fab45bd507882b/StereoKitC/libraries/sk_gpu.h#L1006
However, it could be that the Map operation is taking a varying amount of time: https://stackoverflow.com/questions/40808759/id3d11devicecontextmap-slow-performance
Perhaps an option to specify the D3D11_MAP_FLAG_DO_NOT_WAIT flag could boost performance? <- src. I'll update back on this.
I tested out a very similar design to this sample program for the ARM architecture on HL2 and received outliers that are a factor of ~3-10 of the median time.
MeshRenderer: 163ms
MeshRenderer: 30ms
MeshRenderer: 31ms
MeshRenderer: 27ms
MeshRenderer: 106ms
MeshRenderer: 27ms
MeshRenderer: 27ms
MeshRenderer: 28ms
MeshRenderer: 41ms
MeshRenderer: 20ms

Yeah, I do suspect that a lot of the issue here is related to interaction with the GPU, which can be kinda complicated. Basically, if the GPU is busy doing something like drawing the previous frame, then it has to wait until the GPU unlocks before a Map can occur.
D3D11_MAP_FLAG_DO_NOT_WAIT is perhaps part of the solution, but that flag IIRC should cause the Map call to error out instead of waiting! You can then attempt to Map later on when the device isn't busy, but rescheduling that task is not exactly simple in this case. There needs to be some amount of interaction with SK's async asset pipeline here to let these slide until later in the frame, or to the next frame.


cargo build --release --target=x86_64-unknown-linux-musl is failing

cargo build --release --target=x86_64-unknown-linux-musl is failing
I get:
.cargo/registry/src/github.com-1ecc6299db9ec823/ring-0.16.20/pregenerated/aesni-x86_64-elf.S"]: No such file or directory (os error 2)

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

ID: c524efc8-3aef-53b3-732b-6837d8f1c7a7
Version Independent ID: a5d8005d-4431-a2b6-34bf-c463b76618c2
Content: Create a function in Go or Rust using Visual Studio Code - Azure Functions
Content Source: articles/azure-functions/create-first-function-vs-code-other.md
Service: azure-functions
GitHub Login: @ggailey777
Microsoft Alias: glenga

@andre-qumulo
Thanks for your feedback! We will investigate and update as appropriate.


Add RBi for stdlib/rexml

No signature.

https://go/builds/bui_HJZAu5hCvHXwLm

When I ran this on Stripe's CI, this caused a small handful of errors which isn't usually a problem except that I can't see a quick (5 minute) solution to fixing them. So we might have to take a while longer to get back to you before we can merge this one.

Alright after further checking, this isn't quite as hard to change on Stripe's end but it will take a little bit.

Any news on this one?

I can look at this today


chore(deps): update dependency eslint to v8

This PR contains the following updates:

Package
Type
Update
Change

eslint (source)
devDependencies
major
7.32.0 -> 8.2.0

Release Notes

eslint/eslint
v8.2.0
Compare Source
Features

c9fefd2 feat: report class evaluation TDZ errors in no-use-before-define (#15134) (Milos Djermanovic)

Documentation

c415c04 docs: Use string rule severity in CLI examples (#15253) (Kevin Partington)
12b627d docs: fix typo in working-with-rules.md (#15233) (Nitin Kumar)
a86ffc0 docs: fix broken anchor in configuration files (#15223) (Pierre Berger)
ee8af5f docs: Link to unit tests from rule documentation (#15207) (Brandon Mills)
1c0ca3c docs: add ci and perf tags for commit (#15215) (Nitin Kumar)

Build Related

796587a build: upgrade eslint-release to v3.2.0 to support conventional commits (#15246) (Milos Djermanovic)

Chores

cf5b6be chore: update @eslint/eslintrc to avoid different versions of js-yaml (#15265) (Milos Djermanovic)
4fd7a6c perf: don't prepare a fix for valid code in key-spacing (#15239) (Milos Djermanovic)
fda533c chore: update strip-ansi dependency (#15221) (Nitin Kumar)
67949bd ci: Remove Node 16 CI prerelease workaround (#14935) (Brandon Mills)

v8.1.0
Compare Source

446b4b3 Docs: Update commit message format docs (#15200) (Nicholas C. Zakas)
d9d84a0 Fix: keyword-spacing conflict with space-infix-ops on > (fixes #14712) (#15172) (Milos Djermanovic)
a1f7ad7 Fix: allow baseConfig to extend preloaded plugin config (fixes #15079) (#15187) (Milos Djermanovic)
3d370fb New: Add no-unused-private-class-members rule (fixes #14859) (#14895) (Tim van der Lippe)
e926b17 New: Add name to RuleTester (#15179) (Gareth Jones)
90a5b6b Chore: improve performance of :function selector (#15181) (Milos Djermanovic)
31af1c8 Chore: fix counting of files in performance test (#15190) (Milos Djermanovic)
1b87fa8 Build: add node v17 (#15193) (唯然)
0fb3bb2 Docs: remove instanceof from keyword-spacing docs (#15180) (Milos Djermanovic)
249a040 Upgrade: eslint-plugin-eslint-plugin to v4 (#15169) (Bryan Mishkin)
35f3254 Docs: Describe range in rule docs (fixes #14162) (#15174) (Nicholas C. Zakas)
b5049c8 Chore: Update stale bot settings (#15173) (Nicholas C. Zakas)
2b32f50 Docs: Fix typo in README.md (#15168) (Dmitriy Fishman)
dd58cd4 Chore: migrate master to main (#15062) (Nitesh Seram)
ec0f8e0 Chore: Add stale issue/PR checker (#15151) (Nicholas C. Zakas)
2cfbd4b Docs: Update README team and sponsors (ESLint Jenkins)

v8.0.1
Compare Source

f9217e5 Upgrade<EMAIL_ADDRESS>for Jest workaround (#15164) (Brandon Mills)
c584a63 Chore: add ecmaVersion 13 to types.js (#15163) (Milos Djermanovic)
ff5fcd4 Docs: add 13 as allowed ecma version (fixes #15159) (#15162) (唯然)

v8.0.0
Compare Source

7d3f7f0 Upgrade: unfrozen @eslint/eslintrc (fixes #15036) (#15146) (Brandon Mills)
2174a6f Fix: require-atomic-updates property assignment message (fixes #15076) (#15109) (Milos Djermanovic)
f885fe0 Docs: add note and example for extending the range of fix (refs #13706) (#13748) (Milos Djermanovic)
3da1509 Docs: Add jsdoc type annotation to sample rule (#15085) (Bryan Mishkin)
68a49a9 Docs: Update Rollup Integrations (#15142) (xiaohai)
d867f81 Docs: Remove a dot from curly link (#15128) (Mauro Murru)
9f8b919 Sponsors: Sync README with website (ESLint Jenkins)
4b08f29 Sponsors: Sync README with website (ESLint Jenkins)
ebc1ba1 Sponsors: Sync README with website (ESLint Jenkins)
2d654f1 Docs: add example .eslintrc.json (#15087) (Nicolas Mattia)
16034f0 Docs: fix fixable example (#15107) (QiChang Li)
07175b8 8.0.0-rc.0 (ESLint Jenkins)
71faa38 Build: changelog update for 8.0.0-rc.0 (ESLint Jenkins)
67c0074 Update: Suggest missing rule in flat config (fixes #14027) (#15074) (Nicholas C. Zakas)
cf34e5c Update: space-before-blocks ignore after switch colons (fixes #15082) (#15093) (Milos Djermanovic)
c9efb5f Fix: preserve formatting when rules are removed from disable directives (#15081) (Milos Djermanovic)
14a4739 Update: no-new-func rule catching eval case of MemberExpression (#14860) (Mojtaba Samimi)
7f2346b Docs: Update release blog post template (#15094) (Nicholas C. Zakas)
fabdf8a Chore: Remove target.all from Makefile.js (#15088) (Hirotaka Tagawa / wafuwafu13)
e3cd141 Sponsors: Sync README with website (ESLint Jenkins)
05d7140 Chore: document target global in Makefile.js (#15084) (Hirotaka Tagawa / wafuwafu13)
0a1a850 Update: include ruleId in error logs (fixes #15037) (#15053) (Ari Perkkiö)
47be800 Chore: test Property > .key with { a = 1 } pattern (fixes #14799) (#15072) (Milos Djermanovic)
a744dfa Docs: Update CLA info (#15058) (Brian Warner)
9fb0f70 Chore: fix bug report template (#15061) (Milos Djermanovic)
f87e199 Chore: Cleanup issue templates (#15039) (Nicholas C. Zakas)
660f075 8.0.0-beta.2 (ESLint Jenkins)
d148ffd Build: changelog update for 8.0.0-beta.2 (ESLint Jenkins)
9e5c2e8 Upgrade<EMAIL_ADDRESS>(#15047) (Milos Djermanovic)
7cf96cf Breaking: Disallow reserved words in ES3 (fixes #15017) (#15046) (Milos Djermanovic)
88a3952 Update: support class fields in the complexity rule (refs #14857) (#14957) (Milos Djermanovic)
9bd3d87 Fix: semicolon-less style in lines-between-class-members (refs #14857) (#15045) (Milos Djermanovic)
6d1ccb6 Update: enforceForClassFields in class-methods-use-this (refs #14857) (#15018) (YeonJuan)
91e82f5 Docs: LintMessage.line and column are possibly undefined (#15032) (Brandon Mills)
921ba1e Chore: fix failing cli test (#15041) (Milos Djermanovic)
dd56631 Docs: remove duplicate code path analysis document (#15033) (Milos Djermanovic)
143a598 Chore: Switch issues to use forms (#15024) (Nicholas C. Zakas)
f966fe6 Fix: Update semi for class-fields (refs #14857) (#14945) (Nicholas C. Zakas)
8c61f5a Docs: add info about non-capturing groups to prefer-named-capture-group (#15009) (Andrzej Wódkiewicz)
dd10937 Update: added ignoreExpressions option to max-classes-per-file (#15000) (Josh Goldberg)
e9764f3 Fix: no-undef-init should not apply to class fields (refs #14857) (#14994) (Milos Djermanovic)
4338b74 Docs: add no-dupe-class-members examples with class fields (refs #14857) (#15005) (Milos Djermanovic)
b4232d4 Chore: Add test that deprecated rules display a deprecated notice (#14989) (TagawaHirotaka)
88b4e3d Docs: Make clear how rule options are overridden (fixes #14962) (#14976) (Jake Ob)
4165c7f Docs: Clarify Linter vs ESLint in node.js api docs (fixes #14953) (#14995) (Brian Bartels)
80cfb8f Docs: fix typo in migration guide (#14985) (Nitin Kumar)
1ddc955 8.0.0-beta.1 (ESLint Jenkins)
95cc61e Build: changelog update for 8.0.0-beta.1 (ESLint Jenkins)
05ca24c Update: Code path analysis for class fields (fixes #14343) (#14886) (Nicholas C. Zakas)
db15183 Chore: Refactor comments of tests (#14956) (TagawaHirotaka)
396a0e3 Docs: update ScopeManager with class fields (#14974) (Milos Djermanovic)
6663e7a Docs: remove docs script (fixes #14288) (#14971) (Nitin Kumar)
44c6fc8 Update: support class fields in func-name-matching (refs #14857) (#14964) (Milos Djermanovic)
44f7de5 Docs: Update deprecated information (#14961) (TagawaHirotaka)
305e14a Breaking: remove meta.docs.category in core rules (fixes #13398) (#14594) (薛定谔的猫)
a79c9f3 Chore: Enforce jsdoc check-line-alignment never (#14955) (Brett Zamir)
a8bcef7 Docs: Add 2021 and 2022 to supported ECMAScript versions (#14952) (coderaiser)
3409785 Fix: camelcase ignoreGlobals shouldn't apply to undef vars (refs #14857) (#14966) (Milos Djermanovic)
b301069 Docs: fix 'When Not To Use' in prefer-named-capture-group (refs #14959) (#14969) (Milos Djermanovic)
2d18db6 Chore: add test for merging parserOptions in Linter (#14948) (Milos Djermanovic)
3d7d5fb Update: reporting loc for never option in eol-last (refs #12334) (#14840) (Nitin Kumar)
f110926 Update: fix no-unused-vars false negative with comma operator (#14928) (Sachin)
e98f14d Docs: Fix typo in no-implicit-globals.md (#14954) (jwbth)
9a4ae3b Chore: Apply comment require-description and check ClassDeclaration (#14949) (Brett Zamir)
8344675 Chore: fix small typo (#14951) (Sosuke Suzuki)
26b0cd9 Update: fix no-unreachable logic for class fields (refs #14857) (#14920) (Milos Djermanovic)
ee1b54f Fix: keyword-spacing private name compat (refs #14857) (#14946) (Nicholas C. Zakas)
58840ac Chore: Update jsdoc plugin and tweak rules in effect (#14814) (Brett Zamir)
81c60f4 Docs: document ESLint api (#14934) (Sam Chen)
c74fe08 Build: Force prerelease peer dep for Node 16 in CI (#14933) (Brandon Mills)
c9947d2 8.0.0-beta.0 (ESLint Jenkins)
027165c Build: changelog update for 8.0.0-beta.0 (ESLint Jenkins)
be334f9 Chore: Fix Makefile call to linter.getRules() (#14932) (Brandon Mills)
0c86b68 Chore: Replace old syntax for Array flat/flatMap (#14614) (Stephen Wade)
6a89f3f Chore: ignore yarn-error.log and .pnpm-debug.log (#14925) (Nitin Kumar)
28fe19c Docs: Add v8.0.0 migration guide (fixes #14856) (#14884) (Nicholas C. Zakas)
ec9db63 Upgrade<EMAIL_ADDRESS>(#14865) (Milos Djermanovic)
1f5d088 Docs: add an example Object.assign() for rule no-import-assign (#14916) (薛定谔的猫)
af96584 Fix: handle computed class fields in operator-linebreak (refs #14857) (#14915) (Milos Djermanovic)
3b6cd89 Chore: Add rel/abs path tests in no-restricted-{imports/modules} rules (#14910) (Bryan Mishkin)
62c6fe7 Upgrade: Debug 4.0.1 > 4.3.2 (#14892) (sandesh bafna)
f984515 Chore: add assertions on reporting location in semi (#14899) (Nitin Kumar)
a773b99 Fix: no-useless-computed-key edge cases with class fields (refs #14857) (#14903) (Milos Djermanovic)
88db3f5 Upgrade: js-yaml to v4 (#14890) (Bryan Mishkin)
cbc43da Fix: prefer-destructuring PrivateIdentifier false positive (refs #14857) (#14897) (Milos Djermanovic)
ccb9a91 Fix: dot-notation false positive with private identifier (refs #14857) (#14898) (Milos Djermanovic)
8c35066 Sponsors: Sync README with website (ESLint Jenkins)
a3dd825 Sponsors: Sync README with website (ESLint Jenkins)
c4e5802 Docs: improve rule details for no-console (fixes #14793) (#14901) (Nitin Kumar)
9052eee Update: check class fields in no-extra-parens (refs #14857) (#14906) (Milos Djermanovic)
5c3a470 Docs: add class fields in no-multi-assign documentation (refs #14857) (#14907) (Milos Djermanovic)
d234d89 Docs: add class fields in func-names documentation (refs #14857) (#14908) (Milos Djermanovic)
ae6072b Upgrade: eslint-visitor-keys to v3 (#14902) (Bryan Mishkin)
e53d8cf Upgrade: markdownlint dev dependencies (#14883) (Bryan Mishkin)
d66e941 Upgrade: @humanwhocodes/config-array to 0.6 (#14891) (Bryan Mishkin)
149230c Chore: Specify Node 14.x for Verify Files CI job (#14896) (Milos Djermanovic)
537cf6a Chore: update glob-parent (fixes #14879)(#14887) (Nitin Kumar)
f7b4a3f Chore: update dev deps to latest (#14624) (薛定谔的猫)
24c9f2a Breaking: Strict package exports (refs #13654) (#14706) (Nicholas C. Zakas)
86d31a4 Breaking: disallow SourceCode#getComments() in RuleTester (refs #14744) (#14769) (Milos Djermanovic)
1d2213d Breaking: Fixable disable directives (fixes #11815) (#14617) (Josh Goldberg)
4a7aab7 Breaking: require meta for fixable rules (fixes #13349) (#14634) (Milos Djermanovic)
d6a761f Breaking: Require meta.hasSuggestions for rules with suggestions (#14573) (Bryan Mishkin)
6bd747b Breaking: support new regex d flag (fixes #14640) (#14653) (Yosuke Ota)
8b4f3ab Breaking: fix comma-dangle schema (fixes #13739) (#14030) (Joakim Nilsson)
b953a4e Breaking: upgrade espree and support new class features (refs #14343) (#14591) (Toru Nagashima)
8cce06c Breaking: add some rules to eslint:recommended (refs #14673) (#14691) (薛定谔的猫)
86bb63b Breaking: Drop codeframe and table formatters (#14316) (Federico Brigante)
f3cb320 Breaking: drop node v10/v13/v15 (fixes #14023) (#14592) (薛定谔的猫)
b8b2d55 Build: add codeql (#14729) (薛定谔的猫)
e037d61 Docs: Mention workaround for escaping the slash character in selectors (#14675) (Aria)
81f03b6 Docs: Update license copyright (#14877) (Nicholas C. Zakas)
fa1c07c Sponsors: Sync README with website (ESLint Jenkins)
e31f492 Sponsors: Sync README with website (ESLint Jenkins)
8307256 Sponsors: Sync README with website (ESLint Jenkins)

Configuration
📅 Schedule: At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.

[ ] If you want to rebase/retry this PR, check this box.

This PR has been generated by Renovate Bot.

Renovate Ignore Notification
As this PR has been closed unmerged, Renovate will ignore this upgrade and you will not receive PRs for any future 8.x releases. However, if you upgrade to 8.x manually then Renovate will then reenable updates for minor and patch updates automatically.
If this PR was closed by mistake or you changed your mind, you can simply rename this PR and you will soon get a fresh replacement PR opened.


Form onValidation shouldn't throw

Enhancement
Current form onValidation property has two design issues: 1. It throws. 2. It throws non-error.
First, validation method shouldn't throw it should return a report/explanation why data is invalid. Programmer should decide what to do with this report and probably throw exception. Validation should throw only when something went wrong like invalid options were passed.
Second, throwing non-error object leads is an error-prone behavior due to lack of stack it could lead to hard to track bugs. It seems ok while you control the code within you component, but it still a very bad design.
Motivation
Avoiding this allow to create some unified method, which could be used anywhere outside of the component without a single change.
Possible implementations
It's better when validation method returns an array of issues, and have the next interface:
type Validator = (any, object?): Array<Issue>

type Issue = {
  path: Array<string|number>
  rule: string
  details: object
}

Simple number validator:
function validateNumber(value:any):Array<Issue> {
  if (typeof value === 'number') {
    return []
  }
  else {
    return [
       {rule: 'isNumber', path: [], details: {expect: true, is: false}}
    ]
  }
}

Such issues could be used with i18n package. Its' creation could be wordy, but it solvable with factory methods.
You can check how this implemented on practice at TypedProps package.

Thank you for opening the issue @rumkin!
I still don't have opinions about this. But researching a bit, I see that Formik also throws: https://github.com/jaredpalmer/formik/blob/5bae8e05f60e1801d8740317a38c2992f7750470/src/Formik.tsx#L722
Just putting here for future reference.

+1 for non-throwing validation. API's I've used in the past that I liked is if the validation method returns undefined/null for no issues and a record of failing fields with their errors (array). Similar to how https://validatejs.org/#validate does it.

@diegohaz I mean that validator itself shouldn't throw its result. The result of validation method call should be returned. And the error should be thrown only when something unexpected happen. But, when you try to send (or use somehow) the data that hasn't pass the validation, then you should throw.
Throwing non-errors considered as anti-pattern/bad practice anyway. Here are references in eslint and bluebird documentations:

Eslint's in the first paragraph.
Bluebird's special paragraph.

Similar thread on Yup: https://github.com/jquense/yup/issues/144
The only difference is that Yup throws an actual error object, which is something we could do here as well.

@rumkin

I mean that validator itself shouldn't throw its result. The result of validation method call should be returned.

You mean something like this?
const form = useFormState({
  onValidate(values, { setErrors, setMessages }) {
    ...
    // instead of throw errors;
    setErrors(errors);
  }
});

// is it OK if this throws?
form.validate();

@diegohaz I mean something like this:
const from = useFormState({
  onValidate(values) {
    // ...
    return errors
  }
})

form.isValid // -> false
form.submit() // throws, due to isValid is false

How would you handle the concept of messages that aren't errors?
For example, when validating an username field you could either return Username already exists or Username available.

Now I've got what you want. In this case seems logical to return validation messages like this:
enum ReportType {
  error,
  warning,
  success,
}

interface Report {
  type: ReportType
  path: Array<string|number> // Path to property for nested forms
  message: string
}

If there is a report with type equal to error, then isValid flag became false and form submitting blocks.
But I don't see any reason to stop here. Report's message could support react components. It allows to return controls for fixing the issue: it could be a list of valid values to select, a button to restore previous correct value, etc.

This issue should be labeled as a security flaw, in addition to being labeled as an enhancement.
See here: https://github.com/jquense/yup/issues/144#issuecomment-581583304

There is another throw-less validation realized in Angular. It has a validator interface which produces an Object with the errors occurred while validation (Angular's documentation).
Here is how it looks:
function validateNameLength(name) {
    if (name < 2) {
        return {minLength: 2}
    }
    else if (name > 20) {
       return {maxLength: 20}
    }
    else {
       return null
    }
}

I don't like the idea to return objects (instead of array of issues), but it illustrates that library developers had chosen non-throwing design and still use it after 8 years of development and many breaking changes they made in the project.

Follow up from #661
I do agree with no throw API proposed here, just because we have a big confusion by treating Validation Error as Runtime Error. But semantically it is just a state (even might be a derived state) of the form. And using throw here is just like using goto operator.
One possible option I was thought about is to return instance of either FormErrors or FormMessages. Than callee could use instanceof checks to detemine whether it is errors or messages. Drawback for this option is that instanceof checks are not working for objects from another document (eg, iframe) as I remember. Another drawback is that it wouldn't possible to have message on one field and error on another, just like in current solution.
So actually I like https://github.com/reakit/reakit/issues/468#issuecomment-557598586 with form.validate() not throw on validation errors too.
I'd like to propose to move out forms to separate package like reakit-forms since it contains a pretty opinionated way to define form state.

Can I take this issue for myself?

@Guria Sure!

@Guria Sure!

Should we discuss a direction/target API first?
What about moving to a separate package?
I have also a question, why there is no Input primitive outside Forms. Is it intentional?

Why do you think it should be a separate package? (I’m not against it, just trying to understand the reasoning)
It’s not intentional that there’s no Input primitive. There should be one eventually. It’s just not one of my priorities right now, but I will review and accept PRs on it.
Regarding the API, I tend to prefer throwing an error class like you suggested in the other issue, but I’m all open for suggestions.

Why do you think it should be a separate package

Form management may be built on top of the base reakit primitives very differently. Consumer might prefer to use any 3rd party for bunch of reasons (some company standard, api doesn't fit needs, etc).
Reakit may (should) provide own opinionated way to manage forms still, but moving it as separate package allows to have own versioning and continue exploring and experimenting without affecting base library.

It’s not intentional that there’s no Input primitive. There should be one eventually. It’s just not one of my priorities right now, but I will review and accept PRs on it.

Should we start another issue to discuss expected API of Input primitive?

Regarding the API, I tend to prefer throwing an error class like you suggested in the other issue, but I’m all open for suggestions.

Ok, I will use this issue to provide more pros/cons for different options here then.

Form management may be built on top of the base reakit primitives very differently. Consumer might prefer to use any 3rd party for bunch of reasons (some company standard, api doesn't fit needs, etc).
Reakit may (should) provide own opinionated way to manage forms still, but moving it as separate package allows to have own versioning and continue exploring and experimenting without affecting base library.

Got it! The base library (reakit) has been designed so modules don't affect each other. Everything is treeshakeable, and you can always import individual modules like reakit/Form (or even deeper like reakit/Form/FormInput).
And, of course, you can choose not to use that specific modules in favor of any third party form library out there. If we come up with more primitive components like Input, people could combine it with those other libraries.

Should we start another issue to discuss expected API of Input primitive?

Sure! I think the first question to answer is "what would that do that a simple <input> already doesn't?".
Unless we add some sort editable content support when people do things like <Input as="div">, it's unclear to me how people could benefit from the Input component. But I haven't put much thought into that yet, so I'm probably missing something.

Ok, I will use this issue to provide more pros/cons for different options here then.

Thanks! I appreciate that! Again, I don't have any strong opinion about this.

Everything is treeshakeable

I see your point here, but my point was more about versioning. With separate package you can introduce a breaking change into forms (experimetal and opinionated) part and bump major only for this exact package without affecting base package which is tend to be much more stable.

I see your point here, but my point was more about versioning. With separate package you can introduce a breaking change into forms (experimetal and opinionated) part and bump major only for this exact package without affecting base package which is tend to be much more stable.

Oh yeah! Right now it's being "solved" by prefixing the module with unstable_. And I think it's a matter of how many subjetive decisions we want to make.
With this naming approach, we can say that every new module should start as unstable/experimental, so there's no hard decision to make here.
But we do have one subjective decision to make: when will this module become stable? For Composite, which will be stable in v1.1.0, this means that it's being used in production in a large project (WordPress) and all major issues and API decisions were already made and tested.
If we start having modules as separate packages, the subjective decisions we would have to make would increase: should this new module be in a separate package? Will it eventually be integrated into the base library? etc.
And the same question remains: when will this module become stable?
I don't discard this option (there's even a @reakit npm scope available if we want to separate the library into more packages in the future). But right now I think separate packages should be used:

When the component is built on top of other dependencies that don't make sense being in the base library. For example, reakit-playground depends on buble, codemirror and emotion.

When the component API is too different or doesn't follow what's described in our basic concepts, with components always rendering only one element and with state hooks exposed as a separate function.
That would be the case, for example, if we come up with a high level component like <Calendar /> that abstracts all the internal components instead of exposing them separately.

I don't think that's the case, at least with the current Form API, which still follows the library's basic concepts. If we want to experiment with completely different APIs, though, I agree that a separate package would be better.

Totally valid points. Completely agree with your criteria, that is what I thought too. And I do agree about forms that it is subjective on whether it should be extracted or not. So if you feel that it is better,  lets keep it as is for now.


added shortnames to the manifests

Something to give us less typing. Added appsets and appset as shortNames

+kubebuilder:resource:path=applicationsets,shortName=appset,appsets
@jgwest wonder if we should be doing this in types.go ?

https://github.com/argoproj-labs/applicationset/blob/master/api/v1alpha1/applicationset_types.go#L25

Inadvertently pushed a rebased branch without the new commits, which autoclosed this and can't reopen :smile:. Will open another PR.

@sbose78  @christianh814: new PR with +kubebuilder annotations:  https://github.com/argoproj-labs/applicationset/pull/197


Default volume is too small on AWS

Spun up a cluster on AWS, and the root volumes were only 8GB. Can we make the root volume larger on these nodes?

[x] configure control node size
[x] configure worker node size

aws is addressed in #724. will work on making volume sizes configurable on other providers

digitalocean disk size is not configurable (controlled by instance size)
not sure how to specify disk size on vsphere or softlayer (ping @eirslett)
it looks like we could specify a volume size for openstack by using the block_device option but not setup to test openstack right now

I think SoftLayer uses the default disk size on SoftLayer, newer versions of the terraform provider have support for setting the disk size. I'll have a look at it!

this was fixed in #724. added issues to the backlog for openstack, vsphere, and softlayer


Add the ability to re-open Round End Summary window

Description

Small QoL improvement: Add the ability to re-open Round End Summary window after closing it. This is a frequently asked for feature in OOC chat after a round ends.
Reproduction

Round ends - Round End Summary window opens
Close it
Currently there is no way to re-open it

Additional context

Even something as simple as a console command /roundsummary would suffice initially. Ultimately we probably want UI for this.
It appears there is a PR for it in the works, referencing: #22905

Based and summarypilled. +1. :+1:

Dupe of #7567


fix: fix get-course

Description

fix get_course
Motivation and Context

How has this been tested?

Screenshots (if appropriate):
Types of changes

[x] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

Checklist:

[x] My code follows the code style of this project.
[ ] My change requires a change to the documentation.
[ ] I have updated the documentation accordingly.

Hooray! Your first PR!


Close open windows when is program is shut down

Pressing super+q shuts down the application, but the open windows still exist and it looks like the application still works (until you send it a new command of course).

Haha, this was actually pretty funny. I found how to do this finally. You can't use forEachWindow, since you change the object over which you are traversing. When closing 4 windows it would only close 2, since when it closed the first 2 it thought it had traversed the object since the current length of the object at that time was 2 and it traversed 2.
I'll clean up everything a bit and commit it in a moment.

Fixed in #43.

Fixed in #46.


It would be nice if the period for bandwidth measurements could be set

Fixed in commit 6dec3ca, closing issue


--onefile-windows-splash-screen-image, fatal error: OnefileSplashScreen.cpp: No such file or directory.

--onefile-windows-splash-screen-image, has something wrong. when I use this option, nuikta will show me fatal error: OnefileSplashScreen.cpp: No such file or directory.
just test code:
def test():
print("test------")
if name == "main":
print("Delaying startup by 10s...")
# Use this code to signal the splash screen removal.
if "NUITKA_ONEFILE_PARENT" in os.environ:
splash_filename = os.path.join(
tempfile.gettempdir(),
"onefile_%d_splash_feedback.tmp" % int(os.environ["NUITKA_ONEFILE_PARENT"]),
)
    if os.path.exists(splash_filename):
        os.unlink(splash_filename)

print("Done... splash should be gone.")
test()

Nuitka version:*  full Python version and Platform (Windows, OSX, Linux ...)

nuitka --version
<IP_ADDRESS>
Commercial: None
Python: 3.9.1 (tags/v3.9.1:1e5d33e, Dec  7 2020, 17:08:21) [MSC v.1927 64 bit (AMD64)]
Executable: C:\Program Files\Python39\python.exe
OS: Windows
Arch: x86_64

How did you install Nuitka and Python
Install Nuitka use pip,  not in a virtualenv ,

The specific PyPI names and versions

python -m pip freeze
altgraph==0.17
astroid==2.5.2
autopep8==1.5.7
beautifulsoup4==4.9.3
bs4==0.0.1
certifi==2020.12.5
chardet==4.0.0
click==7.1.2
colorama==0.4.4
docxtpl==0.11.4
et-xmlfile==1.0.1
future==0.18.2
idna==2.10
isort==5.8.0
Jinja2==2.11.3
lazy-object-proxy==1.6.0
lxml==4.6.3
MarkupSafe==1.1.1
mccabe==0.6.1
Nuitka==<IP_ADDRESS>
openpyxl==3.0.7
pefile==2019.4.18
pycodestyle==2.7.0
pyinstall==0.1.4
pyinstaller==4.3
pyinstaller-hooks-contrib==2021.1
pylint==2.7.4
PyQt5==5.15.4
pyqt5-plugins==<IP_ADDRESS>.2
PyQt5-Qt5==5.15.2
PyQt5-sip==12.9.0
pyqt5-tools==<IP_ADDRESS>.2
python-docx==0.8.10
python-dotenv==0.19.0
pywin32==300
pywin32-ctypes==0.2.0
qt5-applications==<IP_ADDRESS>.2
qt5-tools==<IP_ADDRESS>.2
requests==2.25.1
rope==0.19.0
six==1.15.0
soupsieve==2.2.1
toml==0.10.2
urllib3==1.26.4
WMI==1.5.1
wrapt==1.12.1
xlrd==2.0.1
xlwt==1.3.0
zstandard==0.15.2

Many times when you get an error from Nuitka, your setup may be special
Then even a print("hello world") program will not work, please try that and report
that instead.

Also supply a Short, Self Contained, Correct, Example
That demonstrates the issue i.e a small piece of code which reproduces
the issue and can be run with out any other (or as few as possible)
external dependencies. Issues without this may get rejected without much
consideration.

Provide in your issue the Nuitka options used
nuitka  --mingw64 ^
--onefile ^
--onefile-windows-splash-screen-image=zs.png ^
--output-dir=Nuitka ^
splash.py

i have the same issue. a splash.png is in the directory of the python script, but when i try to convert it with nuitka i got the same error...
static_src\OnefileBootstrap.c:607:10: fatal error: OnefileSplashScreen.cpp: No such file or directory
607 | #include "OnefileSplashScreen.cpp"
can anybody help? did i something wrong? without a splash screen everything works fine.

thanks for the answer. i will try it. in the meantime i made the splash in python directly....

Thanks for the answer.
I try the factory, but it still dont work：
In file included from static_src\OnefileBootstrap.c:607:
C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp: In function 'getBitmapFromImageStream':
C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp:73:9: warning: implicit declaration of function '__uuidof'; did you mean '__muldc3'? [-Wimplicit-function-declaration]
if (FAILED(CoCreateInstance(CLSID_WICPngDecoder, NULL, CLSCTX_INPROC_SERVER, __uuidof(ipDecoder),
^~~~~~
__muldc3
C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp:73:9: error: incompatible type for argument 1 of 'CoCreateInstance'
In file included from C:/Program Files/mingw64/x86_64-w64-mingw32/include/objbase.h:14,
from C:/Program Files/mingw64/x86_64-w64-mingw32/include/ole2.h:17,
from C:/Program Files/mingw64/x86_64-w64-mingw32/include/wtypes.h:12,
from C:/Program Files/mingw64/x86_64-w64-mingw32/include/winscard.h:10,
from C:/Program Files/mingw64/x86_64-w64-mingw32/include/windows.h:97,
from C:/Program Files/mingw64/x86_64-w64-mingw32/include/rpc.h:16,
from C:/Program Files/mingw64/x86_64-w64-mingw32/include/wtypesbase.h:7,
from C:/Program Files/mingw64/x86_64-w64-mingw32/include/Shlobj.h:9,
from static_src\OnefileBootstrap.c:45:
C:/Program Files/mingw64/x86_64-w64-mingw32/include/combaseapi.h:256:38: note: expected 'const IID * const' {aka 'const struct _GUID * const'} but argument is of type 'GUID' {aka 'const struct _GUID'}
WINOLEAPI CoCreateInstance (REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID *ppv);
~^~
In file included from static_src\OnefileBootstrap.c:607:
C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp:73:9: warning: passing argument 4 of 'CoCreateInstance' makes pointer from integer without a cast [-Wint-conversion]
if (FAILED(CoCreateInstance(CLSID_WICPngDecoder, NULL, CLSCTX_INPROC_SERVER, __uuidof(ipDecoder),
^~
In file included from C:/Program Files/mingw64/x86_64-w64-mingw32/include/objbase.h:14,
from C:/Program Files/mingw64/x86_64-w64-mingw32/include/ole2.h:17,
from C:/Program Files/mingw64/x86_64-w64-mingw32/include/wtypes.h:12,
from C:/Program Files/mingw64/x86_64-w64-mingw32/include/winscard.h:10,
from C:/Program Files/mingw64/x86_64-w64-mingw32/include/windows.h:97,
from C:/Program Files/mingw64/x86_64-w64-mingw32/include/rpc.h:16,
from C:/Program Files/mingw64/x86_64-w64-mingw32/include/wtypesbase.h:7,
from C:/Program Files/mingw64/x86_64-w64-mingw32/include/Shlobj.h:9,
from static_src\OnefileBootstrap.c:45:
C:/Program Files/mingw64/x86_64-w64-mingw32/include/combaseapi.h:256:94: note: expected 'const IID * const' {aka 'const struct _GUID * const'} but argument is of type 'int'
WINOLEAPI CoCreateInstance (REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID *ppv);
~^~
In file included from static_src\OnefileBootstrap.c:607:
C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp:77:9: error: 'IWICBitmapDecoder' {aka 'struct IWICBitmapDecoder'} has no member named 'Initialize'
if (FAILED(ipDecoder->Initialize(image_stream, WICDecodeMetadataCacheOnLoad))) {
^~
C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp:81:9: error: 'IWICBitmapDecoder' {aka 'struct IWICBitmapDecoder'} has no member named 'GetFrameCount'
if (FAILED(ipDecoder->GetFrameCount(&frame_count)) || frame_count != 1) {
^~~~~~
C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp:85:9: error: 'IWICBitmapDecoder' {aka 'struct IWICBitmapDecoder'} has no member named 'GetFrame'
if (FAILED(ipDecoder->GetFrame(0, &ipFrame))) {
^~~~~~
C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp:92:28: error: incompatible type for argument 1 of 'WICConvertBitmapSource'
WICConvertBitmapSource(GUID_WICPixelFormat32bppPBGRA, ipFrame, &ipBitmap);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp:26,
from static_src\OnefileBootstrap.c:607:
C:/Program Files/mingw64/x86_64-w64-mingw32/include/wincodec.h:6440:61: note: expected 'REFWICPixelFormatGUID' {aka 'const struct _GUID * const'} but argument is of type 'GUID' {aka 'const struct _GUID'}
HRESULT WINAPI WICConvertBitmapSource(REFWICPixelFormatGUID dstFormat, IWICBitmapSource *pISrc, IWICBitmapSource **ppIDst);
~~~~~~~~^
In file included from static_src\OnefileBootstrap.c:607:
C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp:92:59: warning: passing argument 2 of 'WICConvertBitmapSource' from incompatible pointer type [-Wincompatible-pointer-types]
WICConvertBitmapSource(GUID_WICPixelFormat32bppPBGRA, ipFrame, &ipBitmap);
^
In file included from C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp:26,
from static_src\OnefileBootstrap.c:607:
C:/Program Files/mingw64/x86_64-w64-mingw32/include/wincodec.h:6440:90: note: expected 'IWICBitmapSource *' {aka 'struct IWICBitmapSource *'} but argument is of type 'IWICBitmapFrameDecode *' {aka 'struct IWICBitmapFrameDecode *'}
HRESULT WINAPI WICConvertBitmapSource(REFWICPixelFormatGUID dstFormat, IWICBitmapSource *pISrc, IWICBitmapSource **ppIDst);
~~~~~~^
In file included from static_src\OnefileBootstrap.c:607:
C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp:94:12: error: 'IWICBitmapFrameDecode' {aka 'struct IWICBitmapFrameDecode'} has no member named 'Release'
ipFrame->Release();
^~
C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp:95:14: error: 'IWICBitmapDecoder' {aka 'struct IWICBitmapDecoder'} has no member named 'Release'
ipDecoder->Release();
^~
C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp: In function 'CreateHBITMAP':
C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp:104:9: error: 'IWICBitmapSource' {aka 'struct IWICBitmapSource'} has no member named 'GetSize'
if (FAILED(ipBitmap->GetSize(&width, &height)) || width == 0 || height == 0) {
^~
C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp:129:9: error: 'IWICBitmapSource' {aka 'struct IWICBitmapSource'} has no member named 'CopyPixels'
if (FAILED(ipBitmap->CopyPixels(NULL, stride, size, (BYTE *)(image_data)))) {
^~
C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp: In function 'initSplashScreen':
C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp:196:17: error: 'IStream' {aka 'struct IStream'} has no member named 'Release'
image_stream->Release();
^~
C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\lib\site-packages\nuitka\build\static_src/OnefileSplashScreen.cpp:201:17: error: 'IWICBitmapSource' {aka 'struct IWICBitmapSource'} has no member named 'Release'
image_source->Release();
^~
scons: *** [static_src\OnefileBootstrap.o] Error 1██| 1/1
FATAL: Error, onefile bootstrap binary build failed.

It's quite possible, it at this time only works with MSVC. The feature is still very experimental.
The whole reason for doing the splash screen in Nuitka is such that if you application is slow to load, you do not have to do anything to change that. Unpacking of Nuitka onefile is very fast, and wouldn't warrant it by default. I am not sure, if I can fight thesee warnings, maybe somebody with more knowledge of MinGW64 can help us here. The "has no member" variety seems bad to me.

The file has been added as part of the latest hotfix, still seeking help, but not in this issue anymore.


[9.x] Do not let SetCacheHeaders override the eTag.

In some cases, I want to have the possibility to set my own response eTag, based on other arguments than just the the response content.
If so, I do no want it to be overridden when using SetCacheHeaders middleware.

Can you give an example of this? I'm not following.

I can see using this, although I would do the same for Last-Modified. Right now we don't use the SetCacheHeaders middleware because we need more control over those headers, and the middleware overrides existing headers if they're set.
For example, if I had something like this, where I wanted to set the Last-Modified and ETag headers based on a model's data:
Route::get('/pages/{page}', function(Page $page) {
  return Response::create($page->toHtml())
    ->setLastModified($page->updated_at)
    ->setEtag(md5($page->body), true);
});

The SetCacheHeaders middleware would override my custom values. So my options are to manually pick which routes to apply the middleware to, or just handle cache control headers some other way.
Updating SetCacheHeaders to only generate headers if they're missing would solve that problem. You could just add it to a middleware group or globally, and know that if you don't manually apply the headers, they'll be generated for you.

Sorry for the late reply, @inxilpro summed it up way better than I could.

This PR initially initially ensures that the eTag is not overridden if already set, but the same could also apply to the Last-Modified


[moodle] Automate support and eol retrieval

Based on https://moodledev.io/general/releases.

Expected diff:
diff --git i/releases/moodle.json w/releases/moodle.json
index ccdbf2a..4873b62 100644
--- i/releases/moodle.json
+++ w/releases/moodle.json
@@ -1,5 +1,26 @@
 {
-  "releases": {},
+  "releases": {
+    "4.4": {
+      "name": "4.4",
+      "support": "2025-04-21",
+      "eol": "2025-12-08"
+    },
+    "4.3": {
+      "name": "4.3",
+      "support": "2024-10-07",
+      "eol": "2025-04-21"
+    },
+    "4.2": {
+      "name": "4.2",
+      "support": "2024-04-22",
+      "eol": "2024-10-07"
+    },
+    "4.1": {
+      "name": "4.1",
+      "support": "2023-12-11",
+      "eol": "2025-12-08"
+    }
+  },
   "versions": {
     "4.3.3": {
       "name": "4.3.3",


/deviation/download/{deviationid} not working

Hello!
The URL of that endpoint returns a 404 error. For example:
https://www.deviantart.com/cryptid-creations/art/Daily-Paint-2502-Desert-Tortoise-814769016
If I click the Download button the image downloads. So the download capability is ok.
But... That endpoint returns this object (tested with online console):
{
    "src": "https://fc04.deviantart.net/wixmp/f/885a6dec-35b8-456f-a409-43b214729c22/ddh3bso-cd062ce6-4e1d-4e5c-8e6b-aaf740baf5a7.png?st=*******&e=******",
    "width": 850,
    "height": 627,
    "filesize": 582346
}

Following the link I get this 404 URL: https://orig01.deviantart.net/f70b/f/885a6dec-35b8-456f-a409-43b214729c22/ddh3bso-cd062ce6-4e1d-4e5c-8e6b-aaf740baf5a7.png
Deviation UUID: F2485325-ED53-AAC7-629B-7794D7671152

Thanks for reporting, will look into it.

Yep. Same issue. Method returns URL for download but link returns 404.
UUID example:  12D85416-1CD0-3D3A-CC28-A789AC89F4D4

Should be fixed.

Server that serves "src" url is missing content-length header =\

You may want to open a separate ticket for that.


Add recommendation categories

Add recommendation categories to accommodate new recommendation content, as per https://trello.com/c/e7c6H4YW/228-update-recommendations-module

 Update recommendations module


proj: 5.2.0 -> 6.1.1

Motivation for this change
Noticed the pyproj package was in a "invalid" state according to repology. So I updated it and it's dependent libray.
Things done

[ ] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS)
Built on platform(s)

[X] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nix-review --run "nix-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[X] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Ensured that relevant documentation is up to date
[X] Fits CONTRIBUTING.md.

it's a big boi, now that it has the proj package in it's closure
$ nix path-info -Sh ./result
/nix/store/i4bzqhpkzfd82sqj082xb56k85ygl6k1-python3.7-pyproj-2.2.1       170.4M

I also edited the patch, so it was smaller

Please be careful when updating proj. See #63134.

yea, hold off on merging this, fixing some of the downstream builds.

@GrahamcOfBorg eval

still fixing a few builds :)

The nad2bin executable was moved from proj to proj-datumgrid, which is why i needed to add it. and the grass package used the executable buring build.

Looks good to me. aarch64 is not as important, they can fix it up when needed. Ready to go in?

no, I think there's 4 or so more packages i need fix. Came down with a cold and haven't gotten around to it.

@FRidh saga_2_3_2 depends on a header file that was removed in proj 6xx. saga_2_3_2 doesn't seem to be used by anything, should i just remove it?

saga_2_3_2 was added as a plugin to qgis as part of https://github.com/NixOS/nixpkgs/pull/39125 , which is no longer the case, no package reference it anymore. So i removed it

@GrahamcOfBorg build flightgear gdal gdal_1_11 gdal_2_4_0 grass libLAS libgeotiff libspatialite mapnik merkaartor mysqlWorkbench openorienteering-mapper openscenegraph_3_4 osm2pgsql osm2xmap postgis proj proj-datumgrid proj_5_2 python27Packages.basemap python27Packages.cartopy python27Packages.fiona python27Packages.geopandas python27Packages.owslib python27Packages.pyproj python27Packages.pyspread python27Packages.python-mapnik python27Packages.rasterio python27Packages.tilestache python27Packages.worldengine python37Packages.basemap python37Packages.cartopy python37Packages.fiona python37Packages.gdal python37Packages.geopandas python37Packages.osmnx python37Packages.owslib python37Packages.pyproj python37Packages.python-mapnik python37Packages.rasterio python37Packages.worldengine qgis qgis-unwrapped qmapshack readosm saga simgear spatialite_tools speed_dreams xastir

@GrahamcOfBorg build flightgear gdal gdal_1_11 gdal_2_4_0 grass libLAS libgeotiff libspatialite mapnik merkaartor mysqlWorkbench openorienteering-mapper openscenegraph_3_4 osm2pgsql osm2xmap postgis proj proj-datumgrid proj_5_2 python27Packages.basemap python27Packages.cartopy python27Packages.fiona python27Packages.geopandas python27Packages.owslib python27Packages.pyproj python27Packages.pyspread python27Packages.python-mapnik python27Packages.rasterio python27Packages.tilestache python27Packages.worldengine python37Packages.basemap python37Packages.cartopy python37Packages.fiona python37Packages.gdal python37Packages.geopandas python37Packages.osmnx python37Packages.owslib python37Packages.pyproj python37Packages.python-mapnik python37Packages.rasterio python37Packages.worldengine qgis qgis-unwrapped qmapshack readosm saga simgear spatialite_tools speed_dreams xastir

@FRidh @vbgl this should be ready to merge. Turned into way more of pain that I originally thought it would be.

@GrahamcOfBorg build gdal gdal_2 grass libLAS libgeotiff libspatialite mapnik merkaartor openorienteering-mapper openscenegraph_3_4 osm2pgsql osm2xmap proj proj-datumgrid proj_5 python27Packages.cartopy python27Packages.fiona python27Packages.geopandas python27Packages.owslib python27Packages.pyproj python27Packages.python-mapnik python27Packages.rasterio python37Packages.cartopy python37Packages.fiona python37Packages.gdal python37Packages.geopandas python37Packages.osmnx python37Packages.owslib python37Packages.pyproj python37Packages.python-mapnik python37Packages.rasterio qmapshack readosm saga spatialite_tools speed_dreams xastir

nix-review pr 64551 passes on NixOS
tested a binary in most of the packages
50 package were build:
flightgear gdal gdal_1_11 gdal_2 grass libLAS libgeotiff libspatialite mapnik merkaartor mysqlWorkbench openorienteering-mapper openscenegraph_3_4 osm2pgsql osm2xmap postgis proj proj-datumgrid proj_5 python27Packages.basemap python27Packages.cartopy python27Packages.fiona python27Packages.geopandas python27Packages.owslib python27Packages.pyproj python27Packages.pyspread python27Packages.python-mapnik python27Packages.rasterio python27Packages.tilestache python27Packages.worldengine python37Packages.basemap python37Packages.cartopy python37Packages.fiona python37Packages.gdal python37Packages.geopandas python37Packages.osmnx python37Packages.owslib python37Packages.pyproj python37Packages.python-mapnik python37Packages.rasterio python37Packages.worldengine qgis qgis-unwrapped qmapshack readosm saga simgear spatialite_tools speed_dreams xastir

There's a lot of unhappiness on this branch's nox-review on darwin. Digging in to get more details.

@risicle I'm on it, just my mac laptop isn't super powerful, so iteration is slow.

@GrahamcOfBorg build grass

was the x86-64-darwin build pipeline removed from OfBorg?

Neither's mine, and mine has the added complication of a company-mandated firewall setting that interferes with test runs :roll_eyes:
Am currently looking into the gdal UnboundLocalError - seems odd.

@risicle i was able to figure it out, I'll upstream a patch to them as well

Was it related to https://github.com/OSGeo/gdal/pull/1720 ? That was my working theory...

Patch upstreamed to gdal here https://github.com/OSGeo/gdal/pull/1722

@risicle I didn't have any issues compiling gdal itself, it was only the python wheel which was causing me issues. I successfully got it to build on my laptop.

Success - latest push has fewer failures than before PR on macos 10.13. (geopandas, python-mapnik, merkaartor, osmnx if you must know)

@risicle I'll take a look into them, if they don't seem too difficult I'll attempt to fix them. But in all honesty I'm a bit... "spent" on the geo ecosystem, and my mac iteration is really slow due to under-powered laptop.

Relax - you've already made things better. I feel the same about fixing things on mac in general - it's a bit of a dark art to me.

Oh, my tone wasn't meant to be negative or aggressive. Just looking forward to moving onto something else. :)

(no, didn't take it like that...)

@risicle I took a deeper look into the other breakages for darwin. From preliminary investigation, it seems the issue is that certain packages are built with stdlibc++11 vs stdc++11 and they are mutally exclusive.
IIRC, one of the packages i had to set the cmake flag CMAKE_CXX_STANDARD 11, which is probably the culprit.
The fix will probably be something along the lines of using CFLAGS = lib.optionals stdenv.isDarwn [ "-std=c++11"]
Need to do more testing to figure it out

@vbgl @FRidh I think this is ready for merge for linux.
the mapnik package (and it's downstream dependencies) for darwin seems to have broken because of this, but the other packages are already broken on master. My initial intuition about the nature of these bugs are listed in the comment above, but it's largely out of my area of comfort.

Thank you. Darwin users can fix it up if it does not work for them.


-plugin PluginLoader.dll crash

game crashing at start up if the -plugin PluginLoader.dll is active
SpaceEngineers_20210805_172638646.log

Not a bug. It is some Windows security setting.
Right click on PluginLoader.dll, Properties dialog, click on the Unblock button.


Configuration file

Is there a location to put a configuration file, for example, $HOME/.gitlab.rb, where gitlab gem will automatically load? This is quite useful...
If not, how can I load a configuration file when using the CLI?

Dear all,
How to set ENV for httparty to ignore self-signed cert in CLI mode?
Best,
Dong


Add onended for audio element

Continuation of #567.

LGTM, if it still works after the suspend-resume rebase...

[ ] Should add a test for it in an audio example

The newly added example seems to fire correctly.

Tested both Windows and Magic Leap.


titanCNA_v1.21.0_TenX.R

Hi Gavin,
I'm trying to run titanCNA_v1.21.0_TenX.R and I keep getting the following error message in the log file (full file attached).
Analyzing sample as sex: male
Running TITAN...
titan: Loading data and phasing information results/phasedCounts/tumCounts/tumor_sample_1.tumCounts.txt
Error in (function (classes, fdef, mtable)  :
unable to find an inherited method for function 'select' for signature '"data.table"'
Calls: loadHaplotypeAlleleCounts ... standardGeneric -> eval -> eval -> eval -> select ->
Execution halted
I can't figure out at which step the error is occurring. Any ideas?
Thanks,
Melissa
[tumor_sample_1_cluster1.log]
(https://github.com/gavinha/TitanCNA_10X_snakemake/files/3473785/tumor_sample_1_cluster1.log)

Hi @mzwaig
This might be related to a library import error.  Can you check the sessionInfo() to make sure that dplyr is loaded?
-Gavin

Hi @gavinha,
It looks like it's loading properly. Lines 50 abd 68 of the log file.
tumor_sample_1_cluster1.log
Melissa

I just tried this command again to see if I could reproduce the error. It worked on my end and this is my sessionInfo()
It appears I am using dplyr_<IP_ADDRESS>.  I'm not sure if this is the issue for you. I can try to update to the latest version (0.8.3) and test it.
Also, are you setting libdir? I'm wondering if there isn't anything related to scope of packages between loading the installed TitanCNA package vs sourcing all the individual R files.
R version 3.6.0 (2019-04-26)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.5 LTS

Matrix products: default
BLAS/LAPACK: /app/easybuild/software/OpenBLAS/0.2.18-GCC-5.4.0-2.26-LAPACK-3.6.1/lib/libopenblas_prescottp-r0.2.18.so

Random number generation:
 RNG:     Mersenne-Twister
 Normal:  Inversion
 Sample:  Rounding

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8     LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                  LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] parallel  stats4    stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
 [1] SNPchip_2.30.0       doMC_1.3.5           iterators_1.0.10     foreach_1.4.4        dplyr_<IP_ADDRESS>        GenomicRanges_1.36.0 GenomeInfoDb_1.20.0  IRanges_2.18.0
 [9] S4Vectors_0.22.0     BiocGenerics_0.30.0  data.table_1.12.2    TitanCNA_1.20.1```

I figured it out. I had Titan installed through conda which didn't work. I downloaded it locally and set libdir. It looks like it's running well!
Thanks for your help,
Melissa


Take empirical plant-efficacy data from BPOM

This refers to the old data used by Farit, Aries, ... for Ijahv1.
This is also for compensating the fact that plant-compound data are scarce.

This means that the feature vector for learning should include binary string [0,1,...] that encode plant composition, similar to ijahv1

plant -> someCompound -> someProtein -> Efficacy/DiseaseClassification

This depends on #107

Superceded by #183


Ballista: Prep for fixing shuffle mechansim, part 1

Which issue does this PR close?

Closes #737.
Query 12 iteration 0 took 29591.0 ms
+------------+-----------------+----------------+
| l_shipmode | high_line_count | low_line_count |
+------------+-----------------+----------------+
| MAIL       | 623092          | 934696         |
| SHIP       | 622964          | 934514         |
+------------+-----------------+----------------+
Query 12 avg time: 29591.04 ms

Rationale for this change

This fixes a bug introduced in #712 and also gets us closer to truly supporting shuffle.
What changes are included in this PR?

Executors now collect meta-data from ShuffleWriterExec about the output partitions and return this information to the scheduler
Comments are added where the current design is broken, with links to the relevant GitHub issue
Added inputRows and outputRows metrics to ShuffleWriterExec

Are there any user-facing changes?

No

If there are no objections I will go ahead and merge this tonight since it only touches Ballista files.

Looks good @andygrove  -- I am sorry I have been focusing on arrow and DataFusion and don't have much experience with Ballista -- are there others in the Ballista community we can ask for feedback in the future?

@alamb No problem at all. Ballista is still very early and experimental (although now it is actually close to usable) so I think it has been hard for others to start contributing. My plan now is to focus on performance and scalability testing and optimizations and generally tidy things up and add documentation to make it easier for others to get involved. I think once we can demonstrate the value of Ballista then it will start to get some adoption and this will drive contributions.


perf(rpc): use block hash or number

ref #2887
The cache uses block hashes to identify block and the receipts of a block
since this fetches consecutive headers, we can use the parent hash of the next header.
This prevents a number to hash lookup.

Codecov Report

Merging #2892 (0e2a4a0) into main (5b73b2a) will decrease coverage by 53.79%.
The diff coverage is 0.00%.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
@@             Coverage Diff             @@
##             main    #2892       +/-   ##
===========================================
- Coverage   71.19%   17.41%   -53.79%
===========================================
  Files         513      513
  Lines       66470    66540       +70
===========================================
- Hits        47324    11586    -35738
- Misses      19146    54954    +35808

Flag
Coverage Δ

integration-tests
17.41% <0.00%> (-0.02%)
:arrow_down:

unit-tests
?

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

Impacted Files
Coverage Δ

crates/rpc/rpc/src/eth/filter.rs
7.93% <0.00%> (-9.68%)
:arrow_down:

crates/storage/provider/src/traits/block_hash.rs
0.00% <0.00%> (-100.00%)
:arrow_down:

... and 361 files with indirect coverage changes

@mattsse Need to rebase on top of main for the required checks unfortunately


AmqpAdmin bean not found if defined in parent context

Bug report
Spring Amqp does not find the AmqpAdmin bean if it is defined in a parent context but is not present in the current (child) context.
In this code below in AbstractMessageListenerContainer the method getBeansOfType is used:
protected void configureAdminIfNeeded() {
	if (this.amqpAdmin == null && this.getApplicationContext() != null) {
		Map<String, AmqpAdmin> admins = this.getApplicationContext().getBeansOfType(AmqpAdmin.class);
		if (admins.size() == 1) {
			this.amqpAdmin = admins.values().iterator().next();
		}
		else {
			if ((isAutoDeclare() || isMismatchedQueuesFatal()) && this.logger.isDebugEnabled()) {
				logger.debug("For 'autoDeclare' and 'mismatchedQueuesFatal' to work, there must be exactly one "
						+ "AmqpAdmin in the context or you must inject one into this container; found: "
						+ admins.size() + " for container " + toString());
			}
			if (isMismatchedQueuesFatal()) {
				throw new IllegalStateException("When 'mismatchedQueuesFatal' is 'true', there must be exactly "
						+ "one AmqpAdmin in the context or you must inject one into this container; found: "
						+ admins.size() + " for container " + toString());
			}
		}
	}
}

This method does not check parent contexts (getBeansOfType is documented as such), however I think it should.  In an application with several contexts, the AmqpAdmin bean is defined in a parent context.  Child contexts however don't see the AmqpAdmin bean because this method does not check the parent contexts.
Contrast this with the regular getBean method on application context, which does check the parent and in our testing does find the AmqpAdmin bean in this case.  It seems that in order to support the logic in the else clause here getBeansOfType was used over the normal getBean call.

Looks like BeanFactoryUtils.beansOfTypeIncludingAncestors(ListableBeanFactory lbf, Class<T> type) must be used instead.

I don't believe we can backport this because it could cause a behavior change, if there is an admin in both the parent and child context it could throw an IllegalStateException.
	if (admins.size() == 1) {
		this.amqpAdmin = admins.values().iterator().next();
	}
	else {
		if ((isAutoDeclare() || isMismatchedQueuesFatal()) && this.logger.isDebugEnabled()) {
			logger.debug("For 'autoDeclare' and 'mismatchedQueuesFatal' to work, there must be exactly one "
					+ "AmqpAdmin in the context or you must inject one into this container; found: "
					+ admins.size() + " for container " + toString());
		}
		if (isMismatchedQueuesFatal()) {
			throw new IllegalStateException("When 'mismatchedQueuesFatal' is 'true', there must be exactly "
					+ "one AmqpAdmin in the context or you must inject one into this container; found: "
					+ admins.size() + " for container " + toString());
		}
	}

The work around for 2.2.x, 2.3.x is to explicitly set the desired admin on the container.


Adds base configuration for new client form

Description
Fixes # (issue)
Type of change
Please delete options that are not relevant.

[ ] Bug fix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update

Change Status

[x] Complete, tested, ready to review and merge
[ ] Complete, but not tested (may need new tests)
[ ] Incomplete/work-in-progress, PR is for discussion/feedback

How Has This Been Tested?

[ ] Test A
[ ] Test B

Checklist

[ ] My code follows the style guidelines of this project
[x] I have performed a self-review of my own code
[ ] My code has been reviewed by at least one peer
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[x] My changes generate no new warnings
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] New and existing unit tests pass locally with my changes
[x] There are no merge conflicts

Would consider closing this branch.  The new PR submitted by me was forked off of this branch so it will contain more updates.


OpenCL interoperability does not work on CUDA machine

On (Linux) CUDA machine, the backend returned by af.get_backend() remains at unified even if the backend is correctly set as OpenCL. af.get_active_backend() correctly returns OpenCL as the backend, but since the interoperability functions use different way to check the backend, an error is output (see https://github.com/arrayfire/arrayfire-python/blob/master/arrayfire/opencl.py#L107). Commenting all those instances fixes the issue. The (commented) tests reproduce this error, i.e. https://github.com/arrayfire/arrayfire-python/blob/master/tests/simple/interop.py#L82
Note that this wasn't an issue on a (Windows) AMD machine, where OpenCL is the default backend.

I am having a similar issue, anything that involves dtype or cast crashes, from_ndarray also does not work


Incorrect rendering when referencing data from schema

Problem with Generating Swagger Files
There is an issue when generating Swagger files that use schemas referenced by other YAML files. This problem leads to compilation errors during project build due to the generation of empty tags in .mdx files, which cannot be rendered.
Example of Issue
common-schema.yaml

operative.yaml

Example of the generated .mdx file, with some of the mentioned empty tags.

Displayed error when compiling server.

Hi @adrianrevilla009, can you share a copy or code snippet of the OpenAPI spec to try to reproduce the issue? Thanks!

Also, can you provide the version of the plugin and Docusaurus you are attempting to use? Without that, it's difficult to repro or provide a possible fix. Thanks.


Exercise 0: mdc.tutorial.zip is not available

Clicking on the link below leads to a 404 error page. Could you please confirm if the link address is correct?
https://github.com/SAP-samples/ui5-mdc-json-tutorial/raw/ghpages/mdc.tutorial.zip

Should be fixed now :)


Missing unread message badges for Outlook 365

Bug description:
I miss the unread messages badges for the service Outlook 365. If there are already unread messages or I receive a new message, Ferdi do not display that in the left column on the icon of the service.
Screenshots

Environment:

Operating System: Ubuntu 20.04.2 LTS
Ferdi Version: 5.5.0
Server: Using without an account

Experiencing the same on MacOS 11.2.1.

There seem to be 3 different recipes for the same: outlook, office 365 and enterprise office 365.
Could you please try with all 3 of them, and tell us which one works?

I tried it:

outlook -> works
outlook 365 -> doesn't work
enterprise office 365 -> I can see the service on the web page but not selectable within Ferdi. Don't now why.

I've just tried outlook and that does not work for me.

I tried it:
* `outlook` -> works

* `outlook 365` -> doesn't work

* `enterprise office 365` -> I can see the service on the web page but not selectable within Ferdi. Don't now why.

As an addendum, I'm using the Office 365 Outlook Web App recipe and it shows the unread total including the Deleted Items folder. I recommend we exclude that folder, if possible.

If this should be a new bug report, just let me know and I'll resubmit.

Running into the same problem,
Ferdi: 5.5.0
Electron: 8.2.3
Note.js: V12.13.0
Platform Linux
outlook -> works
office365 -> does not work

Sorry @oizik - we are not in a position to support Ferdi v5.5 any more. Please try out the latest beta (quite stable in fact) over here. Please get back whether this new version (with updated service configuration capabilities) works for your usecase.

@vraravam apology, I didn't even bother to check GitHub released, just downloaded from https://getferdi.com/download this morning. Thank you.

i have had this same issue for a while (since one of the nightlies in 60's or 70's range). none of the 3 outlook recipes work for me, either. account is a azure office 365 subscription if that changes anything.

it seems the issue may be const folders = Array.from(favorites.nextSibling.childNodes); it's saying .nextSibling is null.

I am using the one called Office 365 - Outlook with Self hosted setup and it works great.

i seem to have figured out the issue and workaround. the recipe is only pulling unread counts from folders in your "Favorites". not sure if this should be that way. but workaround for other people having the issue is add whatever folders you want unread counts for to your favorites.

Ohhh, you are right about that haha, interesting!
Never noticed this, because Outlook had folders like Inbox favorited out of the box for me.
So you would like to have every folder be relevant for unread count? I can make that change.

yeah, i'm kinda wondering which option is better. i remember for a long time (pretty much until commit 822c568 on the recipes repo, which is where the code changes), junk mail and deleted items would show up on my unread counter, and it was a bit annoying. however, if someone has email rules in place that automatically organize their emails into subfolders, but all those subfolders aren't favorited, then they won't be counted either. there's always the option of parsing all folders, but ignoring the counts on junk and deleted items, but not sure if that's really a practical solution either.

Sorry it took so long - till date, I did not use outlook. Starting last week, I went into a new client where they use Outlook, and I spent some time fixing the duplications in the recipes (there were 3!), and also figuring out the css selectors for the folders and groups in outlook. As of the latest commit 2 mins ago - this should be fixed. Closing this bug ticket.

Hello, I see that you made a fix for this issue, but it does not work for me and it only introduced new issue for my custom script.
Before this change my custom user script correctly set the unread badge, but now it sets the unread badge and after a second or less, badge disappears again presumably because the native script overwrites it with 0.
I also tried to remove the if (recent == last) { condition, but then the badge just constantly changes (blinks) between 0 and 1 unread.
My custom user script follows (with debug console log messages):
module.exports = (config, Ferdi) => {
	var last = 0;
	setInterval(() => {
		try {
			var ac = 0;
			var bc = 0;
			var cc = 0;
			var dc = 0;
			var ec = 0;
			var fc = 0;
			var gc = 0;
			var recent = 0;
			var a = document.querySelector("#app > div > div.zZJcFiYp1GsQ-Zkcz02eC > div.mXEfuMleN9V2Rx6d6qvsu > div > div > div > div.tQjtZGBXoedSUDzkcRzw5.css-45 > div._1mmhFz6xbEHFv6FfTUKPW2 > div > div > div > div:nth-child(2) > div:nth-child(2) > div:nth-child(1) > div > span._3rASdLVQxHgpaejCMPDNFO > span > span.PUV1mki0rYSBZsGVrzV9q")
			if (a != null) {
			  ac = parseInt(a.innerText)
			}
			var b = document.querySelector("#app > div > div.zZJcFiYp1GsQ-Zkcz02eC > div.mXEfuMleN9V2Rx6d6qvsu > div > div > div > div.tQjtZGBXoedSUDzkcRzw5.css-45 > div._1mmhFz6xbEHFv6FfTUKPW2 > div > div > div > div:nth-child(2) > div:nth-child(2) > div:nth-child(2) > div > span._3rASdLVQxHgpaejCMPDNFO > span > span.PUV1mki0rYSBZsGVrzV9q")
			if (b != null) {
			  bc = parseInt(b.innerText)
			}
			var c = document.querySelector("#app > div > div.zZJcFiYp1GsQ-Zkcz02eC > div.mXEfuMleN9V2Rx6d6qvsu > div > div > div > div.tQjtZGBXoedSUDzkcRzw5.css-45 > div._1mmhFz6xbEHFv6FfTUKPW2 > div > div > div > div:nth-child(2) > div:nth-child(2) > div:nth-child(3) > div > span._3rASdLVQxHgpaejCMPDNFO > span > span.PUV1mki0rYSBZsGVrzV9q")
			if (c != null) {
			  cc = parseInt(c.innerText)
			}
			var d = document.querySelector("#app > div > div.zZJcFiYp1GsQ-Zkcz02eC > div.mXEfuMleN9V2Rx6d6qvsu > div > div > div > div.tQjtZGBXoedSUDzkcRzw5.css-45 > div._1mmhFz6xbEHFv6FfTUKPW2 > div > div > div > div:nth-child(2) > div:nth-child(2) > div:nth-child(4) > div > span._3rASdLVQxHgpaejCMPDNFO > span > span.PUV1mki0rYSBZsGVrzV9q")
			if (d != null) {
			  dc = parseInt(d.innerText)
			}
			var e = document.querySelector("#app > div > div.zZJcFiYp1GsQ-Zkcz02eC > div.mXEfuMleN9V2Rx6d6qvsu > div > div > div > div.tQjtZGBXoedSUDzkcRzw5.css-45 > div._1mmhFz6xbEHFv6FfTUKPW2 > div > div > div > div:nth-child(2) > div:nth-child(2) > div:nth-child(5) > div > span._3rASdLVQxHgpaejCMPDNFO > span > span.PUV1mki0rYSBZsGVrzV9q")
			if (e != null) {
			  ec = parseInt(e.innerText)
			}
			var f = document.querySelector("#app > div > div.zZJcFiYp1GsQ-Zkcz02eC > div.mXEfuMleN9V2Rx6d6qvsu > div > div > div > div.tQjtZGBXoedSUDzkcRzw5.css-45 > div._1mmhFz6xbEHFv6FfTUKPW2 > div > div > div > div:nth-child(2) > div:nth-child(2) > div:nth-child(6) > div > span._3rASdLVQxHgpaejCMPDNFO > span > span.PUV1mki0rYSBZsGVrzV9q")
			if (f != null) {
			  fc = parseInt(f.innerText)
			}
			var g = document.querySelector("#app > div > div.zZJcFiYp1GsQ-Zkcz02eC > div.mXEfuMleN9V2Rx6d6qvsu > div > div > div > div.tQjtZGBXoedSUDzkcRzw5.css-45 > div._1mmhFz6xbEHFv6FfTUKPW2 > div > div > div > div:nth-child(2) > div:nth-child(2) > div:nth-child(7) > div > span._3rASdLVQxHgpaejCMPDNFO > span > span.PUV1mki0rYSBZsGVrzV9q")
			if (g != null) {
			  gc = parseInt(g.innerText)
			}
			recent = parseInt(ac+bc+cc+dc+ec+fc+gc);
			if (recent == last) {
				console.info("Outlook custom script: recent==last, not setting the badge, but value would be " + recent);
			} else {
				console.info("Outlook custom script: setting unread badge to " + recent);
				Ferdi.setBadge(recent);
				last = recent;
			}
		} catch (error) {
			console.error("Outlook custom script: error");
			console.error(error);
		}
	}, 1000);
}

For me after updating the fix seems to work. however, it also takes into account Draft messages, which is less than helpful :-)


no function to jumpback

hi,
I am test you plugin in my project with rtags, it running nice.  but I find that there is no a way to jumpback . Although the vim's C-o can jump to the before editer point. but this no the simon-pure jumpback function for rtags. I see at Elisp api in rtags github project page. like this:
(rtags-location-stack-back)
(rtags-location-stack-forward)
Whenever RTags jumps somewhere it pushes a location onto its stack. Jump back and forward in this stack
this mean rtags can support jumps stack just like the vim's ctags stack (using with C-t).
so I suggest to add a jumpback fucntion to using stack like the rtags-location-stack-back.
I think this will be a very useful function to the vim-rtags user.
best regards

I don't see any jump back related functionality in rc. If i'm reading it correctly location stack is managed by emacs.

er... it seem realy no jump back functionality in rc. but I realize a jumpback function yesterday. to get a stack to save the position before jump, I find another vim plugin specialized to realize a stack objection by using vim's list. this plugin can find by the link bleow:
https://github.com/dahu/vim-stack
here is my modiy to realize a simple jumpback funciton:
let s:JumpStack = Stack()
function! rtags#SaveLocaltion()
normal! mZ
call s:JumpStack.push(getpos("'Z"))
endfunction
function! rtags#JumpBack()
if s:JumpStack.empty()
echohl ErrorMsg
echo "At the bottom of rtags stack"
echohl None
else
call setpos("'Z", s:JumpStack.pop())
normal! 'Z
endif
endfunction
function! rtags#JumpTo(...)
let args = {}
let args.f = rtags#getCurrentLocation()
let results = rtags#ExecuteRC(args)
if len(results) >= 0 && a:0 > 0
    call rtags#cloneCurrentBuffer(a:1)
endif

if len(results) > 1
    call rtags#DisplayResults(results)
elseif len(results) == 1
    let [location; symbol_detail] = split(results[0], '\s\+')
    let [jump_file, lnum, col; rest] = split(location, ':')

    " Add location to the jumpstack
    call rtags#SaveLocaltion()
    call rtags#jumpToLocation(jump_file, lnum, col)
    normal zz
endif

endfunction
because I am not too good at vimscript, I am using the golbal mark to get the postion include buffer number.  I think there is a better way to get postion include buffer number in vimscript maybe.  I suggest you can re-implement the jumpback function by a good way and add it in you plugin. it realy a very importation function that give a convenient way to jump back to where we jump from.

May be it'll be useful.
:help jumplist
....
You can explicitly add a jump by setting the ' mark with "m'".  Note
that calling setpos() does not do this.
....

Right now, once you jump to some location you can go back with  and if needed go forward with .
How someone's workflow will look like if we manage jump location in the pluing itself, by having JumpBack() function? If you need to jump back, should I use  or have a mapping that calls JumpBack()?

of course, key mapping is needed.

In my opinion having a custom mapping for jumping back which differs from <C-o> breaks vim workflow by having 2 different ways to jump back. But I can certainly add such function and mapping.

Are you ok with this mapping:
noremap <Leader>rjb <C-o>

If we have a feature similar to vim's ctags pop from tagstack(CTRL-T), that would be very nice. One good feature of that is that at any given level in the tag stack, we can visit all the matches and then press CTRL-T to go back to where we started.

Didn't mean to close it.

@rajukv , it doesn't look like tagstack is writable by anything other than vim. I'm not sure if it makes sense to reimplement tagstack on our own, as it technically a replica and not an integration with vim's feature.

@lyuts : I agree that we would be replicating vim code. It is unfortunate that vim doesn't allow plugins to access the tag stack. When I have some time, I can see if this can be implemented.

The \rjb mapping makes Vim by default pause for one second after typing \rj. (This is the timeout feature. In my personal configuration, with notimeout, it actually waits forever or until the next keypress.) A bit annoying.
I can easily :unmap \rjb in my .vimrc, but I wonder whether the change in commit d625002 really does anyone good? I must admit I have trouble understanding the feature request in this ticket, but I don't imagine merely adding a duplicate mapping for Ctrl+o helps much?

@lastorset , I personally think Ctrl+o is the one that should be used as it naturally comes from Vim's workflow. However, it looks like some users are advocating for a dedicated mapping, and that's why it has been added.
I guess it is a miss on my side to start a mapping with an overlapping \rj sequence that now causes problems. Couple of options are (a) wrap that mapping with a variable, so that users who really need it will have that mapping, or (b) change the mapping to some other sequence that will not lead to that freeze.
Downside for (a) is that limits the issue to users who want that mapping, and downside for (b) is  breaking someone's habbit (otoh, it has been introduced just about a month ago, so maybe not a problem).
Do you have a suggestion on what should we map that to?

Hm. Like I said I'm not sure I understand this ticket, but as far as I can tell @pangchol and @rajukv are requesting a separate stack. Without that stack the mapping seems meaningless; it's UI without an underlying feature. So I'd say just revert the addition of this mapping—and add a (different) mapping if/when you implement a separate stack.
It's true that reverting may confuse some users, but has there been feedback indicating the mapping is popular? Besides, like you say, it's a recent change. Also, adding map <Leader>rjb <C-o> to .vimrc is easy and reliable, while unmapping is slightly more difficult if you have a complex setup. (You need to ensure that the unmap happens after the map, for example using au VimEnter :unmap <Leader>rjb.)

I totally got the request for a separate jumpstack, but aside from it, I got an impression that @pangchol wanted the mapping. Now that you question that I wonder if I got that wrong.
So, I think I'd agree that we should revert that change for now, at least until we have clarity on the subject. If anyone needs it now, the suggestion would be to add mapping to their's vimrc.

👍

Is there any progress now? When working with cscope/ctags, using ctrl-t to jump back is better than ctrl-o. It is naturally to navigate a bit within that function and then jump back, which may involves multiple ctrl-o but only requires one ctrl-t. Besides, I think it is better to be compatible with cscope/ctags for reusing muscle memory :)
For implementation, I recently saw an interesting method: https://github.com/LucHermitte/lh-tags/blob/a681f0c1b6fd85ccc0c2bc55a0abcfe347e0be61/autoload/lh/tags.vim (line 330-349), where the author:

creates a temp tags file and add it to "tags"
when jumping, manually adds a tag with a generated name and the line number
push the generated name into tagstack

As these have been done, ctrl-t will automatically work without other tweaks. It differs from the original ctrl-t with a pro and a con:
+ when jumping back, it will go to exactly where we jumped (I think it is even better than jumping back to the last jumped tag)
- the tag list is "polluted" with arcane tag names
Unfortunately I am not familiar so may not be able to provide direct help... The plugin is fantastic and greatly release the pain to investigate complex C++ projects. Hope it'd be improved to be a complete replacement of cscope/ctags for C/C++.

I've created a pull request with a simple jump back function implementation, mapped to <leader>rb. Can you please provide some feedback about it? Does it work for you, are you ok with mapping? Please see pull request #34.

@yarray , I like the referenced way of accomplishing it. However, due to time constraint, I'm tempted to go with an implementation that @pdavydov108 is proposing. In the short term it allows us to have desired functionality. In the long term, I'd like to implement the method you mentioned as it stays within vim's "way of doing thing". Though it seems to me we want to make it as a separate plugin as I don't want to mix rtags related functionality with managing jump stacks within one plugin.

@pdavydov108 The implementation seems great! I will test it in detail later.
@lyuts A separate plugin seems reasonable, since the referenced method is a bit hacky and surely introduces extra complexity. The ideal vim way may only exists when vim (or neovim) itself exposes tagstack APIs, as your previous comments suggest.  For me, the current implementation is good enough without noticeable harm to the simplicity.

One issue with my approach is that I haven't yet found a way how to implement it for the case when jump to other location is done from location list. For example if I execute <leader>rf, it shows me a list of all locations were symbol is used, then if I choose one of them, this new location is opened, but if I want to go to previous one with the new function, <leader>rb, I can't. I thought that maybe <leader>rb can fall back to ctrl-o in case if there are no elements in stack, but I'm not sure if it is convinient and clear..
Another issue is that if jump stack already have some locations from previous jumps, and I want to return from a jump from location list, <leader>rb will take me to some other previous location, which is not what I expect (however I think that even vim's native ctrl-t feature have this issue).
One way to fix this issues is to set a callback on buffer open event, and check if it's name is in current location list, and if so, save previous location to a stack. This approach looks quite complex to me, it would be cool to find an easier way to do it.
Please let me know if you have any ideas how to overcome this issues.

Having \rb or ctrl-t go back to where I was before I jumped to a location from a list would be awesome, because as said above there is often some navigation and ctrl-o includes all of those.

update - I have some "execute normal .." keybindings in my .vimrc that I didn't realize appended to the jumplist.  I have added keepjumps to those and now I would say ctrl-o/i works much better for me.
I am thinking of something like this in my rtags.vim -
function! rtags#JumpBack()
    if len(g:rtagsJumpStack) > 0
        let [jump_file, lnum, col] = remove(g:rtagsJumpStack, -1)
        call rtags#jumpToLocationInternal(jump_file, lnum, col)
    else
        " echo "rtags: jump stack is empty"
        execute "keepjumps normal " "\<C-O>"
    endif
endfunction


Implement IPv6 Dual Mode Mk. 2

This is an improvement on #33 that does less allocations. It fixes #32 and also doesn't break broadcast behaviour.

Updated to be able to change the address and dual stack booleans to avoid erroring on platforms like OpenBSD, or Linux with dual stack mode disabled


Updates Sourcery hash for conformance changes

Pull Request Description
Updates the commit hash for one that supports the conformance changes in 4.1 (while still supporting older swift builds via swift version check) per https://bugs.swift.org/browse/SR-6556
Acceptance Criteria
To be accepted into the Swift source compatibility test suite, a project must:

[x] be an Xcode or swift package manager project
[x] support building on either Linux or macOS
[x] target Linux, macOS, or iOS/tvOS/watchOS device
[x] be contained in a publicly accessible git repository
[x] maintain a project branch that builds against Swift 3.0 compatibility mode
and passes any unit tests
[x] have maintainers who will commit to resolve issues in a timely manner
[x] be compatible with the latest GM/Beta versions of Xcode and swiftpm
[x] add value not already included in the suite
[x] be licensed with one of the following permissive licenses:

BSD
MIT
Apache License, version 2.0
Eclipse Public License
Mozilla Public License (MPL) 1.1
MPL 2.0
CDDL

[x] pass ./project_precommit_check script run

Ensure project meets all listed requirements before submitting a pull request.

@swift-ci test

Thanks!


What RBAC Permission Is Needed to Create System Identity?

When I create VM, storage account or web app, I can create system managed identity in the same time?
What RBAC permission is needed?
for example, any  specific operation we need under Microsoft.Compute/*  in order to create system identity for a VM.
or does it require any particular operation from Microsoft.ManagedIdentity/*
[Enter feedback here]

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

ID: 72861cc1-7081-cf6e-b7f9-e700a16faa9a
Version Independent ID: c870872d-0559-6b77-280f-f478e8c84776
Content: Managed identities for Azure resources
Content Source: articles/active-directory/managed-identities-azure-resources/overview.md
Service: active-directory
Sub-service: msi
GitHub Login: @barclayn
Microsoft Alias: barclayn

@RonnieQuan
Thanks for your feedback! We will investigate and update as appropriate.

@RonnieQuan
Thanks for your feedback! We will investigate and update as appropriate.

@JamesTran-MSFT  Thanks for the response, this is a critical question, it will be great if you could get back to me ASAP.

@JamesTran-MSFT  Thanks for the response, this is a critical question, it will be great if you could get back to me ASAP.

@RonnieQuan
Thank you for the follow up!
When it comes to what RBAC permissions are required to managed identity on a resource:

System-assigned managed identity: You need write permissions over the resource. For example, for virtual machines you need Microsoft.Compute/virtualMachines/write. This action is included in resource specific built-in roles like Virtual Machine Contributor.
User-assigned managed identity: You need write permissions over the resource. For example, for virtual machines you need Microsoft.Compute/virtualMachines/write. In addition to Managed Identity Operator role assignment over the managed identity.

I hope this helps! If you have any other questions, please let me know.
Thank you for your time and patience throughout this issue.

@RonnieQuan
Thank you for the follow up!
When it comes to what RBAC permissions are required to managed identity on a resource:

System-assigned managed identity: You need write permissions over the resource. For example, for virtual machines you need Microsoft.Compute/virtualMachines/write. This action is included in resource specific built-in roles like Virtual Machine Contributor.
User-assigned managed identity: You need write permissions over the resource. For example, for virtual machines you need Microsoft.Compute/virtualMachines/write. In addition to Managed Identity Operator role assignment over the managed identity.

I hope this helps! If you have any other questions, please let me know.
Thank you for your time and patience throughout this issue.

@RonnieQuan
I just wanted to check in and see if you had any other questions? Otherwise, since our FAQ has provided the required permissions/examples for your issue, I'll go ahead and close this out at the end of the day.
Thank you for your time and patience throughout this issue!

@RonnieQuan
I just wanted to check in and see if you had any other questions? Otherwise, since our FAQ has provided the required permissions/examples for your issue, I'll go ahead and close this out at the end of the day.
Thank you for your time and patience throughout this issue!


Remove cloud-platform-concourse-admin user

This user no longer exists and should be removed.

Actually, that's not the case. This user is required by the tf apply process in the cli. Closing.


add changelog notes of 1.2.4

ElementUI version

OS/Browsers version

Vue version

Reproduction Link

Steps to reproduce
http://element.eleme.io/#/en-US/component/changelog
What is Expected?
expected changelog notes of latest version 1.2.4
What is actually happening?
changelog of older version 1.2.3 is displayed instead

Please clear browser storage.

Thanks. That actually worked, but I am wondering why it happend. I used the latest Chrome Version on two different machines with the same result.. just saw the changelog of 1.2.3. Even performing CTRL+F5 did not invalidate the page cache but served it from cache (disk vom cache). The Chrome Dev Tools revealed that clearly.
Here the some details of the request (Dev Tools) from the one machine where I did not cleared the cache yet.
General:
Request URL:http://element.eleme.io/
Request Method:GET
Status Code:200 OK (from disk cache)
Remote Address:<IP_ADDRESS>:80
Referrer Policy:no-referrer-when-downgrade
Response Headers:
Accept-Ranges:bytes
Access-Control-Allow-Origin:*
Age:38
Cache-Control:max-age=600
Content-Encoding:gzip
Content-Length:759
Content-Type:text/html; charset=utf-8
Date:Wed, 01 Mar 2017 19:43:27 GMT
Expires:Wed, 01 Mar 2017 19:34:43 GMT
Last-Modified:Wed, 01 Mar 2017 07:30:15 GMT
Server:GitHub.com
Vary:Accept-Encoding
Via:1.1 varnish
X-Cache:HIT
X-Cache-Hits:1
X-Fastly-Request-ID:12661b85083e50ff2fc539c4123f958fd3459606
X-GitHub-Request-Id:F66E:868A:3EC9CFB:532C676:58B71FFB
X-Served-By:cache-hhn1544-HHN
X-Timer:S1488397407.086398,VS0,VE0


build issue for android app

hi.
i m using evothing for building hexiwear android app.
the status of building android app is.....
running build script....
and nothing is happining...
i m upload the snap...
any solution for this plzzz

hmm, that's weird ...
OS ?
Evo version ?

storm1er thanks for your rply...... but i got the silution for problem.
Thakns