Create a new tag

Issue Description
Could you please create a new tag that includes the changes made in the following commit?
https://github.com/ing-bank/probatus/commit/75a0ab00b57b57f33008f2b2b11e706fe72b50eb
(I need  "shap>=0.43.0 ; python_version != '3.8'")
thank you

Hi @erfanian7 sorry for the delay and thanks for your interest! I've been waiting for my last PR's to be approved, so I could release 3.1.0. However this took longer than anticipated given that the refactoring was quite big. So I've released 3.0.1 (https://github.com/ing-bank/probatus/releases) in the mean time for you and maybe others that are waiting for it. I hope the other two PRs that are still open will be closed within the next two weeks meaning we'd release a version 3.1.0 as well.

I appreciate your help. The issue has been resolved.


Add user defined literals for megabytes and kilobytes

I know that there is some developer overhead in knowing that these user-defined-literals exist in the codebase, but I felt the several usages of simple multiplications of 1024 combined with comments detailing the units justified introducing the two simple UDLs.
Note that I didn't introduce the whole slew of byte-like UDLs as I only saw widespread usage of kb and mb.
Requested reviewers:
@seelabs @HowardHinnant

Thank you for your submission. It will be reviewed soon and submitted for processing in CI.

Aren't these technically https://en.wikipedia.org/wiki/Mebibyte s? Also all lowercase letters might be confused with bits.

Jenkins Build Summary
Built from this commit
Built at 20180718 - 19:13:09
Test Results

Build Type
Log
Result
Status

msvc.debug
logfile
1032 cases, 0 failed, t: 571s
PASS :white_check_mark:

coverage
logfile
1035 cases, 0 failed, t: 697s
PASS :white_check_mark:

docs
logfile
1 cases, 0 failed, t: 2s
PASS :white_check_mark:

gcc.release.unity -Dassert=true, MANUAL_TESTS=true
logfile
1101 cases, 0 failed, t: 808s
PASS :white_check_mark:

clang.debug.unity
logfile
1035 cases, 0 failed, t: 255s
PASS :white_check_mark:

clang.debug.unity, PARALLEL_TESTS=false
logfile
1035 cases, 0 failed, t: 497s
PASS :white_check_mark:

rpm
logfile
1034 cases, 0 failed, t: n/a
PASS :white_check_mark:

gcc.debug.unity
logfile
1035 cases, 0 failed, t: 251s
PASS :white_check_mark:

clang.debug.nounity
logfile
1033 cases, 0 failed, t: 645s
PASS :white_check_mark:

msvc.debug, PROJECT_NAME=rippled_classic
logfile
1032 cases, 0 failed, t: 1242s
PASS :white_check_mark:

clang.release.unity -Dassert=true
logfile
1034 cases, 0 failed, t: 341s
PASS :white_check_mark:

gcc.debug.nounity
logfile
1033 cases, 0 failed, t: 660s
PASS :white_check_mark:

msvc.release
logfile
1031 cases, 0 failed, t: 519s
PASS :white_check_mark:

gcc.release.unity -Dassert=true
logfile
1034 cases, 0 failed, t: 359s
PASS :white_check_mark:

gcc.debug.unity -Dstatic=true
logfile
1035 cases, 0 failed, t: 255s
PASS :white_check_mark:

Codecov Report

Merging #2631 into develop will decrease coverage by <.01%.
The diff coverage is 68.75%.

@@             Coverage Diff             @@
##           develop    #2631      +/-   ##
===========================================
- Coverage    70.83%   70.82%   -0.01%
===========================================
  Files          698      699       +1
  Lines        54367    54370       +3
===========================================
- Hits         38511    38508       -3
- Misses       15856    15862       +6

Impacted Files
Coverage Δ

src/ripple/net/HTTPClient.h
100% <ø> (ø)
:arrow_up:

src/ripple/nodestore/backend/NuDBFactory.cpp
70.12% <ø> (ø)
:arrow_up:

src/ripple/basics/qalloc.h
96.73% <ø> (ø)
:arrow_up:

src/ripple/nodestore/backend/RocksDBFactory.cpp
56.98% <0%> (ø)
:arrow_up:

...c/ripple/nodestore/backend/RocksDBQuickFactory.cpp
7.97% <0%> (ø)
:arrow_up:

src/ripple/basics/literals.h
100% <100%> (ø)

src/ripple/net/impl/RPCCall.cpp
61.59% <100%> (ø)
:arrow_up:

src/ripple/core/Coro.ipp
100% <100%> (ø)
:arrow_up:

src/ripple/core/impl/SociDB.cpp
64.34% <100%> (ø)
:arrow_up:

src/ripple/crypto/impl/csprng.cpp
94.11% <100%> (ø)
:arrow_up:

... and 4 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 381a1b9...edc836a. Read the comment docs.

Thank you for your submission. It will be reviewed soon and submitted for processing in CI.

@MarkusTeufelberger valid point as we use a power of 2 (1024) rather than 1000. These are technically mebibytes then.  As for the naming of all lowercase, I can see that concern as well.
I don't have strong opinions on the casing/spelling of these UDLs, so I'm happy to rename to something everyone agrees on. What are your thoughts, @HowardHinnant @seelabs?

This PR allows us to replace code like: maxBytes = 4*1024 with maxBytes = 4_kb. Here are the issues I'm thinking about:

The type return by operator"" is unsigned long long. This changes the types of some expressions and we need to audit the type change (or cast to the original type).

I think of user defined literals as a way to easily a specific type, not a specific quantity. I.e. "300"s creates a std::string and 300s creates a chorno::duration. 4_kb creates an unsigned long long, which seems like a different usage.

Anytime we create a shallow abstraction like operator""_kb we have to weigh how often it'll be used and the clarity of the use. The concern is that a handful of uses means most developers won't be familiar with the abstraction, and they'll end up jumping to the definition of the abstraction anyway. I.e. everyone know what maxBytes = 4*1024; means. If we write that as maxBytes = 4_kb I end up looking up what _kb means and I'd rather it was written inline. I know you're aware of this as well.

I do like the maxBytes = 4_kb form. I wanted to post this here to both solicit other opinions and to explain why I didn't just give this a quick thumbs up. I need to think though these issues myself first.

@HowardHinnant On my system the following compiles without warning:
    {
        using namespace ripple;
        auto const i = -512_mb; (void) i;
        auto const j = -1*512_mb; (void) j;
        std::cout << "i: " << i << '\n';
        std::cout << "j: " << j << '\n';
        exit (0);
    }

And outputs:
i:<PHONE_NUMBER>3172680704
j:<PHONE_NUMBER>3172680704

