pump & concat error handler question

Hi!
I refer to the repo all the time; It's great. thanks! Hope this general streams question is OK.
I noticed that if you pipe/pump into concat-stream, and an error happens before any data passes,
concat's callback gets called before pipe's error handler.
So concat's callback gets an empty object, but I don't know if that means "there was no data" or "there was an error". I guess in this instance I'd like to be able to process.exit(1) from the error handler before processing the data, but I could see how in some cases you'd want it the other way around.
Am I using something wrong? Any tricks?
var fs = require('fs')
var miss = require('mississippi')

miss.pipe(
  fs.createReadStream('./nofile'),
  miss.concat(function (result) {
    console.log('concat', result)
  }),
  function () {
    console.log('error handler')
  }
)

concat
error handler

The challenge with concat and pump is that you a split callback paths with pump and concat.
Remember the callback on pump isn't just the error handler, it's more accurately dubbed the 'stream ended' or 'stream finished' handler, where you handle the first error thrown by the pipeline.
Any in-memory writable segment should (can?) capture the result on the scope outside of the pipeline and then callback from the pump callback with it.  Callbacks/events/properties of the pipeline segments should always be process in the pump callback, and never act as the exit path of the pipeline.  These callbacks should always be though of, resolve and behave as if they are nested inside the pump operation.
var fs = require('fs')
var miss = require('mississippi')

let results
miss.pipe(
  fs.createReadStream('./nofile'),
  miss.concat(function (result) {
    console.log('concat', result)
    results = result
  }),
  function (err) {
    if (err) throw err
    console.log('stream ended')
    console.log(results)
  }
)

One could wire up concat stream and pump to somehow automatically pass results, but this would probably be a non-standard convention on top of the stream API.  Perhaps it could be defined by pump?

Closing, but we can re-open if there are more questions.

Callbacks/events/properties of the pipeline segments should always be process in the pump callback, and never act as the exit path of the pipeline.

that's the answer!


make sure HTML assets are up to date on staging

Update design assets on http://staging.healthsites.io/ so that they reflect http://healthsites.mashastudio.net/
Ideally you should be able to update the CSS and HTML received from Maria. This will take care of the following issues:

change 'HEALTHSITES.IO' to 'healthsites.io'
Align strapline (A free, curated, global, canonical source of healthcare location data)
Update share icon
Update menu font

Search:
5) change 'health site' to 'healthsite'
About:
6) Change 'What is Healthsites.io' to 'About healthsites.io'
7) Update the font of the body copy in the about section
The blue bar section...make updates to..
8) Data model
9) Share the location data
10) Developers
11) Chat live
Country data:
12) Add map - The map should fit between the blue bar (no gap) and the grey of the Lifecycle section (no gap)
Lifecycle section:
13) Update the assets
Partners:
14) Center the partner logo's
15) Update the footer

@markherringer already made PR


Fix eth call

Purpose
Fixes #1844
EVM PR https://github.com/Taraxa-project/taraxa-evm/pull/92
How does the solution address the problem

Changes made

also consist of changes of https://github.com/Taraxa-project/taraxa-node/pull/1843 so I do not need to rebase

@rattrap FYI

prnet cleaned-up successfully


General Typography Improvements

Describe the solution you'd like
In https://github.com/orchest/orchest/pull/269#issuecomment-849726325, @ricklamers highlighted that the Alert text size is bigger than the rest of the table and feels jarring – we should either:

Consider overhauling the typography as a whole to feel more cohesive to the new body size set by Stitches
Set a smaller Alert variant

Describe alternatives you've considered
N/A
Additional context
N/A

I think this issue is a bit too general and we will be addressing the UI/UX of the application view by view and so I am pretty sure this issue will automagically be solved.


What is the OSS license for Protractor?

Hi there!
Thanks for submitting an issue to Protractor.
To help us help you better, please do the following before submitting an issue:

Review the questions section of CONTRIBUTING.md.
Make sure you are not asking a usage or debugging question. If you are, use StackOverflow, Google Group discussion list, or Gitter to get help.
Provide a minimally reduced test case. This makes it much more likely that your bug will be fixed. Protractor has a test Angular application available at http://www.protractortest.org/testapp which you can use for the reproducible test case.
Fill in the information that corresponds to your type of issue below.
Delete this intro and any unrelated text :smile: (if you do not we'll assume you haven't read these instructions and automatically close the issue.)

Bug report

Node Version: ``
Protractor Version: ``
Angular Version: ``
Browser(s): ``
Operating System and Version ``
Your protractor configuration file
A relevant example test
Output from running the test
Steps to reproduce the bug
The URL you are running your tests against (if relevant)

Feature Request

Reasons for adopting new feature
Is this a breaking change? (How will this affect existing functionality)

