Release request 2.0.0

Developer(s): @aleksey-kotsuba

Ticket: https://spryker.atlassian.net/browse/ECO-2252

Please confirm

[ ] No new OS components - or they have been approved by legal department

Documentation

[ ] Functional documentation provided or in progress?
[ ] Integration guide for projects provided or not needed?
[ ] Migration guides for all contained majors provided or not needed?

Release Table

Module
Release Type
Constraint Updates

Heidelpay
major

Release Notes

Update module to compatible with Shop Suite.
Fix forms.
Fix checkout plugins.
Update license.
Fix code style issues.

Module Heidelpay
Change log
Improvements

Update module to compatible with Shop Suite.
Fix forms.
Fix checkout plugins.
Update license.
Fix code style issues.

Please fix psr-4 namespaces
"SprykerEcoTest\\": "tests/SprykerEcoTest/"

should be in the test namespace, not the real one.

Thanks, fixed.


Policy Slider has unpredictable increments

A very observant Den Dowling discovered the time to crack goes down at some points while the slider is going up.  He suggests using ParseInt to round down instead of up.

Just going through outstanding issues.  I'm surprised to see this open still. I thought it was resolved.


RussellBanks.Komac.Nightly version 2.0.3

This Pull Request requires approval from @russellbanks

/AzurePipelines run


Duplicate checks when added via an injected registry in Quarkus

Hi, When I attempt to add a Health Check via an injected registry (in Quarkus) the checks are duplicated (Quarkus 1.9.1, SmallRye Health 2.3.3) e.g. the following startup class:
@Startup
public class MultiRegister {

    public MultiRegister(@Liveness HealthRegistry hr) {
        hr.register("Heap Memory",new HeapMemoryHealthCheck() );
    }
}