I do think we need to audit the code with an eye to the type change if we take this change. Of course, a warning would be much better because it would prevent future misuses (I think we disable the signed/unsigned warnings, but I haven't dug into it).

What do you think about using a template function instead: template<class T> T megabytes(T){...}? It resolves both the type change to unsigned long long and the issue that this is used to specify a quanity and not a new type.
So: replace maxBytes = 4*1024; with maxBytes = kilobytes(4);.

My personal opinion is that this doesn’t really help elucidate the code. Perhaps it’s because I’m just not used to mentally parsing user-defined literals just yet, but between the novelty of UDLs (I know about the <chrono> stuff) and the awkward _ prefix, I just see this as marginally detrimental. YMMV.
I do think we should look at this with a critical eye and decide whether, in the long term, it’s going to help the codebase.
Again, this is purely my personal opinion and I’m not speaking ex cathedra.

@seelabs I share your same concerns in your list of three items.

The return type of operator"" is unsigned long long. This changes the types of some expressions and we need to audit the type change (or cast to the original type).

Agreed. I thought we would have signed-conversion warnings on that would catch these subtle type issues and I would get flagged. As @HowardHinnant pointed out, neither one of us had build errors on OS X. But, we explicitly say -Wno-sign-compare in our builds (https://github.com/JoeLoser/rippled/blob/filesize_literals/Builds/CMake/CMakeFuncs.cmake#L657), so we would have to properly audit individual usages in this PR if we choose to keep pursuing it.
As a separate effort and PR, I think it would be good to fix all the culprit call sites such that we do need to ignore sign comparison warnings. As you know, they can lead to tricky, unexpected bugs.

I think of user defined literals as a way to easily specify a type, not a specific quantity. I.e. "300"s creates a std::string and 300s creates a chorno::duration. 4_kb creates an unsigned long long, which seems like a different usage.

From my perspective, I think of all of those UDLs as creating values.  Now, whether those values form actual units (in the Boost.Units sense) and whether they are strong named types are what form the differences. In the chrono case, you have strong types and can form a taxonomy to do conversions on with duration. In the string case, not so much (string literal _s is just creating an unnamed value of type std::string) which I see as the similar thing in this case. Our return type is a weak type just like in the _s case.

@seelabs I'd be fine with going down a function template approach to name these quantities; good recommendation! It's slightly more characters than the existing code, though it does hide some of the details of the calculations and makes intent explicit at the call sites.
@HowardHinnant @nbougalis are either of you opposed to going down a function template approach for this problem?
In a separate PR, when I get some time, I can dig into the sign comparison warnings and see how bad they are in cardinality.

I am not opposed to a function template approach.  I also don't see an urgent need for it.

Thank you for your submission. It will be reviewed soon and submitted for processing in CI.

I'm still not convinced to use standardized SI prefixes for powers of 2 that are close to these numbers.
Ten kilobytes != ten kibibytes. instead of having these numbers explicitly stated, they now need to be looked up if they actually mean what they say (in the case of this PR they are simply the wrong unit).
It is a good rule of thumb to equate these numbers just like there are about 2 pounds per kg, 3 feet to a meter or 4 liters in a gallon. If they are used in code though I would expect megabytes(2.75) to be exactly 2.75 million bytes for example. This PR means these numbers would be about 5% off and I would guess that without a calculator it would take you a while to even know the exact number that this function would return. Even knowing immediately if that number is an integer value or if it would be rounded up/down takes a few more thought cycles.
In short: Please rename the functions to use a https://en.wikipedia.org/wiki/Binary_prefix

Merged as cd1c5a30ddacc140cde64c4ca4d4deaa7f345595

Sorry @MarkusTeufelberger: I didn't see your message until after I had merged this as part of 1.2.0-b2. Mea culpa. I'll make it a point of doing a final pass across all PRs to ensure there are no last-minute objections.
Also, in the future, if you could post a review that's marked as "Changes Requested" it would help, as it shows up with a red X instead of a pleasant green checkmark.

Yeah, I wasn't sure if external reviews even help and it was more a comment that this complicates things more than they need to by using imprecise language. Overall I still think it is a net positive compared to "naked" numbers (maybe with a comment attached behind/above them).

The definitely help and we do appreciate them! Keep'em coming!


Where is the es6 version of bookshelf？ and now the bookshelf code is too cluttered

Where is the es6 version of bookshelf？ and now the bookshelf code is too cluttered

It's here.
You're welcome to contribute PRs that help unclutter the code base. For further info check out #1600 and #1612.


HardwareAssetAdmin: search serial number and hardware model name.

This change is

Coverage remained the same at 50.332% when pulling 37b1d161befb4b630b2085b871d9d17f622827d6 on ropable:master into 7c8195a75365536f5e6695c57b272d78c179eb79 on parksandwildlife:master.


Add a type mapping for Oracle BINARY_DOUBLE and BINARY_FLOAT

For performance reasons, a customer would like to use BINARY_DOUBLE as a type mapping. This can be drastically faster than using NUMBER or DOUBLE PRECISION, see
https://blog.jooq.org/2019/09/11/oracles-binary_double-can-be-much-faster-than-number/
Is that something worth adding to hibernate-types?

Sounds like a good idea. It should not be difficult to add.

This commit adds several test cases demonstrating that BINARY_DOUBLE and BINARY_FLOAT are already supported by Hibernate, so no custom Type needs to be added.

The query generated doesn't have the 'd' at the end of the value when handling BINARY_DOUBLE which limits the range of usable values to the ones of ... BINARY_FLOAT, outside you get an ORA-01426.
Example: 1.79769313486231E125 will work but 1.79769313486231E126 fails.

If you  can provide a test case and a fix for that, I'll review it.

Just add one in your existing tests with values like 1.79769313486231E126…

Le 5 juin 2024 à 19:12, Vlad Mihalcea @.***> a écrit :
If you can provide a test case and a fix for that, I'll review it.
—
Reply to this email directly, view it on GitHub https://github.com/vladmihalcea/hypersistence-utils/issues/160#issuecomment-2150561802, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABHSXGTAGCNRYJFHCYKBCTZF5BHZAVCNFSM4J53UFAKU5DIOJSWCZC7NNSXTN2JONZXKZKDN5WW2ZLOOQ5TEMJVGA2TMMJYGAZA.
You are receiving this because you commented.

Looking forward to your Pull Request with the fix.


Rename title of the tab 'All' to 'Global' in environment variables view

Closes #2188

That was just too easy...


[MSAA] Artifacts in cardioid with 8xMSAA and 16xMSAA

The msaa8 and msaa16 AA config's introduced in #377 render with artifacts:

From @raphlinus: "I think the artifacts you're seeing are because of only 4 bits for winding number accumulation, and that test case is a good one for slamming lots of winding number increments into a small area. I'm not 100% sure though. An obvious way to validate that would be to try an 8 bit accumulator."

The swar8 branch has 8 bit per sample winding number accumulation in msaa8 mode, and resolves these artifacts, confirming that it was an overflow.
There is a performance degradation (not carefully measured, but enough to be significant). The plan is to detect the number of path segments in the slice: if <= 7, then use 4 bit accumulation because overflow can't happen, otherwise 8.


Groq AI support

https://console.groq.com/docs/openai

+1

You could use Portkey-AI/gateway to solve it. More details you could find from this release.


5.2 beta 2 : esp_http_client bug is back (IDFGH-12032)

Answers checklist.

[X] I have read the documentation ESP-IDF Programming Guide and the issue is not addressed there.
[X] I have updated my IDF branch (master or release) to the latest version and checked that the issue is present there.
[X] I have searched the issue tracker for a similar issue and not found a similar issue.

General issue report
There used to be a bug in esp_http_client which caused it to cut headers in two if they would arrive in separate chunks. So the application would receive only piece of the actual value of a variable. It's possible to work around it by playing with buffer size, but not reliably (depends on what you get back, which happens to be one of the things an ACME server deliberately plays with).
Example of what this does to my example program :
% fgrep -i -a setNonce typescript.staging.19 E (17:37:53.970) Acme: setNonce(7K8fIQp7225wX2yeYmb_1wC-0e1FWJxgadVwbWzfdSN-3TDtGjc) E (17:37:56.129) Acme: setNonce(VlC4gE5VhyEbtxX239pBytgxaZB6Pclfh_8kaicsZyesbe_XyFo) E (17:37:58.014) Acme: setNonce(7K8fIQp7lMijNXvbVKHxaj) E (17:37:59.819) Acme: setNonce(7K8fIQp7V7cGKGfODp5cdTXp-Ic4x5YWunkWff18K9p764sNeMQ) E (17:38:11.888) Acme: setNonce(VlC4gE5VoPaXOlQ7a3-ArQg9QaaZUrQWFFoMh-IUGpiMaldAkzU) E (17:38:23.974) Acme: setNonce(7K8fIQp776wlNTWzZ9ZJy8ooF-lrG9ZyNEjCflz95kElhCcmxxM) E (17:38:25.944) Acme: setNonce(VlC4gE5VXhiwCEIaO8PIROJe) E (17:38:38.189) Acme: setNonce(VlC4gE5V02NMASDCTacASOT30XIjed6bRxlELEpSqtrGhMP9-hQ) E (17:38:50.568) Acme: setNonce(7K8fIQp7Z8ZlprcglZRqd0qVOZlqLp1ZucNjYcOr4jS-JRgYPr8)
Can be demonstrated by the "standalone" example in my acmeclient library.
See<EMAIL_ADDRESS>or https://components.espressif.com/components/dannybackx/acmeclient .
Note that my code appears to recover from it, but that is probably not so for other applications.
See also https://github.com/espressif/esp-idf/issues/7157 .

@hmalpani Any update?

@dannybackx
Thanks for reporting the issue. Apologies for the delayed response. I am unable to reproduce the issue. Can you share a minimal code which can be used to reproduce this? It will be helpful in debugging the issue. Also, can you try reverting this commit and check if it helps resolve the issue: 04ac8e43dbaf37e42452fef034606ae3f04e644b. Although I am not sure if it is the cause of the issue. Please let me know the observations.

Reproducing this is actually not very hard.
I currently have a workaround in my code like this :
// Work around esp-idf esp_http_client bug that reappeared
httpc.buffer_size = 2048;
This works for now until I get bigger results back from the server.
But in this, there also lies the way to reproduce. So use a simplistic client example, and add a line liek the one above but with a ridiculously low buffer size (e.g. 25).
When querying e.g. http://www.google.com I currently get (partial output from curl -v) :
< Content-Type: text/html; charset=ISO-8859-1
< Content-Security-Policy-Report-Only: object-src 'none';base-uri 'self';script-src 'nonce-F6TW0J50XtIUapNJhjVLlQ' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/other-hp
You should observe that with a low buffer size, these lines are not treated well by the current source, because it will break up the long lines so you get invalid (partial) content instead of the full headers.

Hello @dannybackx
I have verified that reverting the commit: 04ac8e43dbaf37e42452fef034606ae3f04e644b fix the issue. I will create an internal MR to fix this issue. Until then you can try reverting the commit. Hope it helps.

@hmalpani Could you share what issue was fixed by commit 04ac8e4 ?

@hmalpani
Still needs fix for v5.1, v5.0, v4.4.

@hmalpani v5.1 still needs fix, the backport fix is so slow.

Hello @AxelLin
We have backported the fix to v5.1. It will be available soon on GitHub.


remove lock file if exists

Signed-off-by: brmclare<EMAIL_ADDRESS>

@CyanDevs
I am seeing

config/jenkins/configuration/jobs/test-infra/openenclave/Win2019DebugSnmallocE2E.yml
config/jenkins/configuration/jobs/test-infra/openenclave/Win2019RelSnmalloc.yml
config/jenkins/configuration/jobs/test-infra/openenclave/Win2019RelSnmallocE2E.yml
config/jenkins/configuration/jobs/test-infra/openenclave/Win2019Release.yml
config/jenkins/configuration/jobs/test-infra/openenclave/ping.yml
config/jenkins/configuration/jobs/test-infra/public-talks/ping.yml
+ [[ -d /var/jenkins_home/configuration_old ]]
+ [[ -d /var/jenkins_home/configuration ]]
+ git -C /var/jenkins_home/test-infra/ clean -dfx
+ git -C /var/jenkins_home/test-infra/ reset --hard origin/master
fatal: Unable to create '/var/jenkins_home/test-infra/.git/index.lock': File exists.

Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.`

And  believe this to be the solution, thoughts?


Reapply "Fix using comma as decimal separator"

This reverts commit 98c6051bd99fc73ce6daf65710bd5a509f847dc1.

@Protiguous In the future, please allow me to be the one to merge contributions, unless I ask you to or I'm MIA for a month or something.
I would like to be the gatekeeper of this project.
For the last several contributions I have not gotten to scrutinize the code before it got merged in.
So to ensure I get a chance to review the pull requests, please allow me to be the one to merge them into the main branch.

@AdamWhiteHat, right now only https://github.com/AdamWhiteHat/BigDecimal/issues/36 was merged.
When I've created the new branch i did a mistake and created the branch based on my previous changes, that's why I thought I should revert these changes in the new branch, but it seems I shouldn't. So, I ve reapplied the reverted commit in this PR

Yes, I see that. I will approve your revert of your revert.
I was just trying to communicate with Protiguous, but I see he has an email on his profile page, so Ill just email him instead.
Question: What version of visual studio are you running, and why does it seemingly not respect the .editorconfig?
For example, in the file /TestBigDecimal/TestBigDecimalCritical.cs
For all the methods, the curly braces are not on a new line:
public void TestConstructor1() {
The presence of the the .editorconfig in the project's root directory is supposed to enforce the curly braces to be on a new line:
public void TestConstructor1()
{

Do you have this option checked in the visual studio options? Please ensure that you do.

Its not a huge deal, its just annoying is all. It results in a lot of single line changes that show up in the diff that are not important, but must be sifted through when reviewing the code.

Never mind, your not responsible for inconsistent code style between the library code files and the tests, Protiguous is.
And as far as I can tell, your IDE was following the .editorconfig files... the ones Protiguous checked in...
Sorry to accuse you like that.

No problem, thank you for this library. When it will be available on github?
About formatting - I've already asked about it in discussion https://github.com/AdamWhiteHat/BigDecimal/discussions/38

I am totally fine with you gatekeeping the merges into main. :)
I was not aware of any code style changes that were not respecting .editorconfig?
My Visual Studio has the “Follow project coding conventions” clicked on.


PSK mandatory or optional

Our understanding is that it is/will be a TC discussion point to determine whether support for RadSec pre-shared keys should stay optional or be made mandatory. Formal resolution on this will be needed before it can be determined how to handle the RadSec requirements surrounding PSK functionality.

Hold on this. RADIUS is outdated and the TC is considering replacing with DIAMETER, which includes transport protections. The TC also plans additional discussion regarding whether RADIUS/DIAMETER is required, or to allow other authentication server messaging approaches (TBD) to generalize the use of this PP by a more general class of products (such as PAM).
The use of PSK alone is not recommended for traffic protection. Currently support for certificate-based authentication (Cyber) is mandatory in the PP, and while we are suggesting OTP and PSK options to the TC in order to support combined authentication mechanisms defined in NIST SP 800-63-3 Part B (specifically, Cyber+PW, Cyber+OTP, Cyber+OTP+PW), it is not the intention to relax the requirement for Certificate-based support.

Believe this has been resolved because RadSec is selection-based in the latest draft, as are pre-shared keys. Closing.


Add volatile keyword to Datasource singleton instance

The volatile keyword now ensures that multiple threads handle the singleton instance correctly
https://en.wikipedia.org/wiki/Double-checked_locking#cite_ref-Boehm2005_5-0

Coverage remained the same at 89.487% when pulling ef35fe080d44e9b8885dcdcb14aa385124d31a6d on rpajaziti:patch-1 into 0f741a86a637518bc9f31aeb23df681a7a6281b5 on durimkryeziu:master.


Opt out of Svg... prefix in component names

Looks like in #190 we're adding a prefix to all icons. I'd like to remove that in my project for less overhead of having to remember to prefix it every time we're using an icon. I want the name of the component to be the name of the SVG and if we're using an invalid name, it's on us to change the name of the SVG. How can I do that?

hi @gregberge, this is really old issue but i have problem with Svg prefix. Sonar (static code analyzer) see as code smell problem. I can fix with change svg file but this not very convenient fix.

Hello @ergenekonyigit, you should make a PR to Sonar. It is not a code smell.

You can use a custom template to opt out of the "Svg" prefix. I would recommend using the following template.
const template = (variables, { tpl }) => {   return tpl
${variables.imports};
${variables.interfaces};
export default function ${
variables.componentName.startsWith("Svg")
? variables.componentName.slice(3)
: variables.componentName
}(${variables.props}) {
return ${variables.jsx};
}
`;
};
module.exports = template;
`

You can use a custom template to opt out of the "Svg" prefix. I would recommend using the following template.
 const template = (variables, { tpl }) => { return tpl
${variables.imports};
${variables.interfaces};
export default function ${
variables.componentName.startsWith("Svg")
? variables.componentName.slice(3)
: variables.componentName
}(${variables.props}) {
return ${variables.jsx};
}
`;
};
module.exports = template;
`

You can use a custom template to opt out of the "Svg" prefix. I would recommend using the following template.
const template = (variables, { tpl }) => { return tpl`
${variables.imports};