@sundernatarajan take a look at [protractor/package.json] , as I see it is MIT (https://github.com/angular/protractor/blob/master/package.json)

Here is the full license.

The MIT License

Copyright (c) 2010-2017 Google, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

 IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

Thank you!
From: GitSage<EMAIL_ADDRESS>Sent: Wednesday, August 1, 2018 5:04 PM
To: angular/protractor<EMAIL_ADDRESS>Cc: Natarajan, Sunder<EMAIL_ADDRESS>Mention<EMAIL_ADDRESS>Subject: Re: [angular/protractor] What is the OSS license for Protractor? (#4905)
Herehttps://github.com/angular/protractor/blob/master/LICENSE is the full license.
The MIT License
Copyright (c) 2010-2017 Google, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/angular/protractor/issues/4905#issuecomment-409722173, or mute the threadhttps://github.com/notifications/unsubscribe-auth/An3cEuBThROiPttXowPLtW4XP0-D3-KEks5uMheugaJpZM4VkflU.

The information in this email is confidential and may be legally privileged. It is intended solely for the addressee. Access to this email by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken or omitted to be taken in reliance on it, is prohibited and may be unlawful. When addressed to our clients any opinions or advice contained in this email are subject to the terms and conditions expressed in the governing KPMG client engagement letter.


[VL] Add config option spark.gluten.sql.columnar.backend.velox.enableSystemExceptionStacktrace

Related to https://github.com/oap-project/gluten/issues/3048.
We observed some rare crashes in library libunwind when Velox is trying to handle exceptions.
After this patch, set both spark.gluten.sql.columnar.backend.velox.enableSystemExceptionStacktrace=false and spark.gluten.sql.columnar.backend.velox.enableUserExceptionStacktrace=false to workaround the crash issue to let the exceptions throw normally.

Let's set them as false by default, since the infomation is used for developer only. From end customer usage it should be set to false to avoid the core dump issue.

Let's set them as false by default, since the infomation is used for developer only. From end customer usage it should be set to false to avoid the core dump issue.

I'll do that in another patch. Some similar issues needs to solve together.

===== Performance report for TPCH SF2000 with Velox backend, for reference only ====

query
log/native_3089_time.csv
log/native_master_09_13_2023_1dc14126a_time.csv
difference
percentage

q1
43.88
43.54
-0.338
99.23%

q2
24.68
24.58
-0.103
99.58%

q3
35.68
37.58
1.897
105.32%

q4
41.32
41.77
0.445
101.08%

q5
69.85
69.36
-0.483
99.31%

q6
6.47
6.35
-0.117
98.20%

q7
85.85
85.84
-0.016
99.98%

q8
79.91
79.11
-0.809
98.99%

q9
119.48
118.08
-1.399
98.83%

q10
47.81
45.32
-2.498
94.78%

q11
19.71
19.61
-0.104
99.47%

q12
25.32
26.16
0.838
103.31%

q13
50.34
50.61
0.269
100.53%

q14
15.51
16.64
1.129
107.28%

q15
29.11
26.80
-2.313
92.05%

q16
16.15
15.83
-0.324
98.00%

q17
120.93
120.95
0.017
100.01%

q18
161.28
162.53
1.247
100.77%

q19
12.48
13.26
0.777
106.23%

q20
31.51
29.37
-2.144
93.20%

q21
242.55
235.96
-6.585
97.28%

q22
15.48
15.92
0.442
102.86%

total
1295.32
1285.15
-10.171
99.21%


Add menu shortcut key m to ? help menu

Sometimes I forget the keyboard shortcut, and it's not listed in the reveal.js help pop-up.

Got it, thank you.


Use new 'typeRepHash' field accessor for GHC>=7.10

This is available starting with GHC <IP_ADDRESS>50307 (see
ghc/ghc@b2b1c8d4623db6f8fe38afbe59a8adcf0815056d) and avoids having to
import the unsafe Data.Typeable.Internal module while providing some
level of forward compatibility regarding changes to the internal
representation of TypeRep.
NB: This will break compilation with the exisiting GHC 7.10.1 RC1 and
RC2 snapshots

The build-job currently fails with GHC 7.10.1 because of <$> (see also https://github.com/batterseapower/ansi-wl-pprint/pull/11)

I'm afraid we'll have to reopen this one, as SPJ suggested renaming typeRepHash and it looks like we'll do that
/cc @ekmett

see also #88


Apps Script - Data is not loaded to Bigquery

Expected Behavior : Create table and load data from sheet
Sample URL: https://github.com/gsuitedevs/apps-script-samples/blob/master/advanced/bigquery.gs
Description:
Actual Behavior: Table created, but data is not loaded to Bigquery
Steps to Reproduce the Problem

Used the sample Apps Script code
Enabled the Bigquery and Drive API
Executed script

Issue Log:
Errors:
Error while reading data, error message: CSV table encountered too many errors, giving up. Rows: 1; errors: 1. Please look into the errors[] collection for more details. (error code: invalid)
Error while reading data, error message: CSV table references column position 3, but line starting at position:9 contains only 1 columns. (error code: invalid)
You are loading data without specifying data format, data will be treated as CSV format by default. If this is not what you mean, please specify data format by --source_format. (error code: invalid)

The sample code only works for csv files, not google sheets. Sheets data needs to be converted to csv format to use the code.


feat: show update version when new version is available

Fixes #114

Proposed Changes

Now, after a herbs new command, if an update of cli is available, a console information shows up

Readiness Checklist
Author/Contributor

[ ] If documentation is needed for this change, has that been included in this pull request
[ ] Remember to check if code coverage decrease, if so, please implement the necessary tests

Reviewing Maintainer

[ ] Label as breaking if this is a large fundamental change
[ ] Label as either automation, bug, documentation, enhancement, infrastructure, or performance

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


QUESTION: how to use dio.simpleGet

Hello, i don't see the option to use onSimpleGet, how i can do to test using this new method?

Hello @alexlovar, where did you find oSimpleGet method? It seems we don't have such method.

sorry a tipo error: is dio.simpleGet.


update getting started for csproj build system.

Fixes #1535
Updates all the application code,
the text in the MD file,
and the updated VS Code debugging settings.
/cc @spboyer

VS Code pathing is no longer needed to be changed for the debugger, the locations are automatically set after it adds the .vscode specific files.


Configure multiple clients/tenants

Hi, opening a ticket as I didn't find a mention about multiple clients anywhere on the docs (maybe I'm blind).
I was using this extensions to inject SqsClient on my quarkus production app which is using around 10 different SQS queues.
Recently, people from security came up with a new requirement where basically each queue will need its own dedicated access key and secret to be accessed, and this was not up for debate :)
As far as I am aware, this extension is able to manage only a single SqsClient. On quarkus, it is common that extensions allow you to configure a global client, but also multiple other named clients. This can be observed on extensions such as OIDC, OIDC-CLIENT and DATASOURCE, etc.
If this was in place, I'd easily be able to comply with this new requirement, but right now I'm having to completely move away from the extension and go back to managing the SDK/Clients myself.
Am I missing something, or is this the current scenario?

You're totally right. Having multiple named client is currently not supported. If you want to tackle this one, this would be awesome.

hmm it sounds like a cool thing to contribute with, but I am not sure where to even start from to be honest, as i never contributed to quarkus or any of its extensions. any suggestions on how to approach this?

Side note for the security team, you may not use access key in the first place to consume queue and use IAM identity. Unfortunately, I don't know how to do it, but it should be possible to tweak the credential provider with a AwsCredentialProvider instance as a bean
quarkus.sqs.aws.credentials.type=custom
quarkus.sqs.aws.credentials.custom-provider.name=mybean

@Named("mybean")
    @Produces
    @ApplicationScoped
    public AwsCredentialsProvider credentialProvider() {
          return // whatever is required to authenticate with IAM identity.
    }

That being said, I first thought it should be easy to produce a client  for injection point annotated with a name attribute like @AwsClient("myclient"). But it is not that easy. I'll try to give you some context on the intrinsics of the extension. You may read these two tutorials first:

https://quarkus.io/guides/building-my-first-extension
https://quarkus.io/guides/writing-extensions#build-step-processors

After reading them, make sure you understand the difference between a runtime module in the first hand and a deployment module with its build step processor and recorder on the other hand. If you are at ease with CDI mechanisms then, it will be a piece of cake to naviguate in the repository (at least what follows should make more sense).
The very basics of the project is to produce a bean for each kind of aws sdk client. One extension per aws client. Each extension is a duplication of the same pattern where we strongly type the client type to be used in abstract classes and processors in the common module. Actually, a default bean is produced by a producer in the runtime module of each client extension. This producer is being injected with a aws client builder instance (both sync and async builder) of the type of the client it should produce.
The aws client builder instance beans are generated programmaticaly (aka synthetic beans) when an injection point for a client is discovered. The builder instance is fully set up with its transport layer and endpoint/credential config.
To resume, we scan the CDI context at build time and discover injection points of a client. If one is found, we produce a bean for the client builder. At runtime, the producer in the runtime module can produce the client bean to be injected in the injection point.
To implement the requested feature, I think the general idea would be to generate named bean based on discovered injected points decorated with a new named-like attribute AwsClient like DataSource.
Let's take Sqs as an example.
In the runtime module, you will find Config classes. The one that is of interest for this feature is SqsConfig. It contains two properties sdk and aws
https://github.com/quarkiverse/quarkus-amazon-services/blob/4ecc71767857d476767ffd36f0fac98c1b2b7de1/sqs/runtime/src/main/java/io/quarkus/amazon/sqs/runtime/SqsConfig.java#L16-L27
Both allow to configure the endpoint and credentials. I think that it is enough for the needs. Others allow to configure how the underlying transport layer (netty/apache/url/crt) will behave and I don't think it is desirable to have different settings here.
Looking at how quarkus DataSource implement the config part
https://github.com/quarkusio/quarkus/blob/32b2b08f4a5b16bb4df7333fd3137334c33091e8/extensions/datasource/runtime/src/main/java/io/quarkus/datasource/runtime/DataSourcesRuntimeConfig.java#L25
we can move these two properties in a containing interface and replace them in SqsConfig with a Map of string and this new interface.
Now the harder part.
Clients injection points are discovered in a build step
https://github.com/quarkiverse/quarkus-amazon-services/blob/4ecc71767857d476767ffd36f0fac98c1b2b7de1/common/deployment/src/main/java/io/quarkus/amazon/common/deployment/AbstractAmazonServiceProcessor.java#L60
This step produces RequireAmazonClientBuildItem  item for each discovered injection point that match the extension. This item is a signal for the rest of the common module that a perticular client is required and that we should start building and registrering the client builder bean.
We may use it to actually require default and named client if we add a name property.
To find out if an injection point requires a named client, we can check for a qualifier like what is done in the processing of the S3Crt alternative
https://github.com/quarkiverse/quarkus-amazon-services/blob/4ecc71767857d476767ffd36f0fac98c1b2b7de1/s3/deployment/src/main/java/io/quarkus/amazon/s3/deployment/S3CrtProcessor.java#L66-L68
Note the pattern of matching syncClientName() or asyncClientName(). You will find it a lot. This is because all extensions inherit from this base class. So if you include two extensions (say sqs and s3), the logic will be run twice. One for sqs, one for s3.
Now, we will track the use of RequireAmazonClientBuildItem.
In setupClient, the RequireAmazonClientBuildItem is exchanged for a AmazonClientBuildItem without much logic.
https://github.com/quarkiverse/quarkus-amazon-services/blob/4ecc71767857d476767ffd36f0fac98c1b2b7de1/common/deployment/src/main/java/io/quarkus/amazon/common/deployment/AbstractAmazonServiceProcessor.java#L109
The AmazonClientBuildItem is then consumed by a bunch of createXXXTransportBuilder, which builds the tranport builder instance for the matching configured transport (apache/netty/crt/url-connection). Only one of them will produce a AmazonClientSyncTransportBuildItem that contains a wrapped instance of the builder for a client type.
Then, finally, this AmazonClientSyncTransportBuildItem is consumed in the createClientBuilders and the wrapped instance of the builder will serve to create the synthetic bean instance.
https://github.com/quarkiverse/quarkus-amazon-services/blob/4ecc71767857d476767ffd36f0fac98c1b2b7de1/common/deployment/src/main/java/io/quarkus/amazon/common/deployment/AbstractAmazonServiceProcessor.java#L354-L368
Note that this whole path handles both sync and async injection points.
As we saw, we need the transport builder instance not only for the default client bean, but now, for all the beans. So we cannot assume anymore that we should produce a single bean from AmazonClientSyncTransportBuildItem.
If possible, we can inject the RequireAmazonClientBuildItem in the createClientBuilders, and we will have to iterate over them and produce a synthetic bean for each of them with the appropriate qualifiers and the appropriate configuration.
You can inspire from agroal to apply qualifers
https://github.com/quarkusio/quarkus/blob/a6f5d5f062ae5f47af881f3501d60cbe5ccb6177/extensions/agroal/deployment/src/main/java/io/quarkus/agroal/deployment/AgroalProcessor.java#L296-L305
For the configuration, it is actually retrived with a recorder. The recorder can now be passed a named argument and look for the configuration in the map.
This is a long journey but we are not finished. Now we have collection of XXXClientBuilder beans ready to be injected in some producers. If you want to take a break here, you should be able to create a producer in a test project that require a named instance of the the client builder and create an instance from it.
Something like
@ApplicationScoped
public class SqsClientProducer {
    private final SqsClient syncClient;

    SqsClientProducer(@Named("test") Instance<SqsClientBuilder> syncClientBuilderInstance) {
        this.syncClient = syncClientBuilderInstance.isResolvable() ? syncClientBuilderInstance.get().build() : null;
    }

    @Named("test")
    @Produces
    @ApplicationScoped
    public SqsClient client() {
        if (syncClient == null) {
            throw new IllegalStateException("The SqsClient is required but has not been detected/configured.");
        }
        return syncClient;
    }

    @PreDestroy
    public void destroy() {
        if (syncClient != null) {
            syncClient.close();
        }
    }
}

and inject the client bean in your class
    @Inject
    @Named("test")
    SqsClient sync;

The last part if all goes well, is to produce this bean programmaticaly. This should be doable with a syntheticBean and a recorder injected with the builder instance. Something more or less like what is done for the S3Crt alternative (which do not require a producer in the runtime module of its extension.
https://github.com/quarkiverse/quarkus-amazon-services/blob/4ecc71767857d476767ffd36f0fac98c1b2b7de1/s3/deployment/src/main/java/io/quarkus/amazon/s3/deployment/S3CrtProcessor.java#L122-L138
And voilà. If you are not lost in the wild. What you can try first, is to refactor the code but without supporting multiple clients.
Try first to replace producer with synthetic bean (the very last part). This is mandatory to have everything else working, so if you run into trouble here, nothing else will work.
Then, try to update the createBuilder method so it take both a RequireAmazonClientBuildItem and AmazonClientSyncTransportBuildItem and produce synthetic beans from them. You should now have the client builder AND the client bean from the previous refactoring produced programaticaly without producer.
The next step, is to introduce the config map of clients and the named attribute. This is potentially the longer part to write, but it should be the easiest in code complexity.
As a bonus, we will have to support dev services for named client.
Let me know how things are going, I have limited time currently so things will go slowly from my side.

I opened a PR to keep track of the progress.

@jb-arpia This was more difficult than I expected. Good news is that I finally achieve a working PR. You can test it. I plan to merge it next week.

@jb-arpia version 3.0.0.alpha1 is out. Could you have a look ? Doc is https://docs.quarkiverse.io/quarkus-amazon-services/dev/common-features.html#_named_clients


Fixed Issue 12752: std.algorithm.isPermutation

Add the template function isPermutation to determine if two ranges are permutations
https://issues.dlang.org/show_bug.cgi?id=12752

Thanks for the comments. I will fix these soon.

IIUC this will return true for [1, 1, 2, 3] and [1, 2, 2, 3] as each element in the first list is in the second.

Sorting the two ranges and comparing will yield a more efficient algorithm (O(m log n + n log m) rather than O(m*n)), as well as address the duplicated element issue raised by @yebblies .  However, it will require some extra work if the incoming ranges should not be mutated, and may need to allocate in that case.

That would require the ranges to be random access ranges. And in my current version, I have an overload for that case. But, I am still having trouble working on your other suggestion to get ReferenceForwardRange working with it.

An option that avoids needing O(n) storage is to count the number of occurrences and check they match for each element.
It should also check for length mismatch is both ranges have length available.
I'm seeing three distinct uses here:

In-place sorted - equal(sort(r1), sort(r2))
Sorted copy - equal(sort(r1.array), sort(r2.array))
O(1) space - the current one

An interesting thought occurred to me: if both ranges are input ranges (non-forward, meaning only single pass), you can implement a scoreboard algorithm. Create an AA mapping elements to integers, and for each element in the first range, increment the corresponding AA entry, and for each element in the second range, decrement the corresponding AA entry. At the end, all entries should be zero, otherwise the ranges were not permutations of each other. You can delete zero entries from the AA while iterating, and then you only have to check whether the AA is empty at the end.
This will require memory allocation, though. But at least it will be usable on input non-forward ranges.

I have this in my current code :)
enum AllocateGC {
    yes,
    no
};

bool isPermutation(Range1, Range2)(Range1 r1, Range2 r2, const AllocateGC allocate_gc = AllocateGC.no) if (
    isForwardRange!Range1 &&
    isForwardRange!Range2 &&
    !isRandomAccessRange!Range1 &&
    !isRandomAccessRange!Range2 &&
    !isInfinite!Range1 &&
    !isInfinite!Range1)
{
    if (allocate_gc == AllocateGC.yes) {
        import std.conv: to;

        // If the two ranges aren't the same length, then they cannot
        // possibly be permutations
        static if (hasMember!(Range1, "length") && hasMember!(Range2, "length")) {
            if (r1.length != r2.length) {
                return false;
            }
        }

        int[string] r1_counts;
        int[string] r2_counts;

        foreach (item; r1) {
            ++r1_counts[to!string(item)];
        }

        foreach (item; r2) {
            ++r2_counts[to!string(item)];
        }

        return r1_counts == r2_counts;
    } else {
        import std.algorithm.searching : count;

        static if (hasMember!(Range1, "length") && hasMember!(Range2, "length")) {
            if (r1.length != r2.length) {
                return false;
            }
        }

        foreach (item; r1) {
            if (r1.count(item) != r2.count(item)) {
                return false;
            }
        }

        return true;
    }
}

bool isPermutation(Range1, Range2)(Range1 r1, Range2 r2) if (
    isRandomAccessRange!Range1 &&
    isRandomAccessRange!Range2 &&
    !isInfinite!Range1 &&
    !isInfinite!Range1)
{
    import std.algorithm.sorting : sort;

    static if (hasMember!(Range1, "length") && hasMember!(Range2, "length")) {
        if (r1.length != r2.length) {
            return false;
        }
    }

    Range1 r1_copy = r1.save();
    Range2 r2_copy = r2.save();

    sort(r1_copy);
    sort(r2_copy);

    return r1_copy == r2_copy;
}

It's literally just the reference forward range that I am having trouble with.

Whoa. Your non-allocating forward range case has an O(m^2 * n^2) loop. We need to think about improving that, otherwise it's going to be a huge bottleneck on ranges of non-trivial length.
As for reference ranges, I don't see why it should be a problem. One thing that perhaps might be related, is that any time you need to iterate a range more than once, you should use .save, regardless of whether the range is reference or not. The reason is that the range could be a by-value wrapper around a by-reference data source that gets consumed once you iterate over it. Since you're requiring forward ranges, you should always use .save when iterating over the source ranges to preserve the correct semantics in all cases.

@quickfur Ok, I think I correctly addressed the reference range issue. Thanks for your advice.
Also, I'm not quite sure what to do about the non allocating forward range case. All of the permutation algorithms that I see sort the two inputs then compare them, which isn't possible for that case.

Did the builds really fail because of an extra space ಠ_ಠ ?

Did the builds really fail because of an extra space ಠ_ಠ ?

Yes it's on purpose to hunt down trailing spaces before they find their way into the repo

Is there anyway to include that check in the unit tests so I can find that out before I commit?
Also, it doesn't look like the auto tester is retesting my new commit as it still shows all of the old failures.

Is there anyway to include that check in the unit tests so I can find that out before I commit?

make -f posix.mak checkwhitespace

Also, it doesn't look like the auto tester is testing my new commit as it still shows all of the old failures.

Line 1646 still has trailing whitespace.

I'm making a shell script to run all of the whitespace checks when I run the unit tests. Any other checks that I should know about?

Rebased.

All tests now green! Unless someone has a suggestion algorithmically, I believe this is ready to be merged.

   int[string] r1_counts;
   int[string] r2_counts;

   foreach (item; r1) {
      ++r1_counts[to!string(item)];
   }

   foreach (item; r2) {
        ++r2_counts[to!string(item)];
   }

The conversion to a string is not a good idea.

Yes, but is there another way to create keys for the AA?

AA's support arbitrary keys. (As long as said keys define toHash and opEquals, of course.)

Fixed all issues and squashed commits.

I also wonder if a better name for this might be isPermutationOf, then it allows nicer-looking syntax with UFCS: if (r1.isPermutationOf(r2)) { ... }. This is mostly just a cosmetic suggestion, though.

isPermutationOf doesn't work as well for normal calling IMO. This
isPermutationOf(r1, r2)

looks odd to me.

Fair enough, isPermutation is passable.

About the issue of sorting... I'm uneasy about this function sorting the incoming ranges behind the user's back. I don't like this kind of hidden side-effects. A better approach might be to use static if to check if the incoming ranges are SortedRanges. If so, just do a straight range comparison. If not, fallback to the hash algorithm (if GC) or the expensive algorithm (if no GC).  That way the user can explicitly sort the ranges for best results, or if not, it will still work, just a bit slower.

I can't test this now as I'm having problems with dmd at the moment, but what if I did something like this
sort(r1.map!(a => a.dup)) == sort(r2.map!(a => a.dup));

While slow, it would be a little faster than the non allocating case.

Are you sure the result of map is sortable? If it is, are you sure it doesn't also mutate the underlying array/range?

Fixed commented issues. I could not find a way to guarantee that the map function would not mutate the underlying range, so I just did the sorted range overload as recommended.

Ping?

Generally, I think the allocating variants of the functions are probably ready to merge. I'm not so sure about the non-allocating variants that introduce performance issues, especially those with O(n^2) complexity or more. Other reviewers please comment.  @jmdavis @yebblies @DmitryOlshansky @schveiguy

According to the c++ documentation, it is non-allocating, and complexity is O(n^2) at the most (and O(n) at best). It does this via 2 heuristics I think:

skip the elements at the beginning where r1.front == r2.front, they are in the same order and don't need to be counted.
Skip counting elements which are not the first case of the element in r1. Since these have already been tested, no need to test them again.

2 is going to be a tad more difficult because we are using ranges and not iterators. It depends on being able to compare 2 ranges without having them compare the elements. In D, this is not consistent.
Heuristic 1 should be a no-brainer, and should be used before either version (allocating or not).
I also think that for non-length defining ranges, you should use walkLength after heuristic 1 to verify the lengths are the same, since that's O(n) and we can't do any better with this algorithm anyway.

Just because it's O(n), doesn't mean the constant factor isn't important. I think it's fine to just proceed without using walkLength when length is not defined. If during the iteration it's found that the lengths are unequal, return false. That way we prevent walking the ranges more than necessary.

As for (2), it's not really that hard, is it?  If the incoming ranges are sorted, all we need to do is to skip over runs of the same item. In fact, it could be as simple as r1.group().equal(r2.group()) in this case.
If r1 is sorted but r2 isn't, we can still just iterate over r1.group() and count the head element of each group in r2 to make sure they match. As a bonus, if r2 is sorted but r1 isn't, just swap the two arguments and do the same thing.
If both are unsorted, then (2) doesn't apply anyway, so we proceed as the current code already does. You can still use r1.group() to skip over any consecutive runs of the same element, but it won't save very much because the same element might occur again later.

If the incoming ranges are sorted, all we need to do is to skip over runs of the same item.

Do you mean sorted but not via the same ordering? Because now if the two ranges are sorted then a simple equality is used on the two ranges.

If both are unsorted, then (2) doesn't apply anyway

yes it does.
For example:
assert(isPermutation([1,2,3,1,2,3], [3,2,1,3,2,1]));

While iterating these two ranges, you only have to check the count of the 1s once, the 2s once, and the 3s once. As you go through the second set, you can skip the count calls.
How this works in the C++ sample implementation is you first search through r1 for 1, and if you are at the first instance, then you check for the 1s, otherwise, you already did it. Since you are going to search for the first one anyway to count, you are cutting short that branch.

Just because it's O(n), doesn't mean the constant factor isn't important

The constant factor is 1, you only have to walkLength once :)