I note that the problem doesn't happen in the unit tests, and so far I have been unable to identify where the duplication occurs.  The following workaround "resolves" the problem:
diff --git implementation/src/main/java/io/smallrye/health/SmallRyeHealthReporter.java implementation/src/main/java/io/smallrye/health/SmallRyeHealthReporter.java
index ad1a379..7902c88 100644
--- implementation/src/main/java/io/smallrye/health/SmallRyeHealthReporter.java
+++ implementation/src/main/java/io/smallrye/health/SmallRyeHealthReporter.java
@@ -301,11 +301,19 @@ public class SmallRyeHealthReporter {
                     break;
                 case LIVENESS:
                     checks.addAll(livenessUnis);
-                    checks.addAll(livenessHealthRegistry.getChecks());
+                    livenessHealthRegistry.getChecks().forEach(c -> {
+                        if (!checks.contains(c)) {
+                            checks.add(c);
+                        }
+                    });
                     break;
                 case READINESS:
                     checks.addAll(readinessUnis);
-                    checks.addAll(readinessHealthRegistry.getChecks());
+                    readinessHealthRegistry.getChecks().forEach(c -> {
+                        if (!checks.contains(c)) {
+                            checks.add(c);
+                        }
+                    });
                     break;
                 case WELLNESS:
                     checks.addAll(wellnessUnis);

Hi! Just by the way, I discussed it with @xstefank and Quarkus should probably have a configuration-based way to activate these provided checks. I reported https://github.com/quarkusio/quarkus/issues/13178 and plan to look into it. (That's not really a fix to this issue though, just note that in the future, you won't have to add these checks programmatically)

This happens only with the startup bean. Moving the code into CDI method works as expected.

Hi, thanks for looking into this.
FYI, It also appears to happen when added whilst configuring a camel route, e.g.
@ApplicationScoped
public class ExampleRouteBuilder extends RouteBuilder {

    @Inject
    @Readiness
    HealthRegistry readinessHealthegistry;

    @Override
    public void configure() throws Exception {
        readinessHealthegistry.register("example", ()-> HealthCheckResponse.named("example").up().build());
    }
}

$ curl http://localhost:8080/health/ready

{
    "status": "UP",
    "checks": [
        {
            "name": "example",
            "status": "UP"
        },
        {
            "name": "example",
            "status": "UP"
        }
    ]
}
```


Publish on crates.io

It seems this hasn't been published on crates.io, which would make trying this a lot easier and less concerning (no worries this repo will update automatically and break my build). Additionally, not publishing means anyone could come in and publish a malicious package with the same name and new users will install it without checking. Please publish a release on crates.io!
(after going down a rabbit-hole for the last 8 hours, I'm guessing you're also running into this issue, so maybe it will have to wait until after bevy fixes that issue)

no worries this repo will update automatically and break my build

In practice, you can just pin to a known working revision.
But I agree this should be published. I just want to make sure to follow the official plugin guidelines before I publish.
https://github.com/bevyengine/bevy/blob/main/docs/plugins_guidelines.md
I'm going to spend a little time running through the checklist.

The deed is done. I am planning on upgrading to bevy's main branch to use it with another project.


Optimize the grouping behavior when finding by large path

Hello!
While testing how closure_tree is handling deep nesting for a project I noticed that at some point it started to issue an unreasonably large number of SQL queries. Looking at the max_join_tables (currently 50) I assumed that for 55 levels of nesting there will be something like 2 queries and not 50!
I tracked down the issue to the use of in_groups which splits the path array in "(the given) number of groups" and replaced it with in_groups_of which would rather split "in groups of (the given) size".
Check out the updated spec example SQL output:

before (20 queries)

# max_join_tables = 20
# path = [{"name"=>"1"}, {"name"=>"2"}, {"name"=>"3"}, {"name"=>"4"}, {"name"=>"5"}, {"name"=>"6"}, {"name"=>"7"}, {"name"=>"8"}, {"name"=>"9"}, {"name"=>"10"}, {"name"=>"11"}, {"name"=>"12"}, {"name"=>"13"}, {"name"=>"14"}, {"name"=>"15"}, {"name"=>"16"}, {"name"=>"17"}, {"name"=>"18"}, {"name"=>"19"}, {"name"=>"20"}, {"name"=>"21"}, {"name"=>"22"}, {"name"=>"23"}, {"name"=>"24"}, {"name"=>"25"}, {"name"=>"26"}, {"name"=>"27"}, {"name"=>"28"}, {"name"=>"29"}, {"name"=>"30"}, {"name"=>"31"}, {"name"=>"32"}, {"name"=>"33"}, {"name"=>"34"}, {"name"=>"35"}, {"name"=>"36"}, {"name"=>"37"}, {"name"=>"38"}, {"name"=>"39"}, {"name"=>"40"}, {"name"=>"41"}, {"name"=>"42"}, {"name"=>"43"}, {"name"=>"44"}, {"name"=>"45"}, {"name"=>"46"}, {"name"=>"47"}, {"name"=>"48"}, {"name"=>"49"}, {"name"=>"50"}, {"name"=>"51"}, {"name"=>"52"}, {"name"=>"53"}, {"name"=>"54"}, {"name"=>"55"}, {"name"=>"56"}, {"name"=>"57"}, {"name"=>"58"}, {"name"=>"59"}, {"name"=>"60"}, {"name"=>"61"}, {"name"=>"62"}, {"name"=>"63"}, {"name"=>"64"}, {"name"=>"65"}, {"name"=>"66"}, {"name"=>"67"}, {"name"=>"68"}, {"name"=>"69"}, {"name"=>"70"}]
# subpath = [{"name"=>"1"}, {"name"=>"2"}, {"name"=>"3"}, {"name"=>"4"}]
SELECT  "tags".*  FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" INNER JOIN "tags" AS p2
             ON p2."id" =
"p1"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p2"."name" = $4 AND "p2"."parent_id" = $5 ORDER BY "tags"."id" ASC LIMIT $6

# subpath = [{"name"=>"9"}, {"name"=>"10"}, {"name"=>"11"}, {"name"=>"12"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" INNER JOIN "tags" AS p2
             ON p2."id" =
"p1"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p2"."name" = $4 AND "p2"."parent_id" = $5 ORDER BY "tags"."id" ASC LIMIT $6

# subpath = [{"name"=>"13"}, {"name"=>"14"}, {"name"=>"15"}, {"name"=>"16"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" INNER JOIN "tags" AS p2
             ON p2."id" =
"p1"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p2"."name" = $4 AND "p2"."parent_id" = $5 ORDER BY "tags"."id" ASC LIMIT $6

# subpath = [{"name"=>"17"}, {"name"=>"18"}, {"name"=>"19"}, {"name"=>"20"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" INNER JOIN "tags" AS p2
             ON p2."id" =
"p1"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p2"."name" = $4 AND "p2"."parent_id" = $5 ORDER BY "tags"."id" ASC LIMIT $6

# subpath = [{"name"=>"21"}, {"name"=>"22"}, {"name"=>"23"}, {"name"=>"24"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" INNER JOIN "tags" AS p2
             ON p2."id" =
"p1"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p2"."name" = $4 AND "p2"."parent_id" = $5 ORDER BY "tags"."id" ASC LIMIT $6

# subpath = [{"name"=>"25"}, {"name"=>"26"}, {"name"=>"27"}, {"name"=>"28"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" INNER JOIN "tags" AS p2
             ON p2."id" =
"p1"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p2"."name" = $4 AND "p2"."parent_id" = $5 ORDER BY "tags"."id" ASC LIMIT $6

# subpath = [{"name"=>"29"}, {"name"=>"30"}, {"name"=>"31"}, {"name"=>"32"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" INNER JOIN "tags" AS p2
             ON p2."id" =
"p1"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p2"."name" = $4 AND "p2"."parent_id" = $5 ORDER BY "tags"."id" ASC LIMIT $6

# subpath = [{"name"=>"33"}, {"name"=>"34"}, {"name"=>"35"}, {"name"=>"36"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" INNER JOIN "tags" AS p2
             ON p2."id" =
"p1"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p2"."name" = $4 AND "p2"."parent_id" = $5 ORDER BY "tags"."id" ASC LIMIT $6

# subpath = [{"name"=>"37"}, {"name"=>"38"}, {"name"=>"39"}, {"name"=>"40"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" INNER JOIN "tags" AS p2
             ON p2."id" =
"p1"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p2"."name" = $4 AND "p2"."parent_id" = $5 ORDER BY "tags"."id" ASC LIMIT $6

# subpath = [{"name"=>"41"}, {"name"=>"42"}, {"name"=>"43"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p1"."parent_id" = $4 ORDER BY "tags"."id" ASC LIMIT $5

# subpath = [{"name"=>"44"}, {"name"=>"45"}, {"name"=>"46"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p1"."parent_id" = $4 ORDER BY "tags"."id" ASC LIMIT $5

# subpath = [{"name"=>"47"}, {"name"=>"48"}, {"name"=>"49"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p1"."parent_id" = $4 ORDER BY "tags"."id" ASC LIMIT $5

# subpath = [{"name"=>"50"}, {"name"=>"51"}, {"name"=>"52"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p1"."parent_id" = $4 ORDER BY "tags"."id" ASC LIMIT $5

# subpath = [{"name"=>"53"}, {"name"=>"54"}, {"name"=>"55"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p1"."parent_id" = $4 ORDER BY "tags"."id" ASC LIMIT $5

# subpath = [{"name"=>"56"}, {"name"=>"57"}, {"name"=>"58"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p1"."parent_id" = $4 ORDER BY "tags"."id" ASC LIMIT $5

# subpath = [{"name"=>"59"}, {"name"=>"60"}, {"name"=>"61"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p1"."parent_id" = $4 ORDER BY "tags"."id" ASC LIMIT $5

# subpath = [{"name"=>"62"}, {"name"=>"63"}, {"name"=>"64"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p1"."parent_id" = $4 ORDER BY "tags"."id" ASC LIMIT $5

# subpath = [{"name"=>"65"}, {"name"=>"66"}, {"name"=>"67"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p1"."parent_id" = $4 ORDER BY "tags"."id" ASC LIMIT $5

# subpath = [{"name"=>"68"}, {"name"=>"69"}, {"name"=>"70"}]
SELECT  "tags".* FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p1"."parent_id" = $4 ORDER BY "tags"."id" ASC LIMIT $5

and after the change (4 queries)

# max_join_tables = 20
# path = [{"name"=>"1"}, {"name"=>"2"}, {"name"=>"3"}, {"name"=>"4"}, {"name"=>"5"}, {"name"=>"6"}, {"name"=>"7"}, {"name"=>"8"}, {"name"=>"9"}, {"name"=>"10"}, {"name"=>"11"}, {"name"=>"12"}, {"name"=>"13"}, {"name"=>"14"}, {"name"=>"15"}, {"name"=>"16"}, {"name"=>"17"}, {"name"=>"18"}, {"name"=>"19"}, {"name"=>"20"}, {"name"=>"21"}, {"name"=>"22"}, {"name"=>"23"}, {"name"=>"24"}, {"name"=>"25"}, {"name"=>"26"}, {"name"=>"27"}, {"name"=>"28"}, {"name"=>"29"}, {"name"=>"30"}, {"name"=>"31"}, {"name"=>"32"}, {"name"=>"33"}, {"name"=>"34"}, {"name"=>"35"}, {"name"=>"36"}, {"name"=>"37"}, {"name"=>"38"}, {"name"=>"39"}, {"name"=>"40"}, {"name"=>"41"}, {"name"=>"42"}, {"name"=>"43"}, {"name"=>"44"}, {"name"=>"45"}, {"name"=>"46"}, {"name"=>"47"}, {"name"=>"48"}, {"name"=>"49"}, {"name"=>"50"}, {"name"=>"51"}, {"name"=>"52"}, {"name"=>"53"}, {"name"=>"54"}, {"name"=>"55"}, {"name"=>"56"}, {"name"=>"57"}, {"name"=>"58"}, {"name"=>"59"}, {"name"=>"60"}, {"name"=>"61"}, {"name"=>"62"}, {"name"=>"63"}, {"name"=>"64"}, {"name"=>"65"}, {"name"=>"66"}, {"name"=>"67"}, {"name"=>"68"}, {"name"=>"69"}, {"name"=>"70"}]
# subpath = [{"name"=>"1"}, {"name"=>"2"}, {"name"=>"3"}, {"name"=>"4"}, {"name"=>"5"}, {"name"=>"6"}, {"name"=>"7"}, {"name"=>"8"}, {"name"=>"9"}, {"name"=>"10"}, {"name"=>"11"}, {"name"=>"12"}, {"name"=>"13"}, {"name"=>"14"}, {"name"=>"15"}, {"name"=>"16"}, {"name"=>"17"}, {"name"=>"18"}, {"name"=>"19"}, {"name"=>"20"}]
SELECT  "tags".*    FROM "tags" INNER JOIN "tags" AS p0
             ON p0."id" =
"tags"."parent_id" INNER JOIN "tags" AS p1
             ON p1."id" =
"p0"."parent_id" INNER JOIN "tags" AS p2
             ON p2."id" =
"p1"."parent_id" INNER JOIN "tags" AS p3
             ON p3."id" =
"p2"."parent_id" INNER JOIN "tags" AS p4
             ON p4."id" =
"p3"."parent_id" INNER JOIN "tags" AS p5
             ON p5."id" =
"p4"."parent_id" INNER JOIN "tags" AS p6
             ON p6."id" =
"p5"."parent_id" INNER JOIN "tags" AS p7
             ON p7."id" =
"p6"."parent_id" INNER JOIN "tags" AS p8
             ON p8."id" =
"p7"."parent_id" WHERE "tags"."name" = $1 AND "p0"."name" = $2 AND "p1"."name" = $3 AND "p2"."name" = $4 AND "p3"."name" = $5 AND "p4"."name" = $6 AND "p5"."name" = $7 AND "p6"."name" = $8 AND "p7"."name" = $9 AND "p8"."name" = $10 AND "p8"."parent_id" = $11 ORDER BY "tags"."id" ASC LIMIT $12

That some pretty good optimization. Did you check the cost of the both queries ?

@seuros, no actually.
For me, it was enough that path size of 49 was not calling find_by_large_path thus keeping it all to a single query (with ~50 inner-joins) and then going up by just 2 to 51 levels of nesting suddenly started spamming the DB in an unexpected manner.
I may check the performance of the big SQL under Postgres for example if we want to reduce the max_join_tables. But again, IMO those are 2 different optimizations.

Since you have the data already populated, can you append EXPLAIN to the query in psql. You will get the query cost there.
Else i will try to do it this weekend to release a minor version on rubygems.

Sorry, already out office. ☺
I’m available next Tuesday and will try if you haven’t during the weekend.
On Fri, 3 May 2019 at 18:56, Abdelkader Boudih<EMAIL_ADDRESS>wrote:

Since you have the data already populated, can you append EXPLAIN to the
query in psql. You will get the query cost there.
Else i will try to do it this weekend to release a minor version on
rubygems.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/ClosureTree/closure_tree/pull/347#issuecomment-489145170,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAFMKFB557GWDMLSDTMI4D3PTROB7ANCNFSM4HKU3B2Q
.

--
Contact me @:
e-mail<EMAIL_ADDRESS>mobile: +359883370333

Now that I think of it, why would we even keep the if checking for “large
paths”. We can just always split in groups of size n. For n<50 it’d behave
entirely as it used to.
P.s. Is there any chance backporting this to 6.x? I noticed that 7 has some
new gem requirements that are preventing me to use the new version in my
current project.
On Fri, 3 May 2019 at 18:56, Abdelkader Boudih<EMAIL_ADDRESS>wrote:

Since you have the data already populated, can you append EXPLAIN to the
query in psql. You will get the query cost there.
Else i will try to do it this weekend to release a minor version on
rubygems.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/ClosureTree/closure_tree/pull/347#issuecomment-489145170,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAFMKFB557GWDMLSDTMI4D3PTROB7ANCNFSM4HKU3B2Q
.

--
Contact me @:
e-mail<EMAIL_ADDRESS>mobile: +359883370333

@seuros, here's the promised data:

rails c log before the change (using in_groups)

in_groups.log

after the change (using in_groups_of)

in_groups_of.log

along with the DB explain of the first group big query

in_groups_of_first_batch_explain.txt
also available as a gist

and just in case explain analyze

in_groups_of_first_batch_explain_analyze.txt

Can you add a Changelog entry  to this PR ? Add version 7.1.0

Done :)


[Techdocs] Diff docs are not readable in dark mode

Expected Behavior
I should be able to read diff docs 😄
Something like GitHub would be perfect.

Current Behavior
It looks like this at the moment.

Possible Solution
Make the text dark when it's on a green or red background. Also, make the green and red background color somewhat opaque.
Steps to Reproduce
Create a doc with this content (wrapped in three backticks followed by diff).
diff --git a/src/components/CallToAction/EmailCaptureForm.js b/src/components/CallToAction/EmailCaptureForm.js
index eb154ca..9450b93 100644
--- a/src/components/CallToAction/EmailCaptureForm.js
+++ b/src/components/CallToAction/EmailCaptureForm.js
@@ -56,7 +56,7 @@ const EmailCaptureForm = ({
           <Button
             text={buttonText}
             disabled={disabled}
-            icon={<PaperAirplaneIcon className="h-4 w-4 mr-1" />}
+            prefixIcon={<PaperAirplaneIcon />}
             id={buttonId}
             fullWidth
             color="primary"

Context
It makes it difficult to show code changes in documentation.

I would be interested in trying to make a progress here, so please assign it to me 😃

Fixed by #9476 🎉, thank you!


A problem about the DDPG

Hi, I want to implement the DDPG algorithm, and before that, i've read your code. It's very useful. And I still have some little questions about the code.
1.As in the DDPG.py, line 61 to 66:
# This gradient will be provided by the critic network
self.action_gradient = tf.placeholder(tf.float32, [None, self.a_dim])
# Combine the gradients here
self.actor_gradients = tf.gradients(
self.scaled_out, self.network_params, -self.action_gradient)
My problem is: The tf.gradients(y,x) sums up the dy/dx for each y in ys. And in the paper, the equation of dJ/d(theta) divides N, and I wonder that whether I should write the code like this:
self.actor_gradients = tf.div(tf.gradients(
self.scaled_out, self.network_params, -self.action_gradient),N)
Looking forward to your reply.
Thank you very much.
My contact way: email<EMAIL_ADDRESS>

Hey- no need to divide by N. The gradients are already averaged over the batch size for you. Check out this discussion - https://github.com/pemami4911/deep-rl/issues/3

Thank you very much!
I still don't understand that "The gradients are already averaged over the batch size", and I wrote something like this:
import tensorflow as tf sess=tf.InteractiveSession() x=tf.placeholder(dtype=tf.float32,shape=[2,2]) w=tf.constant(value=[2,3,5,6],dtype=tf.float32,shape=[2,2]) x_input=[[1,5],[3,4]] y=tf.matmul(x,w) grad_y=tf.gradients(y,w) sess.run(tf.global_variables_initializer()) print len(grad_y) print grad_y[0].eval(feed_dict={x:x_input})
Then the output is like this:
1 [[4. 4.] [9. 9.]]
It seems that the tf.gradients() doesn't divide the gradients by N, thought it sums up over the batch.
Looking forward to your reply.
Thank you again.

Thank you very much!
I still don't understand that "The gradients are already averaged over the batch size", and I wrote something like this:
import tensorflow as tf  sess=tf.InteractiveSession()  x=tf.placeholder(dtype=tf.float32,shape=[2,2])  w=tf.constant(value=[2,3,5,6],dtype=tf.float32,shape=[2,2])  x_input=[[1,5],[3,4]]  y=tf.matmul(x,w)  grad_y=tf.gradients(y,w)  sess.run(tf.global_variables_initializer())  print len(grad_y)  print grad_y[0].eval(feed_dict={x:x_input})
Then the output is like this:
1  [[4. 4.]  [9. 9.]]
It seems that the tf.gradients() doesn't divide the gradients by N, thought it sums up over the batch.
Looking forward to your reply.
Thank you again.

Thank you very much!
I still don't understand that "The gradients are already averaged over the batch size", and I wrote something like this:
import tensorflow as tf
sess=tf.InteractiveSession()
x=tf.placeholder(dtype=tf.float32,shape=[2,2])
w=tf.constant(value=[2,3,5,6],dtype=tf.float32,shape=[2,2])
x_input=[[1,5],[3,4]]
y=tf.matmul(x,w)
grad_y=tf.gradients(y,w)
sess.run(tf.global_variables_initializer())
print len(grad_y)
print grad_y[0].eval(feed_dict={x:x_input})
Then the output is like this:
1
[[4. 4.]
[9. 9.]]
It seems that the tf.gradients() doesn't divide the gradients by N, thought it sums up over the batch.
Looking forward to your reply.
Thank you again.

Deleted my previous comment to avoid confusion - it's been a while since I've looked at this sorry! #3 was in reference to tf.gradients(self.out, self.action). In general, tf.gradients does sum over a batch, but when dyi/dxj = 0 when i ~= j (as is the case with tf.gradients(self.out, self.action), you don't need to worry about dividing by the batch size since all terms except one for each i are 0. I have to look at tf.gradients(self.scaled_out, self.network_params, -self.action_gradients) more closely later today or tomorrow and get back to you

I believe you are correct, I'll double check myself in a bit


No motion detection after basic subscription

I had a test license until December 31st, after which I took out a basic subscription. The token has not changed. But apart from the RSSI data point and the battery, nothing else changes. The adapter is so useless.
Adapter Version: 5.0.10

I was able to solve it first. I deleted the iobroker client on the ring website. then added again via the adapter -> token was created again for security and entered in the adapter.


revert clearField method to loop strategy

Coverage decreased (-0.1%) to 30.782% when pulling 9b84e676e91ca200f3b83b790857e9a293892f83 on revert_clear_field_method into cd8fca13e8b91d4d7ffc0bb7d2fc0aaaebe97c2d on master.


[WIP] Move the plugin client to client-common (deprecate the old one)

Q
A

Bug fix?
no

New feature?
no

BC breaks?
no

Deprecations?
yes

Related tickets
partially #63, related php-http/client-common#14

Documentation
php-http/documentation#WIP

License
MIT

What's in this PR?
Moves Plugin client and plugins to client common
Checklist

[ ] Updated CHANGELOG.md to describe BC breaks / deprecations | new feature | bugfix
[ ] Documentation pull request created (if not simply a bugfix)
[ ] Squash before merge

See php-http/client-common#14

I guess we won't merge this one then and just deprecate the package.

CLosing in favor of #70


Update to OTC pdata v0.63.1

Minor changes:

PutString -> PutStr
MetricDataPointFlags -> DataPointFlags

LGTM


fix(notifications): logic for assigning subscriber emails

what

Reverses logic for assigning subscriber emails when notifications are enabled

why

Previously providing subscriber emails was not working due to only assigning those emails when notifications_enabled was false. This seems incorrect.

I also checked that having both an SNS topic + subscriber emails assigned is not mutually exclusive, so this feels like the originally desired behavior and we just have the logic swapped.

references
Refs

None.

/terratest

I don't think the logic was swapped, I think the variable name is too ambiguous. Per the description for notifications_enabled

Whether or not to setup Slack notifications. Set to true to create an SNS topic and Lambda function to send alerts to Slack.

We previously had this variable set to false and subscriber_email_addresses worked as expected. With this new version, we have to set notifications_enabled to true which also creates the Slack resources (SNS, Lambda, Cloudwatch alarms, etc).

@wavemoran I can see your point that it might just be ambiguity in poor naming from what you're describing. The way I took it is that notifications_enabled should be any type of notifications, regardless of email vs Slack. The mutually exclusive component of this was limiting.
As a compromise, we could leave notifications_enabled to be annoying ambiguous and update the module so that there is no wrapper logic around assigning subscriber_email_addresses. As in, if you pass subscriber_email_addresses as an input then it get assigned regardless of the value of notifications_enabled. How does that sound?

Your suggestion works for me.
My other thought would be having notifications_enabled control all notifications and maybe another variable for controlling Slack notifications and related resources, eg slack_ notifications_enabled.

@wavemoran yeah, I thought about that, but that would potentially introduce breaking changes / overcomplicate things. I believe it's reasonable that we can expect consumers to not pass emails if they don't want email.
I've made the corresponding changes in #52 and I'll grab a review from a fellow maintainer.


Latest miniscript

Updates simplicity to the latest bitcoin(-hashes), elements and elements-miniscript.
I had to copy hex.rs because bitcoin-hashes dropped support. We might want to use a stable workaround instead once it exists.
There are also problems in the fuzz and bench crate that need to be resolved.

Rebased on master. Fuzzing is still broken because we need a patched version of bitcoin-hashes. There is also a weird bug for 1.48.0.

As suggested on IRC please try rust-bitcoin/rust-bitcoin commit c1c76756a65d1eb046ac934425603c83dbcd0d94 for bitcoin_hashes in fuzz/Cargo.toml.

Heads up, quote and proc-macro2 no longer compile for 1.48.0. They need to be patched: 7a1b268

As suggested on IRC please try rust-bitcoin/rust-bitcoin commit c1c76756a65d1eb046ac934425603c83dbcd0d94 for bitcoin_hashes in fuzz/Cargo.toml.

For future reference: on IRC we noticed that this commit actually doesn't work, because it includes changes to the hash_newtype! macro that cause compilation failures when used in rust-bitcoin. Instead we had to create a one-off commit based on 0.30.1, which I tagged on apoelstra/rust-bitcoin as 2023-07--0.30.1-with-fuzzcfg.


Add dataset upload APIs

Pull Request Test Coverage Report for Build 937

28 of 123 (22.76%)  changed or added relevant lines in 6 files are covered.
1 unchanged line in 1 file lost coverage.
Overall coverage increased (+0.04%) to 61.81%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

routes/thingpedia_entities.js
1
2
50.0%

routes/thingpedia_strings.js
2
4
50.0%

util/errors.js
0
2
0.0%

routes/thingpedia_api.js
9
16
56.25%

util/upload_dataset.js
15
98
15.31%

Files with Coverage Reduction
New Missed Lines
%

routes/thingpedia_entities.js
1
91.67%

Totals

Change from base Build 929:
0.04%

Covered Lines:
4761

Relevant Lines:
7186

💛  - Coveralls


Using cache during analysis phase

fixes #373

:white_check_mark: Build ConfuserEx 819 completed (commit https://github.com/mkaring/ConfuserEx/commit/b60b3c515d by @mkaring)

This is really much faster!

Is it possible to create a new compilation of this PR after merging #377 ? I'd love to give it a test since #375 has been fixed.

:white_check_mark: Build ConfuserEx 825 completed (commit https://github.com/mkaring/ConfuserEx/commit/595b8e4b26 by @mkaring)

@wmjordan: Here it is

Thanks!
Just downloaded and put it up running.
Nothing went wrong so far.

Having been working with this version for two days, I am feeling good for this version.


Improve the definition of the cfClassScheme entity

We start from:

Classification scheme: an arrangement of Classifications to reflect a certain aspect of objects.   In CERIF, the concept of Classification Scheme is physically  (cfClassScheme) and logically (cfClassificationScheme) defined as an  entity in an ERM, represented by attributes and through maintaining  relationships with other entities: classes, classification schemes,  multilingual classification scheme names, multilingual classification  scheme descriptions.

A first approximation:

Classification Scheme: a structured collection of Classifications to describe a certain aspect of objects or their relationships.
CERIF Classification Schemes can represent flat or hierarchical lists, taxonomies, thesauri, ontologies or any general arrangement of concepts (Classifications).


SageMaker: Add Custom Callbacks for TrainingJob, Model and ProcessingJob Update Ops

Description of changes:

Add Custom Callbacks for TrainingJob, Model and ProcessingJob Update No-op since these resources do not support updates as of aws_sdk_go 1.34.32. This change fixes the issue where we saw a not implemented in controller log for update actions.
Note: However the latest version of gosdk v1 does support updateTrainingJob but this needs to be a part of a separate PR.

Adds back the failureReason as a printer column for TrainingJob (I am not sure why the order of these fields keeps changing across different controller-gen versions)

Testing:
Ran the integ tests and checked the logs to ensure no errors
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@jaypipes this PR needs to be recreated to the new repo (only) as well, correct ?


Fix: use dev'ed BangBang.jl in test/environments/old

Codecov Report

Merging #129 into master will increase coverage by 4.94%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #129      +/-   ##
==========================================
+ Coverage   86.89%   91.84%   +4.94%
==========================================
  Files          20       20
  Lines         351      331      -20
==========================================
- Hits          305      304       -1
+ Misses         46       27      -19

Impacted Files
Coverage Δ

src/NoBang/base.jl
94.66% <0%> (-1.34%)
:arrow_down:

src/macro.jl
100% <0%> (+5%)
:arrow_up:

src/base.jl
87.34% <0%> (+10.67%)
:arrow_up:

src/NoBang/singletoncontainers.jl
100% <0%> (+11.53%)
:arrow_up:

src/NoBang/NoBang.jl
100% <0%> (+33.33%)
:arrow_up:

src/BangBang.jl
100% <0%> (+44.44%)
:arrow_up:

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 10a6a7a...a90c956. Read the comment docs.


[BUG] Fiftyone 0.25.2 is not able to detect the eval keys while loading the dataset

Describe the problem
Hello team,
Thank you for a great open source tool.
I am facing an issue with the latest version with fiftyone while using evaluate segmentation.
On brief, I perform evaluations using evaluate_segmentation function of fo.Dataset, it works as intended, generating evaluations, and then exporting this evaluated dataset works well too. But the problem is when I load this dataset again afresh, in another jupyter nb and do dataset.list_evaluations() an empty list is returned, while it should have evaluation keys.
Code to reproduce issue

Evaluate a segmentation dataset

ds.evaluate_segmentations(
    pred_field=pred_field,
    gt_field="ground_truth",
    eval_key=`random_eval_string`,
    compute_dice=True,
    mask_targets=ds.default_mask_targets,
)

Just as a more insight, after evaluating I do run one more iteration on ds, to convert segmentations to polylines something like this and autosave the samples

polylines.append(
            fo.Polyline(
                closed=True,
                filled=False,
                label="class1",
                name=`poly1`,
                points=[list_of_tuple_points],
            )
        )
    sample[`borders`] = fo.Polylines(polylines=polylines)

After this, I simply export the dataset:

dataset.export(
    dataset_type=fo.types.FiftyOneDataset,
    export_dir=f"data/evaluated_ds",
    export_media=True,
)

When I check the evaluated_ds folder, there is a folder of evaluations, filled with json file a dummy example is:

{"cls": "fiftyone.utils.eval.segmentation.SegmentationResults","pixel_confusion_matrix": [[2732334,1215093],[2732334,1215093]],"classes": ["background","class1"],"missing": "background"}

Then I simply load the dataset again in another jupyter nb and check for eval_keys

dataset = fo.Dataset.from_dir(
    f"data/evaluated_ds", dataset_type=fo.types.FiftyOneDataset
)
dataset.list_evaluations() # This returns an empty list

System information

OS Platform and Distribution: 22.04.1-Ubuntu
Python version (python --version): 3.10.12
FiftyOne version (fiftyone --version): 0.25.2
FiftyOne installed from (pip or source): pip

Other info/logs
Nothing else, but if someone needs any further information let me know, I can try to provide it.
Willingness to contribute
The FiftyOne Community encourages bug fix contributions. Would you or another
member of your organization be willing to contribute a fix for this bug to the
FiftyOne codebase?

[x] Yes. I would be willing to contribute a fix for this bug with guidance
from the FiftyOne community

Hmm, I'm not able to reproduce with the code below, which I believe is analogous to what you're describing. Can you try it yourself and let me know what you find?
import fiftyone as fo
import fiftyone.zoo as foz
import fiftyone.utils.labels as foul

dataset = foz.load_zoo_dataset(
    "coco-2017",
    split="validation",
    label_types="segmentations",
    classes=["person", "cat", "dog"],
    label_field="instances",
    max_samples=25,
    only_matching=True,
)

mask_targets = {1: "person", 2: "cat", 3: "dog"}

foul.objects_to_segmentations(
    dataset,
    "instances",
    "gt_segmentations",
    mask_targets=mask_targets,
    output_dir="/tmp/segmentations",
)

dataset.clone_sample_field("gt_segmentations", "pred_segmentations")

dataset.evaluate_segmentations(
    "pred_segmentations",
    gt_field="gt_segmentations",
    mask_targets=mask_targets,
    eval_key="eval",
)

print(dataset.list_evaluations())
# ["eval"]

dataset.export(
    export_dir="/tmp/fod",
    dataset_type=fo.types.FiftyOneDataset,
)

dataset2 = fo.Dataset.from_dir(
    dataset_dir="/tmp/fod",
    dataset_type=fo.types.FiftyOneDataset,
)

print(dataset2.list_evaluations())
# ["eval"]

results = dataset2.load_evaluation_results("eval")
results.print_report()

              precision    recall  f1-score   support

      person       1.00      1.00      1.00 1057138.0
         cat       1.00      1.00      1.00  234226.0
         dog       1.00      1.00      1.00   32373.0

    accuracy                           1.00 1323737.0
   macro avg       1.00      1.00      1.00 1323737.0
weighted avg       1.00      1.00      1.00 1323737.0

@brimoor Thank you for your solution.
Apologies, it was my mistake.
The thing is after loading the dataset, I was cloning it using .clone() and hence the evaluations were gone. N you didn't have that here, so that's why the eval keys remained present.

FYI- cloning an entire dataset should also preserve evaluation keys, as demonstrated below.
If you clone a view into a dataset, then evaluations and other such things will NOT be included.
import fiftyone as fo
import fiftyone.zoo as foz

dataset = foz.load_zoo_dataset("quickstart")
dataset.evaluate_detections("ground_truth", eval_key="eval")

print(dataset.list_evaluations())
# ['eval']

dataset2 = dataset.clone()

print(dataset2.list_evaluations())
# ['eval']

dataset3 = dataset.view().clone()

print(dataset3.list_evaluations())
# []


How to enable single-sign-out?

I saw in the documentation something about single sign out, but i could not understand how it works.
Anyone can help me?

Single Sign-Out / Single Logout is enabled by default in CASino. It's up to the client to actually use it (e.g. rack-cas)


Can't see balance related info in eos account

After creating accounts for sample "currency" contract cleos create account eosio currency PUBLIC_KEY_1 PUBLIC_KEY_2, I can't see balance related infomation. Please see below:
$ cleos version client
Build version: d3e289a5

$ cleos create account eosio currency PUBLIC_KEY_1 PUBLIC_KEY_2
......

$ cleos get account currency
{
  "account_name": "currency",
  "permissions": [{
      "perm_name": "active",
      "parent": "owner",
      "required_auth": {
        "threshold": 1,
        "keys": [{
            "key": "EOS5XwPc7LBYPm7ofTjoH54s3j7V7hBJs58j42hS4VRcnN2xyTES1",
            "weight": 1
          }
        ],
        "accounts": []
      }
    },{
      "perm_name": "owner",
      "parent": "",
      "required_auth": {
        "threshold": 1,
        "keys": [{
            "key": "EOS7FWFoz9BCGgdzxfUEkd5k5jvuqRf3c1vDw5YskP1TrD4YbCFdh",
            "weight": 1
          }
        ],
        "accounts": []
      }
    }
  ]
}

me too....

Maybe by "cleos  get currency balance eosio.token tester
".
"root@eosio:~/data# cleos  get currency balance eosio.token tester
0.9613646 OS"
Actually, the count is wrong for dawn-3.0

me too

Hi,
I am facing issue getting balance too; I am running it on Ubuntu-16.04, on tags/v1.0.1 branch.
I successfully transfer tokens from one account to other using eosio.bios contract.
I tried following command to check the balance

./cleos get currency balance eosio.token bitcoin
-- Got no response
./cleos get table eosio currency accounts
-- Error 3060002: Account Query Exception
Most likely, the given account doesn't exist in the blockchain.
Error Details:
Fail to retrieve account for inita

Please help.


[DEFECT] CAPEX defined by function

Defect Description
Describe the defect
What did you expect to see happen?
HERON should run without error when the CAPEX of a component is defined through a function
What did you see instead?
$ heron heron_input_issue.xml
Starting HERON ...
 ... RAVEN located at "C:\Users\garrm\projects\raven"
 ... Activating CONDA environment ...
CONDA
raven_libraries          C:\Users\garrm\Miniconda3\envs\raven_libraries
Running HERON ...
Loading plugin "ExamplePlugin" at C:\Users\garrm\projects\raven\plugins\ExamplePlugin
 ... successfully imported "ExamplePlugin" ...
Loading plugin "HERON" at C:\Users\garrm\projects\raven\plugins\HERON
 ... successfully imported "HERON" ...
Loading plugin "TEAL" at C:\Users\garrm\projects\raven\plugins\TEAL
 ... successfully imported "TEAL" ...
Loading plugin "FARM" at C:\Users\garrm\projects\raven\plugins\FARM
 ... successfully imported "FARM" ...
Loading plugin "HERON_dev" at C:\Users\garrm\projects\raven\plugins\HERON_dev
 ... successfully imported "HERON_dev" ...
(            ) UTILS                    : Message         -> importing module C:\Users\garrm\projects\FORCE\use_cases\2022_05\run\functions
(    0.37 sec) <ValuedParams.Activity.Ac: Message         -> Tracking variable not specified; using "production" ...
(    0.37 sec) <HERON ARMA>      : Message -> Checking ROM at "C:\Users\garrm\projects\raven\plugins\HERON\tests\integration_tests\ARMA\Sine\arma.pk"
(    2.04 sec) <HERON ARMA>      : Message -> For DataGenerator <ARMA> "Price", detected:  interpolated,  clustered.
Traceback (most recent call last):
  File "C:/Users/garrm/projects/raven/plugins/HERON/src/main.py", line 100, in <module>
    sim.create_raven_workflow()
  File "C:/Users/garrm/projects/raven/plugins/HERON/src/main.py", line 90, in create_raven_workflow
    case.write_workflows(self._components, self._sources, self._input_dir)
  File "C:\Users\garrm\projects\raven\plugins\HERON\src\Cases.py", line 756, in write_workflows
    inner, outer, cash = template_class.createWorkflow(self, components, sources)
  File "C:\Users\garrm\projects\raven\plugins\HERON\templates\template_driver.py", line 141, in createWorkflow
    cash = self._modify_cash(cash, case, components, sources)
  File "C:\Users\garrm\projects\raven\plugins\HERON\templates\template_driver.py", line 996, in _modify_cash
    self._modify_cash_components(template, case, components)
  File "C:\Users\garrm\projects\raven\plugins\HERON\templates\template_driver.py", line 1054, in _modify_cash_components
    cfNode.append(xmlUtils.newNode('alpha',text = subCash._alpha.get_value()))
  File "C:\Users\garrm\projects\raven\plugins\HERON\src\ValuedParamHandler.py", line 144, in get_value
    return self._vp.get_value(**kwargs)
AttributeError: 'Function' object has no attribute 'get_value'
 ... Errors were encountered while running HERON.
(base)

Do you have a suggested fix for the development team?
Describe how to Reproduce
Steps to reproduce the behavior:

Run the heron input file attached with the functions python script attached copied in the parent folder

Screenshots and Input Files
Please attach the input file(s) that generate this error.  The simpler the input, the faster we can find the issue.
capex_function_issue.zip
Platform (please complete the following information):

OS: [e.g. iOS]
Version: [e.g. 22]
Dependencies Installation: [CONDA or PIP]

For Change Control Board: Issue Review
This review should occur before any development is performed as a response to this issue.

[x] 1. Is it tagged with a type: defect or task?
[x] 2. Is it tagged with a priority: critical, normal or minor?
[x] 3. If it will impact requirements or requirements tests, is it tagged with requirements?
[x] 4. If it is a defect, can it cause wrong results for users? If so an email needs to be sent to the users.
[x] 5. Is a rationale provided? (Such as explaining why the improvement is needed or why current code is wrong.)

For Change Control Board: Issue Closure
This review should occur when the issue is imminently going to be closed.

[ ] 1. If the issue is a defect, is the defect fixed?
[ ] 2. If the issue is a defect, is the defect tested for in the regression test system?  (If not explain why not.)
[ ] 3. If the issue can impact users, has an email to the users group been written (the email should specify if the defect impacts stable or master)?
[ ] 4. If the issue is a defect, does it impact the latest release branch? If yes, is there any issue tagged with release (create if needed)?
[ ] 5. If the issue is being closed without a pull request, has an explanation of why it is being closed been provided?

It looks like in template_driver.py we assume if a CashFlow is one-time that things like alpha, reference and scaling_factor are Parametric ValuedParams. Thus we fail if we try to pass a Function VP into anything other than driver for one-time Cashflows.
@PaulTalbot-INL What's your suggested fix for this? I can understand the assumption that a one-time CF would not require a Function VP for any of its' inputs.
I think either:
a) This restriction cannot be implicit and should be error out with a better message. The documentation should be changed to reflect this as well.
or
b) Find a way to allow the user to specify the Function VP wherever it is accepted.

I agree with your assessment, @dylanjm . Any of the values in a one-time (e.g. capex) CashFlow should not be dependent on activity-based information, such as Function or Activity. I think we have some subsets of acceptable input types; however the one-time and hourly repeating cashflows probably share the same input specs.
Is there a place down the line (such as when generating the HERON.Economics.CashFlow) where we can sanity check the ValuedParams used based on what period is being used for the CashFlows?
I think the philosophically correct thing to do would be to change the CashFlow node to be ether OneTime, Yearly, or Repeating and then modify the acceptable specs, but this would be a rather large impact on the input file structure.

It might be good to document this here, @mgarrouste why do you want to use a Function to specify the capex for a one-time cashflow?

@PaulTalbot-INL I am modeling an HTSE plant and in the report I am using for costs the CAPEX is expressed as a function of the plant capacity


Add prettier to pre-commit

By adding prettier to pre-commit we can ensure code is consistently formatted

Let's make sure we commit the code that makes prettier run separately from actually running prettier via the committed code.

Let's keep this one open, we have an example to add it but let's call the issue done when prettier is actually being run on every pre-commit action.


Fix error in step4 in netlify

Steps to build:

$ git clone git@github.com:poanetwork/token-wizard.git token-wizard-build
$ cd token-wizard-build
$ git checkout fix-error-folders-in-build
$ cp .env.example .env
$ npm i (necessary for nps)
$ npm run build
$ serve -s build

The problem is because the build script clears the directory

Pull Request Test Coverage Report for Build 3373

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

Totals

Change from base Build 3369:
0.0%

Covered Lines:
893

Relevant Lines:
4041

💛  - Coveralls


Make laundry dryer control cluster not provisional

This PR makes the laundry dryer control cluster not provisional.

CC @kiel-apple


add general admin notice

draft PR, awaiting some other logic for determining which admin notices to display and when

closing in favor of newer PR


[WIP] emails: Add a welcome email advertising /for/X pages.

Sketch for adding a new welcome email.

Screenshot

Known remaining steps:

Add conditionals based on organization type for:

subject line
/for/x link button

Subject line structure should be updated to: "Zulip guide for X".
Organization type -> subject word and link mapping:

0 = Unspecified -> no email
10 = Business -> businesses; /for/business
20 = Open-source project -> open-source projects; /for/open-source
30 = Education (non-profit) -> education; /for/education
35 = Education (for-profit) -> education; /for/education
40 = Research -> research; /for/research
50 = Event or conference -> events and conferences; /for/events
60 = Non-profit (registered) -> non-profits; /for/communities
70 = Government -> no email
80 = Political group -> no email
90 = Community -> communities; /for/communities
100 = Personal -> no email
1000 = Other -> no email

I'm not too picky about what happens if the org type changes between when the user registers and the email is getting sent. I expect this to be a rare case.

For scheduling, use equivalent logic to followup_day2_email_delay, but with days_to_delay = 4 [we might play with this value]. The code should be written with the expectation that more emails will be created with similar logic.
Create a text-only version of this email.
Probably rename this template, since we don't usually put _email in template names? Just for_x seemed confusing to me, but maybe it's all right. Anyway, leaving it up to an engineer to decide. :)
Update and add tests as needed.
[for @alya ] Update followup_day2 to not imply that there will be no future emails.

Topics for feedback/discussion

Subject line and content
Should the /for/X link have UTM tracking? [Plan: no]
Any edits on org type -> /for/X pages mapping? E.g., I could imagine sending  /for/communities to political groups.
Finalizing days_to_delay value.
Should we encourage demo orgs to set an org type early on (prior to converting the org)? Otherwise, users joining demo orgs won't receive this email.
Should we send this email to users who already have a Zulip account? I'm thinking "yes", especially since their existing account might be in a different org type. It might be a bit annoying if you, e.g., create a test org, and then make the actual org shortly thereafter, but I think it's OK. [Plan: yes, send]

Follow-ups

[ ] Tweak https://zulip.com/help/organization-type
[ ] In #24260, update the "Questions? Contact us any time at {{ support_email }}." line in the way that's described.

claim

@zulipbot claim

@alya - Questions about the button text and message text.

Button text
In your changes/screenshot, you have text that would need to be changed based on the type of organization. Could we make this button text more generic and the message text more specific?

Current button text
Potential revision

View Zulip's guide for business organizations
View guide

Here's the git-grep of the other button text in emails we send out:
confirm_new_email.source.html:   "button" href="{{ activate_url }}">{{_('Confirm email change') }}
emails/confirm_registration.source.html:   "button" href="{{ activate_url }}">{{ _('Complete registration') }}
emails/followup_day1.source.html:   "button" href="{{ realm_uri }}">{{ _('Go to organization') }}
invitation.source.html:   "button" href="{{ activate_url }}">{{ _("Complete registration") }}
invitation_reminder.source.html:   "button" href="{{ activate_url }}">{{ _("Complete registration") }}
password_reset.source.html:       "button" href="{{ reset_url }}">{{ _("Reset password") }}
realm_reactivation.source.html:   "button" href="{{ confirmation_url }}">{{ _('Reactivate organization') }}

I'll note here that the plain text version of these emails general drop the button text and just show the URL in the button/link.

Screenshot of realm reactivation text only email from dev environment

Message text
I'm not sure how best to revise the message text for the simplified button text. It's currently:

We hope you have been enjoying Zulip so far!
As you are getting started, check out this guide to key Zulip features for organizations like yours.

Maybe instead of "for organizations like yours", we could use the subject words above? Hmm... doesn't work for education and research; though it would be okay without the "like yours".

"for businesses like yours"
"for open-source projects like yours"
"for education like yours"
"for research like  yours"
"for events and conferences like yours"
"for non-profits like yours"
"for communities like yours"

#24739 is the updated version of these changes.

Closing in favor of https://github.com/zulip/zulip/pull/24739.


Doesn't build with Python 3.12

pathtools uses imp to get its internal version into setup.py (which seems like a kinda crazy approach to me, but hey). imp was retired in Python 3.12. There's a formula to replace the bit of it pathtools uses:
import importlib.util
import importlib.machinery

def load_source(modname, filename):
    loader = importlib.machinery.SourceFileLoader(modname, filename)
    spec = importlib.util.spec_from_file_location(modname, filename, loader=loader)
    module = importlib.util.module_from_spec(spec)
    # The module is always executed and not cached in sys.modules.
    # Uncomment the following line to cache the module.
    # sys.modules[module.__name__] = module
    loader.exec_module(module)
    return module

which seems like a lot of boilerplate just to get a version number, but hey, you can do that if you like. If it was my project I'd just use some different approach to the version number issue (my own projects have a script for doing version bumps which does this, but I've seen lots of different approaches).
For downstream (we ran into this in Fedora) I've just used a dumb non-upstreamable patch to replace the use of imp to set the version in setup.py with a marker string which we replace with the correct version in the package spec file (since we know what the version is, there).

Hi @AdamWill ,
We received this concern and we are looking into it. We'll get back to you when we have an update.

Looks like some has submitted PR #14 to fix this

Ping @JoanaMarieL ?

Will that ever be fixed...?


Fix integer based enums in query data params

Search for this text: NOTE: enum values where the enum is represented by a number in typescript are currently not supported. Use createRawConst instead
Search for this issue
Notes:
The issue is that the "Const" ParameterDefinition returned by createConst does not have any type info. The only way I can see at the moment is to mutate it after generation in multiple places in code.

In key lookup, where the key type is known
In function calls where the function type is known
In query parts, using the type that it is being compared against

None of this is ideal and would be susceptible to bugs

A possible fix is as follows. Steps should be done in a different order so as to do in small incremental changes

change method signature of export function params<TRoot>(uriRoot: string, serviceConfig: ODataServiceConfig, schema: ODataSchema): [ParameterDefinition[], Params<TRoot>] to return Params<TRoot> (no more mutable array)
change Params<TRoot>, make it contain a ParameterDefinition
change QbEmit. Give it a second parameter that maps @param names to ÒDataTypeRef
Rename QbEmit to something that represents the entire query. This class will be used a lot
Change EVERYTHING to return a Writer<T, QbEmit>

Start with serialize method. Serialize has both a T (which might be a Params<Root>) and an ODataTypeRef. It can emit (Writer monad) a QbEmit with a mapping from a param to it's type
From there it is a a cascade which will include changing EVERYTHING to a Writer (or maybe State) monad

Once all mutable state is gone, it will be safe to add any changes needed to fix this bug


Is there a way the dropzone can be something other than a container(array) ?

I can see that the entire API is laid out lists(arrays). Where we drop an item into an existing array. But can the dropzone be something other than a container ? So that I can replace the existing item with the dropped item.

You have to pass an array to dnd-list, but you can easily make sure that it only has one item, e.g. remove the existing item in the dnd-drop callback.

@marceljuenemann agreed :+1:

is there an example of this somewhere - sounds like something I may be able to use. thanks.


Answer: Google auth

Do you have any info about Google credentials?

Somebody will need to port this https://github.com/vemacs/GPSOAuthSharp over to Swift

I'm half way through doing google auth using GPS and Google Open Source frameworks

I actually use with react-native a web view with web credentials and oAuth 2 in the new release of PikaPika
Anyone would like to enter the beta testing?

I did an implementation:
https://github.com/PokemonGoSucks/pgoapi-swift/blob/master/pgoapi/gpsoauth.swift

@PokemonGoSucks re-wrote it to use Alamofire since the rest of the API is using it anyway. Thank you so much for implementing it 👍
https://github.com/rowellx68/pgorate/blob/master/pgorate/pgoapi/gpsoauth.swift

Thanks a bunch guys for getting Google Auth going. I'm going to refactor the library a bit to make it easier to use and include an example app. Any chance one of you can submit a PR for Google Auth? Thanks!

I could do that. Might refactor Auth and take out PtcAuth as it's own class. A few other strings will need to be made constants

Yes that would definitely make the most sense.

Closing as this has been implemented by @rowellx68, thanks!


Update quickstart.md

Fix the path (change /User/ to /home/<user>/ to be consistent with other paths mentioned in the article.

@alexandair : Thanks for your contribution to the Azure documentation! The author, @jluk, has been notified to review your proposed change.

Thanks @alexandair for the PR! looks good to me - #sign-off


[SPARK-26140] followup: rename ShuffleMetricsReporter

What changes were proposed in this pull request?
In https://github.com/apache/spark/pull/23105, due to working on two parallel PRs at once, I made the mistake of committing the copy of the PR that used the name ShuffleMetricsReporter for the interface, rather than the appropriate one ShuffleReadMetricsReporter. This patch fixes that.
How was this patch tested?
This should be fine as long as compilation passes.

cc @gatorsmile @xuanyuanking
@cloud-fan I misunderstood your comment. Finally saw it today when I was looking at my other PR.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution-unified/5367/
Test PASSed.

Test build #99284 has started for PR 23147 at commit 1d28d87.

Test build #99284 has finished for PR 23147 at commit 1d28d87.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/99284/
Test PASSed.


toltecctl uninstall errors out / uses the wrong wget

Describe the issue
So i tried to uninstall but my device unexpectedly after it said rebooting libatomic. It got stuck but then I got it back and then I tried to uninstall again. But this time the uninstall stops before it even begins because wget can't get opkg.
To Reproduce
I wouldn't even know because of the crash.
Expected behaviour
It would uninstall the remaining packages.
Upstream issue
If applicable, add the link to the upstream issue here.
Screenshots

Device/Package information (please complete the following information):

Device: reMarkable 2
OS version: <IP_ADDRESS>5
Package: toltecctl

Additional context

@onecseven now that OS <IP_ADDRESS>5 support has been added to toltec. Are you still having the same issue while doing an uninstall with the latest copy of toltecctl?


Give more info about RefreshToken

This page explains clearly how to retrieve the AccessToken and the RefrehToken from OpenId authentication and how to use the AccessToken. But, it doesn't explain how to use the RefreshToken and, more important, how to persist the new received tokens across multiple circuits.
OpenId uses cookie authentication but a cookie cannot be directly updated from a Blazor component or from a ServerAuthenticationStateProvider so what is the best practice to handle token expiration?
Thanks
Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 6f8acbbf-c9d4-7041-c1a7-ec9ce8f0981b
Version Independent ID: c98be365-408d-7ee6-cb74-14c44d01b0b8
Content: ASP.NET Core Blazor Server additional security scenarios
Content Source: aspnetcore/blazor/security/server/additional-scenarios.md
Product: aspnet-core
Technology: aspnetcore-security
GitHub Login: @guardrex
Microsoft Alias: riande

Hello @giuseppe-terrasi ...

... it doesn't explain how to use the RefreshToken and, more important, how to persist the new received tokens across multiple circuits.

Yes, that's correct for the coverage on performing any action in Razor components with a refresh token (and in the context of multiple circuits).

... what is the best practice to handle token expiration?

Thus far, the lack of recommendations, best practices, and examples for using the RefreshToken is by design.
Developers have asked about token management and user flows for expired tokens on the product unit's repo. For example, here are a couple of issues in that vein ...

https://github.com/dotnet/aspnetcore/issues/30927
https://github.com/dotnet/aspnetcore/issues/29819

... and there are likely other issues where devs ask about token management. I only performed a quick-'n-dirty search and grabbed a couple of issues that looked interesting. Try searching all of their issues (open and closed) with some "token" search terms (e.g., "refresh token"/"refreshtoken") and also search with the Blazor label (label:area-blazor).
This is a good time to re-ask the product unit if they'd like to provide more guidance in the doc. I asked years ago, but we didn't add guidance at that time, and I don't recall the reason that they gave me for avoiding further detail.
Leave this issue open, and I'll ping for triage on Friday this week. I don't know how fast you'll get an answer here. I hope you find some juicy tidbits and tips just by searching and reading the existing issues on their repo. That might at least tide you over until they address this issue here on the docs repo.
Two other avenues that you can pursue ...

Search the Net for blogs and external articles on the subject.
Search for existing convos (or packages that help with this) and/or inquire with devs on pubic support forums. We recommend the usual spots ...

Stack Overflow (tag: blazor)
ASP.NET Core Slack Team
Blazor Gitter
Awesome Blazor (Community-maintained collection of Blazor resources)

Eventually, we'll receive a response here. Stand-by! ... and thanks for asking about this.

Hello @guardrex
thank you for your reply. I appreciate that this problem will be analyzed and I hope a common solution will be found. More support for updating client-side data from server-side code will be also useful.
Meanwhile, I've implemented a revalidation system that involves cookies, secured localstorage and events but I think that it is complicated and difficult to embed in a library.

UPDATE (6/25): I've reached out to management again, and we'll base any coverage updates on whatever they say. I think that they're going to say that this is an advanced subject with many permutations such that we won't offer much explicit coverage. IIRC, Javier said to either allow the Blazor framework to automatically redirect to the ASP.NET Core part of the app for reauthenticating the user and/or to try-catch a failed access token request and manually redirect to the ASP.NET Core part of the app for re-auth ... AND that any user state must be preserved by dev code when these redirects take place or else the state is lost. We'll hear back on what should be added/updated and proceed from there.

Don't worry, but I think that the same problem will still be present in .NET 7. The improvement in the interaction with ASP.NET Core part sounds great but this implies that the user will be redirected while it is doing something and this is a bad user experience. If this could be done silently it will be more useful.
Thanks.


Removed dobule spaces, fixed some broken admonition syntax, added single spaces before and after headings.

Increase plain readability on editors. There were a lot of "warnings", which is quite annoying.
@jowilf It doesn't affect much and I accidently did the whole thing on the main branch. Can you review this before my other PRs?

Why is this failing? I didn't touch that file.


Node is created outside of the viewport in RTL editors

Godot version
4.1 dev2, 4.0.3
System information
Windows 10, ryzen 5900x, radeon 6950xt (driver: 23.2.2)
Issue description
There are two bugs:

When I create a new node, it is created outside of the viewport. (as in first video)
When I run the project, all the content inside the viewport dont appear. (as in second video)
I believe the second issue is related to the first.

Note: these problems are in RTL editors.
https://github.com/godotengine/godot/assets/121864036/84f0d434-0d1b-4c23-9fb0-510257e2e191
https://github.com/godotengine/godot/assets/121864036/b2bc20c7-1e2e-4d04-99e7-d66860ffced2
Steps to reproduce
Videos explain.
Minimal reproduction project
N/A

Try to describe the reproduction steps clearly in text, my browser (firefox / chromium) cannot play the video normally. I had to download the videos to my computer to play them.
It seems to be caused by the different coordinate systems used by Control and Node2D.
In addition, left/right is a bit misleading, descriptions like begin/end are suitable for LTR/RTL.

I've been playing with it, and I think I've figured out what the problem is. It is simple and I'm not sure if it was a bug or not :)
but I feel there is a bug.
Anyway, I want to correct some of what I have mentioned above:

I said :"..all the content inside the viewport dont appear".  and that's not correct. All nodes that belong to Node2d are working fine.
The problem applies only to Control nodes. It is actually just about "Layout Direction".

Steps to reproduce

Open Godot Editor (English version).

Create a 2d Scene.

Create any Control node as child for it, and click on it, and don't move it.

Go to Inspector -> Layout -> Layout Direction -> set it to Right-to-Left (this option is the default for RTL editors).
And here you will notice that the node itself and its borders are outside of the viewport (this is the first problem).
I believe it should be inside the viewport, maybe the top right corner.

Drag that Control node in the center of viewport, and run the project.
Here you will notice that nothing displays on the screen.

Drag that Control node to left outside of the borders of the viewport, and run the project.
Here we will find our lost node shows itself on the screen, but also in an inverted way.

@Rindbee Last point I didnt get it, but if you mean the "convention" I see that RTL/LTR are perfect; because they are objective, while begin/end are subjective; because they depend on which direction the person begins/ends with.
Also RTL/LTR are known convention, so that I mentioned them. other than this I didnt get it

Last point I didnt get it, but if you mean the "convention" I see that RTL/LTR are perfect; because they are objective, while begin/end are subjective; because they depend on which direction the person begins/ends with, so they will lead to more misleading. Also RTL/LTR are known convention, so that I mentioned them. other than this I didnt get it

I thought left/right should be relative to me (in screen they should be fixed), but in those alignments, would be swapped relative to layout_direction, but the text description didn't change, and then I'm a bit out of it.

LTR
RTL

Could you please redo the steps? I just made a small change on them.

Could you please redo the steps? I just made a small change on them (step1 and step4).

Yes, I can reproduce it.

This is before the last change on the steps I mentioned, and it does not display the bug.
Then please try again but:

In Arabic version.
Set the layout direction on : Inherted. and run the project after the steps, you will see the bug, I hope.

Also, Try to make Control node as child for Node2d.

I'm not sure what the best solution here. This is not fixable without significant changes to the non-Control nodes, Node2D do not have size, so there's no inside either.

I'm not sure what the best solution here. This is not fixable without significant changes to the non-Control nodes, Node2D do not have size, so there's no inside either.

Actually I'm wrong, non-Control seems to have proper get_parent_anchorable_rect based on viewport visible rect. But layout expect it to always have 0,0 origin, which is not the case for non-Controls. Should be an easy fix.

non-Control seems to have proper get_parent_anchorable_rect based on viewport visible rect. But layout expect it to always have 0,0 origin, which is not the case for non-Controls. Should be an easy fix.

This will work with Nodes like Sprite2D and similar stuff with visible rect, but still won't work with empty Node2D scene root (since it still doesn't have size), but I do not think it's should be considered as a bug.


git lfs track doesn't make file paths relative to GIT_DIR

Given a git repo in /Users/msch/work/foo:
git lfs track /Users/msch/work/foo/testcases/bigfile.pdf

leads to this .gitattributes file:
/Users/msch/work/foo/testcases/bigfile.pdf filter=lfs -crlf

when it should lead to this .gitattributes file:
testcases/bigfile.pdf filter=lfs -crlf

Thanks, that's legit.  I wonder if we should block any paths that start with /, unless they happen to match the current working directory?

IMO paths outside the working dir are invalid, so yeah. But so would be ../../*.pdf.
The way I managed to find this was by dragging the bigger files from Finder.app to Terminal.app, expecting the paths to be resolved. If I had dragged files from e.g. the wrong working dir I'd have ended up with e.g. ../../*.pdf.

PR #356 takes care of absolute paths and paths outside the repository


feat(state-keeper): miniblock max payload size (BFT-417)

What ❔
Adding miniblock sealing according to max payload size.
Why ❔
Compliance with max payload size imposed in consensus modules.
Notes

Building the payload incrementally isn’t feasible because the miniblock’s transactions are flushed to DB before being reconstructed to be encoded as the payload. So the payload size accumulator added to MiniblockUpdates is just a heuristic done by encoding every executed transaction only to find out the estimated encoding size.
miniblock_max_payload_size was added to StateKeeperConfig, decoupled from max_payload_size in consensus::config::Config. It is possible to only use the latter, or to make the latter define/override the former. The state keeper max size should be less than 1/2 the consensus max size, because it never rejects the latest transaction, and doesn’t account for some metadata fields. Actual value in that respect was not set yet, because I wasn’t sure about values used for different non-test environments, or if we even want to keep this approach.
MiniblockMaxPayloadSizeSealer was added, implementing should_seal_miniblock() alone (without should_seal_l1_batch_unconditionally, as in trait IoSealCriteria). This isn’t an ideal solution, so other ideas are welcome.

The applied config are:

Statekeeper threshold: 1mb
Consensus threshold: 2.5mb

Closing BFT-417
Checklist

[ ] PR title corresponds to the body of PR (we generate changelog entries from PRs).
[ ] Tests for the changes have been added / updated.
[ ] Documentation comments have been added / updated.
[ ] Code has been formatted via zk fmt and zk lint.
[ ] Spellcheck has been run via zk spellcheck.
[ ] Linkcheck has been run via zk linkcheck.

The newly applied config are:

Statekeeper threshold: 1mb
Consensus threshold: 2.5mb


$templateCache in ngInclude does not work correct with $http interception

Let we have some template cached through $templateCache.
Call it template_uri.
When ngInclude tries to resolve template it use $http service with cache option set to $templateCache.
so $http looks through cache and if it does not exist value  for passed template name (template_uri in our case) then makes request to server. It works perfect until we use interception. In that case we may add some additional parameters to url and in result get something like template_url?param=someval which of course could not be found in cache.

Yes, the template urls are used as the cache key. It's not really expected that they change. What kind of parameters do you append? Could you use headers instead?

Closing due to the lack of the reproduce scenario / sufficient info for this issue to be actionable.


Following simonw's blog yields Error:

Hi! I have followed every step in Run Llama 2 on your own Mac using LLM and Homebrew, in particular:
pipx install llm # python 3.11
llm install llm-llama-cpp
llm install llama-cpp-python
llm llama-cpp download-model \
  https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGML/resolve/main/llama-2-7b-chat.ggmlv3.q8_0.bin \
  --alias llama2-chat --alias l2c --llama2-chat

Next, I ran
❯ llm -m l2c 'Tell me a joke about a llama'
Error:

Any ideas how I can debug this issue?
Up: I am on MacOs Sonoma (14.0), M1 arch.

Since the blog post was written (Aug 2023), llama.cpp switched to a new file format (GGUF instead of GGML). GGML is no longer supported by llama.cpp, so that might be the issue. Try it with the equivalent GGUF file: https://huggingface.co/TheBloke/Llama-2-13B-GGUF/resolve/main/llama-2-13b.Q8_0.gguf.

Is there no way to switch to a compatible llama.cpp?
I'm on a metered and slow connection and it already took 2 tries (because llm doesn't yet support resume which HF does provide) to receive the file...

If you already have the ggml file, you should be able convert it using the convert-llama-ggml-to-gguf.py script. You also don't need to download the model using llm for it to work with llm, as you can just put the file in your models folder and edit the models.json to include it. Going back to a "compatible" version might introduce a bunch of issues with dependencies.

I downloaded a GGUF model, but it still gives the Error:  message without any detailed error message.
llm llama-cpp download-model \
  https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/resolve/main/llama-2-7b-chat.Q8_0.gguf --alias llama2-chat --alias l2c --llama2-chat

After installing, I tried to run the below two commands, but both returned the same Error:

llm prompt -m l2c 'Tell me a joke about a llama'
llm -m l2c 'Tell me a joke about a llama'

Could you run this command and paste in the output?
llm plugins

You should have 0.2b1 of llm-llama-cpp - otherwise you'll need to upgrade it with:
llm install -U llm-llama-cpp

You may also have better success with https://github.com/simonw/llm-gpt4all - the most recent release of that has been giving me really good results.

I was seeing the same issue "Error:" issue with ggml model. After downloading and using the gguf model, I am seeing:
/Users/Sanjay/Documents/workspaces/AI/llama-2-mac-simonwillison> llm -m l2c 'Tell me a joke about a llama'
Abort
/Users/Sanjay/Documents/workspaces/AI/llama-2-mac-simonwillison>


Fix README.md to use right the s2n_setup_env.sh path

Please note that while we are transitioning from travis-ci to AWS CodeBuld, some tests are run on each platform. Non-AWS contributors will temporarily be unable to see CodeBuild results. We apologize for the inconvenience.
Issue # (if available):
Description of changes:
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Codecov Report

Merging #1597 into master will increase coverage by 7.45%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #1597      +/-   ##
==========================================
+ Coverage   79.82%   87.28%   +7.45%
==========================================
  Files         214      146      -68
  Lines       15998    10129    -5869
==========================================
- Hits        12771     8841    -3930
+ Misses       3227     1288    -1939


add MockNetCat

What changes were proposed in this pull request?
I add a MockNetCat class, which avoid manually launch 'nc -lk 9999' command for test
also I put a MockNetCatTest class, a JUnit 4 test case which test MockNetCat
How was this patch tested?
run MockNetCatTest to test MockNetCat
this class uses an structured streaming example which read socket data from localhost:9999
Please review http://spark.apache.org/contributing.html before opening a pull request.

Can one of the admins verify this patch?

Close this please


Switch to https://github.com/gomarkdown/markdown

switch to a better library for markdown
See #924

@bmpickford thanks!


Cannot query field "price" on type "ProductVariant". Did you mean "pricing"?

What I'm trying to achieve
Setting up 2.10.1
Steps to reproduce the problem

Set up a fresh database.
Try to add a new product thru dashboard.
Get error: Cannot query field "price" on type "ProductVariant". Did you mean "pricing"?

What I expected to happen
Product is added successfully.

I have the same issue.

@victorias @adavie1  Which dashboard version/ Saleor core version you are using? I recently installed saleor and working fine with stable branches of Dashboard and Saleor Core.

Hey, for a while the master branch of dashboard and saleor was not synchronized. Now it is fixed and you can update saleor's master branch to resolve this issue.

I have the same issue on version 2.10.1 release.

@aKamrani if you are using master branch of dashboard, you should also update master branch of saleor. Today we merged PR which resolve this issue.

After git pull it's fixed for me.


Code Quality: Update the XAML styler check workflow to apply styling as well

Description
As the title.
Concerned code
The workflow that runs XAML styler console checker.
Gains

Better maintainability.

Requirements

Update the file to do so

Comments
https://github.com/CommunityToolkit/Labs-Windows/blob/main/ApplyXamlStyling.ps1

Their GitHub workflow only checks this, like what ours does already

@heftymouse https://github.com/CommunityToolkit/Labs-Windows/blob/main/ApplyXamlStyling.ps1#L100 See here.
@yaira2 Why did you close this issue?


[publication_list] :highlight_author: does not work for authors with middle name

highlight_author is working fine for FIRST-NAME LAST-NAME authors, but when the author has a middle name as well the highlighting does not work.
Is it possible to fix this please ?

Thanks! I've just pushed a fix. The version with the fix should be available for installation within 24h.


[Function] Return type determined by input type

I have an easy function:
function getName(person) {
  if (! person) {
    return undefined
  } else {
    return person.name
  }
}

const maybeFrank: ?Person = getFrank()
const definitelyMaria: Person = getMaria()

const frankName: ?string = getName(maybeFrank)
const mariaName: string = getName(definitelyMaria)

I would like to type it in a way, so:

If parameter is Just Person, return type is Just String
If parameter is Maybe person, return type is Maybe String

Is that possible?

You can now use conditional type


ci(docker): add catatonit and tzdata to image

Small change here, tzdata lets users set TZ env with their timezone and catatonic is a tiny init manager which won't cause problems.

why do we need catatonit?

I'm not sure if it's needed per se, but it shouldn't hurt having it.

Catatonit is a /sbin/init program for use within containers. It forwards (almost) all signals to the spawned child, tears down the container when the spawned child exits, and otherwise cleans up other exited processes (zombies)


Background Pattern - Rebuild

Add new unique component with variants
Add class-variance-authority
Don't rely on @inspira-ui/plugins for background patterns

For now, I'm still using Interface but will change when we choose one option.

@rahul-vashishtha Lot of stuff to discuss on this component rebuild (as example for other components). It's inspired by Shadcn-vue + some other cool stuff for clean and reusable code.
And I have an issue to display .ts files in the docs, as the CodeViewer components is locked for .vue files.

Hi @nathan-de-pachtere,
I have a few queries regarding the changes:

Constant variable naming. CAPS_SNAKE_CASE doesn't seems right. It can be short enum also IMO like Direction.Top.

The reason I was using speed prop as number and then updating internally in seconds or milliseconds inside the component was making it simple for user, but now user has to provide string or use from Constant value.

Also, I'm preferring not to bind Inspira UI with any specific component library or design system. Developers should be able to use it freely with their preferred design system or component library.
Regarding Inspira UI plugins, it sets up the base for all the components at once, there are few more updates I'm planning to perform with Inspira UI.

@nathan-de-pachtere We can go with interface as discussed in https://github.com/unovue/inspira-ui/pull/23.
Regarding the speed prop we can make it number (for milliseconds or seconds).

@rahul-vashishtha
For the CAPS_SNAKE_CASE subject :

used to have CAPS_SNAKE_CASE syntax for shareable constant that are immutable, in order to identify them. In that example,  PATTERN_BACKGROUND_DIRECTION is immutable for the developer using it.
PATTERN_BACKGROUND at the beginning is to identify to which part of the project it's belong to. As multiple component will have their own DIRECTION constant and others. If not prefixed this can lead to wrong import when project build up.
This make it easier to know what you import between Interface/Type, classes or constant
It's using the normal const <variable> =  but is not mutable because of the as const. Just typescript syntax for doing that.
It's clearly identifiable inside a project
This is quite normal in strongly typed languages
I never use Enum in Typescript as its mess up with typing. It's way more simple, useful and convenient to have {} as const. Did use Enum in the past, but now it's a 'no thanks'.

PATTERN_BACKGROUND_DIRECTION is the immutable variable
PatternBackgroundDirection is the Type/Interface corresponding to it
Direction can be a Classe or an Interface/Type
If we use only Direction this become confusing as there will be 2 code elements named the same, or we need to specify something like DirectionInterface or DirectionI  (this is not recommended as well)
For example, I also use EVENT_CamelCase for events in a project when I have a global Event Pub/Sub system like Mitt. The reason is the same: they are immutable, easy to identify within the project, and it's clear while coding that EVENT_OnPostBook is an event. I enforce this convention using custom ESLint rules, which specify that variables shouldn't be uppercase unless they start with ROUTE_, EVENT_, or other predefined prefixes. This is just an example and not related to any actual project. ;)

Can you reopen that merge request  ? I'm currently doing some change to it ^^


feat: Huawei push kit support

It would be great if we could separate fcm.py and hpk.py ;)

refactored


Conda package

Hello,
I was wondering if there are any plans to create a conda package to facilitate install?

Conda would be nice... will try to see if it can be done in the future.
Note that most of the external dependencies can be installed with conda:
conda install -c bioconda prodigal hmmer blast -c nanoporetech modkit

However, I don't think it would be possible to package STREME in conda which would be a limitation. We might be able to remove this dependency in the future though.

Just tagging onto to confirm I managed to get MicrobeMod running with the bioconda distro of meme (which was great as the compilation on the HPC was proving to be a real pain in the hoop).
Briefly:
conda create -n microbemod_env mamba mamba install -c bioconda prodigal hmmer blast meme mamba install -c nanoporetech modkit #had to install this separately as it was not resolving dependencies out of the box #DL cath-resolve hits binary chmod u+x cath-resolve-hits mv cath-resolve-hits ../conda/microbemod_env/bin export PATH=/path/to/cath-resolve-hits:$PATH
There was a slight issue with it not finding the path to the site packages in my conda virtual environment, so I had to manually add it with sys.append() to get it to pass the tests.
Thanks for the great software, trying it out on some fresh ONT libraries now!

When I try that with pandas 2.1.2 py310hcc13569_0 conda-forge in my condo environment I get an error running pip install .:  ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: '/Accounts/gkanaan/.conda/envs/methylate/lib/python3.10/site-packages/pandas-2.1.1.dist-info/METADATA'
Any idea why that would happen given the requirements aren't that strict?

Thanks for developing this tool -- I am excited to use it! I have been struggling to get cath-resolve-hits downloaded. It seems as though the binaries are not compatible with my HPC (CentOS rather than Ubuntu), and the build from source is running into all sorts of dependency errors as the software versions still on the cath-tools GitHub are outdated. I feel a bit stuck in that never-ending dependency hairball.
Have you all see this issue on the development side? Do you have any recommendations for how to move forward?

I've not run into that issue, although I'm on ubuntu. ...
Are you able to try installing it this way through conda instead?
https://anaconda.org/bioconda/cath-tools
I am exploring the possibilities of a conda package and a Docker for MicrobeMod that might help - hope to have an update soon.

Our cluster runs Centos 7 and the download of cath-resolve-hits worked ok for us. I made the conda environment then downloaded just cath-resolve-hits from the github and put it in the bin folder of the conda environment. I had to make it executable with chmod +x cath-resolve-hits before it would run.


move test to right place, add travis.yml

This repo is open source, so we can setup Travis CI - this fixes the test file location to the latest create-react-app convention and adds a travis.yml file.
(the create-react-app convention is to colocate tests with their associated app logic)

@marimiyachi added!