${variables.interfaces};

export default function ${
variables.componentName.startsWith("Svg")
? variables.componentName.slice(3)
: variables.componentName
}(${variables.props}) {
return ${variables.jsx};
}
`;
};

module.exports = template;


Restrict Id names in OTS definitions

Right now, a name for an Id field of, e.g., a Node can be {{{{ or {PI()} which will cause major problems later when a reference to this Id is made in, e.g., the definition of a Link. The current definition for any Id in the OTS XSD's is:
  <xsd:attribute name="Id" type="xsd:string" use="required" />

The same holds for a variable name that is used as an input name for an expression variable in a scenario.
We have to see what characters to include. I would like any variable to start with a letter, and avoid:

any type of brace in the name: braces are used in the expression editor to denote functions, so an Id like PI() would be very confusing;
any type of straight brackets: straight brackets are used to denote units, so an Id like [km/h] would be very confusing;
any type of curly braces: curly braces are used to denote variables and expressions, so an Id like {}}} would be very confusing and would lead immediately to parsing errors if used as a keyref;
spaces in the names; this can cause confusion when using the names in an expression;
special characters such as tabs, newlines, etc, which are all allowed right now;
zero-length strings for an Id, which are okay right now.

Definition of an IdType could be something like:
  <xsd:simpleType name="IdType">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="[A-Za-z][A-Za-z0-9_\-\.%!@#\^]+"></xsd:pattern>
    </xsd:restriction>
  </xsd:simpleType>

forcing the Id to start with a letter and have at least one character, and allowing for letters, digits and the special characters: _-.%!@#^. We could also allow *, &, :, ;, /, >, < and ?. We might not allow single and double quotes in a variable name.

Variable names in the scenario could have a restricted string type like the above, but start and end with { and }.

We could possible allow Ids to start with a number, or just be a number, so you can make id's 1, 2,, 3, etc. We have to see how strict we want to make the restriction. There is nothing wrong with a number as an Id, whereas an id like {{}} would cause real issues.

There is no technical reason to be very strict with Id's (although we may be more strict than technically required). Let's work out the example of dynamic link nodes. First we have two nodes with confusing but technically functioning Id's:
Node[1].Id=[km/h]
Node[2].Id=PI()
We define a link that will dynamically start from either node:
Link.StartNode={my_var}
For this an input parameter needs to be specified in two scenarios:
Scenario[1].InputParameterString.Id={my_var}
Scenario[1].InputParameterString.Value=[km/h]
Scenario[2].InputParameterString.Id={my_var}
Scenario[2].InputParameterString.Value={PI()}
The reason this works is that not all fields will be parsed as a type that will then evaluate an expression.

FieldXML typeParser typeRemark
Node.Idots:IdTypeStringString, so no expression is evaluated in the parser.
Link.StartNodeots:stringStringTypeWith expression. xsd:keyref checks whether this is a Node.Id or InputParameterString.Id.
Scenario.InputParameterString.Idots:InputParameterIdTypeStringInputParameterIdType forces { } but will be parsed as String; no expression is evaluated.
Scenario.InputParameterString.Valuexsd:StringStringThis value results from an expression. When used to ref to an Id it should obey IdType, but input parameters may be used for other purposes.

We can see that [km/h] and PI() will never be evaluated as an expression. They only result from an expression through being the value in an input variable of the expression.
The only real technical restriction is this that Id's should not be recognizable as an expression, i.e. not start with { and not end with }. This is due to a normal Id reference. A simple example shows this does not work:
Node.Id={PI()}
Link.StartNode={PI()} <-- oops, recognized as an expression while directly referring to a node
So therefore, no curly braces:
Node.Id=[km/h]
Link.StartNode=[km/h]

Still, to avoid confusion, I would be in favor of not allowing any sort of brackets. Numbers for Id's seem very logical and may be very helpful when parsing from an external network format. In understanding or communicating between formats/programs, having the same node Id's is helpful. The pattern would then become:
<xsd:pattern value="[A-Za-z0-9_\-\.%!@#\^*&:;\\/><?]+"></xsd:pattern>

Note that < is not allowed as that will not work in XML.

The characters to escape are, by the way, according to https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#cite_ref-semicolon_2-0, and https://www.ibm.com/docs/en/was-liberty/base?topic=SSEQTP_liberty/com.ibm.websphere.wlp.doc/ae/rwlp_xml_escape.htm:

Original character
Escaped character

"
"

'
'

<
<

>
>

&
&

I agree that the Id fields do not pose a problem, and we can allow almost anything, where starting and ending with curly braces is the only clash in the parsing.
What about the name of a scenario parameter that will be used as part of an expression that will be evaluated? Suppose I call such a scenario parameter FUN() (possibly defined with its curly braces as {FUN()} depending on whether you want to separate key/keyref parameters and numerical parameters), and I use an expression for a numerical entry: {2 * FUN()}. The evaluator will try to call function FUN()  and not use the value of the parameter with that name. It becomes even more clear when you use PI() as the scenario parameter name with a value of -1 in a scenario. How should the evaluator know whether to use your PI() value, or use the built-in PI() function?

Good point. We have to look at how the expression evaluator recognizes variables. Or more to the point, how it recognizes its demarcation. Based on org.djutils.eval.Eval.evalLhs() the first character needs to be such that Character.isLetter(char) holds. Based on org.djutils.eval.Eval.handleFunctionOrVariableOrNamedConstant() the variable name continues while Character.isLetterOrDigit(c) || '.' == c || '_' == c. This would bring the pattern down to:
  <xsd:simpleType name="InputParameterIdType">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="\{[A-Za-z][A-Za-z0-9_\.]*\}"></xsd:pattern>
    </xsd:restriction>
  </xsd:simpleType

Perhaps the expression evaluator could allow more, such as @ and #. Both as first character, and anywhere within the name. It could also allow _ as a first character. The first character can never be ., as a number is then recognized. If the expression evaluator allows more, we could also allow more. Note however that the following characters are also not allowed given their usage in org.djutils.eval.Eval.evalRhs(): ), ^, *, /, +, -, &, |, <, >, =, !, ?, : and ,. Lastly, ( is not allowed as it will be recognized as a function rather than a variable. If the expression evaluator will allow more, the full pattern would become:
  <xsd:simpleType name="InputParameterIdType">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="\{[A-Za-z_@#%][A-Za-z0-9_@#%\.]*\}"></xsd:pattern>
    </xsd:restriction>
  </xsd:simpleType

Agree. And indeed, when a variable name would be /k or val* it could not denote the difference between the '/' or '*' being part of the variable name or the formula. A variable with id a+b where also variables with id a and b exist, would be ambiguous, and should therefore not be allowed. For me, the above pattern works. A couple of challenging unit tests should check if no ambiguities remain. @OTSim can for sure think of a few!

Most Id attributes are now of ots:IdType, which prohibits the use of { and }.
The Id of input paramters are of type ots:InputParameterIdType with pattern \{[A-Za-z][A-Za-z0-9_\.]*\}.
The KeyValidator class of the editor no longer accepts all expressions.
The xsd:selector in all xsd:key are amended with |.//ots:DefaultInputParameters/ots:String, which means they may also refer to a String input parameter. This was done by replacing expression (<xsd:key name="[^"]+">\s*<xsd:selector xpath="[^"]+)("\s*\/>\s*<xsd:field xpath="@Id"\s*\/>) with $1|.//ots:DefaultInputParameters/ots:String$2.

Note that dynamically referring to an input parameter will only work for keys that are on the field Id, as that same field is also referred to in an input parameter.


RadioGroup labels that have elements get width set to 20px

A css selector that sets the width and height of everything but the label is getting applied label prop values that have child elements.
Repro example: https://codesandbox.io/s/palmetto-components-codesandbox-template-forked-koj1k
The first radio button label is set to a node (div), the second radio label is a string value.

 RadioGroup labels that have elements get width set to 20px


Python3 support

Support for python3 (only). Unfortunately this breaks python2 compatibility because of this single line (ord(x) vs. x):
pyhon2:
print '' + "".join(["'\\x%02x'," % ord(x) for x in bytes[start:start+MAX_SLICE]])

python3:
print('' + "".join(["'\\x%02x'," % x for x in bytes[start:start+MAX_SLICE]]))

@mattgodbolt is there any way to get this around so we can support both versions?

Progress

[x] Python 3 support
[x] Python 2 support
[x] Write to file directly
[x] Update CMake (Python version and script usage)
[x] Refactor gen_embedded.py

I'm sure this can be worked around - if we rephrase gen_embedded to be given an output filename perhaps (first parameter maybe?) then we can use regular file I/O instead of redirection output (which is icky anyway). I think python3 and python2 have broadly the same file I/O routines?

I think python3 and python2 have broadly the same file I/O routines?
I think so. Most of the compatibility issues come from the byte vs. string issue afaik.

This byte / string thing is really tricky … 😕
I'm still on it.

Thanks @offa -- let me know if you need a hand. To be honest I'd be happy to rewrite the generator program in C++ and just sidestep the python if it's causing that much trouble!

@mattgodbolt except the python2/3 byte incompatibility the script works fine. It's a easy to use and handy tool. The workaround is not nice, but it works with both versions now.
I have updated the script to write to file directly and take arguments via argparse. The latter improves the argument passing, provides help by default and is more flexible.
Generating the embedded content changed from …
./gen_embedded.py file1 file2 … > Embedded.cpp

to …
./gen_embedded.py -o Embedded.cpp -f file1 file2 …

(Already updated in the CMake code)
As I'm not a python expert so please let me know what needs to be changed or improved.

@mattgodbolt the PR is ready from my point. However, since it became a considerably change of the script, please let me know what you think.

Hi @offa Sorry it took so long to get back to you! I lost the notification in my swamped inbox. Looks great: thanks so much for doing this!


res.writeEarlyHints lock server response for 5 seconds

Description
I'm having a problem where the server takes 5 seconds to fully respond to the HTML, I thought this was due to an Apollo instance problem but it turns out the code below is the cause.
 if (res.writeEarlyHints) {
        res.writeEarlyHints({ link: earlyHints.map((e) => e.earlyHintLink) });
}

After removing this code the server responded in 301ms. This happened when I tested it in the production environment, locally I didn't feel anything.
when I use curl this HTML part to the top is responded quickly:
  <!-- ... -->
  </footer>
    <script>
      window.__APOLLO_STATE__={};
    </script>
    <script id="vike_pageContext" type="application/json">{"pageProps":"!undefined","routeParams":{},"abortReason":"!undefined","_urlRewrite":null,"_urlRedirect":"!undefined","abortStatusCode":"!undefined","_abortCall":"!undefined","_pageContextInitIsPassedToClient":"!undefined","_pageId":"/pages","data":"!undefined"}</script>

And stuck for a few seconds before the server could respond to this part:
  <script src="/assets/entries/entry-client-routing.7ZymZArp.js" type="module" async></script>
  <link rel="modulepreload" href="/assets/entries/pages.RnLKOcm3.js" as="script" type="text/javascript">
  <link rel="modulepreload" href="/assets/chunks/chunk-_jLpkPps.js" as="script" type="text/javascript">
  <link rel="modulepreload" href="/assets/chunks/chunk-hlDPvxQM.js" as="script" type="text/javascript">
  <!-- ... -->
</body>

Hm, that's surprising. If you apply this change:
- res.writeEarlyHints({ link: earlyHints.map((e) => e.earlyHintLink) });
+ console.log('link', { link: earlyHints.map((e) => e.earlyHintLink) });

What do you get and,
do you still notice the delay?

Closing but I'll re-open if it turns out to be Vike related. (I'm inclined to think it's an issue with your server, but let's see.)

this is the result:
[
  "</assets/static/onRenderClient.as-qL5fR.css>; rel=preload; as=style",
  "</assets/entries/entry-client-routing.JeQtc64K.js>; rel=modulepreload; as=script",
  "</assets/entries/pages.N1BoR3C-.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk-yehKyfPf.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk-hlDPvxQM.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk-tDvhWMUH.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk-j34KyF5w.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk-0CokXpuq.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk-bvcKXwEt.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk-ExQLDb0_.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk-CJ30i95j.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk--W6W-tbi.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk-ZyM0AsWE.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk-No6Bd6Ck.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk-ZBkmtNoT.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk-xz6E86XN.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk-Q2nSWfkk.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk-QDr74C2f.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk-7UmpWu7d.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk-_dkiVqDr.js>; rel=modulepreload; as=script",
  "</assets/chunks/chunk-q6Jm8506.js>; rel=modulepreload; as=script",
];

I don't see anything out of the ordinary. If you still notice a delay then I'll need a minimal reproduction. I'll re-open then.

I don't think it's a Vike problem, I suspect it's an HTTP/2 problem in Nginx. When I enable earlyHints Vike and HTTP/2, the site cannot be accessed at all returning the error ERR_HTTP2_PROTOCOL_ERROR in the browser.
The 5 second lockout issue occurred when I disabled HTTP/2 and enabled Vike's earlyHints.
Temporarily fixed by disabling Vike's earlyHints and enabling HTTP/2 to work, the site was able to respond quickly.
I'm still figuring out why Vike's earlyHints doesn't work with HTTP/2.
I found a good write up on medium that was having similar issues and using the old vike: https://medium.com/@imhamoro/have-you-ever-experienced-issues-with-early-hints-feat-http2-103-5667c6181ae5

Sure, if I don't share the HTTP/2 Nginx + EarlyHints solution then I'm using this solution:

Temporarily fixed by disabling Vike's earlyHints and enabling HTTP/2 to work, the site was able to respond quickly.

It would be nice to find the issue on Nginx's error tracker, so we can keep track of progress.

Not sure if related but we also heard in the past of an issue when using nginx together with HTML streaming: https://github.com/vikejs/vike/discussions/1316#discussioncomment-7793560

Not sure if related but we also heard in the past of an issue when using nginx together with HTML streaming: #1316 (reply in thread)

I'm not using streaming, using Apollo renderToStringWithData.
Also tried httpResponse.pipe(res), didn't solve the problem.
Have also tried switching all earlyLinks from modulepreload to preload, based on this comment http://disq.us/p/2qfff9z, no luck.
Still returns ERR_HTTP2_PROTOCOL_ERROR

I don't think it's a Vike problem, I suspect it's an HTTP/2 problem in Nginx. When I enable earlyHints Vike and HTTP/2, the site cannot be accessed at all returning the error ERR_HTTP2_PROTOCOL_ERROR in the browser.
The 5 second lockout issue occurred when I disabled HTTP/2 and enabled Vike's earlyHints.
Temporarily fixed by disabling Vike's earlyHints and enabling HTTP/2 to work, the site was able to respond quickly.
I'm still figuring out why Vike's earlyHints doesn't work with HTTP/2.
I found a good write up on medium that was having similar issues and using the old vike: https://medium.com/@imhamoro/have-you-ever-experienced-issues-with-early-hints-feat-http2-103-5667c6181ae5

I have the same issue on my end.
I noticed that without changing any configuration and using Node v16, it works.
But if I switch to Node v18 or v20, it gives me the same error as you.
And it only seems to be related to what you are mentioning with writeEarlyHints because I tested it also by commenting it and the site loads but causes other issues.
I tested the same code on Windows to make sure it wasn't a code problem, and it runs fine on my local machine on Node v18.
I checked for different configurations on nginx but didn't find a solution yet either.

Thanks for reporting back on this, I've added a link to your comment at https://vike.dev/nginx.


java.io.IOException: Unable to serialize hudson.FilePath$FileCallableWrapper

This happens when using Jenkins ver. 1.607.
Related Error messages:
ERROR: Failed to list package files: remote file operation failed
FATAL: No package found matching filter *.zip
java.io.IOException: No package found matching filter *.zip
at org.jenkinsci.plugins.graniteclient.DeployPackagesBuilder.selectPackages(DeployPackagesBuilder.java:338)
at org.jenkinsci.plugins.graniteclient.DeployPackagesBuilder.perform(DeployPackagesBuilder.java:259)
at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:761)
at hudson.model.Build$BuildExecution.build(Build.java:203)
at hudson.model.Build$BuildExecution.doRun(Build.java:160)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:536)
at hudson.model.Run.execute(Run.java:1741)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:98)
at hudson.model.Executor.run(Executor.java:374)

We are also seeing exactly this behaviour using the plugin on Jenkins v1.580.1 and it is a significant issue for us. Not sure if the workaround to execute the job on MASTER will work, but ideally we don't want to do that. We can probably use the Package Manager API directly too, but again, would prefer not to.
Any ETA on when there might be a fix ??

Also having the same issue, anyone resolved this yet?

You may be using the wrong package filter format. Try to wildcard the group and version. ::
See DefaultPackIdFilter#include

Hi David,
your email was apparently in response to something, but without context I cannot work out exactly what! I imagine it is related to this issue https://issues.jenkins-ci.org/browse/JENKINS-29938 but your suggestion would appear to be more relevant to someone who is working on the Doxygen plugin, as opposed to someone who simply has an issue with it.
Thanks for the tip, if I have the time I'll look
----Original message----
From<EMAIL_ADDRESS>Date : 28/10/2015 - 00:18 (GMTST)
To<EMAIL_ADDRESS>Cc<EMAIL_ADDRESS>Subject : Re: [crx-content-package-deployer] java.io.IOException: Unable to serialize hudson.FilePath$FileCallableWrapper (#3)
You may be using the wrong package filter format. Try to wildcard the group and version. ::
See DefaultPackIdFilter#include
—
Reply to this email directly or view it on GitHub.


USHIFT-1049 QE: regression case failure [sig-storage] STORAGE MicroShiftOnly-Author:rdeore-Critical-59660-[MicroShift] Volumes resize on-line

Which issue(s) this PR addresses:

Closes USHIFT-1049

/jira refresh

It looks like this is missing the updates to the list of assets.
Is the startup code already trying to load the manifests, or do we need changes there, too?

/test e2e-openshift-conformance-reduced
/test microshift-e2e

/retest
It would be good to have at least a smoke test for this before we merge it. Maybe that means we wait for the RF job to exist?

/retest-required

misfired a push that deleted the remote branch, reopening

/retest


Update cache invalidation commands

Pull Request Description

Followup to #8574
Just changing the wording because it implies different semantics. It's not the old UUIDs that are passed to invalidate the stale caches. We pass UUIDs of the current module (after the edit) to identify the old entries that are left in the cache and need to be cleaned up.
Important Notes

Checklist
Please ensure that the following checklist has been satisfied before submitting the PR:

[x] The documentation has been updated, if necessary.
[x] All code follows the
Scala,
Java,
and
Rust
style guides. In case you are using a language not listed above, follow the Rust style guide.
All code has been tested:

[x] Unit tests have been written where possible.

Merry Christmas! It is a small change and it appears to conflict with the changes in my upcoming PR so I'm merging it.


issue template i18n.

Fixes #1181
Changes proposed in this pull request:

Check mailbox configuration when submitting. Contributor Guide

hippo4j server? -> Hippo4j server?

done.


Option to sort photos into year/months directories.

Pretty simple, creates year/month directories based on the photo's asset date and puts the photo in them. I'm not sure what's a good name for this feature directory sort sounds a bit weird to me.
Also added handling for files with the same name -- if there's already a test.jpg it tries test 2.jpg and so on in the style of the Mac (there may be preferable ways).
Here's an example screenshot (both of the pictures were named test_img.jpg)

Thanks a lot, merged into a feature branch.
I will fix name_file function (it should return string), reformat the file with black and then merge to master.

Grouping photos is available in 1.1.0.


Issue 6/url slugging

#6
Modified how html file names and a tags are generated so that the url of the scrap and tag pages are slugged

close #6


[ RFP ] Theming Storefront UI

Question
The concept that I would like to see being widely used with Storefront UI is theming capability.
Let's say someone is willing to make custom SFUI theme to use components in his/her app.
Are in-component SCSS vars enough to fulfill this need OR we need to think about CSS as a theme so sfui css = default theme, custom css = other theme.
Idea 1
Current - via SCSS vars
Idea 2
Treating CSS as a theme while keeping HTML and JS as SFUI base.
In vue package we have everything needed for components to work, in shared package we have icons and styles so basically everything that could be consider a theme.
StorefrontUI should support theming capabilities which means you should be able to simply replace shared package as a source of assets and styles for your components.
To make this possible we need two things:

generic HTML (we will make sure our components HTML is generic before releasing beta)
good API for theming

In theory every component should look more or less like this
<script<EMAIL_ADDRESS><template lang="html"<EMAIL_ADDRESS><style lang="scss">
// theme css
</style>

But it requires people to actually create all those components. It would be much better if we could just override paths to default SCSS stylesheets. Even though the idea seems right I'm struggling with finding a proper way of handling this.
Having such theming mechanism may potentially make our in-component SCSS vars redundant. Maybe we are trying to fulfill too many use cases with them instead of providing a general solution.
Please let me know what do you think about this idea and if possible propose how such theming API should work. Also please lmk if you think we still need in-component SCSS vars with such system. Let's make it great together ;)

Second option sounds better, but I'm not sure if it works well with more complex components, even if we found a great API.
At the truth, I think SASS variables is good enough, I just think we should use more global variables, but it's also harder to style components with global variables then with internal ones, as we're doing now.
Maybe on next version we can do this migration from internals to globals (not only globals, but as possible).

Actually, even with current HTML templates and BEM classes, the entire theme may be replaced, It's laborious and not so obvious, but it's possible.
For simple components we can make it simpler, but for complex components I can't see the same yet.

Maybe we can just centralize the variables on just one file, as Bootstrap does here, and use less variables as possible.
Another idea (just a breath for now), maybe we can try to use same variables from Bootstrap 4 (just because it's the most popular CSS framework) as possible, then many people will be able to create a theme even before reading our documentation, just because they're already familiar with twbs, and many twbs themes would also work for sfui.

@leomp12 I agree that moving as global as possible is the way to go. In a long run I was thinking about replacing SCSS vars with CSS vars so we can make a WYSIWYG editor of this vars (with pages from examples folder on live preview) so people can adjust the vars and generate sfui.scss file. Going more global with vars will help with that a lot.

I'm not a big fan of Bootstrap vars though. Imho we should aim to have as fewer vars as possible while Bootstrap api is rather big. maybe we can use their approach as reference and try to minimize amount of variables?

@filrak CSS vars sounds really good, but it's not so powerful as SCSS yet, and not fully supported (correct me if I'm wrong).
So replacing SCSS vars with CSS vars entirely we're discarding IE support, for example.
Anyway we can research and discuss more about this.
I agree that Bootstrap uses many variables, sure we can try to minimize.

Ok so we are leaving it to SCSS vars at least for v1 :) thanks for comments!


adds support for nomic-embed-vision-v1.5 image embeddings model

nomic-embed-vision-v1.5 image embeddings that shares the same embedding space as nomic-embed-text-v1.5
Includes a test that outputs the similarity matrix between image and text. First column is blue cat, second is red cat:
green cat: [0.07165963, 0.067335285]
blue cat: [0.09806663, 0.055019084]
red cat: [0.06977239, 0.10732647]
yellow cat: [0.07075872, 0.071573]
dog: [0.035324473, 0.020524085]

Thanks @rozgo


Ja 0103

Q
A

Is bugfix?
no

New feature?
no

Breaks BC?
no

Tests pass?
--

Fixed issues
guide-ja updated

Thanks!


Call for Maintainer Help

To answer @clintonb's question in #245—perhaps it's already obvious—this project has not been high on my list lately, due to any number of factors (I don't write a lot of Python day-to-day at the moment, weekends have been nice outside lately, others).
To keep the project alive will need the support of more maintainers. I love to add two or three folks to GitHub and PyPI who

use Waffle in their day jobs / active projects;
have at least opened a PR, even if I haven't merged it;
want to see Waffle improve, hopefully beyond their immediate needs; and
care about making open source a welcoming and inclusive space.

If you'd like to help out (I suspect a couple of folks from #245, #243, #241, #226 and other recent issues might be willing, but don't want to assume) please comment here or email me, and let me know your PyPI username.

I am personally interested. My PyPI username is clintonb. I will check to see if @edx is interested in taking some form of ownership.

@clintonb Thanks! I thought you might be but didn't want to volunteer you. Invited to GH and added to PyPI.

@jsocol I'm also interested. My PyPI username is rlucioni. I work with @clintonb at @edx and have used Waffle for a few years.

@jsocol I am also interested. My PyPI username is ahsan-ul-haq. I work with @rlucioni and @clintonb at edX and also have been using Waffle for quite some time.

Hi,
Came her to ask about that so it's great to hear this @jsocol!
I was also going to suggest something else: if it's OK for you, you could transfer to repo to the Jazzband org, which would allow all Jazzband contributors to work on Waffle. (More about Jazzband here). They currently maintain big projects such as django-debug-toolbar, django-hosts, django-model-utils, pip-tools, django-pipeline...
But if there are already several people interested, then there's probably no need for that.
Thanks @jsocol and everyone else!

After a cursory glance at the docs for Jazzband, I like the idea. I'll take a closer look later today.

So far I have only seen/heard good things about Jazzband, and no negatives. I like the idea of a community of maintainers.
@jsocol one last request of you: Would you either make me an admin so that I can move the repo to @jazzband, or join the org and move it for us?

@jsocol would you also grant me admin access to the RTD repo?

I've added:

@clintonb to RTD
@rlucioni and @ahsan-ul-haq to PyPI and GH as maintainers.

I'm not yet ready to totally hand over ownership of this project to JazzBand or edX. I might be at some point, but not now.
I'm still open to adding more maintainers, so I'm going to leave this open for a while.

Thanks @jsocol.

Thanks @jsocol


Stop excluding tests from coverage

Back in March, I saw a tweet from Ned Batchelder linking to this:
https://nedbatchelder.com/blog/202008/you_should_include_your_tests_in_coverage.html
Since then, I've been considering including test suites in coverage. This PR adds the test suite to the coverage data. Consider this a proposal, because I'm not necessarily wedded to the idea we have to do this. But please read Ned's blog post, and consider if doing this affects your workflow in any way.
My own thoughts on the concerns Ned's post mentions:

It skews my results: This is part of why I don't do it on the OPS library (because we should be ashamed of low coverage! 80% is shame in a way 90% is not!) However, on packages that already have 100% coverage, there's nothing to skew -- so I'm in favor of including tests in coverage here.
It clutters the output: I mainly look at coverage via CodeCov's web interface now (or, locally, I restrict coverage output to a certain subset of files). In CodeCov, it's easy enough for the get past the whole tests/ directory either in sunburst or in file browser mode (the two I typically use).
I don't intend to run all the tests: I don't see this as an issue. When running coverage locally, it's easy enough for my to only look at coverage of the files I'm interested in. When working on a subpackage (e.g., the wizard) I check coverage locally by only running the tests for that package and only generating coverage for that package (pytest --cov=paths_cli/wizard paths_cli/tests/wizard/).

The only other issue I see is that I consider "non-test statements" to be a good figure for a minimal lines-of-code estimate. This number is trivial to get from the current setup. It's a little harder to get if test are included in coverage (need to click on the tests/ directory in the file browser view of  CodeCov, then at the bottom do the math on "Project totals - Folder totals"). I think Ned's arguments in favor including tests in coverage outweigh this minor inconvenience. It looks like this points out a few corners of code that are missing coverage, so it might be worth it. (There are also areas that probably can be ignored in coverage, like RuntimeError('pytest went crazy')).
If there's general support for this approach, I'll move forward with bringing this PR back up to 100% coverage.

If there's general support for this approach, I'll move forward with bringing this PR back up to 100% coverage.

I am in favor of coverage for the tests. It would not be the first time I copied a working test and forgot to change the name

Success! We now have 100% coverage, including all 3101 lines of tests.
This was very much a worthwhile exercise. There were pieces of functionality that were not being tested, generally due to tiny errors in the test suite (in one case, a parametrize used the same parameter twice; in another case, a test checked for a parameter string "named" instead of "name"). I'd been thinking about doing this based on the principle of the thing, but now I'd say it has a lot of value in practice, too.
Ready for review.


WandbLogger : use random name instead of project as default name

Proposed refactor
Use the wandb behavior (creating a random name) if no name is passed for the run or just let it None and wandb will deal with creating the name.
Motivation
I got 20 runs with all the same name which is not easy to navigate through
Pitch
Use a random name or name with a date or anything that would distinguish two runs.
Additional context
It's here: https://github.com/Lightning-AI/lightning/blob/9d02ad761c6c9360cba96e339d340c0cc2e572a8/src/pytorch_lightning/loggers/wandb.py#L300
cc @tchaton @rohitgr7 @awaelchli @morganmcg1 @borisdayma @scottire @manangoel99

Hi, this modification was introduced in this This modification was introduced in this PR, and I have also discussed the modification aspect of combining with third-party loggers, and currently PL logger is not perfect., and I have also discussed the modification aspect of combining with third-party loggers, and currently PL logger is not perfect.

Something must've changed in 1.7.0 though. The names of the runs in the wandb dashboard are now no longer randomly generated.

This small change has been deteriorating a simple unique identification method provided by WandB which helps distinguishing multiple runs. I understand there are bigger changes in which this fits, but I do wonder if this specific change is required? It's particularly helpful to get an automatic name generated.

Can confirm that after updating to PL 1.7 the former random wandb run names (e.g., “noble-snowball-37”) all have the same (project) name. Not useful (for me). Since 1.7 introduced other bugs/changes with wandb, I am back to 1.6.5

Hi! Engineer from W&B here. In PL 1.7 this change of using the project as a default run name instead of random wandb run names (I love those too) was added because using the default None value lead to a broken directiry structure for PL Logs. More discussion here.
This is because of the interface between the PL logger and WandbLogger requires some adjustment which we are looking into it.
For now, there is a workaround which is call wandb.init before your initialization of the WandbLogger. This will initialize a run with a random name and the WandbLogger will use this run automatically. For e.g.
import wandb
from pytorch_lightning.loggers import WandbLogger

wandb.init(project='my-project')
logger = WandbLogger(project='my-project')

I hope this helps.

Thank you, @manangoel99, that's good to know. For now, I stay with 1.6.5 mainly for this reason: https://github.com/Lightning-AI/lightning/issues/14021 but once it's resolved, and I adapt my code to work with some other minor changes this workaround will be useful (I had it this way anyway until recently, but I think wandb (?) issues a warning that a run is already existing. Does not hurt, just wanted to cleanse the console output.

We can try to revert it but keep in mind that there are efforts in standardizing things across loggers which may contradict certain logger specific usage patterns, so this back and forth of naming conventions will (I predict) always happen as people disagree in how folders and experiments should be named.
For example, in wandb, there is a difference between a version and a run name, whereas with the tensorboard logger the version is sort of the same concept as the run name.
The best we can do is make things configurable and hope we choose good defaults. Note that this is all not at all trivial. If we did this
wandb.init(project='my-project')
logger = WandbLogger(project='my-project')

directly inside the initialization of your wandb logger, it would create an experiment with a random name. But you will see N experiments created when running DDP, which is not at all desired.
I hope this adds some context, and I will see what can be done.

Hello @awaelchli,
For my use case, your solution (wandb.init first) is perfectly fine and I prefer doing that and letting the team work on the uniformity of PL rather than spending time on tiny problems that the user can fix with one easy line.
So we can close the issue if you want.
For more complex problems, (like DDP) I guess the user will have to make more small hacks (like only logging on rank 0 )) but it seems reasonable not to break the whole "PR loggers API".
Another solution is to use Faker with something like
from faker import Faker
fake = Faker()
name = fake.name().split()[0] + "_" + fake.color_name()

Which will give a name and a color (like John_DarkBlue) which mimics the wandb behaviour.
It's three lines but is still usable by many and is not too much overhead.
Hope it helps someone.
Have a great day

Thank you, @ierezell, for mentioning Faker, I did not know that. I think, I (we) cannot expect that a single API (in this case pytorch lightning) can cover all features/cases of all loggers it wants to integrate with. Neither are the features identical, nor the semantics/conventions/assumptions.
But… it would be nice to have transparency/documentation about what works with what in which ways. The combination of frameworks is (for me at least) often the big issue (in this case, on the API level, sometimes on more abstract levels). The websites/documentation of those frameworks sometimes suggest “with only 3 lines of code you can integrate x and y”. And yes, that's true, and I genuinely understand this from a marketing perspective in a changing and growing field, but if you really want to dig deeper, it's sometimes not as easy. Ok, enough whining, I guess it's a plea for some fine-print in the documentation / release notes about the conditions that apply when you intend to integrate two frameworks/packages/utils.

Hi, as the submitter of that PR, I'm sorry for the inconvenience, the intention was to fix the name property of WandbLogger.
The reason for setting wandb run_name to name or project is that now PL stores the log content as follows, so the experiment path will be filled with run folders.
experiment_name (run_name in wandb logger if user doesn't provide after fix)
├── version_id
│   └── checkpoints
└── version_id2

Personally, I think the ideal solution would be to adjust the log save path as commented in https://github.com/Lightning-AI/lightning/issues/12028#issuecomment-1088325894:
save_dir
└── experiment_name (PL logger own experiment_name, may same to wandb project name but not mandatory)
    ├── version_1 (PL logger own version_id, synchronize with run_name)
    └── version_2

Are there any potential problems I haven't thought about?

After reading a bit of https://github.com/Lightning-AI/lightning/issues/12028#issuecomment-1088325894 I know that I am not deep enough in all the details that I feel comfortable to give any advice or raise concerns. I did not have problems with directory structures in the past (besides my own) because I do not rely on the defaults, but rather define the structure myself. I even create my last-something links myself often to understand/control what's going on. E.g., until PL 1.6.5 I had a “last-checkpoint.ckpt” in a directory and I used this to refer to the last experiment in a subsequent program. Now, with PL 1.7, it appears to me that this link gets a v1 suffix (which IS in the release notes). Which might lead to me doing a “very last to last link” ;-) I understand the reasoning behind it, but it also tells me that it is hard to provide a fitting solution for everyone / every use case. In the end, I am happy that I have access to those solutions.

Hi
Can you have a look at #14145 and try it with your projects please.
It is the best I could come up with for now.
Alternatively, I also tried to generate a run name myself. I couldn't find anything in the public wandb API, closest I found was
wandb.apis.util.generate_id but it is for ids and not for human comfortable run names.

Alternatively, I also tried to generate a run name myself. I couldn't find anything in the public wandb API,

Is this what you're looking for? https://docs.wandb.ai/guides/track/launch#can-i-just-set-the-run-name-to-the-run-id
It shows that the run name can be set/modified using:
import wandb
wandb.init()
wandb.run.name = something
wandb.run.save()

No, @kotchin, I was looking for a way to do it offline. It's not possible for us to create a Run at the time of initialization there.

@awaelchli I think #14145 looks really cool and seems like a simple elegant solution. I'm testing it on my end.
I think it is really great for the user experience!
Thanks for jumping on this

Since this affects a couple of people, I would appreciate if some of you could run the logger in your script and let me know if you are pleased with it. Please take note of the folder structure and the logging in the wandb UI. I will of course add a test but I'm looking for a confirmation of expected behavior. @kotchin @hogru @ierezell @kabouzeid
Appreciate anyone who finds the time.
You can check out the branch bugfix/wandb on this repo or pip install from my branch directly:
pip install git+https://github.com/Lightning-AI/lightning@bugfix/wandb

Thank you

I think it makes more sense to leave the run name out of the folder structure. The run name can be changed later from the wandb UI, which I often do.
Instead of this:
this
  helpful-puddle-4
    3hkpkuej
      checkpoints
        abc.ckpt

it should be this (which is also the old behavior):
this
  3hkpkuej
    checkpoints
      abc.ckpt

That's problematic. In Lightning, the place where trainer saves the checkpoints is determined like so:
os.path.join(logger.save_dir, str(logger.name), logger.version, "checkpoints")
On master:

save_dir = cwd
name = , when name is not specified
version = 3hkpkuej

On my branch:

save_dir = cwd/
name = helpful-puddle-4
version = 3hkpkuej

If we wanted to implement what you are saying, we would have to define logger.name as something that does NOT represent the name you see in the UI. Is this appropriate? It would also not represent the same as the "name" parameter you pass into the WandbLogger.

pip install git+https://github.com/Lightning-AI/lightning@bugfix/wandb
Thank you

Thanks for the update. Here's my feedback (using LightningCLI only):
What worked:

The automatic 2-words+exp-number is back, no need to run wandb.init() which is solving this issue, thank you!
Additionally (bonus?) the wandb directory is now also placed in the log_dir which is great as it's not common to all projects anymore, which I find is an improvement.

What doesn't work:

the wandb directory created within the log_dir yields the follow error:

wandb: Currently logged in as: WANDBUSER. Use `wandb login --relogin` to force relogin
wandb: WARNING Path log_dir/wandb/ wasn't writable, using system temp directory.
wandb: WARNING Path log_dir/wandb/ wasn't writable, using system temp directory
wandb: Tracking run with wandb version 0.13.1
wandb: Run data is saved locally in /tmp/1230112.1.q_very_short_gpu/wandb/run-20220812_170737-3bsppmq6

so in fact this new wandb dir is not actually used/usable, despite having been correctly created. These are the folder's properties (don't know if it's of interest or if it helps):
drwxr-sr-x 2 username usergroup 4096 Aug 12 17:08 wandb
Additionally, the directory the run data was allegedly saved in doesn't seem to exist? Not sure what happened there.
The end result of the log_dir after my experiment finished:
log_dir/
├── config.yaml
├── pretty-pond-1
│   └── 3bsppmq6
│       └── checkpoints
│           └── epoch=0-step=549.ckpt
└── wandb

(This was not the scope of this PR, but I'd just like to link back to this issue https://github.com/Lightning-AI/lightning/issues/14162 which would also need to be addressed and is still applicable to this PR).

@kotchin We released this fix in the latest version 1.7.2
We currently don't have control over where the wandb directory gets stored. We just let wandb do its default behavior.
The LightningCLI config file not being stored to the experiment folder is a conflict we can solve in the future when we have #14188.


Program will say it's open in task manager but won't show up on screen

When i go to open up skin mixer it will show in my task manager that it's running, but won't open up on the screen. I have tried uninstalling and reinstalling but it doesn't work.

Logs may help a lot, if you can find and upload them here. They should be found in %localappdata%/osu-skin-mixer/Logs or C:/Users/(your name)/AppData/Local/osu-skin-mixer/Logs (of the top of my head, they may be in roaming)
If you are unable to find the log file, or it doesn't exist, try install a previous release. If that doesn't work, your graphics card/drivers may be too old.


Adding support for defining desired sfr pars to setup in PstFromFlopyModel

Can now pass a list of desired sfr pars to the sfr_pars argument in helper PstFromFlopyModel().
Usefull if you don't need all of the pars to be setup.
Updating testing to test for various scenarios of lists being passed. Raising many warnings if pars are asked for that dont exist in the sfr.

Coverage increased (+0.09%) to 81.421% when pulling e126d0b3e43d14805443b9418f12c2ef0d89efc9 on briochh:develop into 51c96d601d0c5b39bbde44add6f4f59e1baeaa3b on jtwhite79:develop.

Thanks B - Appveyor is failing intermittently because the max time for open source (free) CI is 1 hr and we right around that time limit currently.   Lets think about if we want a subset of tests to run on Appveyor (prob get away with just the full meal deal tests for now...)

erggg, thats frustraiting. Is there a lot more going on with appveyor than travis for it to take twice as long to complete? Subsetting tests makes me a little nervous!

Not sure why the tests are so much slower on appveyor...makes me nervous too, esp give  the recent os discrepancies we saw with pandas

Pandas discrepancies?  Hmm.  That's strange.


Support custom CometBFT indexing options

Is your feature request related to a problem? Please describe.
For use cases like a blocker explorer, we want to configure CometBFT to index events via postgres. Our config template contains appropriate lines:
https://github.com/penumbra-zone/penumbra/blob/7626552c93544e1143228162db27e68dcdd706b4/testnets/cometbft_config_template.toml#L459-L463
Unfortunately, trying to modify those lines via tendermint-config throws an error, because only the kv and null indexer types are supported. As a workaround, one can just sed the necessary lines in place, but that's gnarly, since a multi-line replacement is required.
Ideally we'd support something like pd testnet join --cometbft-indexer psql --cometbft-psql-conn <URL>. To do so, we must either 1) get upstream tendermint-config to support the psql indexer type; or 2) create a wrapper struct for the cometbft config in our code, store the modified options, and edit the generated TOML on the fly.
As we work more with the block explorer, we'll develop opinions on how these options should work. For now, sed it is.

This is distinct but related to the possibility of setting custom indexer filters in the pd application itself; internally we support regex filtering but this is not exposed in any config.


java.lang.IllegalStateException: Future was expected to be done

Version
Media3 1.2.0
More version details
Using a thread looper rather than main thread in the custom player, it got crashed.
Then delay few milliseconds at the end of service onCreate, it rarely crashed. But this is not a solution.
Is it an intented behavior or I mis-used the threading? I don't want player run on main thread, because it blocks UI sometimes.
Devices that reproduce the issue
Pixel 4 XL (Android 13)
Devices that do not reproduce the issue
No response
Reproducible in the demo app?
Not tested
Reproduction steps

Using the code

class AudioPlaybackService : MediaLibraryService() {
    private var mediaSession: MediaLibrarySession? = null

    private val thread: HandlerThread = HandlerThread("AudioPlaybackService").apply { start() }

    override fun getMainLooper(): Looper {
        return thread.looper
    }

    override fun onCreate() {
        super.onCreate()
        val player = AudioPlayer(mainLooper) // A custom Player
        mediaSession = MediaLibrarySession.Builder(this, player, callback)
    }
}

Run the app and see crash

Expected result
It won't crash at starup
Actual result
java.lang.IllegalStateException: Future was expected to be done: androidx.media3.session.MediaControllerHolder@7887bc2[status=PENDING]
                                                                                at com.google.common.base.Preconditions.checkState(Preconditions.java:590)
	at com.google.common.base.Preconditions.checkState(Preconditions.java:590)
	at com.google.common.util.concurrent.Futures.getDone(Futures.java:1147)
	at androidx.media3.session.MediaNotificationManager.getConnectedControllerForSession(MediaNotificationManager.java:269)
	at androidx.media3.session.MediaNotificationManager.shouldRunInForeground(MediaNotificationManager.java:192)
	at androidx.media3.session.MediaSessionService.onUpdateNotificationInternal(MediaSessionService.java:565)
	at androidx.media3.session.MediaSessionService$MediaSessionListener.onNotificationRefreshRequired(MediaSessionService.java:624)
	at androidx.media3.session.MediaSessionImpl.lambda$onNotificationRefreshRequired$12$androidx-media3-session-MediaSessionImpl(MediaSessionImpl.java:797)
	at androidx.media3.session.MediaSessionImpl$$ExternalSyntheticLambda10.run(D8$$SyntheticClass:0)
	at android.os.Handler.handleCallback(Handler.java:942)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loopOnce(Looper.java:201)
	at android.os.Looper.loop(Looper.java:288)
	at android.app.ActivityThread.main(ActivityThread.java:7924)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

Media
None
Bug Report

[ ] You will email the zip file produced by adb bugreport to<EMAIL_ADDRESS>after filing this issue.

class AudioPlayer(private val service: AudioPlaybackService) : SimpleBasePlayer(service.mainLooper) {

    private val state = object : PlayerState(this) {}

    override fun getState(): State {
        return State.Builder()
            .setAvailableCommands(state.availableCommands)
// Here will crash:
            .setPlayWhenReady(state.playWhenReady, state.playWhenReadyChangeReason)
            .setPlaybackState(state.playbackState)
// Here will crash:
            .setPlaylist(
                service.audioItemTree.getChildren(":songs", 0, Int.MAX_VALUE).map {
                    MediaItemData.Builder(it.mediaId)
                        .setMediaItem(it)
                        .setDurationUs(it.clippingConfiguration.endPositionMs * 1000)
                        .setIsSeekable(true)
                        .build()
                }
            )
            .setCurrentMediaItemIndex(0)
            .build()
    }

    init {
        state.availableCommands = Player.Commands.Builder().addAllCommands().build()
    }

    override fun handleSetPlayWhenReady(playWhenReady: Boolean): ListenableFuture<*> = launchImmediateFuture {
        state.playWhenReady = playWhenReady
        state.playWhenReadyChangeReason = Player.PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST
        state.playbackState = Player.STATE_READY
    }

    override fun handlePrepare(): ListenableFuture<*> = launchImmediateFuture {
        state.playbackState = Player.STATE_BUFFERING
    }

    override fun handleStop(): ListenableFuture<*> = launchImmediateFuture {
        state.playWhenReady = false
        state.playbackState = Player.STATE_IDLE
    }

    override fun handleRelease(): ListenableFuture<*> = launchImmediateFuture {
        state.release()
    }
}

abstract class PlayerState(private val player: Player) {

    var availableCommands = Player.Commands.EMPTY
    var playWhenReady = false
    var playWhenReadyChangeReason: @Player.PlayWhenReadyChangeReason Int =
        Player.PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST
    var playbackState: @Player.State Int = Player.STATE_IDLE

    private val listener = object : Player.Listener {

        override fun onAvailableCommandsChanged(availableCommands: Player.Commands) {
<EMAIL_ADDRESS>= availableCommands
        }

        override fun onPlayWhenReadyChanged(playWhenReady: Boolean, reason: Int) {
<EMAIL_ADDRESS>= playWhenReady
<EMAIL_ADDRESS>= reason
        }

        override fun onPlaybackStateChanged(playbackState: Int) {
<EMAIL_ADDRESS>= playbackState
        }
    }

    init {
        player.addListener(listener)
    }

    fun release() {
        player.removeListener(listener)
    }
}

Thanks for reporting! From what I see I think you are using threads and the API in a valid way.
My hypothesis is that the player has a state that triggers a code path early that is currently not anticipated by the library. I think Media3 should be able to handle an arbitrary valid player state when the session is built with a Player. So this looks to me like a library bug.
I'm trying to repro with your setup.
The exception seems to be triggered when a bitmap has completed loading and is racing with the media notification controller being connected to the session. It's a bit puzzling that this bitmap completes loading before the media notification controller has connected in which case the Future would be done already. However, we need to anticipate this case and handle this.
Am I right in assuming that you are using an https-URI for the artworkUri of the media item when the first state of the SimpleBasePlayer is built?

No, I am using content scheme for artwork uri


Issue in downloading the rpm package for 3.0.x

Where is the problem?
https://docs.konghq.com/gateway/3.0.x/install/linux/rhel/
What happened?
I wanted to download the rpm package for 3.0.x but ended up with a dummy file of 14kb.
curl -Lo kong-3.0.2.rpm $(rpm --eval "https://download.konghq.com/gateway-3.x-rhel-%{rhel}/Packages/k/kong-3.0.2.rhel%{rhel}.amd64.rpm")
What did you expect to happen?
The rpm package file should have got downloaded.
Code of Conduct and Community Expectations

[X] I agree to follow this project's Code of Conduct
[X] I agree to abide by the Community Expectations

The file names in the repository doesn't match with the evaluated curl script.
The rhel gets resolved to 7.


the modal cannot be closed when  click two times quickly in vue projects.

查看图表 <Modal v-model="showChart" @ok="showChart = false" effect="zoom">
         <button type="button" class="btn btn-default" @click="showChart = false">OK</button>
   </Modal>
 data(){    return {          showChart : false,     } } showPieChart() {         if(this.showChart) return;         this.showChart = true;         this.updateChartOption();       },

when i clicked span quickly ,the modal cannot be closed when click ok button or other parts in window.
who can help me ?

I'd recommend you check out https://github.com/bootstrap-vue/bootstrap-vue
This repo seems to be dead for awhile now.


Preserve source image aspect ratio

Hello,
Is there any way of preserving the source image aspect ratio on the crop container?
Example: If I try to crop an 360x480 image the crop container get the height of 480px but the width of 100% the viewport. is there any way of getting it stay at 100% width but get the height to match it's aspect ratio?
Thank you for the awesome plugin!

Ok, maybe this helps somebody else in the future.
The solution to do this is setting the block element surrounding the  to {max-width: 100%;width:100%;} and the  to {width:100%; height:auto;}
This way the image never get bigger than the viewport and the aspect ratio is preserved.
Very important: make sure you don't allow user to upload images with ridiculous aspect ratios (1:100 or even 1:10 or 1px 100px, you get the idea) as this will create a huge element on your page.
Have a good day!

https://github.com/fengyuanchen/cropper/blob/master/examples/responsive-container.html


Add homepage to the gemspec

Libraries.io loves it when it can connect the rubygem to it's source on github: https://libraries.io/rubygems/angerfist

Cheers! :+1:

coincidentally, I was looking at libraries.io today! Thanks for this :)

:tada: I'm glad you like it!


Remove Carrenza Link Checker API hieradata

This follows on from the migration of the Link Checker API to AWS, removing the configuration that's associated with Carrenza.
This is just configuration cleanup, and shouldn't actually effect the behaviour of Puppet.

It looks like there are a few other apps we could remove from the Carrenza Hierdata as well (frontends, local links manager, support and support-api, etc).

Yep, now that the tests are better with handling AWS and Carrenza configuration differently, I'm hoping it'll be easy to improve those bits as well.


Add Cache-Side Config Generator

What does this PR (Pull Request) do?
Adds a cache-side config generator. This is a small go binary (atstccfg), which ORT calls instead of requesting Traffic Ops. The atstccfg generator then generates configs it can, and proxies to TO for configs it can't yet generate.
This PR includes generating parent.config and all profile configs, with everything else being proxied. The plan is to move configs over one at a time, until all configs are generated cache-side.
See https://cwiki.apache.org/confluence/display/TC/Cache-Side+Config+Generation
It also moves the logic into /lib/go-atscfg, a library that can be used if someone wants to generate configs themselves somewhere else.
I've parity-tested the generated configs, against Traffic Ops generation, on all our production edges, mids, and profiles. They all diff identical (except where order is nondeterministic in Perl).
Includes documentation, explaining the new config generation, what's generated where and how.
Includes unit tests.
Includes Changelog.

[x] This PR is not related to any other Issue

Which Traffic Control components are affected by this PR?

Traffic Ops
Traffic Ops ORT

What is the best way to verify this PR?
Install ORT, run, verify config files match previous versions / TO.
If this is a bug fix, what versions of Traffic Control are affected?
Not a bug fix.
The following criteria are ALL met by this PR

[x] This PR includes tests OR I have explained why tests are unnecessary
[x] This PR includes documentation OR I have explained why documentation is unnecessary
[x] This PR includes an update to CHANGELOG.md OR such an update is not necessary
[x] This PR includes any and all required license headers
[x] This PR ensures that database migration sequence is correct OR this PR does not include a database migration
[x] This PR DOES NOT FIX A SERIOUS SECURITY VULNERABILITY (see the Apache Software Foundation's security guidelines for details)

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/4052/
Test FAILed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/4107/
Test FAILed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/4108/
Test FAILed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/4110/
Test FAILed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/4111/
Test FAILed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/4112/
Test FAILed.

Addressed PR comments, fixed merge conflicts.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/4190/
Test FAILed.

retest this please

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/4192/
Test FAILed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/4195/
Test FAILed.

License header problems:
Error                                 Unknown! traffic_ops/ort/atstccfg/urisigningconfig_test.go
Error                                 Unknown! traffic_ops/ort/atstccfg/urlsigconfig_test.go

It also doesn't like the license of your pkg dependency:
Error                                    BSD~! vendor/github.com/pkg/errors/.travis.yml
Error                                     BSD! vendor/github.com/pkg/errors/LICENSE
Error                                    BSD~! vendor/github.com/pkg/errors/Makefile
Error                                    BSD~! vendor/github.com/pkg/errors/appveyor.yml
Error                                    BSD~! vendor/github.com/pkg/errors/bench_test.go
Error                                    BSD~! vendor/github.com/pkg/errors/errors.go
Error                                    BSD~! vendor/github.com/pkg/errors/errors_test.go
Error                                    BSD~! vendor/github.com/pkg/errors/example_test.go
Error                                    BSD~! vendor/github.com/pkg/errors/format_test.go
Error                                    BSD~! vendor/github.com/pkg/errors/json_test.go
Error                                    BSD~! vendor/github.com/pkg/errors/stack.go
Error                                    BSD~! vendor/github.com/pkg/errors/stack_test.go

Where did we land on the idea to share code between the new atstccfg tool and the API and just replacing DB queries w/ API calls? Are we doing that?

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/4264/
Test PASSed.

License header problems
Fixed.

Where did we land on the idea to share code between the new atstccfg tool and the API and just replacing DB queries w/ API calls? Are we doing that?

All the logic is shared, in /lib/go-atscfg. The data loading is still using regular DB calls, though. I didn't see a clean way to use the API within TO. It's technically possible, but it would be much slower, and load lots of unnecessary data.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/4269/
Test FAILed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/4270/
Test PASSed.

All the logic is shared, in /lib/go-atscfg. The data loading is still using regular DB calls, though. I didn't see a clean way to use the API within TO. It's technically possible, but it would be much slower, and load lots of unnecessary data.

Yeah, I don't think it's necessary to try to use the API within TO. Thanks!

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/4273/
Test PASSed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/4278/
Test PASSed.

Refer to this link for build results (access rights to CI server needed):
https://builds.apache.org/job/trafficcontrol-PR/4294/
Test PASSed.


How to break out of a turbo frame?

Hi,
I'm trying to break out of a turbo frame. The turbo documentation states that I can just use target="_top", but this results in opening the browser as if this was an external URL.
Thanks,
Chris

This is expected behavior.
In Turbo, providing target="_top" navigates the window (ie. skips Turbo all-together).
You can use the onOpenExternalUrl prop on the VisitableView to customize what happen when a non-Turbo navigation event happen (ie. perform an in-app navigation event with navigateTo(..)). The default is to open it in a browser, but you're free to handle it however you like :-)

Oh, I didn't know target="_top" skips Turbo. I thought it targets not the window but the root navigation so to speak.
I'll go with onOpenExternalUrl then. Thanks so much!


Kitura CouchDB keys should be Any and not AnyObject

It is impossible to pass primitive value types - Int, String as Keys parameters.

My bad - I looked at an older branch.


chore: bdd-spring-1585586334 to 0.0.1

chore: Promote bdd-spring-1585586334 to version 0.0.1

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

Needs approval from an approver in each of these files:

OWNERS

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


Add Excel to PSObject

DNSDumpster has an excel file containing info about the domain. Added the parsing logic to Convert-PSDNSDumpsterAPIDomainInfo.ps1, but this only works on justin-p.me.
Code a more stable parsing method that does not rely on current logic.

Fix has been merged to 0.0.4 branch


Add Column for Collateral

Would be amazing to have an extra column for collateral kills, just scanning for when frags happen on identical ticks by the same player :)
Thanks!

A new major version has been released, closing the issue 🧹


WIP: IEKF estimator and minimal ROS port for PX4

@ecmnet @mhkabir @kd0aij @julianoes @bkueng  This is a position and attitude estimator that borrows ideas from LPE. Hopefully I will get it passing the CI mission soon. Your input is appreciated.
Paper describing the IEKF: https://hal.archives-ouvertes.fr/hal-00494342/document
@LorenzMeier This is my current best stab at an estimator API to support easy development and algorithm comparison. I ported ROS minimally for the components I needed to PX4. It is similar to the example directory multiplatform code as you suggested, but instead of adding a common middle layer between px4 and ros, it ports ROS keeping the API the same. The benefit is that it should be an API already well known by researchers and they can compile their code without any middle-layer on ROS.
In order to port ROS, I had to add a string hashing library. This is pretty small and template based. For each Node I build up a hash table of all topics needed, and will do the same for parameters. I have to do this manually right now on the PX4 side, but I could probably automate that with some effort.
TODO

[x] Pass quad auto mission for CI in SITL

http://logs.px4.io/plot_app?log=4ad24a77-3ab7-471a-9df3-aa112f0850ec

[x]  Pass VTOL auto mission for CI in SITL

URL: http://logs.px4.io/plot_app?log=485af2cc-de4d-412c-944a-626547988f28
URL: http://logs.px4.io/plot_app?log=6e508bc2-fb98-4d2f-b4c1-064334a19c39
URL: http://logs.px4.io/plot_app?log=2a44e876-009e-427c-a8f9-e7f97d37bceb
URL: http://logs.px4.io/plot_app?log=a38e4576-ff39-4b2a-8756-c6773f76bdf8
URL: http://logs.px4.io/plot_app?log=7951ada2-5e12-425f-a45d-42302762c6e9
URL: http://logs.px4.io/plot_app?log=fb746804-cc8f-4017-b667-b39edcede913

[x]  Lidar correction
[x]  Optical flow support

http://logs.px4.io/plot_app?log=b0cd0f14-6f3b-44a0-a805-4a3665fdf86c

Vision/mocap support
[x]  Landing detection support
[x] Parameter system
[ ] Flight testing - In progress (only manual flight mode tested so far, working well)

IPython notebooks

Simulation (This is pretty useful since github renders ipython notebooks, making it easy to analyze algorithms).
IEKF Derivation (Some pretty ugly non-commutative algebra with quaternion products here if you are interested. I was able to re-derive all of the equations from the paper just to make sure I completely understood what was going on.)
Measurement Jacobians

Quick Links to Code for Review

Header
Source
Ros spin loop
ROS port
Hash table for ROS port

This will be great in conjunction with the new VIO interface : https://github.com/mhkabir/Firmware/tree/uasys-devel

@jgoppert Very interesting! What benefits are you expecting besides the replacement of the Q-attitude estimator? With LPE I find results heavily depending on the accelerator noise level.

Motivation

I started this filter because I wanted something that can handle more precise indoor navigation with vision position and attitude measurements than what LPE and attitude_estimator_q could provide.
I considered using EKF2 but don't agree with a lot of the design choices (creating another layer of message passing and autogenerating code with closed source software) and don't find it hackable enough to get the changes in for my system in the short time period.

Benefits

Improved performance:

By combining the attitude and position estimation there is more data and more chance for performance improvements (somthing lpe + attitude estimator q couldn't do). For instance, with this filter it is possible to fly without a magnetometer when using gps  + accel + gyro outdors because it uses the positoin information to figure out the attitude. It also doesn't need accelerometer estimation of gravity direction to figure out the roll/pitch, but I added this to kick in when it isn't accelerating).

The filter is invariant: This means the system is linearized in the navigation frame such that the state transition and measurement matrices are constant as long as the angular velocity and acceleratoin are constant in the navigation frame. EKF2 doesn't employ this so the kalman filter gains will oscillate while rotating in a circle, while IEKF's will remain constant. This means the IEKF is closer to optimal and will have a chance for outperforming EKF2 if properly tuned.

Hackability

This is meant to keep a lot of the same style as LPE where you can easily add measurements and states in a few minutes.
By keeping the estimator coded in pure ROS code it should be very portable.

@jgoppert Thanks for the explanation. Let me know if I can help somehow.

@AndreasAntener @dagar Can you guys take a look at the vtol sitl CI logs and help me figure out what is failing?

Latest commit adds wind states and airspeed measurement.

@jgoppert It would be nice, if IEKF could optionally support vision pitch and roll estimation as well

@ecmnet It will support vision roll, pitch, yaw. If you don't want it to correct yaw, you should be able to set the yaw covariance high.

Yes, the vision data would enable much better bias estimation for the IMU.

@jgoppert Just an idea, you might find it worth to think about: For direct estimator comparison / estimator settings comparison, it would be great to run two different estimators / two instances of an estimator in parallel. With that a direct benchmark of the whole estimator chain would be possible.  As I am not that deep into the firmware, I cannot estimate what this would require. IEKF could be a starting point for that. What do you think?

@ecmnet I think that is a good idea. I think that on a pixhawk ekf2 and iekf couldn't run side by side (due to memory and cpu limitations), but we could do it on sitl. We would have to choose one estimator to publish the control state, or use a 3rd estimator to do that so the evaluation is more fair.

I like that idea, @ecmnet. What do you think about, instead of running the filters at the same time, logging the sensor data and replaying it offline with the different estimators, the way that EKF2 supports it?
I think it would be desirable to achieve a generic method of doing this kind of replay for any estimator. This would probably not be too hard with uLog.

We already support system-wide replay. I had been using it for benchmarking VIO for a while.
Instructions are here : https://github.com/PX4/Devguide/blob/master/advanced-replay.md. No idea why it doesn't show up the Devguide side-pane or why this link is broken : http://dev.px4.io/advanced-replay.html. Will find and fix.

@mhkabir the replay page got dropped in https://github.com/PX4/Devguide/commit/c0532165a059b4bd40dfe32ced4fed01cc4c76ba by @LorenzMeier. I assume this was a mistake, I added it again on master https://github.com/PX4/Devguide/commit/79aaffe0efef8e33b1e8f128d230da1d17d23b2f. Should be online soon.

SITL optical flow with terrain video:
https://www.youtube.com/watch?v=fx5MeMG-DM0&feature=youtu.be

Closing in favor of #7115


GRPCRoute Conformance Test for BackendRef Weight Traffic Splitting

As a implementer of the Kubernetes Gateway API
I want a conformance test to cover the backendref weight traffic splitting feature for GRPCRoute
So that I can ensure my implementation matches the functionality intended of the Gateway API.
Acceptance

A conformance test is created to test the functionality of the backendref weight traffic splitting for NGF.
The conformance test is submitted to the Gateway API.

https://github.com/kubernetes-sigs/gateway-api/issues/2901