As for (2), it's not really that hard, is it?

The issue I see is checking to see if you are at the first element of that instance. For C++ iterators, you say:
iter firstInstance = std::find(r1first, r1second, *rcur);
if(firstInstance == rcur) // at the first one

For D, std.algorithm.find returns a range. If, for instance, the range is an array, doing firstInstance == rcur would do a comparison of all the elements in those ranges! If we use firstInstance is rcur, then a reference range type may not compare correctly. This is why I said it's trickier. Because C++ defines iterator comparison to be identity, it has that ability to do the comparison.

@schveiguy Ah, I see what you mean now. Well, the solution is quite easy, actually. Keep an index of the current element in r1. At each element e, when computing the count of e, you have to scan r1 anyway, so might as well scan it while also keeping track of the scanning index. If the first occurrence of e in the scanning loop has an index smaller than the current index, then you know that the element has been seen before, and you can abort the scan and move on to the next element.
This is sorta like the C++ iterator implementation, with indices in lieu of iterators.

@quickfur yeah that would work.

Added recommended optimizations. @quickfur I'm not sure if your suggestion of keeping the index was meant to supersede your suggestions with the sorted range grouping, so I only implemented the former.

I'm actually thinking the O(n) length check is required. For example:
struct NoLength(R)
{
    R base;
    alias base this;
    @disable length();
    auto save() { return this;}
}

assert(isPermutation(NoLength!(int[])([1,2,3]),NoLength!(int[])([4,3,2,1])));

How do you fix this without checking the length of r2?

I don't know if the sorted range optimization is valid either. Imagine a range sorted by part of the fields in the structures. They could be permutations, but not necessarily identical.

I'm actually thinking the O(n) length check is required. For example:

That assert correctly fails in the current code. See line 1665

I don't know if the sorted range optimization is valid either. Imagine two ranges sorted by part of the fields in the elements. They could be permutations, but not necessarily identical.

