[DO NOT MERGE] AIR solver in Hypre

Added support for AIR through the BoomerAMG interface. Also added direct access to modify many general AMG parameters for easier access to hypre. AIR is now in the hypre master branch
Only major changes are additions to hypre.hpp and hypre.cpp.
For examples, I started to add implicit integration w/ AIR as a solver in Example 9 (time-dependent advection), then branched this into its own file MFEM_adv.cpp. I believe @mlstowell (and @pazner was involved in that discussion as well I recall) implemented an advection diffusion example, ex23, a while back, which I also have here with added support for implicit time integration using AIR. The example(s) need to be cleaned up, but I'd like to know how the MFEM team would like that to be. Should I add implicit support and AIR to example 9, or should it be its own example? Is ex23 ready to be added as an example, or is that still in dev phase?

@ben-s-southworth -- do you want to update this and mark as ready-for-review?

I do not mind it the commits are squashed. I will update/mark for review later this week.

@homijan and others, this is pretty much ready. I cleaned everything up, removed extra files and examples, and merged ex9p w/ the ILU support @pazner added. @pazner I made AIR default because on my tests up to ~150 processors it was a fair amount faster. It doesn't matter to me either way if we use AIR or ILU as default solver, but there is a command line switch. I also added a flag for basis function - AIR (and solvers in general) typically performs better with Gauss-Lobatto, so I set that as the default. That can be changed though if MFEM team prefers Legendre.
Last piece, AIR needs the DG block size. I typically use, e.g., (order+1)*(order+1) in 2d on quads, but for the example this should be more general. What is the easiest way to get the number of DOFs for the given mesh/order/dimension? There is a todo in ex9p to fix w.r.t. this.

Please add the ready-for-review label when this is ready... (Resolve the Appveyor and Travis failures first)

@tzanio @v-dobrev The failures are because Travis/Appveyor are building with hypre 21000, which I believe is just over 5 years old at this point. I think it is reasonable to require a much more recent build of hypre to be compatible with the current branch of MFEM. We can also use #if checks based on hypre version and not define certain functions if you would prefer that?

The failures are because Travis/Appveyor are building with hypre 21000,

Then as part of this PR update the version used in Travis and Appveyor, see e.g. https://github.com/mfem/mfem/blob/AIR_pr/.travis.yml

@tzanio That worked for the Travis build and now that is successful except for the git history, but doing a squash merge will fix that.
I am getting a "Command exited with code 1" with no other explanation from AppVeyor. Is there any easy way to debug what's going on there?

Search for "error" in the Appveyor output... here is the problem:
C:\projects\mfem\hypre-2.18.2\src\parcsr_ls\par_restr.c(973): error C2057: expected constant expression [C:\projects\mfem\hypre-2.18.2\src\build\HYPRE.vcxproj]
C:\projects\mfem\hypre-2.18.2\src\parcsr_ls\par_restr.c(973): error C2466: cannot allocate an array of constant size 0 [C:\projects\mfem\hypre-2.18.2\src\build\HYPRE.vcxproj]
C:\projects\mfem\hypre-2.18.2\src\parcsr_ls\par_restr.c(973): error C2133: 'ordering': unknown size [C:\projects\mfem\hypre-2.18.2\src\build\HYPRE.vcxproj]

@tzanio I am confused on Appveyor errors; is there anything syntactically incorrect about declaring a function parameter const in C (even if it is a by-value parameter)?
void hypre_ordered_GS(const HYPRE_Complex L[],
                      const HYPRE_Complex rhs[],
                      HYPRE_Complex x[],
                      const HYPRE_Int n)

I believe const HYPRE_Int n is causing the problem with Appveyor, but this passed all the hypre regression tests fine and I have not had an issue compiling with a handful of different compilers. I can make a PR to hypre, but it won't be available in a tar for Appveyor until the next hypre release.

@ben-s-southworth, I'm thinking that it maybe better for now to define the AIR functionality only when the hypre version is >= 2.18.2 (or whatever the required version is). You should be able to do that easily by wrapping the additions in
#if MFEM_HYPRE_VERSION >= 21802

//  place code that depends on hypre 2.18.2 here ...

#endif

This way we can postpone the transition of our CI and internal tests to a new hypre version to a later date and not delay this PR due to these needed changes.
@tzanio, what do you think about this?

@ben-s-southworth, I'm thinking that it maybe better for now to define the AIR functionality only when the hypre version is >= 2.18.2 (or whatever the required version is). You should be able to do that easily by wrapping the additions in
#if MFEM_HYPRE_VERSION >= 21802

//  place code that depends on hypre 2.18.2 here ...

#endif

This way we can postpone the transition of our CI and internal tests to a new hypre version to a later date and not delay this PR due to these needed changes.
@tzanio, what do you think about this?

I agree.

This makes sense to me
From: Tzanio Kolev<EMAIL_ADDRESS>Reply-To: mfem/mfem<EMAIL_ADDRESS>Date: Saturday, February 29, 2020 at 5:34 AM
To: mfem/mfem<EMAIL_ADDRESS>Cc: "Li, Ruipeng"<EMAIL_ADDRESS>Review requested<EMAIL_ADDRESS>Subject: Re: [mfem/mfem] [SQUASH-MERGE] AIR solver in Hypre (#1053)
@ben-s-southworthhttps://github.com/ben-s-southworth, I'm thinking that it maybe better for now to define the AIR functionality only when the hypre version is >= 2.18.2 (or whatever the required version is). You should be able to do that easily by wrapping the additions in
#if MFEM_HYPRE_VERSION >= 21802
//  place code that depends on hypre 2.18.2 here ...
#endif
This way we can postpone the transition of our CI and internal tests to a new hypre version to a later date and not delay this PR due to these needed changes.
@tzaniohttps://github.com/tzanio, what do you think about this?
I agree.
—
You are receiving this because your review was requested.
Reply to this email directly, view it on GitHubhttps://github.com/mfem/mfem/pull/1053?email_source=notifications&email_token=ABJNQD6IPOSU3V4VJN3RFXDRFEHEXA5CNFSM4ISOP3SKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOENL2IMY#issuecomment-592946227, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ABJNQD6FTVSLSTL2RHBG2ADRFEHEXANCNFSM4ISOP3SA.

I like this idea; also probably makes more sense to not require hypre users to update to the latest and greatest.

@tzanio @v-dobrev Passed all checks except for branch history, but if we squash that should not matter, correct?

@tzanio @v-dobrev Passed all checks except for branch history, but if we squash that should not matter, correct?

Correct.

@pazner and @dylan-copeland -- reminder that the reviews for this PR are due this week.

@ben-s-southworth, can you please address @dylan-copeland's comments?

Is it possible for the new HypreBoomerAMG::Mult function to affect existing codes that use this class?

I forgot about this change. I copied directly from the Krylov solver print functionality so that when just using AMG one can get the same level of print output as in preconditioned Krylov. I don't see why it would affect existing codes, but am not 100% sure.

@ben-s-southworth, @pazner, @dylan-copeland, I pushed the approval date to Friday, 4/17.
@ben-s-southworth, I believe the review is waiting on you to address feedback -- let me know if you need more time.

@v-dobrev I like some of the ideas, but need a little more time. Restructuring ex9 might take a little work and I can't focus on it right away.

@v-dobrev I like some of the ideas, but need a little more time. Restructuring ex9 might take a little work and I can't focus on it right away.

OK, there's no rush.

@bensworth, do you have an estimate when you will be able to work on this?
This PR has been in review for more than 6 months now :)

This is not part of this PR, but ex9p has one sample run with -np 3 rather than -np 4. Is there a reason for this? Why not change it to 4 for uniformity?

Hi @bensworth, sorry for taking so long to get to this PR.
I still need to finish going through the code but, based on my latest comments above, there is still some work to do.

@v-dobrev, I tried to address your comments. How do things look to you now?

One more thing: I think this PR deserves a CHANGELOG entry. 😄

Merged in next for testing...


gl_FragCoord has a flipped y axis when using hlsl

reproduction: https://github.com/kcinnu/sokol-bug
the bottom-left corner is supposed to be black, but when using the d3d11 backend the top-left corner is black instead.
I think it might be an issue with spirv-cross used by sokol-shdc, but I'm not 100% sure.

Hi, yep, SPIRVCross doesn't handle the Y coordinate flipping by default, but check out the @glsl_option flip_vert_y keyword in sokol-shdc (must be placed inside the vertex shader begin/end block):
https://github.com/floooh/sokol-tools/blob/master/docs/sokol-shdc.md#glsl_options-hlsl_options-msl_options
With this option, SPIRVCross will add a small code snippet after the vertex shader logic which flips the Y coordinate.
This is used in the sokol-samples in those places:
https://github.com/floooh/sokol-samples/blob/53bf17e54376c9b3783e51e11c993fc4bf030df0/sapp/mrt-sapp.glsl#L39-L61
https://github.com/floooh/sokol-samples/blob/53bf17e54376c9b3783e51e11c993fc4bf030df0/sapp/mrt-sapp.glsl#L82-L106
https://github.com/floooh/sokol-samples/blob/53bf17e54376c9b3783e51e11c993fc4bf030df0/sapp/mrt-pixelformats-sapp.glsl#L49-L60

@hlsl_options flip_vert_y works perfectly fine, thanks!


Add license

Adding license as instructed by Caltech/JPL open source agreement.

I see, thanks. All of the other opera-adt repos have a LICENSE file with the Apache-2.0 license text, so I just grabbed that without looking closely at the READMEs.
I'm a bit confused about this, actually. This new license text appears to be a 3-Clause BSD license. How are these projects licensed under *both* this BSD-3-Clause license *and* the Apache-2.0 license? The terms of each license are somewhat different. Would downstream projects need to meet the conditions of both licenses, or can they choose which license to follow?
It seems to me that it's probably best to just use a single license to keep things simple and prevent confusion. Would it be alright if I just replace the old LICENSE file with this new text?

Good point @gmgunter. In the open source agreement the above text has been suggested as a markup to use and very clearly Apache version 2.0 is stated as the approved license. Let's discuss offline and look at the agreement together before deciding on this PR.

Good point @gmgunter. In the open source agreement the above text has been suggested as a markup to use and very clearly Apache version 2.0 is stated as the approved license. Let's discuss offline and look at the agreement together before deciding on this PR.

So @hfattahi and I reached out to the JPL SRA yesterday for clarification. The gist of their response was:

They recommend that we include the text of both licenses (i.e. both the Caltech/JPL Markup Language *and* the
Apache-2.0 license text) in our open source repositories
Downstream users/recipients may choose either license at their discretion

I've seen a small number of projects with a similar license structure that might be useful as reference for us, e.g.

https://github.com/spack/spack#license
https://github.com/ned14/llfio/blob/develop/Licence.txt

@hfattahi I made an attempt at addressing this in d6f1789. Will you take a look when you get a chance and let me know what you think of this approach?

Thanks @gmgunter. Yes your commit addressed all I wanted to include in this PR. Therefore this PR is no longer needed. I will close with this comment.


Support typing line numbers directly