Ok, I'll just change it to the std.algorithm.equal function.

Ok, I'll just change it to the std.algorithm.equal function.

Done

@schveiguy You're right, the length check is probably necessary, unless I can think of some clever way to achieve the same thing.

That assert correctly fails in the current code.

Ah good. I didn't see that before.

Ok, I'll just change it to the std.algorithm.equal function.

No, that's not enough. For example:
alias mytuple = Tuple!(int, int);

assert(isPermutation(assumeSorted!("a[0] < b[0]")([mytuple(1, 1), mytuple(1, 2)]), assumeSorted!("a[0] < b[0]")([mytuple(1,2), mytuple(1, 1)])));

No, that's not enough. For example:

Ok, I added the ability to pass a custom predicate to the equal function and added your example in the unit tests.

I think we should drop the sorted optimization. It's essentially std.algorithm.equal. In fact, you don't need the length check, since equal will do this already. It's very unlikely that having a special overload that doesn't quite work without extra template parameters is going to be useful in generic code, when you could just use equal when you know it applies.

@schveiguy I have addressed all of your comments.

Sorry, I accidentally switched to a different PR and was running the wrong unit tests. Everything should be fixed now.

One final nit -- in the case of specifying an alternate predicate and using AllocateGC.yes, the function will happily complete, but will likely be incorrect. Leaving it that way allows incorrect code to compile and run without error. I think we have a couple options. First, we could make 2 different functions, one that allocates (and doesn't take a predicate) and one that does not allocate. Second, we could assert when AllocateGC.yes is passed, but predicate is not "a == b".
@quickfur what are your thoughts?

First, we could make 2 different functions, one that allocates (and doesn't take a predicate) and one that does not allocate

The problem with this option is what if you want to not allocate for simple ranges you have to pass "a == b". Secondly, the great thing about the current function signature is that if you want to allocate, it's really obvious that your doing it, where the above suggestion could lead people to forget that not passing a pred means they're allocating.

Second, we could assert when AllocateGC.yes is passed, but predicate is not "a == b".

I think this is the correct option.

if you want to not allocate for simple ranges you have to pass "a == b"

The "a == b" is a template parameter, which is defaulting to "a == b". Why would you have to pass it?

The "a == b" is a template parameter, which is defaulting to "a == b". Why would you have to pass it?

Actually while trying to come up with an example, I realized that the real problem is that you would have to call the two functions different names as these two signatures
bool isPermutation(Range1, Range2)(Range1 r1, Range2 r2)
bool isPermutation(alias pred="a == b", Range1, Range2)(Range1 r1, Range2 r2)

both apply for this call
isPermutation([1, 2], [2, 1]);

So you would have to name it something like isPermutationGC, which bucks the style of all of Phobos.

Good point. A more pertinent question, though, is whether pred even makes any sense to begin with. What does it mean for two ranges to be permutations of each other via any predicate that isn't equality, anyway? That seems to defy the definition of "permutation". That would seem to suggest that we should just dispense with pred, and just pass AllocateGC as an optional parameter, either runtime or compile-time.
In the very rare case where the user actually needs to specify such a strange thing as non-equality-based permutation test, it should be easy enough to implement the predicate via a map call or two, that maps elements from either range into a common type that can be compared via equality, e.g.:
auto r1 = ...;
auto r2 = ...;
if (isPermutation(r1.map!(a => f(a)), r2.map!(a => g(a)))) { ... }
// where f(a) and g(a) map each element into some common type

I agree on your points about pred, but I want to hear @schveiguy's opinion before I change anything

whether pred even makes any sense to begin with

It's consistent with other functions in phobos (i.e. equal or count (as used here)).
map may be a viable solution if your predicate compares a single field, but what if it's multiple fields?

It's also one of those things that's "free", since you have to do some kind of comparison anyway.
As to the use cases, I'm not sure it matters too much. The fact is, this would leave isPermutation less powerful than nextPermutation, which uses a predicate.

One benefit of having a GC specific function, the non-gc one can be @nogc.
I'm thinking more and more, the GC based one is just not viable here. It's a questionable optimization, tradeoff complexity for using the (generally slow) GC.

One benefit of having a GC specific function, the non-gc one can be @nogc

If the allocate gc flag was a template parameter, then the code could be static if-ed to include or not include the AA right? Then the template would auto mark itself @nogc.

It's a questionable optimization, tradeoff complexity for using the (generally slow) GC.

In my benchmarks, the GC allocating version tends to be about twice as fast.
void f1()
{
    immutable arr1 = [23,20,14,22,11,29,17,13,26,25,21,24,27,18,12,10,16,28,15,19];
    immutable arr2 = [10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29];

    cast(void) isPermutation(arr1, arr2);
}

void f2()
{
    immutable arr1 = [23,20,14,22,11,29,17,13,26,25,21,24,27,18,12,10,16,28,15,19];
    immutable arr2 = [10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29];

    cast(void) isPermutation(arr1, arr2, AllocateGC.yes);
}

void main() {
    import std.stdio;
    auto r = benchmark!(f1, f2)(10000);
    to!Duration(r[0]).writeln;
    to!Duration(r[1]).writeln;
}

$ ./test
178 ms, 697 μs, and 9 hnsecs
86 ms, 572 μs, and 2 hnsecs

Your test also is testing the runtime construction of the arrays, using the GC. Try constructing the arrays outside the test function.
The problem with these kinds of tests is you could incur a collection cycle at some point, which may not have anything to do with the test.
I'm not saying the test is giving an incorrect answer, I just think it's not correctly constructed.

Try constructing the arrays outside the test function.

or you could make the arrays static.

static immutable arr1 = [23,20,14,22,11,29,17,13,26,25,21,24,27,18,12,10,16,28,15,19];
static immutable arr2 = [10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29];

void f1()
{
    cast(void) isPermutation(arr1, arr2);
}

void f2()
{
    cast(void) isPermutation(arr1, arr2, AllocateGC.yes);
}

void main() {
    import std.stdio;
    auto r = benchmark!(f1, f2)(10000);
    to!Duration(r[0]).writeln;
    to!Duration(r[1]).writeln;
}

$ ./test
167 ms, 392 μs, and 8 hnsecs
71 ms and 238 μs

Seems pretty definitive. I'm actually pleasantly surprised, the GC improvements have been very good in the last version.
Let's make the Allocate flag a template parameter, and I think it will work if you do this:
bool isPermutation(AllocateGC allocate_gc, R1, R2)(R1 r1, R2 r2) if(allocate_gc == AllocateGC.yes) {...}
bool isPermutation(alias pred, R1, R2)(R1 r1, R2 r2) if(is(typeof(binaryFun!(pred)))) {...}

Adding in additional constraints for R1 and R2 to be proper ranges.

Added the new function signatures as requested. I tried to make the code as DRY as possible by creating the new function checkLength, but most of the code is subtly different between the two functions because of predEquals.

Actually, now that I think about it, would checkLength be a good public addition to std.algorithm.comparison? There is currently no function in std to check the lengths of two ranges like it does.

Adressed concerns, and I added more tests.

Fixed all issues.

Noticed some weird stuff going on with ddoc, so I fixed that.

Seems to be good to go.

Fixed.

LGTM, ping @quickfur @DmitryOlshansky

Sorry for picking things apart again. :-)  Overall, it looks very good modulo said comments, and looks almost ready to merge. Thanks for the hard work in bringing this into good shape!

Fixed fix-able problems.

Actually fixed now.

LGTM

Auto-merge toggled on

Thanks!


Color Gradient Actions

Hi !
I came here with three actions idea that could be very nice !
I was thinking about colors actions (see this thread => http://forum.cockos.com/showthread.php?p=1424220#post1424220 ) but some actions would be SWS specific, so I paste the feature request here.
My actions ideas are :
• Set Track/Item Color to Start Gradient Color
• Set Track/Item Color to End Gradient Color
• Invert Gradient Colors
This would be a huge improvement in color management !
Thank you for listening !
:)

Considering these, these actions are not that interesting.


Change go version to 1.12.7

Coverage remained the same at 72.574% when pulling 9533032b20135b751bfd995e6a088e8a8ac40da9 on go-1.12.7 into 263c1029a23f381d254a3052d9070499fb718cfd on master.


[feat] add motd warning for users who have no tags

currently we use  split(":")[-1]' to pull the image name
if users forget to use a tag, this will break: https://github.com/secureblue/secureblue/issues/517

quick and dirty check: if [ -z "$(rpm-ostree status | grep 'hardened:')" ] ; then echo 'you are not using a tag' ; fi
this searches the output of rpm-ostree status for hardened:, because all our images end in "hardened" and when no tag is selected, the colon is not present.
I'm not certain how to implement it yet.


Non-MEX Matlab sparse solvers should be up to date with their C version counterparts

The code of the non-MEX Matlab functions of the embedded solvers should be up to date with any changes that have been made to their C counterparts.

For now I am closing this issue, since we are dropping support for the non-MEX Matlab versions of the solvers for now.

For now I am closing this issue, since we are dropping support for the non-MEX Matlab versions of the solvers for now.


Don't lock roots/wordpress to a exact version in composer.json

[x] I've read the guidelines for Contributing to Roots Projects
[x] This request isn't a duplicate of an existing request
[x] This is not a personal support request that should be posted on the Roots Discourse community

Summary
When creating a bedrock project composer create-project roots/bedrock some-site a composer.json is installed with the version of roots/wordpress locked to a specific version. Unless you change this WordPress will never be updated. Not even with Dependabot if I'm correct.
Motivation
When a new version of WordPress is available is should be as easy as running composer update roots/wordpress and deploying to production. There should be no need to manually edit the composer.json file to update the version. It's important to keep WordPress updated and you don't want to risk running an old version because it's locked to that by default by bedrock.
I suggest changing the composer.json file to:
    "roots/wordpress": "^5.3",
    "roots/wp-config": "^1.0.0",
    "roots/wp-password-bcrypt": "^1.0.0",

IIRC the original reason why bedrock uses a fixed version is because WordPress does not follow semver. As such: setting the WordPress version to a semver version range could lead to undefined behavior. Maybe @roots/everyone can chime in to correct me on the history here.

Not even with Dependabot if I'm correct.

Dependabot handles fixed versions correctly 👍

https://github.com/roots/bedrock/pull/489

That said: perhaps it would be prudent to consider setting the version range to something like 5.3.*? That would enable composer update roots/wordpress to work as you expect.
If you wanted to bump beyond 5.3 you would do composer require roots/wordpress:5.4.* or let Dependabot or whatever bump it for you. An update like 5.3 -> 5.4 is never an automated affair so it requires manual attention anyway. If, for your sites, 5.3 -> 5.4 is simply a matter of bumping the version and deploying: feel free to change relax version range in your project.
Also related: #21

🤔 honestly I don't really remember discussion over specifying the exact version. We basically release a version of Bedrock for every WP release since Bedrock is meant to be used as a starter/boilerplate. But the same thing could be accomplished by just updating the lockfile (if we keep it).

There should be no need to manually edit the composer.json file to update the version.

There is no need to manually change composer.json to change the WordPress version. All can be done through Composer:
# Install Bedrock 1.10.0 (WordPress 5.0)
composer create-project roots/bedrock example.com 1.10.0
cd example.com

# Specifically require WordPress 5.3.2
composer require roots/wordpress:5.3.2

# Require the latest WordPress version and set just a major version constraint (i.e. currently ^5.3)
composer require roots/wordpress

composer update <package> updates the dependencies based on the contents of composer.json and with looser version constraints that could update roots/wordpress, but I think a fixed version and using composer require instead is a good idea.

It's important to keep WordPress updated and you don't want to risk running an old version because it's locked to that by default by bedrock.

Yes, true, but, as well, with Bedrock we advocate setting intentional software requirements and not just blindly updating WordPress. In my experience, using Dependabot and some sort of CI (and further testing) works well for this.

Thank you guys. I didn't know WordPress does not adhere semver versioning and isn't planning to do so. I can see how this could cause problems with composer. I'm used to running composer update vendor/package if I want to update a single package. Normally I only use require to install a new package. This feels like "the right way" thats why I get confused when I see the exact version locked in the json file.
I saw the other issue but the discussion was more about wether to add the composer.lock file to git or not. As Scott mentions, I also agree that the version to be installed should be locked in the lockfile and not so much in the .json file. It's good to hear Dependabot solves this just fine although I would assume Dependabot also uses semver to compare versions.
It all boils down to WordPress not adhering semver I guess. If they did there would be no problem is setting a version constraint like "roots/wordpress": "^5.3", just like Laravel does for example. I'm not sure what the right way is in this.
This issue is only about WordPress but with plugins / themes it would be the same I guess. You can't assume they use semver, you also can't assume they keep supporting older (major) versions so that makes me think. Should versions constraints for plugins also be strict when you require them? Or would you just set them to * and let Dependabot manage new releases so you never have to change the composer.json file unless you require a new plugin. I know * is a bad practice but it also doesn't make sense to have the exact version constraints both in the json and the lock file. The lock file contains all versions that eventually get installed.
If I look at YoastSEO, they don't support semver and they don't seem to provide updates to older majors. So the only safe solution is to always run the latest version.
With WordPress (and plugins / themes) I always feel like I need to run the latest version to stay secure. So I have to admit I always set version constraints to * and have for example Dependabot manage updates. If something breaks I'll fix it or wait a little in the hope it'll get fixed.


Create abstraction for users that want just to create GUI app without learning OpenGL stuff.

Create abstraction for users that want just to create GUI app without learning OpenGL stuff.
So user should have ability to create windows like in swing or javafx app.

Better something like JFrame...


[NCL-7079] Refactor build log and align log to use Bifrost

Basically, the UI behavior would be exactly the same because the current endpoint has already been redirected(with Status Code: 307 ) to the new API. after this pitch, the old endpoint should be able to be safely removed.

Just to mention that now we will need a new environment parameter PNC_UI_BIFROST_REST_URL when we deploy the angularjs Web UI, cc @matedo1

All fixed and feel free to have a look, Thanks! @matedo1

yes externalBifrostUrl now changed to https services.
yes, all usages are updated and tested


net: l2: {ethernet,ppp}: fix k_work API usage in carrier on/off handling

net_{eth,ppp}_carrier_on() and net_{eth,ppp}_carrier_off()
call k_work_init() on work item that can be pending or still
be processed in another thread. This results in undefined behavior.
Initialize work item once and use an atomic flag to switch between
up/down carrier state. Submit work to workqueue whenever up/down carrier
state changes, so that last state is always properly propagated to
network interface layer.
This is an alternative to #32759.

@jimparis would this fix the issues you were seeing in #32759

Yes, it should.

Yes, it should.

Great, if you are ok with it, +1 would be appreciated so we get this merged :smile:


Adding --cgroup-driver flag to etcd documentation

This is a Feature Request
Update on website request.
What would you like to be added
When settings up a cluster for etcd following this part: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/#setting-up-the-cluster It would be worth noting, that if one installs Docker following this documentation: https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker, a cgroup-driver flag should be added to the 20-etcd-service-manager.conf file.
cat << EOF > /etc/systemd/system/kubelet.service.d/20-etcd-service-manager.conf
[Service]
ExecStart=
ExecStart=/usr/bin/kubelet --address=<IP_ADDRESS> --pod-manifest-path=/etc/kubernetes/manifests  --cgroup-driver=systemd
Restart=always
EOF

Why is this needed
In the documentation for installing Docker, it is clearly stated that cgroup driver systemd should be specified, but since kubelet defaults to cgroupfs, the flag should be added to avoid common errors of kubelet and docker not using same cgroup driver.
Changing the settings such that your container runtime and kubelet use systemd as the cgroup driver stabilized the system. Please note the [native.cgroupdriver=systemd] option in the Docker setup below.

Comments
I am aware of the deprecation warning. If the flag should be omitted from the doc, I would suggest some info on how to set up the config file for kubelet to use systemd according to future requirements.

/sig cluster-lifecycle
@CorfitzMe thanks for logging the ticket.
given we are skipping the kubeadm init "kubelet-start" phase, we don't detect the docker cgroup driver.
PRs welcome to update the document in question.

/assign @RA489


Refactor Matchmaker to be consumable as an extensible libarary

Similar to https://github.com/EpicGames/PixelStreamingInfrastructure/issues/9, we want to update the Matchmaker scripts so they can be interfaced with as a library.
This will more easily allow users to simply integrate the functionality they need from the library into their own infrastructure, along with the benefits described in the referred to issue above.
We should expose this as lib-psmatchmaker or potentially fold this into the SignallingWebServer lib.

Ok

This issue has been moved to the new repository: https://github.com/EpicGamesExt/PixelStreamingInfrastructure/issues/3


Add proxy support

Add proxy support for rkm-outpost for installations behind an enterprise proxy.

We need to check this again as soon as we rewrite rkm-outpost from bash to go


Different nbHits with limit and offset parameter

"nbHits" get changed when using the limit and offset parameter.
Take the "movies" dataset as an example. The keyword to search is spider forest.
Case 1:
search:
http://<IP_ADDRESS>:7700/indexes/movies/search?q=spider%20forest
result:
"nbHits":33,"query":"spider forest","limit":20,"offset":0
Case 2:
search:
http://<IP_ADDRESS>:7700/indexes/movies/search?q=spider%20forest&limit=10&offset=30
result:
"nbHits":42,"query":"spider forest","limit":10,"offset":30

Hello @wendyZHANG27
nbHits is not an exact integer representing the number of hits. It's an approximation. Here is the confusion. We are sorry for this and definitely want to improve this feature to remove this confusion.
I've open a discussion in our product repository. You're usecase and your feedback are more than welcome if you have the time 🙏
I'm closing this since it's not a bug but a design issue.


Input bug on onboarding dialog

There's an easy to miss little bug in the new extension with the password logic (where it forces you to do a stronger password after the restore process). Once you reach whatever the minimum length is, it actually takes your cursor out of the box, so you're no longer typing in it. For passwords I look down more than in regular typing, so I missed that I was pulled out of the box and the button went blue so the instinct was to smash enter.
I happened to notice my input looked short once I refocused my eyes, but I think you'll have a lot of people thinking they typed 2359134alongpassword, but actually got the first 10 or whatever digits of it.
🙏 (Chrome, Windows)

I can confirm this bug also happens in mac chrome

I will pick this up today. I also have some other improvements for various inputs:

we can handle pasting keys a bit better, trim them, etc.
show some helpful information for password requirements, etc.

Yep, I'm also a fan of how Kyran build the password validation UI in the wallet, and would like if we adopted that approach


Option to disable "Running" output

Is your feature request related to a problem? Please describe
Currently writing mani output to file will include the "Running" progress status
Describe the solution you'd like
Add a flag to silent the output (-s, --silent) which skips extra progress report.
Additional context

Sounds like a good idea, I'll add it.

Will be released today as v0.22.0.


A critical error loading Sia has occured

When I open the SIA-UI this message shows up.

To reproduce the error, I simply open SiaUI 1.3.2
Environment

Sia version: Sia Daemon v1.3.2
OS: Windows 7  Ultimate 64-bit OS

Troubleshooting steps I've taken:
I tried Reinstalling the SIA-UI, but still same error

Now I am getting a different error. I restarted the SIA-UI several times and now this error shows up:

Looks like errors change from time to time... Very weird...

Duplicate of https://github.com/NebulousLabs/Sia/issues/2867 and https://github.com/NebulousLabs/Sia/issues/2898

You'll need to completely stop Sia, remove your transactionpool.db and consensus.db file then start Sia.  It will take a long time to start up at first, then it will sync the blockchain, then it should work.
Instructions to remove the files here: https://gist.github.com/tbenz9/8066d74853ab28c23bd7bc1d3c7cdeda

I reinstalled the SIA-UI, then waiting for the sync, turned it off, turned on again and same error.... What do I do?


Kitti Dataset Datasplit Error

I have downloaded left color images, calibration, label, and velodyne dataset from the kitti 3d official website and also placed them to the folder by following the mmdetection3d official website , I also down load the txt files for data split
However when I run the last line "python tools/create_data.py kitti --root-path ./data/kitti --out-dir ./data/kitti --extra-tag kitti", there is an error saying index out of range. Could anyone give me some help?

Can list your file structures under mmdetection3d/data/kitti/? Are they the same as shown in the docs?
mmdetection3d
├── mmdet3d
├── tools
├── configs
├── data
│   ├── kitti
│   │   ├── ImageSets
│   │   ├── testing
│   │   │   ├── calib
│   │   │   ├── image_2
│   │   │   ├── velodyne
│   │   ├── training
│   │   │   ├── calib
│   │   │   ├── image_2
│   │   │   ├── label_2
│   │   │   ├── velodyne

I solved it. It is because that I use a bad method to upload the file to ssh, so some data is missing. Thank you for your support.

Glad it helps :)


Review by Rob

I implemented your review, @robdodson. Here’s a few follow-up Qs/clarifications:

Each element with role tabpanel should have an aria-labelledby referring to its associated tab element.

Should I put that in the expected markup or is that something the code should apply for the developer? (For now, I chose the former.)

https://github.com/GoogleChrome/dash-elements/blob/master/elements/dash-tab-panel/dash-tab-panel.js#L7 You don't need aria-hidden if something is display: none because display: none removes it from the a11y tree. Also you might reword this to say something like "inactive panels are hidden with display none" since the next section talks about selection. Otherwise it may not be clear that the two concepts are related.

I actually did that on purpose so that the element works with other hiding mechanism (e.g animations). I added a comment to clarify. WDYT?

You may want to add those listeners in connectedCallback so you can remove them in disconnectedCallback.

I don’t quite see why that’s necessary. I’ll add the event listeners exactly once. So seems like the constructor is the perfect spot.

Also, we should get consistent with our handler names. I used onClick and you're using handleClick, throwing it to @notwaldorf to be the tie breaking vote :)

Good call. Adjusted to your naming convention. @notwaldorf: feel free to disagree.

Style nit: https://github.com/GoogleChrome/dash-elements/blob/master/elements/dash-tab-panel/dash-tab-panel.js#L47 I usually do if (!tabs.length). @notwaldorf do you prefer one approach to the other?