numb.nvim is a very nice low-friction improvement for NeoVim. Thanks for your work.
However, normally, I get to a specific (numbered) line by just typing the line number, i.e. 23G , not :23<CR> (it's one keystore shorter too!). It would be super-nice if numb.vim could operate in that mode also.

That's a good point, I'd actually not thought of that! This makes numb less useful to me, as my finger memory has me reach for 23G rather than :23<CR>, but you are definitely correct. Good work anyway!


Steiger gives you "unknown" when you ask for its version

Lol yeah that's janky :D
What would also be nice here is to print the versions of all plugins used in the current config.

Yes, I agree, good idea


Cross-link to building code violations

There's another dataset that merges nicely to ours via the PIN (Property ID Number?) field:
https://data-dogis.opendata.arcgis.com/datasets/omaha-planning-building-code-violations/data
One field in that CSV file is Link. An example:
https://www.omahapermits.com/permitinfo/Cap/CapDetail.aspx?Module=Enforcement&TabName=Enforcement&capID1=15CAP&capID2=00000&capID3=00010
There is a LOT of information in those URLs. e.g.: More Info > Application Information Table > CH48 - PROPERTY VIOLATIONS
"Merge" this CSV so that on our website there's a list of clickable case numbers linking to each specific URL at omahapermits.com.
Stretch goal: Links sorted by case date, descending?

Duplicate

(dupe of #52)


Unable to get value for Checkbox

I am able to set an initial value on a checkbox but never update it, and doesn't appear to behave like other input fields in that if I don't set an initial value={false} I can't get it to return anything but undefined.
I have made a jsfiddle of one of the many versions I've tried none of which return a value:
https://jsfiddle.net/69z2wepo/70507/
I followed the examples originally and am also pushing the values of the fields into state (which is updating correctly) but would like to correct whatever I am doing with the formsy way of doing it?
(I admit this might not even be the right implementation but it's an example I have that doesn't work, so far nothing i've tried aside from hard setting false on the <Checkbox value={false} /> does anything other than undefined)

you are using event.currentTarget.checked, which is undefined. It should just be event.target.checked.


Prepare for packagist publishing

This PR is still a WIP however will accomplish the following:

[x] Clean-up code styles to fit PSR12,

[x] Add GH actions and integrations for testing,

[x] Add/edit repo meta-data and maintence files (gitignore, gitattributes, etc)

[ ] Rename the project to a more fitting name

[x] Add PHPunit based tests for complete (or near) coverage

So @RobThree, first I want to say I'm sorry how massive the changes look to the main file. This seems to be it using Windows style line endings however PSR12 prefers unix style line endings. Aside from that fact obscuring what I touched, I've done what I can to ensure that all backwards compatibility should be kept with these changes.
That said, the changes here also setup future releases to deprecate certain things. Then at a time when PHP 7.4 support is removed even more could be removed and some logic refactored for PHP 8s Enums.
All that remains is choosing a more apt name for the package and applying those changes to the PR. As mentioned in the issue #1 here are a few ideas I'm inclined to:

Scrabble IDs, as a homage to the game and the IDs being word based
Fun-Friendly-Human IDs, a very not subtle name based on a potential ID
WordSet IDs, a more literal choice since the IDs are generated by user provided "word sets"

First of all: Thank you very much for all the work you've put it! It's a LOT! I've looked over each and every commit and can't say I noticed any issues so far. There are a few considerations I'd like to discuss:

Getting rid of toUrl and parseUrl; they're just aliases for parseId and generate.
I think I'd like to provide an interface (IFutureProjectNameGenrator) for the UrlGenerator (whereas the UrlGenerator name is also something we should consider changing to something more generic)

Other than that: Great work! 👊

Getting rid of toUrl and parseUrl; they're just aliases for parseId and generate.
Rock on, I like that too. I've been writing things with a "backward compatible" idea in mind. But I guess if it hadn't been published to packagist yet the odds are minimal that this is a concern. 😅  I should have realized that but old habits die hard.

I think I'd like to provide an interface (IFutureProjectNameGenrator) for the UrlGenerator (whereas the UrlGenerator name is also something we should consider changing to something more generic)

Ohh, I think I can pick up what you're putting down here. This could lead to very interesting possibilities.

I don't think the interface will have to be very exciting, I'd like to keep it as clean as possible:
public interface IWhatever {
    public function generate(int $id): string;
    public function parseId(string $text): int;
}

Something like this. It could even be split up into an IWhateverGenerator and an IWhateverParser but I think that's overkill.
Looking at it I do think that in line with parse*Id* I think it's also a good idea to rename generate to generate*Id*. However, maybe leave that for later.  And now I think of it, maybe it would be even beter to just name the methods generate() (or create()) and parse() and leave out the Id (or Foo) part alltogether; they're methods on a IdGenerator / FooGenerator class afterall.

So I guess the only "big" issue left is coming up with a decent name?

And what a task choosing the "right" name is! While I like some of the ideas I suggested above, I don't really love one more than the rest. They are all pretty much equally average for me.
So I've started to do some casual chatting on the PHP community via twitter. Getting some decent engagement and chats around it - still nothing jumping out at me though.
If you want to follow along:
Main thread: https://twitter.com/dan_in_tweets/status/1516755357342777348
PHP Community thread: https://twitter.com/dan_in_tweets/status/1516755675120033796

And what a task choosing the "right" name is!

As usual 🤣

If you want to follow along:
Main thread: https://twitter.com/dan_in_tweets/status/1516755357342777348
PHP Community thread: https://twitter.com/dan_in_tweets/status/1516755675120033796

The PHP Community thread shows "This Tweet is unavailable."?
I'll retweet and ask my followers as well. And I'll have a sitdown tonight to clear my mind and try to come up with something.

🤔... Come to think of it. Maybe we're asking the wrong question. I think the real question is: what do you call this specific int <-> string conversion. Maybe there's a ~wordle~ word for it? 😉

Direct community link here: https://twitter.com/i/communities/1493441201487298561

Shows:

Hmm...this page doesn’t exist. Try searching for something else.

But it's ok, I'll hear from you whenever something interesting comes up there 😉

Absolutely, will keep you updated. I've started a google sheet and captured all the suggestions so far.
https://docs.google.com/spreadsheets/d/10hy5m9tgmurydX1j0QJUb2iCpIRVFJL0m3eDX3XDkbY/edit?usp=sharing

I really like humanoid to be honest.

I really like humanoid to be honest.

So do I. As well as Guid-o 😂
Really good and cool suggestions so far! Let's give it a few hours. Great work @mallardduck !

I really only have one nit-picky thingie to nitpick. There's one generic Exception class, which extends the bare \Exception class, While I understand the choice, since it's used as both a \RuntimeException and an \InvalidArgumentException, perhaps it would be better to split the exceptions into more error-specific exceptions?

@MueR : Would you like to be added as an author (maintainer) too? (see 251474f)

Barely anything != nothing.
If @mallardduck is ok with it then I'll merge this PR tonight as-is. Unless something better comes up I'd like to go with HumanoID as project name (main classname?) and make the appropriate changes for it. Then I'll go over the README and update it where needed and update the composer file to add @MueR.
Does this sparkle for everyone?

Yeah that jives well with me - I like HumanoID a lot.
Sounds great to me!

A little less serious: I was looking for a package icon; how about a (slightly modified version of) this one?

Larger version
I like the idea of a Robot (being the 'opposite' of a human). And a little speechbubble (or two) to imply the int <-> string conversion. I usually get my icons (with proper attributiono ofcourse) from flaticon.com. You can see more examples here. If anyone can find a better one: I'm open to suggestions until 20:00 CEST 😜

A little less serious: I was looking for a package icon; how about a (slightly modified version of) this one?
 Larger version
I like the idea of a Robot (being the 'opposite' of a human). And a little speechbubble (or two) to imply the int <-> string conversion. I usually get my icons (with proper attributiono ofcourse) from flaticon.com. You can see more examples here. If anyone can find a better one: I'm open to suggestions until 20:00 CEST 😜

How about this?

Work in progress...


cross product and dot symbols in jme

When writing out solutions may need to have a x b = c,  or a.b = n  If we use rowVector for a, b and c then at present have to go in and out of jme via \simplify as I cannot find good symbols to use for cross or dot  product with jme which match the latex symbols

Quite right - I somehow missed that without evaluating in jme, dot and cross produce the right symbols


Homework22: Pavel Mitrafanau

Good day, Sergei
My robot framework tests are ready for review

Logging added to library and bank deposit tests


Kubernetes for Windows directory part is hardcoded

Hello,
It would be good to document that the Kubernetes for Windows directory (c:\k) is expected by the scripts and cannot be switched to any other location.
Or better yet, please do not hardcode that directory into other scripts.

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

ID: 206db1f3-8451-0171-e103-fea3ab7b3f72
Version Independent ID: 87d7ab1c-1617-44a9-a77c-bf0443109e35
Content: Joining Windows nodes
Content Source: virtualization/windowscontainers/kubernetes/joining-windows-workers.md
Product: containers
GitHub Login: @daschott
Microsoft Alias: daschott

We hugely appreciate your contribution, feedback, and support to our technical documentation.
We’ve phased out GitHub Issues on this repository as the feedback mechanism for content and have replaced it with a new feedback system. For more information see, Content User Feedback. As part of this rollout, we are migrating your issue where our team will use your comments to improve the documentation experience. Unfortunately, this does mean you won't be able to access this issue after the migration is complete.
All issues will be migrated by Thursday 29th August 2024.
Once again, thank you for your valuable feedback, we hope you’ll continue to contribute using our new feedback system.


REQUEST: New membership for

GitHub Username
byene0923
Requirements

[x] I have reviewed the community membership guidelines (https://github.com/cloudwego/community/blob/main/COMMUNITY_MEMBERSHIP.md)
[x] I have joined to the Slack Channel and Feishu Group Chat (for Chinese)
[x] I am contributing (any of the following apply: issues, discussions, PRs, reviews) to 1 or more CloudWeGo repositories

List of contributions to CloudWeGo

PRs reviewed / authored

https://github.com/cloudwego/hertz/pull/34
https://github.com/cloudwego/hertz/pull/207
https://github.com/cloudwego/hertz/pull/160

Issues responded to

https://github.com/cloudwego/hertz/issues/201
https://github.com/cloudwego/hertz/issues/93
https://github.com/cloudwego/hertz/issues/227
https://github.com/cloudwego/hertz/issues/95

Need more contribution to become a Hertz Committer, fighting and I am looking forward to it. :)


Installed application, but no data!

Hey there!
I just installed the application using the docker method, everything seems to install smooth. I can access the admin interface.
If i manually go to the .js script its correctly loaded however i receive no data on the websites i have added.
Is there any form of debugging i can use?
Its seems like data is not dumped correctly into the database.

Open up the browser devtools and check the Network tab.  Make sure they aren't returning errors.

Open up the browser devtools and check the Network tab.  Make sure they aren't returning errors.

Thanks for your quick response! I cant find any errors, but when i checked the database it seems like its empty! :(

I think i found the issue. site wont include the javascript, becuase its hosted on http not https and are giving mixed content.

Someone had a similar issue here: https://github.com/mikecao/umami/issues/91#issuecomment-685451847
Routing the public umami endpoints (the umami.js file and /api/collect ) within your server to the https URL should do the trick if you have access to that nginx/apache config.
The browser never knows about the http because externally its all the same domain (which would also bypasses some of the regex-tests for ^stats.* or ^tracker.* that some blockers use)

The issue for me was that https sites would not allow the script to be loaded from http, causing mixed content so that the .js file was ignored. Running umami and js agent on https solved it :-)


Support for 140 characters limit change

Hey there,
First of all, thanks, you guys saved me a lot of time!
Are you planning to support this? For statuses update and replies ?https://dev.twitter.com/overview/api/upcoming-changes-to-tweets
If you are, can I have an estimate time?
Thanks!

This is covered in the answer to #117

@andypiper Thanks!


npm test errors out with "Error: Cannot find module 'expect.js'"

I'm having some trouble getting the tests to run successfully. In every version of Node I've tried, I get this error. To illustrate the problem, I set up a travis build demonstrating the issue against this changeset (I can clean up my branch and submit a PR if you're interested in using Travis as well): https://travis-ci.org/joseph-onsip/wascally/builds/87768171
During npm install, I noticed that<EMAIL_ADDRESS>is deprecated:
npm WARN deprecated<EMAIL_ADDRESS>Too many changes for a patch version.

Since gulp-spawn-mocha shows up in the stack trace below, perhaps biggulp should use a newer version?
Error: Cannot find module 'expect.js'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/home/travis/build/joseph-onsip/wascally/node_modules/monologue.js/node_modules/riveter/spec/compose.spec.js:6:50)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at /home/travis/build/joseph-onsip/wascally/node_modules/biggulp/node_modules/gulp-spawn-mocha/node_modules/mocha/lib/mocha.js:216:27
    at Array.forEach (native)
    at Mocha.loadFiles (/home/travis/build/joseph-onsip/wascally/node_modules/biggulp/node_modules/gulp-spawn-mocha/node_modules/mocha/lib/mocha.js:213:14)
    at Mocha.run (/home/travis/build/joseph-onsip/wascally/node_modules/biggulp/node_modules/gulp-spawn-mocha/node_modules/mocha/lib/mocha.js:453:10)
    at Object.<anonymous> (/home/travis/build/joseph-onsip/wascally/node_modules/biggulp/node_modules/gulp-spawn-mocha/node_modules/mocha/bin/_mocha:393:18)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:935:3

@josephfrazier are you still seeing this error? I've not successfully reproduced it but I know we've also published a few versions since this bug. Let me know if you're still getting this, otherwise, I'll close the issue soon.

I rebased my travis branch onto the latest master (edc752b6acc1f3fb2ab151277300300d512de875), and reproduced the npm test bug here: https://travis-ci.org/josephfrazier/wascally/jobs/100147051#L551.
I was also able to reproduce it locally against master with Node v4.2.4 and npm 2.14.12 by starting up the Vagrant machine, and running npm test

@josephfrazier - this issue is corrected in the replacement lib - [rabbot](https://github.com/arobson/rabbot] - which has a very similar API but changes failure semantics because wascally is just too ambitious and can't consistently recover from certain scenarios.


Use cobra for kubectl and align with kubectl config loading

Use exactly the same config lookup and merge strategies like kubectl does for kubevirt.
Internally virtctl uses the same code like kubectl, since most of it is already part of client-go and apimachinery.
Here the global options for kubectl and virtctl:
# kubectl options
The following options can be passed to any command:

      --alsologtostderr=false: log to standard error as well as files
      --as='': Username to impersonate for the operation
      --as-group=[]: Group to impersonate for the operation, this flag can be repeated to specify multiple groups.
      --certificate-authority='': Path to a cert file for the certificate authority
      --client-certificate='': Path to a client certificate file for TLS
      --client-key='': Path to a client key file for TLS
      --cluster='': The name of the kubeconfig cluster to use
      --context='': The name of the kubeconfig context to use
      --insecure-skip-tls-verify=false: If true, the server's certificate will not be checked for validity. This will
make your HTTPS connections insecure
      --kubeconfig='': Path to the kubeconfig file to use for CLI requests.
      --log-backtrace-at=:0: when logging hits line file:N, emit a stack trace
      --log-dir='': If non-empty, write log files in this directory
      --log-flush-frequency=5s: Maximum number of seconds between log flushes
      --logtostderr=true: log to standard error instead of files
      --match-server-version=false: Require server version to match client version
  -n, --namespace='': If present, the namespace scope for this CLI request
      --password='': Password for basic authentication to the API server
      --request-timeout='0': The length of time to wait before giving up on a single server request. Non-zero values
should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests.
  -s, --server='': The address and port of the Kubernetes API server
      --stderrthreshold=2: logs at or above this threshold go to stderr
      --token='': Bearer token for authentication to the API server
      --user='': The name of the kubeconfig user to use
      --username='': Username for basic authentication to the API server
  -v, --v=0: log level for V logs
      --vmodule=: comma-separated list of pattern=N settings for file-filtered logging

# cluster/virtctl.sh options
The following options can be passed to any command:

      --alsologtostderr                  log to standard error as well as files
      --as string                        Username to impersonate for the operation
      --as-group stringArray             Group to impersonate for the operation, this flag can be repeated to specify multiple groups.
      --certificate-authority string     Path to a cert file for the certificate authority
      --client-certificate string        Path to a client certificate file for TLS
      --client-key string                Path to a client key file for TLS
      --cluster string                   The name of the kubeconfig cluster to use
      --context string                   The name of the kubeconfig context to use
      --insecure-skip-tls-verify         If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure
      --kubeconfig string                Path to the kubeconfig file to use for CLI requests.
      --log-backtrace-at traceLocation   when logging hits line file:N, emit a stack trace (default :0)
      --log-dir string                   If non-empty, write log files in this directory
      --logtostderr                      log to standard error instead of files (default true)
  -n, --namespace string                 If present, the namespace scope for this CLI request
      --password string                  Password for basic authentication to the API server
      --request-timeout string           The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests. (default "0")
  -s, --server string                    The address and port of the Kubernetes API server
      --stderrthreshold severity         logs at or above this threshold go to stderr (default 2)
      --token string                     Bearer token for authentication to the API server
      --user string                      The name of the kubeconfig user to use
      --username string                  Username for basic authentication to the API server
  -v, --v Level                          log level for V logs
      --vmodule moduleSpec               comma-separated list of pattern=N settings for file-filtered logging

Fixes #635.
Signed-off-by: Roman Mohr<EMAIL_ADDRESS>

Looks good!


Clamp the editor scale to 1 for 2D zoom operations

Some people set the editor scale below 1 to fit more content on screen, even if their display doesn't have a particularly low DPI.
This closes #35059.

Thanks!


[Insight] Unused use statement should be avoided - in src/TextFileWriter.php, line 12

in src/TextFileWriter.php, line 12

The class LazyEight\DiTesto\ValueObject\File is declared but never used. You should remove the use statement.

namespace LazyEight\DiTesto;

use LazyEight\DiTesto\Validator\TextFileWriterValidator;
use LazyEight\DiTesto\ValueObject\File;
use LazyEight\DiTesto\ValueObject\TextFile\TextFile;

class TextFileWriter
{
    /**

Posted from SensioLabsInsight

Fixed


Policy Engine

[ ] default ingress annotations
[ ] ingress classes
[ ] ingress annotation keys
[ ] ingress hosts
[ ] ingress certificates
[ ] storage classes

[ ] Configure ingress annotations (cert-manager annotations for cluster issuer)
[ ] Support rewrite path
[x] Show URL
[ ] Configure ingress Class
[ ] Predefined ingress urls, probably with wildcard cert.

I think the policy engine should get implemented in a later release. instead we need great documentation about how to bootstrap blueprints and how to use them as "policies".


It would be nice if I could use the resValue function of the Android plug-in to add string array properties to the resource

I use the android plug-in to compile my application, and I need to add some resources to my application during compilation, so I use the following code snippet to do this
apply plugin: 'com.android.application'

android {

    defaultConfig {
        ···
        resValue "string","app_name","myapp"
        resValue "array","tabs","1,2,3,4"
       ···
    }
}

I hope that if the resValue function supports the definition of an array

Please open Android-related issues on the Android Issue Tracker at https://source.android.com/source/report-bugs, thank you.


[PDI-17774] Database Connection dialog - display language does not fo…

…llow Preferred Language option of PDI
Only some frames/Dialogs were being located accordingly to Kettle LanguageChoice. The main kettle frame was always system defined by default. So every child frame/dialog from those main Kettle frames were, by parent relation, system defined also. This PR changes that logic and forces Kettle to look for LanguageChoice first.
Please let me know if you find any problem with this fix, since it is a "spoon.java" change.
@pentaho-lmartins @mbatchelor @mkambol

Build Completed
:fire: This pull request has some issues. It would be preferable to fix them in order for it to be just perfect. See below for more details. Some links are also available below for further assistance in addressing those issues.
Build Commands
mvn -B -f 'pom.xml' -pl 'ui' -P '!assemblies' -Dsurefire.runOrder=alphabetical -Daudit -amd clean install

Cleanup Commands
mvn -B -f 'pom.xml' -pl 'ui' -P '!assemblies' -amd build-helper:remove-project-artifact

Changed files
  ui/src/main/java/org/pentaho/di/ui/spoon/Spoon.java

Unit Test Coverage
These statistics help you identify how your changes have affected the coverage of the following files. If a file is not in this list, then its coverage was not affected by your changes. To get some help interpreting these metrics, please refer to Jacoco's documentation.

:warning: Coverage Changes (click to expand)
org.pentaho.di.trans.steps.salesforceinsert.SalesforceInsertMeta

Instruction Change: -0.1% :small_red_triangle_down:

org.pentaho.di.trans.steps.salesforceupdate.SalesforceUpdateMeta

Instruction Change: -0.2% :small_red_triangle_down:

Build Completed
:white_check_mark: This pull request has passed all validations.
Build Commands
mvn -B -f 'pom.xml' -pl 'ui' -P '!assemblies' -Dsurefire.runOrder=alphabetical -Daudit -amd clean install

Cleanup Commands
mvn -B -f 'pom.xml' -pl 'ui' -P '!assemblies' -amd build-helper:remove-project-artifact

Changed files
  ui/src/main/java/org/pentaho/di/ui/spoon/Spoon.java

Build Completed
:white_check_mark: This pull request has passed all validations.
Build Commands
mvn -B -f 'pom.xml' -pl 'ui' -P '!assemblies' -Dsurefire.runOrder=alphabetical -Daudit -amd clean install

Cleanup Commands
mvn -B -f 'pom.xml' -pl 'ui' -P '!assemblies' -amd build-helper:remove-project-artifact

Changed files
  ui/src/main/java/org/pentaho/di/ui/spoon/Spoon.java


Typingeffect

First pull request so not sure. But hopefully this tracks commits for repo.

Merge commits to the base branch


Chat - Group is created with duplicate user when chat is started quickly on a slow network

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

Version Number:  9.0.41-2
Reproducible in staging?: Y
Reproducible in production?: Y
If this was caught during regression testing, add the test name, ID and link from TestRail: N/A
Email or phone of affected tester (no customers<EMAIL_ADDRESS>Issue reported by: Applause - Internal Team
Action Performed:

Go to https://staging.new.expensify.com/.
Open the Developer Tools and go to the Network tab, then set the network speed to 3G
Click on the FAB > Start Chat
Enter a user's email, then quickly click on it before the fallback avatar changes to the correct user avatar
Send a message

Expected Result:
The chat with the selected user should remain a 1-on-1 chat. The chat should not change into a group with duplicate users
Actual Result:
After sending the message, the chat turns into a group with duplicate users. It only corrects itself back to a single chat after switching to another chat and then returning to it
Workaround:
Unknown
Platforms:

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

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

Screenshots/Videos
Add any screenshot/video evidence

https://github.com/user-attachments/assets/7ed99952-55d7-44f6-a72f-26f59e044154
View all open jobs on GitHub

I don't understand what's happening in that video. I can't replicate this.

I'm on 2 bars of 4G.
Is the person reporting it saying that the two users other than themselves are, in fact, the same user?

Please clarify the "actual result"

Waiting on a response/clarification from QA team.

team is still able to reproduce
https://github.com/user-attachments/assets/44e432c6-24e5-4553-abba-0aab81c6dcb9

Ok, to sum up, it can be reproduced and we don't know what/who the third user is.

Proposal
Please re-state the problem that we are trying to solve in this issue.
After sending the message, the chat turns into a group with duplicate users. It only corrects itself back to a single chat after switching to another chat and then returning to it
What is the root cause of that problem?
If we add a comment when OpenReport API is calling, doesClientNeedToBeUpdated returns true so the successData of OpenReport API is added to deferredUpdates
https://github.com/Expensify/App/blob/6d8e739f7b1c286ae65565a6689b27b5983fe48a/src/libs/Middleware/SaveResponseInOnyx.ts#L34-L37

After GetMissingOnyxMessages API is complete, we detect the pending defer update here but it's empty because minUpdateID is not less than the lastUpdateID of OpenReport API
https://github.com/Expensify/App/blob/6d8e739f7b1c286ae65565a6689b27b5983fe48a/src/libs/actions/OnyxUpdateManager/utils/index.ts#L30
https://github.com/Expensify/App/blob/6d8e739f7b1c286ae65565a6689b27b5983fe48a/src/libs/actions/OnyxUpdateManager/utils/DeferredOnyxUpdates.ts#L42
Then this DM has three members as participant, one is the current user, one is optimistic personal details of the user that we select in the new chat page (it appears because successData of OpenReport API isn't merged), one is the correct personal of the user.

What changes do you think we should make in order to solve the problem?
I think OpenReport API doesn't need to wait for any update in other request so we can add WRITE_COMMANDS.OPEN_REPORT to requestsToIgnoreLastUpdateID array then the successData of this API can always be merged and will resolve this issue. We did the same for WRITE_COMMANDS.DELETE_MONEY_REQUEST, here
const requestsToIgnoreLastUpdateID: string[] = [
    WRITE_COMMANDS.OPEN_APP,
    SIDE_EFFECT_REQUEST_COMMANDS.RECONNECT_APP,
    WRITE_COMMANDS.CLOSE_ACCOUNT,
    WRITE_COMMANDS.DELETE_MONEY_REQUEST,
    SIDE_EFFECT_REQUEST_COMMANDS.GET_MISSING_ONYX_MESSAGES,
    WRITE_COMMANDS.OPEN_REPORT,
];

https://github.com/Expensify/App/blob/6d8e739f7b1c286ae65565a6689b27b5983fe48a/src/libs/Middleware/SaveResponseInOnyx.ts#L8
What alternative solutions did you explore? (Optional)

Proposal
Please re-state the problem that we are trying to solve in this issue.
On slow networks, if we create a report and comment on it, a group with a duplicate chat is created.
What is the root cause of that problem?
For write requests, we do not write the response onyxData and the corresponding successData/failureData/finallyData to Onyx directly. Instead, we write them to queuedOnyxUpdates to prevent the replay effect.
https://github.com/Expensify/App/blob/78e484f41e5fb5fa3f8827d2b4aea0ba55b581e4/src/libs/actions/OnyxUpdates.ts#L30-L32
These updates are flushed only after all the PersistedRequests are cleared.
https://github.com/Expensify/App/blob/78e484f41e5fb5fa3f8827d2b4aea0ba55b581e4/src/libs/Network/SequentialQueue.ts#L173-L175
We remove a request from persistent requests only after the response is received and processed with all middlewares.
https://github.com/Expensify/App/blob/78e484f41e5fb5fa3f8827d2b4aea0ba55b581e4/src/libs/Network/SequentialQueue.ts#L90-L99
So, on slow networks, when we call OpenReport, its response and corresponding request’s successData, etc., are added to queuedOnyxUpdates. This cannot be flushed immediately because there was already an AddComment request added to the PersistedRequests.
For some reason that needs to be fixed, the backend sends a previousUpdateID for AddComment that is larger than the previous lastUpdateID/lastClientUpdateID. This makes doesClientNeedToBeUpdated true.
https://github.com/Expensify/App/blob/78e484f41e5fb5fa3f8827d2b4aea0ba55b581e4/src/libs/Middleware/SaveResponseInOnyx.ts#L34
As a result, the AddComment response is not processed directly with OnyxUpdates.apply. It sets this AddComment response to saveUpdateInformation, and the queue is paused. When the queue is paused, the updates waiting in queuedUpdates are not flushed, so OpenReport’s successData waits in the queuedUpdates, and the optimistic user detail is not removed, making the report appear like a group report.
What changes do you think we should make in order to solve the problem?

First, it needs to be checked why the previousUpdateID for the AddComment response is sent as a higher value than the OpenReport call’s lastUpdatedID/lastClientUpdateID. Fixing this issue should resolve the problem.
However, even with an accidental call to GetMissingOnyxMessages, the previous updates should not be left in limbo without being updated to Onyx until a new write request is made. The updates in the queue need to be written to Onyx after all the missing updates are obtained with GetMissingOnyxMessages. Currently, this is not handled anywhere. When the next write request gets completed and the persistent requests array is empty, all queuedOnyxMessages get updated.
We can see this in the present bug as well: if we send another message, everything updates correctly (the backend also does not send an incorrect previousUpdateID) because the queue is unpaused. After processing this request, when the persisted requests are empty, the queuedOnyxUpdates (which include the previous OpenReport and AddComment responses’ onyxData, successData, etc.) are flushed.
To achieve this, after fetching the missing messages, we should flush the queue finally by changing this:
https://github.com/Expensify/App/blob/78e484f41e5fb5fa3f8827d2b4aea0ba55b581e4/src/libs/actions/OnyxUpdateManager/index.ts#L144
to:

DeferredOnyxUpdates.getMissingOnyxUpdatesQueryPromise()?.finally(finalizeUpdatesAndResumeQueue).then(() => QueuedOnyxUpdates.flushQueue());

What alternative solutions did you explore? (Optional)

@parasharrajat do you like any of the proposals here?

I can take over this issue as C+

Oops. I'm not sure if that matters 😬

@DylanDylann how do you feel about the proposals here?

on my list today

It will take me a bit of time to dive deep into this issue because this seems be complicated

@DylanDylann
Sure!
https://github.com/user-attachments/assets/637e66ac-85b8-4a36-b6c3-f8fc690d061f

For all write requests, the backend sends a previousUpdateID and a lastUpdateID. In the above video, the lastUpdateID sent back in the OpenReport response is<PHONE_NUMBER>. This means the backend considers this ID to be the last time the client device was updated.
Then, when we made an AddComment request, the server’s response returned a previousUpdateID of<PHONE_NUMBER>. This means the backend is informing the client that the freshest update it sent to all devices is<PHONE_NUMBER>. This is larger than the lastUpdateID<PHONE_NUMBER>) saved to the device. The backend is suggesting to the client that there are updates between the OpenReport response<PHONE_NUMBER>) and the AddComment response<PHONE_NUMBER>). However, this is incorrect because it is impossible for there to be any updates in between, as this is the only client making changes to this account. The backend is sending an incorrect previousUpdateID of<PHONE_NUMBER> when it should be sending the lastUpdateID from the OpenReport response, which is<PHONE_NUMBER>.
Due to this incorrect previousUpdateID (which is larger than the lastUpdateID), the client thinks it is out of date and pauses applying the AddComment response to Onyx, making a GetOnyxMessages call to retrieve the missing updates. This call returns only the updates between<PHONE_NUMBER> and<PHONE_NUMBER>, as can be seen.
The lastUpdateID of a write request response should match the previousUpdateID of the next write request if no other updates have been made by another client to the same report, account, etc.

https://github.com/user-attachments/assets/36aa8a34-43f8-4351-9be5-9c3476b29250

In the above video, the lastUpdateID of the comment matches the previousUpdateID of the next comment, so no GetOnyxMessages call is made because the client understands that the chain of updates is intact and nothing is missing.

There is a fix required on the backend for the first AddComment response after the OpenReport response. However, there is also a generic problem in the frontend codebase, as mentioned in the RCA and the second point of my suggested solution. The issue is that the last write response (in this case, AddComment, along with the updates waiting in queuedOnyxUpdates) which triggered the GetMissingOnyxMessages call, is not immediately written after the missing updates are fetched though the SequentialQueue is paused after fetching these missed updates. This happens because there is no code to flush the queuedUpdates unless another response is received from the backend, as outlined in the second point of my solution.

When the next write request gets completed and the persistent requests array is empty, all queuedOnyxMessages get updated.
We can see this in the present bug as well: if we send another message, everything updates correctly (the backend also does not send an incorrect previousUpdateID) because the queue is unpaused. After processing this request, when the persisted requests are empty, the queuedOnyxUpdates (which include the previous OpenReport and AddComment responses’ onyxData, successData, etc.) are flushed.

Feel free to ask if there is still something unclear. As you mentioned, this is a fairly complex issue, and I may have missed explaining some parts fully in an effort to keep the comments concise.

@c3024 Thanks for a deep explanation

Updated proposal

Update the RCA and solution

I suggested the logic here but in the past, we thought it was unnecessary and moved the logic to the flush function.

@DylanDylann My solution here can fix both issues. @nkdengineer your updated solution is the same as mine.

Update: I am on testing solutions

@nkdengineer

For the reason why GetMissingOnyxMessages API is called I think maybe it's expected from BE.

Why do you think it is expected?

Hi @mkzie2, Thanks for your contribution, your solution and @nkdengineer's solution have the same idea. But the @nkdengineer proposed it first in https://github.com/Expensify/App/issues/46393#issuecomment-2255598546

Thanks everyone for your inputs
I agree with @c3024 about your RCA

previousUpdateID on the AddComment API is weird (more detail here). But I am not sure about the BE logic. Let's wait for an internal engineer to verify that

We don't have the logic to flush OnyxUpdateQueue when it is unpaused. With this problem, I lean toward @nkdengineer's proposal.

🎀 👀 🎀 C+ reviewed

@c3024 Please give your concern if there is any problem. I really appreciate your investigation with details of RCA

That is fine. It is necessary for PersistedRequests to be empty before flushing the queue. While I explained it in the next AddComment part, I missed considering it in my solution.

hmm, thanks @c3024 for that detailed explanation: https://github.com/Expensify/App/issues/49931#issuecomment-2422259161
I gave it a first read, I didn't understand 100% because I'm not very familiar with all that, but I think I understood that there is a backend bug related to the onyx updates ids being passed around. If this is true, I'd prefer to prioritize and fix that, and then see again where we are at with this bug.
I'll give it sometime later today to try to reproduce your detailed steps and see if I can understand/see the bug.

I'll give it sometime later today to try to reproduce your detailed steps and see if I can understand/see the bug.

I fail that day and then I forgot to come back. I'll try to take a better look at this asap

not overdue, waiting for @aldo-expensify

Sorry, still haven't had time for this yet.

Waiting on Aldo. Not overdue.

For all write requests, the backend sends a previousUpdateID and a lastUpdateID. In the above video, the lastUpdateID sent back in the OpenReport response is<PHONE_NUMBER>. This means the backend considers this ID to be the last time the client device was updated.
Then, when we made an AddComment request, the server’s response returned a previousUpdateID of<PHONE_NUMBER>. This means the backend is informing the client that the freshest update it sent previously to all devices is<PHONE_NUMBER>. This is larger than the lastUpdateID<PHONE_NUMBER>) saved to the device. The backend is suggesting to the client that there are updates between the OpenReport response<PHONE_NUMBER>) and the AddComment response<PHONE_NUMBER>). However, this is incorrect because it is impossible for there to be any updates in between, as this is the only client making changes to this account. The backend is sending an incorrect previousUpdateID of<PHONE_NUMBER> when it should be sending the lastUpdateID from the OpenReport response, which is<PHONE_NUMBER>.

I wasn't been able to reproduce this with a slow connection:

but then with these steps I was able to reproduce in dev:

Go offline
Open a chat with a user you haven't chatted before (it can be an account that doesn't exist)
Send a message
Go online
Check the OpenReport's last lastUpdateID and the AddComment's `previousUpdateID

I'll investigate what are the updates in between and why these are not matching now.

Hmm... I think the lastUpdateID and previousUpdateID mismatch come from the OpenReport command forwarding a CreateReportAction command to create the whisper "Hi there! This is your first time chatting with...". Sometimes the CreateReportAction can finish fast enough so its updates are considered in the previousUpdateID returned by OpenReport and sometimes not.
Here: https://github.com/Expensify/Auth/blob/d3481121749cc204c713c771a13454dbe0165fbe/auth/lib/Report.cpp#L7751

Changing this behaviour in the backend sounds tricky to do. We forward the command to avoid making OpenReport faster so there is less DB conflicts.

Assigning @nkdengineer since the proposal to fix the frontend makes sense to me too.

@aldo-expensify, Could you help to check this comment? I believe that we need to get the PR merged as soon as possible because there are many similar bugs in other places that also be fixed by our PR

https://github.com/Expensify/App/issues/51819
https://github.com/Expensify/App/issues/51801
https://github.com/Expensify/App/issues/51045

@RachCHopkins I'll be off next week (for the whole week). I don't think this bug is very important, so I think it would be fine to wait until after that. If we don't want to wait, feel free to reassign to another engineer.
The PR https://github.com/Expensify/App/pull/51712 is a bit tricky to review because it is changing some low level behaviour, and I'm not sure if it may cause more harm than good. Someone with more knowledge about the network queue may know better.

I'm making the backend PR ready for review: https://github.com/Expensify/Auth/pull/13168

@aldo-expensify @RachCHopkins This issue has already been fixed
https://github.com/user-attachments/assets/75cee946-4fa0-43c7-8297-b98ff8180b27
cc @nkdengineer

Other issues that have the same RCA have also been fixed
https://github.com/Expensify/App/issues/51801#issuecomment-2527163900
https://github.com/Expensify/App/issues/51045#issuecomment-2527152180

@nkdengineer This PR seems unnecessary. I think we can close it

I closed the PR this morning. I think this issue can be resolved, but @nkdengineer did a good amount of work on this, so I think the bounty should be reduced by 50% to $125 and still pay out for this @RachCHopkins

Sounds good to me @tgolen !

Payment Summary:

Contributor: @nkdengineer paid $125 via Upwork
Contributor+: @DylanDylann paid $125 via Upwork

Upwork job here

Contributor has been paid, the contract has been completed, and the Upwork post has been closed.

@RachCHopkins As from our guideline, the contributor should get full compensation in this case. Could you please evaluate it again?


Navigator Times out while sitting unarmed on the bench.

Using Master (https://github.com/PX4/Firmware/commit/6eac78d67529e20c3170092fd271c11c57c70f2f) and a PixRacer, After sitting idle on the bench for 20 minutes. Radio was off and Battery was disconnected. I heard a DatDat-Dat-Duh tone and the NSH console started to repeat: "WARN  navigator timed out". Is this a problem?
Here is my boot up until and including the previous message.
sercon: Registering CDC/ACM serial driver
sercon: Successfully registered the CDC/ACM serial driver
[i] microSD mounted: /fs/microsd
param: selected parameter default file /fs/mtd_params
[param] Loaded: /fs/mtd_params
rgbled: no RGB led on bus #1
blinkm: I2C init failed
blinkm: init failed
1:   SYS_USE_IO: match
ver hwcmp match: PX4FMU_V4
10020: + SYS_AUTOSTART: match
ver hwcmp match: PX4FMU_V4
dataman: Unknown restart, data manager file '/fs/microsd/dataman' size is 103090 bytes
MS5611_SPI on SPI bus 2 at 3 (20000 KHz)
bst: no devices found
adc init done
ver hwcmp match: PX4FMU_V4
HMC5883_I2C on I2C bus 1 at 0x1e (bus: 100 KHz, max: 400 KHz)
HMC5883_SPI on SPI bus 1 at 5 (11000 KHz)
MPU6000 on SPI bus 1 at 6 (1000 KHz)
MPU9250 on SPI bus 1 at 4 (1000 KHz)
meas_airspeed: no MS4525 airspeed sensor connected
ets_airspeed: no ETS airspeed sensor connected
ets_airspeed: no ETS airspeed sensor connected
sensors: mag cal status changed
sensors: mag cal status changed
WARN  No RGB LED found at /dev/rgbled0
[i] FMU mode_pwm started
ver hwcmp match: PX4FMU_V4
mavlink_if0: mode: 0, data rate: 800000 B/s on /dev/ttyS0 @ 921600B
mavlink_if0: hardware flow control not supported
mavlink_if0: offboard mission init: ERROR
mavlink_if1: mode: 0, data rate: 1200 B/s on /dev/ttyS1 @ 57600B
ver hwcmp match: PX4FMU_V4
mavlink_if2: mode: 3, data rate: 1200 B/s on /dev/ttyS2 @ 57600B
sdlog2: log buffer size: 12288 bytes
[i] MULTICOPTER
[i] Mixer: /etc/mixers/quad_x.main.mix on /dev/pwm_output0
1:   INAV_ENABLED: match
ver hwcmp match: PX4FMU_V4
frsky_telemetry: opening uart
mavlink_if3: mode: 5, data rate: 800000 B/s on /dev/ttyACM0 @ 57600B
NuttShell (NSH)
nsh> gps: module found: UBX
mavlink_if1: Disabling hardware flow control
position_estimator_inav: init ref: lat=41.8539501, lon=-88.4545830, alt=244.6590
telem> home: 41.8542914, -88.4541761, 242.50
WARN  navigator timed out
WARN  navigator timed out
WARN  navigator timed out
WARN  navigator timed out
WARN  navigator timed out
WARN  navigator timed out
WARN  navigator timed out
WARN  navigator timed out
WARN  navigator timed out
WARN  navigator timed out
WARN  navigator timed out

It sounds like something non-good happened on GPS lock. @kd0aij Could you verify that as fast as possible? Could be FrSky telemetry or GPS related.
@pkocmoud Could do this again, but this time also run "top" when it happens (or do you still have the board in that state?)

@julianoes @tumbili This is something we need to settle ASAP as well. Looks like we start to move faster than we should.
I suspect either FrSky telemetry or this change:
https://github.com/PX4/Firmware/commit/a284b77c7b72b2f291878990f0e5ad17750273ab
@kd0aij If you can repro, try undoing that commit.

The timeout was much faster this time and no tone from the speaker.
nsh> position_estimator_inav: init ref: lat=41.8550376, lon=-88.4545191, alt=336.2960
WARN  navigator timed out
WARN  navigator timed out
WARN  navigator timed out
WARN  navigator timed out
WARN  navigator timed out
WARN  navigator timed out
Processes: 25 total, 3 running, 22 sleeping
CPU usage: 33.69% tasks, 0.98% sched, 65.32% idle
Uptime: 261.220s total, 170.603s idle
PID COMMAND                   CPU(ms) CPU(%)  USED/STACK PRIO(BASE) STATE
Processes: 25 total, 2 running, 23 sleeping
CPU usage: 37.77% tasks, 0.59% sched, 61.65% idle
Uptime: 262.582s total, 171.443s idle
Processes: 25 total, 3 running, 22 sleeping
CPU usage: 37.76% tasks, 0.52% sched, 61.73% idle
Uptime: 263.939s total, 172.280s idle
Processes: 25 total, 2 running, 23 sleeping
CPU usage: 38.20% tasks, 0.59% sched, 61.21% idle
Uptime: 265.296s total, 173.111s idle
Processes: 25 total, 5 running, 20 sleeping
CPU usage: 40.01% tasks, 0.66% sched, 59.32% idle
Uptime: 266.654s total, 173.916s idle
Processes: 25 total, 4 running, 21 sleeping
CPU usage: 39.79% tasks, 0.81% sched, 59.40% idle
Uptime: 268.012s total, 174.722s idle
PID COMMAND                   CPU(ms) CPU(%)  USED/STACK PRIO(BASE) STATE
0 Idle Task                  174722 59.395     0/    0   0 (  0)  READY
1 hpwork                      12387  5.011   836/ 1592 192 (192)  w:sem
2 lpwork                        983  0.294   356/ 1592  50 ( 50)  READY
3 init                         1627  0.000  1284/ 2496 100 (100)  w:sem
199 top                           251  3.463  1212/ 1696 100 (100)  RUN
85 dataman                         1  0.000   676/ 1192  90 ( 90)  w:sem
104 sensors                     10103  3.684  1756/ 1992 250 (250)  w:sem
106 gps                           409  0.147   660/ 1192 220 (220)  w:sem
108 commander                    1215  0.368  3132/ 3592 140 (140)  w:sig
109 commander_low_prio              9  0.000   652/ 2872  50 ( 50)  w:sem
115 mavlink_if0                 11286  4.274  2372/ 2696 100 (100)  w:sig
116 mavlink_rcv_if0                21  0.000   812/ 2096 175 (175)  w:sem
119 mavlink_if1                  2359  0.810  2372/ 2696 100 (100)  w:sig
120 mavlink_rcv_if1                20  0.000   812/ 2096 175 (175)  w:sem
123 mavlink_if2                  2107  0.736  2364/ 2696 100 (100)  w:sig
124 mavlink_rcv_if2                21  0.000   812/ 2096 175 (175)  w:sem
134 sdlog2                        851  0.294  2060/ 3296  70 ( 70)  w:sig
153 attitude_estimator_q        12784  4.863  2012/ 2392 250 (250)  w:sem
157 position_estimator_inav      6297  3.389  4756/ 5296 250 (250)  w:sem
159 mc_att_control               6475  2.579   828/ 1496 250 (250)  w:sem
165 mc_pos_control               1667  0.663  1060/ 1496 250 (250)  w:sem
171 navigator                     251  0.884   804/ 1496 105 (105)  w:sem
178 frsky_telemetry              2582  1.031  1316/ 1992 200 (200)  w:sem
190 mavlink_if3                 19092  7.295  2372/ 2696 100 (100)  w:sig
196 mavlink_rcv_if3                39  0.000  1116/ 2096 175 (175)  w:sem

Not sure it is related, but after quitting top, the WARN is not occuring.
nsh> navigator status
navigator: Geofence is valid
nsh> telem> home: 41.8542642, -88.4543835, 304.36

I saw navigator timeouts once, immediately after booting the config with 3DR GPS/compass, LED and airspeed sensor. Have not seen it occur again through several subsequent reboots issued via console and by cycling USB power.  GPS lock has not triggered it, and frsky_telemetry is running with an X4R RX connected. Also has not occurred on cold or warm boot on "brick" power.

@pkocmoud I've now reverted the GPS change - let me know if the issue resolves if you flash through master.
If not, please inspect your board. We've now seen so many differences between boards that I would not be surprised if a power circuit / manufacturing difference could be at the bottom of this. One of my boards only outputs 1.8V on the GPS port. Can you measure the voltage your GPS gets?

@Lorenz
Just to add some more data points.
In the last week I saw this on master with FMUV2 hw with no peripherals connected (only pwm).
I also saw 80% plus cpu utilization until I did a "mtd erase"
ekf2 was 36% and I think commander was the other task with 30%+.
From: Lorenz Meier<EMAIL_ADDRESS>Sent: Sunday, January 24, 2016 10:35 PM
To: PX4/Firmware
Subject: Re: [Firmware] Navigator Times out while sitting unarmed on the bench. (#3585)
@pkocmoud https://github.com/pkocmoud  I've now reverted the GPS change - let me know if the issue resolves if you flash through master.
If not, please inspect your board. We've now seen so many differences between boards that I would not be surprised if a power circuit / manufacturing difference could be at the bottom of this. One of my boards only outputs 1.8V on the GPS port. Can you measure the voltage your GPS gets?
—
Reply to this email directly or view it on GitHub https://github.com/PX4/Firmware/issues/3585#issuecomment-174436583 .  https://github.com/notifications/beacon/AB2w3Raa1Mj5g-0WTahnwcGVOvQfDbr8ks5pddWugaJpZM4HLPut.gif

@pkocmoud Does this still reproduce for you with current master?

Sorry Lorenz, I have not had time to test yet.

Confirmed issue exists in Stable. Testing Master (cc7929937505c34d06b070c708e3f56a755cbda7) now.

It occurs in the before listed master.
Here is the Boot and Top if it helps:
�sercon: Registering CDC/ACM serial driver
sercon: Successfully registered the CDC/ACM serial driver
[i] microSD mounted: /fs/microsd
param: selected parameter default file /fs/mtd_params
[param] Loaded: /fs/mtd_params
rgbled: no RGB led on bus #1
blinkm: I2C init failed
blinkm: init failed
1:   SYS_USE_IO: match
ver hwcmp match: PX4FMU_V4
10020: + SYS_AUTOSTART: match
ver hwcmp match: PX4FMU_V4
dataman: Unknown restart, data manager file '/fs/microsd/dataman' size is 103090 bytes
MS5611_SPI on SPI bus 2 at 3 (11000 KHz)
bst: no devices found
adc init done
ver hwcmp match: PX4FMU_V4
HMC5883_I2C on I2C bus 1 at 0x1e (bus: 100 KHz, max: 400 KHz)
HMC5883_SPI on SPI bus 1 at 5 (11000 KHz)
MPU6000 on SPI bus 1 at 6 (1000 KHz)
MPU9250 on SPI bus 1 at 4 (1000 KHz)
meas_airspeed: no MS4525 airspeed sensor connected
ets_airspeed: no ETS airspeed sensor connected
ets_airspeed: no ETS airspeed sensor connected
sensors: mag cal status changed
sensors: mag cal status changed
WARN  No RGB LED found at /dev/rgbled0
[i] FMU mode_pwm started
ver hwcmp match: PX4FMU_V4
mavlink_if0: mode: 0, data rate: 800000 B/s on /dev/ttyS0 @ 921600B
mavlink_if0: hardware flow control not supported
mavlink_if0: offboard mission init: ERROR
mavlink_if1: mode: 0, data rate: 1200 B/s on /dev/ttyS2 @ 57600B
Processes: 22 total, 3 running, 19 sleeping
Processes: 22 total, 4 running, 18 sleeping
CPU usage: 35.14% tasks, 0.46% sched, 64.41% idle
Processes: 22 total, 3 running, 19 sleeping
Processes: 22 total, 3 running, 19 sleeping
Processes: 22 total, 4 running, 18 sleeping
CPU usage: 35.16% tasks, 0.46% sched, 64.38% idle
Uptime: 149.294s total, 99.329s idle
PID COMMAND                   CPU(ms) CPU(%)  USED/STACK PRIO(BASE) STATE
0 Idle Task                   99328 64.378     0/    0   0 (  0)  READY
1 hpwork                       6819  4.652   784/ 1592 192 (192)  w:sem
2 lpwork                        551  0.381   356/ 1592  50 ( 50)  w:sig
3 init                         1462  0.000  1332/ 2496 100 (100)  w:sem
174 top                           184  3.279  1212/ 1696 100 (100)  RUN
85 dataman                         1  0.000   660/ 1192  90 ( 90)  w:sem
104 sensors                      5632  3.813  1740/ 1992 250 (250)  w:sem
106 gps                           219  0.152   660/ 1192 220 (220)  w:sem
108 commander                     710  0.381  3172/ 3592 140 (140)  w:sig
109 commander_low_prio              5  0.000   500/ 2872  50 ( 50)  w:sem
115 mavlink_if0                  6186  4.195  2372/ 2696 100 (100)  READY
116 mavlink_rcv_if0                11  0.000   812/ 2096 175 (175)  w:sem
119 mavlink_if1                  1278  0.839  2364/ 2696 100 (100)  w:sig
120 mavlink_rcv_if1                11  0.000   812/ 2096 175 (175)  w:sem
126 sdlog2                        459  0.305  2052/ 3296  70 ( 70)  w:sig
144 attitude_estimator_q         7089  4.805  1908/ 2392 250 (250)  w:sem
146 position_estimator_inav      3903  2.288  4748/ 5296 250 (250)  w:sem
153 mc_att_control               3363  2.288   828/ 1496 250 (250)  w:sem
155 mc_pos_control                902  0.610   964/ 1496 250 (250)  w:sem
159 navigator                     507  0.000   788/ 1496 105 (105)  w:sem
169 mavlink_if2                 10515  7.170  2372/ 2696 100 (100)  w:sig
171 mavlink_rcv_if2                20  0.000  1092/ 2096 175 (175)  w:sem
WARN  navigator timed out

I found that if I reboot from NSH reboot command, the "WARN navigator timed out" appear within 5 minutes. Comfirmed twice. Otherwise on a cold power up, I did not get the message while waiting over 20 minutes.
I just noticed that the map shifted noticeably just before or while the message started.

Maybe this is just a GPS wandering issue. It has occured on 2 uBlox NEO m8 GPSs. I see a lot on movement tonight. I just do not recall ever seeing this message in the past.

Ok. So fundamentally might be one of the things why we want to move to EKF2.

@pkocmoud Could you get us a 200 Hz log from boot? The way to do this is:
sdlog2 stop
sdlog2 start -t -r 200 -e -b 32

Wait for the issue to happen
sdlog2 stop

Now its safe to power down the system and upload the log.

http://logs.uaventure.com/view/65pADCyf3jW5SuKSfMHU8D

Rerunning the test as ver all was not showing an accurate value.

Ok, I understand it now. It's correct and harmless. Just tells you it lost lock.


Add some more RCC_CFGR fixes

The RCC_CFGR was missing ADCPRE and USBPRE enumeration.  This
commit fixes that so that we don't need unsafe{} to configure those
bits.
I only change the .patch here since I'm unsure of how you handle actually updating the src/lib.rs file.

:pushpin: Commit 36cab03 has been approved by japaric

Thanks @kinnison
@homunkulus r+

:hourglass: Testing commit 36cab03 with merge 36cab03...

:sunny: Test successful - status-travis
Approved by: japaric
Pushing 36cab032b2b4bf9fce0fec91fdce1620d549fac3 to master...


App-Only authentication doesn't grant full permissions as expected

This guide works -- no doubt.  However, I have tried this guide many times, and I still cannot get the application to perform some functions using this method.  For example:

You cannot, using this method, auto-complete -type, and you cannot use this switch either
Set-mailbox somemailbox -type shared

You cannot Add-MailboxPermission using this:
Add-MailboxPermission -Identity something -User somethingelse -AccessRights FullAccess

I have tried assigning more permissions in the API (no luck), adding my Application to Global Administrators and Exchange Administrators (no luck). If this Application method is replacing basic auth (where we would use a service account granted privileges), is there a way to get these commands working?

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

ID: d2cfafdf-cbe9-2ffe-eabe-becc66d51728
Version Independent ID: 4a46c8a8-dc70-d877-271e-6679c465a6d5
Content: App-only authentication
Content Source: exchange/docs-conceptual/app-only-auth-powershell-v2.md
Service: exchange-online
GitHub Login: @chrisda
Microsoft Alias: chrisda

@robkchang, if you're using the v2.0.5 version of the module, try using v2.0.6-Preview6 of the module (this is just a shot in the dark, but worth a try). Be advised that v2.0.6 introduces the -UseRPSSession switch and REST API backed cmdlets as described here, so you might try those problematic commands the old way (connect using the -UseRPSSession switch) and the new way (connect without using the -UseRPSSession switch so you're in REST API mode).
After that, you should send a message to the EXO V2 module support alias (exocmdletpreview[at]service[dot]microsoft[dot]com) and/or open a support ticket. If you open a support ticket, talk about your experiences with v2.0.5 (if that's what you were using); they can't help you with Preview versions of the module.

@robkchang Hope this comment is helpful for you. Considering the nature of the issue, as advised, please open a service ticket in your tenant and follow with them for the resolution. We proceed to close it as here we are limited to documentation fixes and improvements only.
We will be very happy if you can share the outcome or resolution with us if you see documentation update is required. We will certainly update this documentation with that valuable information. Thanks again, for taking out some time to open the issue. Appreciate and encourage you to do the same in future also.


Flask[async] compatibility

use a coroutine if we are in async mode

@tdev-be Thanks, this code works well.
Could you make a repo with this already merged?
I want to install it that way!

Flask mentions here
https://flask.palletsprojects.com/en/2.0.x/async-await/#extensions to use the ensure_sync function for extensions, like this:
def extension(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        ...  # Extension logic
        return current_app.ensure_sync(func)(*args, **kwargs)

    return wrapper

Havent testes it yet, but Im sure it works. I guess this should be used instead, there might be a good reason to not just await the view.


Term with mixed case NOT Captured

https://github.com/geekcomputers/Python/blob/28b25d4b2a0c484b8e905fd54ec5ffeecf6460c8/calculator.py#L44-L50
If you have term = "Sin(20) + cOs(30)", term.replace(function, withmath) on LINE 50 above would not work except the whole term has been converted to lower case. Hence input validation is required.
Possible Solution:
Add term = term.lower() prior to the loop on LINE 47. Hence, this will remove the need for having .lower() on LINE 48's conditional statement.
@jwadel @Victory-Uchenna

You are trying to replace a substring that does not exist in the string term.
So if the string is "Cos(20)", if function in term.lower(): will find it, but the string won't have changed and term.replace("cos", withmath) will raise an exception.

Yeah. That's the same problem described by @jwadel. Input validation/transformation is required before the loop. Converting the term string to lowercase before looping through the functions list should suffice.


Create perimeter of circle using ruby

Hey @rasheeq123 !
Excellent.
You can star this repository for further updates.
Have fun!


Pushing alpha build to npm

Hey Team,
While the project is in alpha, and I understand this may be for quite some time, can we start pushing the built modules to npm similar to how we are pushing the dotnet modules?

@rijulg The node-api-dotnet package has been published to npm for a while and is updated with every release: https://www.npmjs.com/package/node-api-dotnet
Is there something you think is missing?
See the node-api-dotnet/examples directory for example uses of it. While those reference the locally-built package, the same should work using the package from npm.


How to wrap the "msgstr" with the specified width?

Problem Description
Recently, I tried to write a Python script to merge a new version new.po file into an old version old.po file. That is, if there exists an existing msgid in the old.po exatly the same with the corresponding msgid in the new.po, then it should copy the translated msgstr of the entry from new.po into a old_updated.po  directly. And in fact, I already implemented a simple merge.py.
Click to expand
import argparse
import polib
import os

# Add a parser
parser = argparse.ArgumentParser(description='Sync PO files.')

# Add arguments
parser.add_argument('old_po', type=str, help='Path to the old PO file')
parser.add_argument('new_po', type=str, help='Path to the new PO file')

# Parse arguments
args = parser.parse_args()

print("Old PO file path:", args.old_po)
print("New PO file path:", args.new_po)

po_old = polib.pofile(args.old_po)
po_new = polib.pofile(args.new_po)

# Create a dictionary of the new translations
new_translations = {entry.msgid: entry.msgstr for entry in po_new}

# Update the old translations
for entry in po_old:
    if entry.msgid in new_translations:
        entry.msgstr = new_translations[entry.msgid]

# Split the filename and extension of old_po
old_po_name, old_po_ext = os.path.splitext(args.old_po)

# Create a new file path
old_po_updated = old_po_name + "_updated" + old_po_ext

# Save the old PO file with the updated translations
po_old.save(old_po_updated)

However, there is another problem bothering me. That is, the updated old_updated.po doesn't have the same "wrap at" format for the copied msgstr. Take the following results for reference:

The following is the format of an entry in the new.po, which is wrapped at 79 location by Poedit:
#: ../../index.rst:6
msgid ""
"CMake is a tool to manage building of source code.  Originally, CMake was "
"designed as a generator for various dialects of ``Makefile``, today CMake "
"generates modern buildsystems such as ``Ninja`` as well as project files for "
"IDEs such as Visual Studio and Xcode."
msgstr ""
"CMake 是一款用來管理來源碼建置的工具。原本，CMake 是被設計做為不同 dialect "
"的 ``Makefile`` 的產生器。如今，CMake 可以產生像是 ``Ninja`` 這樣的現代建置系"
"統，以及像是 Visual Studio 和 Xcode 這樣的 IDE 專案檔。"

The following is the format of the corresponding entry in the old.po, which is empty in msgstr:
#: ../../../index.rst:6
msgid ""
"CMake is a tool to manage building of source code.  Originally, CMake was "
"designed as a generator for various dialects of ``Makefile``, today CMake "
"generates modern buildsystems such as ``Ninja`` as well as project files for "
"IDEs such as Visual Studio and Xcode."
msgstr ""

The following is the format of the corresponding entry in the old_updated.po after runnnig python merge.py old.po new.po:
#: ../../../index.rst:6
msgid ""
"CMake is a tool to manage building of source code.  Originally, CMake was "
"designed as a generator for various dialects of ``Makefile``, today CMake "
"generates modern buildsystems such as ``Ninja`` as well as project files for"
" IDEs such as Visual Studio and Xcode."
msgstr ""
"CMake 是一款用來管理來源碼建置的工具。原本，CMake 是被設計做為不同 dialect 的 ``Makefile`` 的產生器。如今，CMake"
" 可以產生像是 ``Ninja`` 這樣的現代建置系統，以及像是 Visual Studio 和 Xcode 這樣的 IDE 專案檔。"

As we can see, the old_updated.po file doesn't have the same "wrap at" format as the new.po file.
How should I modify this merge.py Python script in order to do the same format provided by Poedit?
cc: @izimobil
Demonstration
merge.zip

Duplicate of https://github.com/izimobil/polib/issues/96
See this issue for possible workarounds (especially the msgcat trick)

@izimobil
The msgcat workaround works! Thanks!
msgcat old_updated.po -w79 -o old_updated_2.po


.Net Core not enforcing implementation of members in a Class C inherited from Interface A through Interface B

.Net Core not enforcing implementation of members in a Class C inherited from Interface A through Interface B
General
I'm seeking some guidance with the following issue.
I have an Interface A with a method A.DoSomething
I have another interface B with a method B.DoSomethingElse. B Inherits from A
I have a class C that inherits from interface B
interface A
{
   void DoSomething();
}

interface B : A
{
   void DoSomethingElse();
}

public class C : B
{
   public void DoSomethingElse()
   {
      //do something else here
   }
}

If I have the above code in .NET Standard I get a compile time error stating that class C must implement interface A. However if I write the same code in .NET Core I don't get any compile time error to enforce the implementation of interface A in class C.
I'm using .NET Core 2.1 with Visual Studio Enterprise 2017 version 15.8.9.

I created a brand new .Net Core 2.1 application in VS 15.8.9 with the following code:
class Program
{
    static void Main() { }
}

interface A
{
    void DoSomething();
}

interface B : A
{
    void DoSomethingElse();
}

public class C : B
{
    public void DoSomethingElse()
    {
        //do something else here
    }
}

And I got the expected error:

Error	CS0535	'C' does not implement interface member 'A.DoSomething()'

Is it possible that something else is going on on your side, like you editing a file that isn't part of the project? If not, could you provide exact steps to reproduce the problem?

@svick, Indeed it might have been something on my side. I get the expected error after rebooting my machine. I spent hours struggling with this issue and the one things that I had not done was rebooting. Thank you for your time.

This not an issue. It was something on my side.


Other procedural animated textures

Are there any plans for adding the other procedural animated textures to the mod? The old flowing/still water animations were a lot smoother and the old procedural fire animation looped better.

the old procedural fire, water, and lava textures were continuously generated and did not loop (source: https://github.com/NeRdTheNed/MC-TextureGen)


Load libraries fix

When I load a custom version of ammo.lib and instantiate it correctly, I get the following error during scene loading:
__start__.js:146 Error while loading scene 36.json: Cannot read property 'addRigidBody' of undefined TypeError: Cannot read property 'addRigidBody' of undefined     at RigidBodyComponentSystem.addBody (playcanvas-latest.js:29576)     at RigidBodyComponent.enableSimulation (playcanvas-latest.js:29162)     at RigidBodyComponent.createBody (playcanvas-latest.js:29146)     at CollisionBoxSystemImpl.recreatePhysicalShapes (playcanvas-latest.js:30019)     at CollisionBoxSystemImpl.afterInitialize (playcanvas-latest.js:30007)     at CollisionComponentSystem.initializeComponentData (playcanvas-latest.js:30305)     at CollisionComponentSystem.addComponent (playcanvas-latest.js:24218)     at SceneParser._openComponentData (playcanvas-latest.js:41545)     at SceneParser._openComponentData (playcanvas-latest.js:41551)     at SceneParser.parse (playcanvas-latest.js:41511)
This happens because the _loadLibraries() function does not call onLibrariesLoaded() in the case there are no libraries (as is the case here). I believe that in the case no libraries are loaded, onLibrariesLoaded() should still be called.
(Later on in the loading process application.js:start() also calls onLibrariesLoaded. This call is made after the error above and actually should possibly be removed.)
I confirm I have signed the Contributor License Agreement.

@daredevildave This one will require your approval.


How to prevent Windows from requesting conflicting sample rates?

hardware typically has a single crystal, which constrains its input and output streams to run at the same clock rate

Is there any way to indicate this constraint to Windows for USB Audio devices?  Different versions of Windows have different rules for default sample rates, which leads to conflicting input/output rates and garbled audio by default.
If conflicting rates are requested, we can STALL the second request, as per USB spec:

If an audio function does not support a certain request, it must indicate this by stalling the control pipe when that request is issued to the function.

but then recording software locks up or behaves unusually, and Windows doesn't try again with a compatible rate or tell the user what the problem is.
USB Audio 2.0 descriptors include Clock Source information, which might prevent Windows from requesting conflicting rates in the first place, but Windows doesn't fully support UAC 2.0 yet, especially older versions.  (USB Audio 2.0 Drivers says "There is currently limited support for devices using a shared clock for multiple endpoints. ")
Is there some other way I'm missing?
(OS X etc. never request conflicting in/out rates, so never have this problem.)

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

ID: 1d5ac36b-6b5b-030b-6e83-b6e9155f0ce5
Version Independent ID: 7d8b6999-0f1a-d5c1-a119-9e43f9f53399
Content: Hardware Constraints on Sample Frequency
Content Source: windows-driver-docs-pr/audio/hardware-constraints-on-sample-frequency.md
Service: unspecified
GitHub Login: @DOMARS
Microsoft Alias: windowsdriverdev

@endolith - Following up with dev team to see if I can get any information on this request. They have been heads down coding.

@endolith - The dev team is investigating this code behavior, that work will take some additional time.

@endolith - As the dev team is following up on this and has an internal tracking item, closing this issue.

(This was fixed for the default sample rate (#376), but it's still possible to manually select conflicting sample rates.  Hopefully, anyone who finds where to do this also realizes they need to change both input and output.)


"To Be Budgeted" is orange on budget screen

Defective ToolKit Feature Name: Unsure
Expected Behavior
To Be Budgeted should be green.
Actual Behavior
Is actually orange.
Steps to Reproduce the Behavior

Log in
Click on budget screen
Orange

Export of Toolkit Settings (Bottom Left of Settings Page)
[{"key":"accountTransactionSearch","value":false},{"key":"accountsClearSelection","value":false},{"key":"accountsDisplayDensity","value":"0"},{"key":"accountsEmphasizedOutflows","value":true},{"key":"accountsRowHeight","value":"0"},{"key":"accountsSelectedTotal","value":true},{"key":"accountsStripedRows","value":true},{"key":"activityTransactionLink","value":true},{"key":"betterScrollbars","value":"0"},{"key":"budgetBalanceToZero","value":true},{"key":"budgetProgressBars","value":"0"},{"key":"budgetQuickSwitch","value":false},{"key":"budgetRowsHeight","value":"0"},{"key":"calendarFirstDay","value":"0"},{"key":"categoryActivityPopupWidth","value":"1"},{"key":"changeEnterBehavior","value":true},{"key":"checkCreditBalances","value":true},{"key":"checkNumbers","value":false},{"key":"collapseExpandBudgetGroups","value":false},{"key":"collapseSideMenu","value":true},{"key":"colourBlindMode","value":false},{"key":"compactIncomeVsExpense","value":false},{"key":"currentMonthIndicator","value":true},{"key":"daysOfBuffering","value":true},{"key":"daysOfBufferingHistoryLookup","value":"0"},{"key":"editButtonPosition","value":"0"},{"key":"enableRetroCalculator","value":false},{"key":"enlargeCategoriesDropdown","value":true},{"key":"enterInRegisterNow","value":true},{"key":"goalIndicator","value":false},{"key":"goalIndicatorWarningColor","value":true},{"key":"googleFontsSelector","value":"0"},{"key":"hideAOM","value":false},{"key":"highlightNegativesNegative","value":true},{"key":"importNotification","value":false},{"key":"incomeFromLastMonth","value":"0"},{"key":"l10n","value":"0"},{"key":"largerClickableIcons","value":true},{"key":"monthlyNotesPopupWidth","value":"0"},{"key":"pacing","value":"0"},{"key":"popupCalculator","value":false},{"key":"printingImprovements","value":true},{"key":"privacyMode","value":"2"},{"key":"reconciledTextColor","value":"0"},{"key":"removePositiveHighlight","value":false},{"key":"removeZeroCategories","value":true},{"key":"reports","value":true},{"key":"resizeInspector","value":false},{"key":"rightClickToEdit","value":true},{"key":"runningBalance","value":false},{"key":"seamlessBudgetHeader","value":true},{"key":"showIntercom","value":true},{"key":"splitKeyboardShortcut","value":false},{"key":"splitTransactionAutoAdjust","value":true},{"key":"squareNegativeMode","value":false},{"key":"swapClearedFlagged","value":false},{"key":"toBeBudgetedWarning","value":true},{"key":"toggleSplits","value":false},{"key":"toggleTransactionFilters","value":"1"},{"key":"warnOnQuickBudget","value":false}]

System Settings
ToolKit Version: 0.7.7
Operating System (Mac/Windows/Etc): Mac
Browser: Chrome
Browser Version: Version 54.0.2840.98 (64-bit)
Other Extensions: lots?

You're describing the functionality of the To Be Budgeted Warning which, according to the settings you've pasted, you have enabled. You can find this on the budget settings page.
When this is enabled, the color of TBB turns orange when there is money available to be budgeted.

Okay I promise I looked through the settings. haha, thanks man.

not a problem :D


New window are always light themed

Storage Explorer Version: 1.2.0
Platform: Windows
Architecture: win32
Regression From: Unknown
Steps to Reproduce:

Open Storage Explorer
Switch to dark theme
File -> New Window

Expected Experience:
New window is dark themed
Actual Experience:
It is 💡 themed

Hi @MRayermannMSFT
This issue is fixed on the latest build 20200107.3. So we close it.


Failed to build on Ubuntu 17.04 (postcss)

I can't build it anymore.
I opened a detailed issue on postcss-cli https://github.com/postcss/postcss-cli/issues/148 about this. I would really appreciate if someone can help me with this.

I don't think it's something we do wrong ourselves since it works in other systems so it's something permissions-related AFAICT.

Closing since this has been acknowledged as an postcss-cli bug.


Request - Update to Angular 16

Currently if you try to use it with v16 project, you'll get this:
Error: EmailEditorModule does not have a module def (ɵmod property)
As far as I understand it is related to the drop of ngcc in the latest version

Do you know if they will continue to support the editor? It doesn't work with version 16 of angular

Hi anyone found a solution or alternative to this problem?

Can anyone here make a pull request?


Allow Advanced embeds to not use HTTPS

I used to watch BBC news on overrustle but I can't now because the embed is not HTTPS. I would guess many other sites cannot be embedded on advanced anymore because of it.

Not sure how/if this is possible now that @ILiedAboutCake enabled forced https

Oh sorry, forgot to delete this.


operationalinsight: workspaces_create - features.enable_data_export is not working

It has defined in Swagger but the service will not return it, no matter I called PUT with it or not.
https://github.com/Azure/azure-rest-api-specs/blob/42e2c0bcd77b0de6c523404668fa63511484d485/specification/operationalinsights/resource-manager/Microsoft.OperationalInsights/stable/2022-10-01/Workspaces.json#L594

@dulikvor can you help to see this issue, thanks!


Verify Emails and Password Reset

Low priority.

Priority increased. Should be completed for the next release.

password recovery implemented in 9c0b5bdb1770e6b71b1931adbf2202cf3eb6062d

I don't see verifying emails as important anymore so I am closing this issue.


ClickAsync() not awaiting tab navigation .net

System info

Playwright Version: [v1.37]
Operating System: [Windows 10]
Browser: [Chromium]
Other info: Visual Studio 2022

Source code
[SetUp]
        public void Setup()
        {
            Directory.GetFiles(liveProductDir, "*", SearchOption.AllDirectories).ToList().ForEach(entry =>
            {
                if(!entry.Contains("conformity") && !entry.Contains("assets") && !entry.Contains("techspecs") && !entry.Contains(".aspx") && !entry.Contains(".xml"))
                {
                    string s = entry.Substring(entry.LastIndexOf("\\") + 1);
                    if(!IgnoreList.Contains(s))
                        productPageUrls.Add(entry.Substring(entry.IndexOf("\\products\\")));
                }
            });
            ostrm = new FileStream(Path.Combine(Directory.GetParent(Environment.CurrentDirectory).Parent.Parent.FullName, "LogOutputs", $"output-{DateTime.Now.Hour}-{DateTime.Now.Minute}-{DateTime.Now.Second}.txt"), FileMode.OpenOrCreate, FileAccess.Write);
            writer = new StreamWriter(ostrm);
            Console.SetOut(writer);
        }

        [Test]
        public async Task TestAllPagesExist()
        {
            StartTime = DateTime.Now;
            Console.WriteLine("INIT TEST");
            Console.WriteLine($"Started: {StartTime.ToLocalTime()}");
            for (int i = 0;i < productPageUrls.Count; i++)
            {
                Console.WriteLine($"Testing Page {productPageUrls[i]}");
                bool passed = await TestPageExists(productPageUrls[i]);

                if(passed)
                {
                    bool contentPass = await CheckContent(productPageUrls[i]);
                    if (!contentPass)
                    {
                        brokenContentUrls.Add(productPageUrls[i]);
                    }
                    else
                    {
                        passedPages.Add(productPageUrls[i]);
                    }

                }
            }
        }

public async Task<bool> CheckContent(string url)
        {
            ProductPage live = new(url) ;
            ProductPage dev = new(url);
            await Page.GotoAsync($"https://perle.com/{url}");
            await live.CapturePageData(Page);
            await Page.GotoAsync($"https://dev.perle.com{url}");
            await dev.CapturePageData(Page);

            if (live.Equals(dev))
                return true;

            //await Expect(Page).ToHaveTitleAsync("FAIL");
            return false;
        }

public async Task CapturePageData(IPage page)
        {

            Title = await page.Locator(".print-only h1").First.InnerTextAsync();
            Subtitle = await page.Locator(".print-only h2").First.InnerTextAsync();
            string bullet =  await page.Locator(".print-only ul").First.InnerTextAsync();
            Bullets = bullet.Split("\n").ToList();
            ImageFilename = await page.Locator(".print-only img").First.GetAttributeAsync("src");
            ImageFilename = ImageFilename.Substring(ImageFilename.LastIndexOf("/") + 1);

            Bullets.ForEach(b =>
            {
                b = b.Replace("\n", "").Replace("\t", "");
            });
            //issue is in the below loop
            var tabs = await page.Locator("css=main .nav-item").AllAsync();
            for(int i = 0; i < tabs.Count; i++)
            {
                await tabs[i].ClickAsync();
                Thread.Sleep(1000);
                string tabTitle = await tabs[i].InnerTextAsync();
                string tabValue = await page.Locator(".tab-content").InnerTextAsync();
                tabValue = tabValue.Replace("\n", "").Replace("\t", "");
                tabValue = Regex.Replace(tabValue, @"\u00A0", " ");
                tabValue = tabValue.Replace("  ", " ");
                TabContent.Add(tabValue);
            }
        }

 public bool Equals(ProductPage? rhs)
        {
            bool passed = true;
            if (Title.ToLower() != rhs.Title.ToLower())
            {
                Console.WriteLine($"TITLE FAILURE:: page {Url}");
                passed =  false;
            }
            if (Subtitle.ToLower() != rhs.Subtitle.ToLower())
            {
                Console.WriteLine($"SUBTITLE FAILURE:: page {Url}");
                passed =  false;
            }
            if (Bullets.Count != rhs.Bullets.Count)
            {
                Console.WriteLine($"BULLETS FAILURE:: page {Url}");
                passed =  false;
            }
            for (int i = 0; i < Bullets.Count; i++)
            {
                if (Bullets[i].ToLower() != rhs.Bullets[i].ToLower())
                {
                    Console.WriteLine($"BULLETS FAILURE:: page {Url}");
                    Console.WriteLine("Live");
                    Console.WriteLine(Bullets[i]);
                    Console.WriteLine("DEV");
                    Console.WriteLine(rhs.Bullets[i]);
                    passed =  false;
                }
            }
            if (ImageFilename != rhs.ImageFilename)
            {
                Console.WriteLine($"IMAGE FAILURE:: page {Url}");
                Console.WriteLine($"LIVE:: {ImageFilename}");
                Console.WriteLine($"DEV:: {rhs.ImageFilename}");
                passed =  false;
            }
            if(TabContent.Count != rhs.TabContent.Count) {
                passed =  false;
            }
            else
            {
                for(int i = 0; i < TabContent.Count; i++)
                {
                    if (TabContent[i] != rhs.TabContent[i])
                    {
                        Console.WriteLine($"page {Url}: tab {i} Failure");
                        Console.WriteLine("Live");
                        Console.WriteLine(TabContent[i]);
                        Console.WriteLine("Dev");
                        Console.WriteLine(rhs.TabContent[i]);
                        passed =  false;
                    }
                }
            }
            return passed;
        }

[ ] I provided exact source code that allows reproducing the issue locally.
the source for testing are live production sites that cannot be shared here, however all the relevant code is above. it appears that the await tabs[i].ClickAsync(); is not actually awaiting since when i view the value before adding to the list, it is sometimes the same as the first iteration on the second loop. this also changes in debug with break points vs standard runs.

Link to the GitHub repository with the repro
Private
or
Config file
no config file I am writing in C#
Expected
I expect the await to actually await for the content change, but it does not and reads the content from the previous tab
Actual
await is not awaiting the completion of the click function. when parsing the text it is often the same when i know for a fact it should be different. I had to manually add a Thread.Sleep(1000) in order to actually get the expected result. My understanding was playwright was not supposed to have this issue and does in fact automatically wait for completion of the async tasks when await is used.

My understanding was playwright was not supposed to have this issue and does in fact automatically wait for completion of the async tasks when await is used.

In case of ClickAsync Playwright will only auto-wait page navigation triggered by the click if there is any. In your scenario it doesn't seem to be the case and instead something is changing asynchronously in your page. Instead of Thread.Sleep() you can use one of the web assertions to auto-wait for an element that would indicate that the click effect did complete. The element which you need to wait will depend on your app and playwright cannot pick it automatically.

There is a tab navigation though, and it works perfectly fine on a new version of the site. Do you mean that it will only wait if you navigating to another page?

Do you mean that it will only wait if you navigating to another page?

Yes. If you have an SPA which changes its content dynamically and does not navigate to another page, the method won't auto-wait.

I see, that is weird, since its not an SPA, its an old .shtml page running from IIS, and the tabs are basic bootstrap navigation tabs, but it works as expected on the modern version which is also not an spa but .net core MVC razor page also using bootstrap tabs


Solve discussion about Kevin questions

https://github.com/OSGP/Documentation/pull/55

https://smartsocietyservices.atlassian.net/projects/OC/issues/OC-79?filter=allopenissues


perf: fast path for builtins/instrinsic ops

Emit a fast path for static property access calls (e.g. x.push()) under certain conditions, such as if x is likely an instance of Array (possibly through type inference).
The builtin/intrinsic operation can be translated to an index into an intrinsic op table, similar to how we already translate a variable reference to a stack index.
If the prediction turns out to be true (i.e. x instanceof Array) and no builtins were mutated, we can skip the slow property lookup process and execute the intrinsic op right away. Otherwise, fall back to slow/unlikely path.
We might also be able to skip prediction guards entirely if we can prove at compile time that a variable is always going to be of a certain type, for example here
const x = [];
for (let i = 0; i < 10000; i++)
  x.push(i);

x is declared const, so its type won't change. Even if it wasn't declared const, we can tell that the code never assigns to x, so its type will always be array.
In this case, it would be nice if it could skip all of the property dispatch involved when looking up a property and directly execute Array.prototype.push.
I believe this can make a significant difference in programs that make use of a lot of builtins.

This sort of exists now, but only for Math functions. Maybe it can be extended to work with any builtin in the future.