No strong opinions, but I prefer not relying on truthiness/falsiness.

I'd be curious to see if it's possible to build the entire structure out of custom elements, something > like:
<dash-tabs>
  <dash-tab></dash-tab>
  <dash-tabpanel></dash-tabpanel>
</dash-tabs>

You could do some (possibly weird 😄 ) things for PE like give the tab a role=heading explicitly in > markup, but then that gets swapped out with role=tab when the element upgrades. The more I > think about this the more I kinda like this idea. It seems to dovetail well into the PE use case because it's saying "if JS doesn't load, this thing's role is something more basic, but if js does load, it's new role is more advanced". Most importantly it gives the user a signal that the thing is now keyboard interactive.

I was thinking about if there’s a reason to do CEs for the inner elements. I settled for “no”. I was wrong :D I really like this as a way to do PE. Gonna punt on it for now, tho, and put it in a issue soI can get some more elements done.
@notwaldorf @robdodson PTAL :)

This closes #13

Live preview

Should I put that in the expected markup or is that something the code should apply for the developer? (For now, I chose the former.)

IMO, it'd be nice if the element just did this for you

I actually did that on purpose so that the element works with other hiding mechanism (e.g animations). I added a comment to clarify. WDYT?

Suggest rewording to something like:
"The .hidden class might apply  display: none, which would remove the element from the accessibility tree anyway, but this way the element works when other hiding mechanism (like animation) are used."

I don’t quite see why that’s necessary. I’ll add the event listeners exactly once. So seems like the constructor is the perfect spot.

I guess we need to check to make sure removing the element from the DOM cleans up the listeners and doesn't create a memory leak

No strong opinions, but I prefer not relying on truthiness/falsiness.

@notwaldorf you make the call :)

I guess we need to check to make sure removing the element from the DOM cleans up the listeners and doesn't create a memory leak.

It doesn’t! 🎉  (Test JSBin)

@robdodson Another question regarding aria-labelledby: If the tab doesn’t have an id I can use for the panel’s aria-labelledby, I currently ignore that. WDYT about a console.warn?

I think the memory leak test has a different outcome if you listen for a function that's on the prototype instead of creating an anonymous function. If the function is on the prototype it seems like it doesn't leak. But probably safest to encourage folks to clean up after themselves.

Another question regarding aria-labelledby: If the tab doesn’t have an id I can use for the panel’s aria-labelledby, I currently ignore that. WDYT about a console.warn?

I guess a warn is ok. Another option, though maybe a bit involved, would be to check if the tab has an id, if not, auto-generate one. There's a group of folks kicking around the idea of writing accessibility mixins for custom elements and that's what they're doing (https://github.com/elix/rfcs/pull/4/files#diff-6f5adfb27ba10dc39a17b57a6107619aR173). But to keep things simple we could also just add a comment and be like "Hey if the thing doesn't have an id you could consider generating one"

If I add a function on the prototype as the listener, the count stays constant o_O

But probably safest to encourage folks to clean up after themselves.

This is actually a really good argument. Even though it might not be strictly necessary, it’s a good habit to advocate for. Will fix.

Implemented the last nits. I think this is good to merge, PTAF(inal)L

What are you thoughts on ditching the .hidden and .selected classes in favor of using attr selectors of [aria-hidden="true"] and [aria-selected="true"]. The reason I suggest this is because it creates a kind of symbiotic relationship between the CSS and ARIA and let's you visualize if the states are being applied correctly

That is a good one. I vaguely remember some CSS folks being against it, but I don’t remember any good arguments, so as long as we don’t have those I am in favor.

I think technically attribute selectors are slower but I don't think we're in a situation where CSS performance is a bottleneck.

PTAL! I added <dash-tab> and <dash-tabpanel>, renamed the main element to <dash-tabs> and did a few other things. Did a pass on the commentray as well.
@robdodson I renamed all my classes to DashElementName so that class name and tag name correspond, like @notwaldorf did in her code. I’d be in favor of updating the radiobox as well.
Live version

@surma thank you for putting up with my world's longest code review. you deserve a medal 🏅

I am just gonna leave answers to all the things I've been summoned on, because I've been all-in working on the polymer site and ignored y'all.

i prefer 'onEventName', and even more in particular, '_onClick', to pretend we have public/private methods.
i am ok with truthiness! if (!tabs.length) is ok, though a bunch of times i will do specific checks for null or undefined because they come up a lot in custom elements (i've noticed). But like, tbh, this sounds like style and I wouldn't even mind if it was different across elements.

I'm rull excited about how nice this element is coming along btw!!

i am ok with truthiness!

Imma call overruled here 😛
PTAL! Specifically, at DashTabs.connectedCallback(), because i am now relying on <dash-tab> to generate IDs, I needed to introduce customElements.whenDefined() to wait for the tabs to be initialized. I think it could be a useful pattern (I think @robdodson had a similar problem in DashRadioGroup). (I can haz async/await?.

Live preview

OK last few points I swear :)

It seems inconsistent for the tab to generate its own id but not the tabpanel. Feels like they should both generate ids.
It feels like aria-controls could be applied by the CE when it boots up. Explicitly having a heading that aria-controls a group or region doesn't make much sense. Technically it's allowed but it seems confusing.
For the PE use case, let's apply role=region to the unupgraded tabpanel. Unfortunately role=section is abstract and we're not allowed to use it. role=region seems like the next best thing. I ran it by alice and she approved 👍. And it's pretty easy to change later if other folks in the community disagree.

It seems inconsistent for the tab to generate its own id but not the tabpanel. Feels like they should both generate ids.
It feels like aria-controls could be applied by the CE when it boots up. Explicitly having a heading that aria-controls a group or region doesn't make much sense. Technically it's allowed but it seems confusing.

My thought process behind that was that the developer has to link up tab and panel anyways. I could instead generate all the ids and rely on DOM order to figure out which tab belongs to which panel.

I could instead generate all the ids and rely on DOM order to figure out which tab belongs to which panel.

That's kind of what I was thinking. ARIA should be an implementation detail not exposed to the component consumer. I ran this whole idea behind alice and she approved. My only nit (and we don't have to do this for this PR, just mentioning it) is that it would be a bit nicer to do something like:
<tab>
  Tab 1
  <tabpanel>
</tab>

Because then the relationship is easier to grok and it starts to work like <label>. For now we can just leave them as siblings.

awwww yissssss

🎉 🎉 🎉 🎉 🎉

Well actually, I had a couple more comments...
JK, this looks amazing! Well done fam. ❤❤❤


Update to Noir v1.0.0-beta.0

Problem
This library is tested to work with:

Noir ≥v0.36.0
Barretenberg ≥v0.56.1

Which were released in Oct.
Meanwhile Noir v1.0.0-beta.0 is now pre-released.
For better user experience with the version before it is stable released (and reaches a wider audience), update and ensure this library works with the Noir version
Happy Case

[ ] Update this library's code and tests (if applicable) to work with Noir v1.0.0-beta.0
[ ] Update the Dependencies section in README

New noir-library-starter template for easy formatting reference

[ ] Cut a new library release (if code or tests were updated)

Project Impact
This is a prerequisite to stable releasing Noir v1.0.0-beta.0.
Would you like to submit a PR for this Issue?
No

Did we tested all versions between v0.36.0 and v1.0.0-beta.0?
If not please also update the README 🙏 plus cut a release before closing this Issue, thanks!


An annoying error while executing a sync function (neovim)

When I save the file, the jupyter_ascending#sync() function is is executed with an error . To be fair, the files *.sync.py and *.sync.ipynb do sync.
In :message:
Error detected while processing function <SNR>88_on_stdout:                                           line    2:                                                                                E730: using List as a String                                                                          [JupyterAscending]                                                                                "1_4_2.sync.py" 22L, 367C written
In $ nvim --version:
NVIM v0.4.3
Build type: Release
LuaJIT 2.1.0-beta3
Compilation: /usr/bin/cc -g -O2 -fdebug-prefix-map=/build/neovim-gOb7vg/neovim-0.4.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=1 -DDISABLE_LOG -Wdate-time -D_FORTIFY_SOURCE=1 -O2 -DNDEBUG -DMIN_LOG_LEVEL=3 -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fdiagnostics-color=always -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -I/build/neovim-gOb7vg/neovim-0.4.3/build/config -I/build/neovim-gOb7vg/neovim-0.4.3/src -I/usr/include -I/usr/include/lua5.1 -I/build/neovim-gOb7vg/neovim-0.4.3/build/src/nvim/auto -I/build/neovim-gOb7vg/neovim-0.4.3/build/include
Compiled by<EMAIL_ADDRESS>
Features: +acl +iconv +tui
See ":help feature-compile"

   system vimrc file: "$VIM/sysinit.vim"
  fall-back for $VIM: "/usr/share/nvim"

Run :checkhealth for more info

If it matters, then I use wsl 2.
How can I get rid of this error? It does not affect work, but errors are written every time and this is annoying. I hope for a quick reply, because the plugin is awesome and there are no analogues.

@tjdevries Any thoughts?
I suspect this has started to happen because we now print stuff when the command runs.
I suppose we could stop printing stuff when the command runs, but the output does need to be handled correctly, as we do need to communicate to users if there is an error.

Can you try with updated nvim? 0.4.3 is quite outdated. Latest stable version is 0.5.1
I can take a look otherwise

@tjdevries, Of course, I can update my neovim, but in general this is a strange solution to the problem, because this is the latest version in the repository of Ubuntu 20.04.03 LTS.

Well I was just hoping that would fix the problem 😂 otherwise I can try and get an older appimage and test it out. I couldn't reproduce on my newer nvim (at least at first)


rust: 1.20.0 -> 1.21.0

Motivation for this change
Rust 1.21.0 has been released
Things done

[ ] Tested using sandboxing ([nix.useSandbox](http://nixos.org/nixos/manual/options.html#opt-
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
[x] Fits CONTRIBUTING.md.

@GrahamcOfBorg rust.rustc

I still have to test #31125 on linux, but we should probably merge those 2 at the same time.

cc @Mic92

Last time there was a problem with compiling firefox, is this resolved now?

I currently try to build firefox with this pr.

Firefox fails due to these:

error: doc comment not used by rustdoc

I tried backport some of the fixes from firefox 57 but it's getting kind of messy, perhaps we should start version rust like we do with other compilers?

Do you mean for 17.09? We should backport all the browser updates, and not
fret about individual FF patches.
On Sun 5. Nov 2017 at 23:17, Daiderd Jordan<EMAIL_ADDRESS>wrote:

I tried backport some of the fixes from firefox 57 but it's getting kind
of messy, perhaps we should start version rust like we do with other
compilers?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/NixOS/nixpkgs/pull/31175#issuecomment-342010455, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AYRM6tGme0NbtmTty7wDLOeEoG21G-snks5szjP0gaJpZM4QQsv8
.

No, FF 57 is not released yet and the current version doesn't build with rust 1.21.

the cyborg can talk😳


FROST DKG: simplify some refresh code

Minor change to clarify the conditions under which refresh happens.

Will wait on gha for this repo

Now waiting on merge of https://github.com/FiveBellsSettlement/multi-party-sig/pull/7

Closing in favor of tracking upstream.


Working mac build

This should be easy, but unfortunately I can't figure out why the library isn't currently connecting to browsers on Mac OS

Initial CMakeLists.txt should now support Mac Os

Got things working from homebrew on the latest macOS, with
> brew install log4cxx openssl libusrsctp cmake

adding the following config to profile config
export OPENSSL_INCLUDE_DIR="$(brew --prefix openssl)/include"
export OPENSSL_LIB_DIR="$(brew --prefix openssl)/lib"
export OPENSSL_ROOT_DIR="$(brew --prefix openssl)"

export USRSCTP_LIBRARY="$(brew --prefix libusrsctp)/lib"
export USRSCTP_INCLUDE_DIR="$(brew --prefix libusrsctp)/include"

Install<EMAIL_ADDRESS>from official release page.
And then running
> cmake MakeLists.txt
> make

What is not working though, is
> make install
make: *** No rule to make target `install'.  Stop.

and trying to run the example fails with
./websocket_client/testclient
dyld: Library not loaded: @rpath/librtcdcpp.dylib
  Referenced from: /Users/dignifiedquire/opensource/webrtc/librtcdcpp/examples/./websocket_client/testclient
  Reason: image not found
[1]    86993 abort      ./websocket_client/testclient

Yeah, we haven't yet tackled the install portion of the CMake build. I'll try to get to it. Feel free to contribute if you need it faster ;-).
As for the example, it should work (at least on Mac). Are you building the example via CMake (or the Makefile)?

I tried the make default target after generating it through cmake. As well as running make inside the examples/websocket_client.

This is the full log: https://gist.github.com/dignifiedquire/fc5d14562681c318a756b61e26fdff8d

Thanks for the log - it looks like the example can't be built because it can't link against the newly-generated dylib. Weird!
Try building from a separate directory, like this:
cd build
cmake ..
make```

Just to make sure that you're in a clean build directory with no conflicting files.

This worked: https://gist.github.com/dignifiedquire/8ff4a1edf108e2de5821663b5bf3b91f

Okay, great - I'll take a look at why builds in the root aren't working, but for now it looks like you're ready to go!
Next up, take a look at the readme for the example: https://github.com/chadnickbok/librtcdcpp/tree/master/examples
This is still very much a work-in-progress; while the 'core' works, I pulled this library out of another project I was working on, and we still haven't finished working on getting a great set of demos together. Sorry for all the rough edges :(

No reason to be sorry, I'm super grateful for finding an implementation of webrtc datachannels that actually works and is not the chromium one.
I got the example to work with both current FF and Chrome as described. Just fyi my end, end goal is to get a crossplattform wrtcd implementation for rust + bindings to node.js and go. But for now I'm doing one step at a time, which is for now just creating a wrapper around this library and make it available from rust.

That sounds awesome :)


Blazor app publish "Self Contained" doesn't work

Steps to reproduce the behavior:

Create Blazor (ASP.NET Core hosted) project
Right click on Server project and select Publish
In Pick a publish target window click Advanced (on the left I have App Service selected)
Change Deplyment Mode to Self Contained and click Save
In Pick a publish target window select Select Existing and click Publish
If necessary login to Azure and select App Service.
Click OK - publishing process starts and in a few seconds you will see

and the following error is displayed in the Error List window:

Metadata file 'D:\Blazor\PublishTest\PublishTest.Client\bin\Release\netstandard2.0\win-x86\PublishTest.Client.dll' could not be found

There is no win-x86 folder and PublishTest.Client.dll file is only here:
d:\Blazor\PublishTest\PublishTest.Client\bin\Release\netstandard2.0\PublishTest.Client.dll
Additional context
Tested on VS 2019 Preview 5.0, Blazor 0.9, ASP.NET Core 3.0 Preview 3, Windows 10 1809 x64
Version:   3.0.100-preview3-010431
Commit:    d72abce213
Środowisko uruchomieniowe:
OS Name:     Windows
OS Version:  10.0.17763
OS Platform: Windows
RID:         win10-x64
Base Path:   C:\Program Files\dotnet\sdk\3.0.100-preview3-010431\
Host (useful for support):
Version: 3.0.0-preview3-27503-5
Commit:  3844df9537
.NET Core SDKs installed:
2.1.602 [C:\Program Files\dotnet\sdk]
3.0.100-preview3-010431 [C:\Program Files\dotnet\sdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.All 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.0.0-preview3-19153-02 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 3.0.0-preview3-27503-5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 3.0.0-preview3-27504-2 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

Thanks for reporting this @Andrzej-W!
Looks like the same issue as #9285. Since we're currently looking at this for Preview4 I'm going to close this as a duplicate.


[opentitantool] Allow sending arbitrary commands to transport

Add a generic way of sending arbitrary string-based commands to be interpreted by the backend transport driver.  The HyperDebug driver passes these commands to evaluate on the HyperDebug debugger microcontroller, allowing access to nonstandard or debugging features through opentitantool.

This code looks fine to me, but would you mind giving some examples of commands we might pass to HyperDebug?
Are those expected to be completely arbitrary and, for example, not really possible for opentitantool to know about?


idea: template string interpolation

Curious if interpolation for template strings is something of interest? For example:
var red = '#f00'
var cssString = '.upper { text-transform: uppercase }'

var prefix = css`
  :host {
    background: ${red}
  }

  ${cssString}
`

In Node, doing the interpolation itself isn't tooo bad if we parse sheetify args and pass into a thing like:
// v simplified for example sake!
function sheetify () {
  var args = Array.prototype.slice.apply(arguments)
  var css = interpolate(args[0], args.slice(1))
  // ...etc
}

function interpolate (strs, vals) {
  return strs.map(function (str, i) {
    return str + (vals[i] || '')
  }).join('')
}

But! It seems like the complication is the browserify transform. Ideally the transform would actually execute the js so the insert-css() call has no additional overhead. But perhaps a transform like yo-yoify where calls to sheetify w/in the source are converted into plain functions could work too?
I took a look at implementing this today, but I'm quite unfamiliar with writing browserify transforms, and as I was banging head against wall figured I'd stop and check to see if this even falls within the sheetify radar 📡🖖

Oh man, this is non-trivial to get done haha. You're totally right lmao,
we'd need a partial
JS interpreter to evaluate what the result should be, and interpolate that.
We've def
discussed this in the past, but I believe nobody felt like they had the
bandwidth to take it
on - if you feel like doing it, it'd be cool tho! - People have asked for
this in the past, and
I'd def be open to the addition :D
On Mon, Jul 10, 2017 at 3:36 AM Jon Gacnik<EMAIL_ADDRESS>wrote:

Curious if interpolation for template strings is something of interest?
For example:
var red = '#f00'var cssString = '.upper { text-transform: uppercase }'
var prefix = css  :host {    background: ${red}  }  ${cssString}
In Node, doing the interpolation itself isn't tooo bad if we parse
sheetify args and pass into a thing like:
// v simplified for example sake!function sheetify () {
var args = Array.prototype.slice.apply(arguments)
var css = interpolate(args[0], args.slice(1))
// ...etc
}
function interpolate (strs, vals) {
return strs.map(function (str, i) {
return str + (vals[i] || '')
}).join('')
}
But! It seems like the complication is the browserify transform. In ideal
situation the transform would actually execute the js so the insert-css()
call has no additional overhead. But perhaps a transform like yo-yoify
where calls to sheetify w/in the source are converted into plain functions
could work too?
I took a look at implementing this today, but I'm quite unfamiliar with
writing browserify transforms, and as I was banging head against wall
figured I'd stop and check to see if this even falls within on the sheetify
radar 📡🖖
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/stackcss/sheetify/issues/128, or mute the thread
https://github.com/notifications/unsubscribe-auth/ACWlelKTClHMTcleYj3LD5WvvAjqOsE-ks5sMYAUgaJpZM4OSQz_
.

Yaaaa lol I think when I have a free weekend I might take another crack, but it's tootally non-trivial ! Not sure if we should leave this open or not.. Gonna take some time either way 🍺😵

hey @jongacnik, i've put some effort into this before: https://github.com/stackcss/sheetify/issues/97#issuecomment-251000982 (and a few unpublished attempts to add support sheetify and in relevant dependencies). but yes it's non-trivial, i gave up. :smile_cat:

Hey all @ahdinosaur @yoshuawuyts ! Jumping back in here since #134 pretty much solves this for us! This added support to require node modules via the transform, something like:
style.js
var red = '#f00'

module.exports = `
 :host {
    color: ${red}
  }
`

app.js
var css = require('sheetify')
var html = require('bel')

var prefix = css('./style.js')

document.body.appendChild(html`

bam!

`)

wonder if we should call this closed 🤔 ?

Woot! Yeah, think this good to close (:
On Wed, Sep 20, 2017 at 12:18 AM Jon Gacnik<EMAIL_ADDRESS>wrote:

Hey all @ahdinosaur https://github.com/ahdinosaur @yoshuawuyts
https://github.com/yoshuawuyts ! Jumping back in here since #134
https://github.com/stackcss/sheetify/pull/134 pretty much solves this
for us! This added support to require node modules via the transform,
something like:
style.js
var red = '#f00'
module.exports =  :host {    color: ${red}  }
app.js
var css = require('sheetify')var html = require('bel')
var prefix = css('./style.js')
document.body.appendChild(html
bam!
)
wonder if we should call this closed 🤔 ?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/stackcss/sheetify/issues/128#issuecomment-330689992,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ACWleuHQYDM7AfKojC32XbMTyvZdzTKqks5skD24gaJpZM4OSQz_
.


chore(deps): upgrade configuration

Upgrades project dependencies. See details in workflow run.

Automatically created by projen via the "upgrade-configuration-1.x" workflow

⚪ Backport skipped
The pull request was not backported as there were no branches to backport to. If this is a mistake, please apply the desired version labels or run the backport tool manually.
Manual backport
To create the backport manually run:
backport --pr 2752

Questions ?
Please refer to the Backport tool documentation


Add Instructions for using ValidatableProtocol

In readme add a few lines showing how users should ValidatableProtocol.

Also, some delegate method parameter types are changed. Readme file should be updated accordingly. Since this breaks 3.x versions, I suggest giving new version 4.0
func validationFailed(errors:[UITextField:ValidationError])
is now tuple:
func validationFailed(errors: [(Validatable, ValidationError)])

Is fixed in #124 and previous readMe edits that I have done.


Use conditional defines in config.h for SCREEN variables

Use conditional defines to automatically switch between MagTag and Featherwing epd screen support.

This is working in gpio_wakeup branch, might want to pull this support out into main independent of gpio pin wakeup support.

this is also in ek_fixes, which will be promoted to main before gpio_wakeup


v1: rename to blueprints

Although there is a precedent in using both plural and singular forms (composes/compose), I believe it is worth to be consistent.
The API is still experimental, so this patch is fine.

Damn I missed these strings somehow.

/retest

/retest

/retest

:green_apple: :tada:


Weird error messages showing up on logs

Description
I followed the steps thoroughly in this guide. However, we're seeing some messages when we're trying to present the paywall in debug mode:

I tried looking for the same message on the Flutter SDK, Android SDK, iOS SDK.
Can you help us verify where this messages/logs are coming from?

Fellow sdk user here—these print statements were erroneously introduced in release 1.1.9, and mostly removed in release 1.2.0 (specifically PR https://github.com/superwall/Superwall-Flutter/pull/12) and completely removed in https://github.com/superwall/Superwall-Flutter/pull/13 (which hasn't been rolled into a release yet).
If you haven't updated the SDK in the last 2 weeks, updating it, might fix it, so long as your flutter-android project is using a Gradle version older than 8.1.0. But if it's not, you'll be stuck at release 1.1.9, and stuck with these print statements. I was in that situation before, and made a fork with the print statements removed here: https://github.com/TimeFinderApp/Superwall-Flutter/commit/e8c6d03273086745b8637afab65d2e1f9feac335.
Hope that helps!

Fellow sdk user here—these print statements were erroneously introduced in release 1.1.8, and mostly removed in release 1.1.9 (specifically PR https://github.com/superwall/Superwall-Flutter/pull/12) and fully removed in 1.2.0.

Thanks @lukemmtt. That make sense. I couldn't find it elsewhere on the code before.

I was in that situation before, and made a fork of 1.1.8 with the print statements removed here: https://github.com/TimeFinderApp/Superwall-Flutter/commit/e8c6d03273086745b8637afab65d2e1f9feac335.

Yeah I reported a similar issue regarding the old version of the SDK, they updated the doc since.
Awesome app, good luck on your project!

Glad I could help @joshuadeguzman!

Yeah I reported a similar issue regarding the old version of the SDK, they updated the doc since.

Makes sense. Yeah the Superwall guys are great despite definitely having their hands full!

Awesome app, good luck on your project!

Thank you very much! Dub looks incredible too, best of luck!

Thank you @lukemmtt for helping resolve this!

Much love Luke, thanks for the kind words :) nice to see people in our community helping one another!

@jakemor Glad to help, thanks for the product sir!


Attempting to allocate a large chunk of CpuToGpu memory will result in a validation warning.

When attempting to allocate a large (> 256MiB) chunk of CpuToGpu memory, it will try to allocate to DEVICE_LOCAL | HOST_VISIBLE | DEVICE_COHERENT memory first.  The heap of that type of memory is usually fairly small ( <= 256 MiB). Attempting to allocate here results in a validation warning. gpu-allocator already correctly attempts to allocate from another memory type if it's available. However, we should test the heap size before attempting to allocate to avoid this warning.

Fixed in #60!


Is spark function bin()  supported in velox?

Is spark function bin()  supported in velox?

@mbasmanova

Sure. I will add this function later. Thanks for your reply!


Fix #39 - compare graphAPI version correctly

Say that, I don't think using version_compare is the best way to do that. Perhaps https://github.com/composer/semver . But in fact why simply drop support for API < 2.8?

If this is still an issue, please make a new PR.


Default profile seems not working for me...

I have only default profile enabled on two routers, I tried to change time, etc., nothing helps, backups are not created, no error backups either, only manual mode works...
I tried to look at the logs in cron and routerfleet containers but couldn't find any problem there :(

I made a few tests and looks like there's something wrong with the scheduling. I will review this in a few and release a patch later today.
thanks for pointing it out

I manage to find  an issue on my backup scheduler.
Please upgrade to the latest version and it should be fixed.
After upgrading, just edit and save your backup profile to force and update on each related router's backup schedule.
You can confirm if your schedule looks correct going on your router details page and clicking at "show schedule" on the top right corner.
The schedule may take up to 5 minutes to generate after router or profile editing.
Cheers!


[docs] Triple-colon syntax not rendered properly in CONTRIBUTING.md

Current behavior 😯
Currently in the 'How can I use a change that wasn't released yet?' section within CONTRIBUTING.md this info block is not rendering properly as GitHub is not recognizing the triple-colon syntax for its markdowns as the main MUI docs does. Is this something we could look into fixing?
CONTRIBUTING.md

As can be seen above the :::info syntax does not get rendered properly.
MUI docs example

The above screenshot is taken from the Badge docs from MUI Base where the :::info syntax renders properly for the section of 'The following props are available on...'.

Proposed solutions 🧪
1. GitHub has a beta feature where blockquotes can be highlighted with Notes and  Warnings within their markdowns.
Implementation
> **Note**
>
> If you have already installed this package, your changes will not be reflected when you reinstall it.
> As a quick fix, you can temporarily bump the version number in your `package.json` before running `yarn build`.

Rendered output

2. For a stable and standard approach there is the good old blockquotes syntax by themselves.
Implementation
> If you have already installed this package, your changes will not be reflected when you reinstall it.
> As a quick fix, you can temporarily bump the version number in your `package.json` before running `yarn build`.

Rendered output

Hi,
Open source noob here looking for a potential first time contribution. :) Can I work on this?

I like the first solution. Please go ahead and work on this @neha723 if you would like and request a review from me.

I already opened a PR for this cc @neha723 .

Loking at the AspNetCore docs at https://github.com/dotnet/AspNetCore.Docs/blob/main/aspnetcore/mvc/models/model-binding.md none of the triple column markdown is rendered. I tested with Firefox and Edge. Is there still a GitHub bug?

Loking at the AspNetCore docs e.g. at https://github.com/dotnet/AspNetCore.Docs/blob/main/aspnetcore/mvc/models/model-binding.md none of the triple column markdown is rendered. I tested with Firefox and Edge. Is there still a GitHub bug?

It definitely looks that way to me - for some reason GitHub's markdown doesn't recognize the triple column syntax so using blockquotes is the workaround I thought of which was the closest thing I could find for replicating what the triple colon was supposed to render.

I got an answer from Microsoft that the docs are just the repo for the rendered documents at learn.microsoft (https://github.com/dotnet/AspNetCore.Docs/issues/29343)


Improve module restrict hints

I'm not updating the readme for now, since I want some general feedback before doing any more work.

Add new fields to module restrict config:

asRequired: Bool; if true, as alias is required. Ignored if as
is empty.
qualified: either 'always', 'never', 'exhaustive' or 'ignore';
should the module be qualified? 'exhaustive' only requires
qualification if there's no explicit import list, e.g.
import Foo (a, b, c) is fine, but import Bar hiding (d) and
import Baz will generate a hint.
importStyle: one of qualified, unqualified, explicit, explicitOrQualified, ignore.
The preferred import style. explicitOrQualified accepts both import Foo (a,b,c)
and import qualified Foo, but not import Foo or import Foo hiding (x).
explicit is basically the same, but doesn't accept import qualified
(I'm not sure if it's very useful tbh). qualified and unqualified do not care
about the import list at all.
qualifiedStyle: either 'pre', 'post' or 'ignore'; how should the
module be qualified?

Wildcard match handling is extended, such that restrictions are
unified between wildcard and specific matches. With the new
fields, the more specific option takes precedence. The list fields are
merged. With multiple wildcard matches, the precedence between them is
not guaranteed (but in practice, names are sorted in the
reverse lexicograpicall order, and the first one wins -- which
hopefully means the more specific one more often than not)
This hopefully explains the reason for 'ignore' option: we can
override the wildcard match with it.
The primary motivation for this is to be able to specify the default
pre/post style with something like
- {name: ['**'], qualifiedStyle: post}

But it does also add a fair bit of flexibility for writing rules (at the cost of some complexity).
If there's a better way to do this, let me know.

If the same module is specified multiple times, for the new fields, only
the first definition will take effect.
If you're wondering why asRequired is a Bool, and not always/never/ignore, that's because false is ignore here, and there's no never option. One can already effectively forbid aliasing by specifying something like name: Data.Map, as: Data.Map.

Side note: could also tackle https://github.com/ndmitchell/hlint/issues/769 here to some extent, e.g. by adding qualified: 'exhaustive' option, which would generate the hint only if the import doesn't have an explicit import list.

This conflicts with #1342, which renamed it to wildcard-imports.test and rewrote most of that file. Can you reapply there?

Okay, I've rebased and applied some suggested changes (see https://github.com/ndmitchell/hlint/commit/e215ae33ea008854666c2dc654f197125e189b59), and also updated the README.

Thanks for all your changes, looks great