Config switch to turn on/off Quic processing

Signed-off-by: Kateryna Nezdolii<EMAIL_ADDRESS>Description:
Extending quic listener configuration with runtime feature flag for enabling/disabling quic processing. Flag controls onReadReady(), onWriteReady() and onData() callback methods.
Risk Level: Low/Medium
Testing: Unit tests+Integration tests.
Docs Changes: NA?
Release Notes:
Fixes ##9230

Spent most of the time on task, which may be out of scope for this change, basically trying to propagate Envoy primitives (like Runtime) all the way down from server instance->worker->connection handler->active quic listener factory->active quic listener1, which introduced cyclic dependency in bazel modules. As current code is not production ready (and ActiveQuicListenerFactory not being instantiated from conn_handler), change may be fine as it is (adding Runtime` field to ActiveQuicListenerFactory), but in the long run code needs to be refactored, possibly introducing UdpFactoryContext that would provide to resources like Dispatcher, Runtime::Loader etc.
Still need to complete tests.
Would appreciate opinions if refactoring change should be part of this task or not.

Check out Runtime::LoaderSingleton::getExisting() which will probably make this task easier. This is one case where we break our rule about no statics.

took me some to understand that bazel build //source/exe:envoy-static is not including //source/extensions/quic_listeners/quiche:... :)

@mattklein123 @danzh2010 please take a look. There is failing test in quiche QuicMemSliceStorageImplTest, did not find location (public github repo) where to report issues for quiche.

@danzh2010 updated description for PR

On the other hand, do we want the kill switch to gracefully close all new and existing connections before blocking all the incoming packets? If no, I think guarding at onReadReady() and onWriteReady() is sufficient. Otherwise we probably need to use QUICHE interface in QuicDispatcher to reset all the quic connections. @mattklein123 @alyssawilk

IMO we don't need to be graceful here so I would go with the simple solution of just blocking read packets.

On the other hand, do we want the kill switch to gracefully close all new and existing connections before blocking all the incoming packets? If no, I think guarding at onReadReady() and onWriteReady() is sufficient. Otherwise we probably need to use QUICHE interface in QuicDispatcher to reset all the quic connections. @mattklein123 @alyssawilk

IMO we don't need to be graceful here so I would go with the simple solution of just blocking read packets.

I may be lacking some knowledge here, but why not to also guard onData()? OnData() implementation in quic dispatcher does bunch of things like buffering of packages if applicable, would not we want not to do it if quic processing is disabled @danzh2010 @mattklein123 ?

I may be lacking some knowledge here, but why not to also guard onData()? OnData() (aka ProcessPacket(()) implementation in quic dispatcher does bunch of things like buffering of packages if applicable, would not we want not to do it if quic processing is disabled @danzh2010 @mattklein123 ?

I will defer to @danzh2010 as the expert, but we only need to hard block the receipt of packets. Everything else will eventually time out.

@danzh2010 @mattklein123 applied review comments. Just one thing, when feature flag is not specified in config, the default value is false, which contradicts to this comment:
https://github.com/envoyproxy/envoy/pull/9679/files#diff-4c87225965fc01abe93665952e63ada9R36

Please ignore my previous comment, the test was checking default value, but not the actual value of the flag. Did a quick check and runtime feature is enabled by default if not specified in config.

On the other hand, do we want the kill switch to gracefully close all new and existing connections before blocking all the incoming packets? If no, I think guarding at onReadReady() and onWriteReady() is sufficient. Otherwise we probably need to use QUICHE interface in QuicDispatcher to reset all the quic connections. @mattklein123 @alyssawilk

IMO we don't need to be graceful here so I would go with the simple solution of just blocking read packets.

I may be lacking some knowledge here, but why not to also guard onData()? OnData() (aka ProcessPacket(()) implementation in quic dispatcher does bunch of things like buffering of packages if applicable, would not we want not to do it if quic processing is disabled @danzh2010 @mattklein123 ?

onData() is the callback  in onReadReady(). If you already guarded there, onData() won't be reached at all. You can add a temporary ASSERT in onData() to check it.

On the other hand, do we want the kill switch to gracefully close all new and existing connections before blocking all the incoming packets? If no, I think guarding at onReadReady() and onWriteReady() is sufficient. Otherwise we probably need to use QUICHE interface in QuicDispatcher to reset all the quic connections. @mattklein123 @alyssawilk

IMO we don't need to be graceful here so I would go with the simple solution of just blocking read packets.

I may be lacking some knowledge here, but why not to also guard onData()? OnData() (aka ProcessPacket(()) implementation in quic dispatcher does bunch of things like buffering of packages if applicable, would not we want not to do it if quic processing is disabled @danzh2010 @mattklein123 ?

onData() is the callback in onReadReady(). If you already guarded there, onData() won't be reached at all. You can add a temporary ASSERT in onData() to check it.

Thanks for explanation @danzh2010.

/rebuild

Please ignore my previous comment, the test was checking default value, but not the actual value of the flag. Did a quick check and runtime feature is enabled by default if not specified in config.

Thanks for checking the default behavior! Do you mind add the above QuicEnabledByDefault test somewhere to enforce this?

@danzh2010 believe all review comments are addressed. I had to fix additional clang_tidy errors, that were not popping up in CI before. (apparently something changed in CI)

@mattklein123 could you kindly retrigger the build, there is some redis test failing. It should not be related to the proposed change

Please merge master to pick up https://github.com/envoyproxy/envoy/pull/10672. We no longer accept changes to v2 (without explicit exception), so any API modifications should happen in v3. If this PR is adding a new proto, please follow the updated instructions in https://github.com/envoyproxy/envoy/blob/master/api/STYLE.md#adding-an-extension-configuration-to-the-api.

Sorry needs a master merge.
/wait

@mattklein123 added a test that i expect to fail: https://github.com/envoyproxy/envoy/pull/9679/files#diff-1d14c854240d676b61a3cb2b958df06fR79
Wanted to confirm that when feature flag is not specified, it will have empty runtime key and "true" default value. (This was to address @danzh2010 question).
There will be a one line test code correction needed after this.
Apologies for spamming CI pipeline, i could have tested it locally in Docker, but is very slow.

@mattklein123 added a test that i expect to fail: https://github.com/envoyproxy/envoy/pull/9679/files#diff-1d14c854240d676b61a3cb2b958df06fR79
Wanted to confirm that when feature flag is not specified, it will have empty runtime key and "true" default value. (This was to address @danzh2010 question).
There will be a one line test code correction needed after this.
Apologies for spamming CI pipeline, i could have tested it locally in Docker, but is very slow.

Thanks for adding the test! Doesn't the new test fail locally when you ran blaze test?

@mattklein123 added a test that i expect to fail: https://github.com/envoyproxy/envoy/pull/9679/files#diff-1d14c854240d676b61a3cb2b958df06fR79
Wanted to confirm that when feature flag is not specified, it will have empty runtime key and "true" default value. (This was to address @danzh2010 question).
There will be a one line test code correction needed after this.
Apologies for spamming CI pipeline, i could have tested it locally in Docker, but is very slow.

Thanks for adding the test! Doesn't the new test fail locally when you ran blaze test?

@danzh2010 I was never able to run quic tests locally on MacOs, think i pasted initial error long time ago in quic channel. Nowadays it fails with long verbose error that's not obvious to me. Will send most recent full log in quic channel.

@danzh2010 @mattklein123 removed the test that was relying on default mock behaviour, my bad i missed that one.
There was a question like "will be quic processing working if  there is no configuration for it in proto". Currently we cannot really do end-to-end test because of using mocks, but looking into code, there are multiple possible scenarios:

There is no configuration of that feature flag, in that case runtime_key string will be empty and code will return false (there is code part that checks if key is empty and if it is it returns false).
https://github.com/envoyproxy/envoy/blob/master/source/common/runtime/runtime_impl.cc#L269

There is config for feature flag, runtime_key is specified and in that case it would be responsibility of user which default value do they set (default_value is required field in that proto).

It could either be responsibility of user to provide configuration for that flag or we could add some code guard like “if runtime_key is empty set default_value to true”.

There is no configuration of that feature flag, in that case runtime_key string will be empty and code will return false (there is code part that checks if key is empty and if it is it returns false).
https://github.com/envoyproxy/envoy/blob/master/source/common/runtime/runtime_impl.cc#L269

I think you looked at the wrong caller of getBoolean(), Runtime::FeatureFlag::default_value_ is true if not configured:
https://github.com/envoyproxy/envoy/blob/15330aa60bd6da79be02f00b8130b527f11eb0fa/source/common/runtime/runtime_protos.h#L20

@danzh2010 in that case we are good to merge PR? Do you have any other review comments? There is one test (added a comment about it), that does not bring much value, could be removed.

/rebuild

/retest

@danzh2010 switched to real loader in test, will address review comments soon.

@danzh2010 switched to real Runtime object and added end to end test for empty config. Please take a look, i believe it addresses your review comments.

There is failing coverage: https://343614-65214191-gh.circle-artifacts.com/0/coverage/index.html but none if it is related to this PR. Going to merge master and see if it helps

FAILED_PRECONDITION: there are no bots capable of executing.... in ci, need to wait for fix...

@danzh2010 @mattklein123 applied review comments.


request to add skeeey as owner

Signed-off-by: liuwei<EMAIL_ADDRESS>

/assign @qiujian16

Thanks, @skeeey is the main contributor of the  registration project, and has implemented features  like addon management, leases updates in this project. I think it is great to add @skeeey as the owner of the  project.
/lgtm

/assign @deads2k

Great to see the pool expanded!
/approve


Added useCache parameter to JSoup's Connection. Fix #336

Adds a useCache parameter to Connection to allows user to specify if they want to use the system's URL cache. Sometimes the URL cache can cause issues with Java Web Start and Applets so specifying it can be useful. Otherwise, the sets useCache to false as is recommended.
Issue #336 was caused by the system default value being set to true.

I've fixed the merge conflicts if that is what was preventing you from merging this pull request.

(Closing old PRs; thanks for your interest and apologies for the late review. I don't plan to merge this, but if you believe there is still an issue, please leave a comment.)


Profile Page: Add Account ID

Enhancement: ADD account ID to the Profile page (user would have the ability to look up their own account ID and communicate it to the departments as needed. This will allow departments to find volunteers and log hours more quickly and efficiently.)

Humm I just submitted it as badge number not account ID, should I change it.

So, hopefully not speaking out of turn, but my understanding was that the Account ID would be the badge number for this year. So, assuming you generated the Badge Number field with the Account ID Number, then that will work just fine!

Yes it is the account id I just labeled it badge number because I too am under the understanding that they will be on in the same this coming year.

Please retest with new release, re-open if failure remains.


[WIP] Finalise translations for v1.2.0

Abstract
This is our monthly PR to bring MPW's translation files back to full i18n parity!
PR will remain as a draft until either all translations are complete, or we're less than 12 hours away from launch.

Testing
To test this PR, simply:

Ensure all areas of MPW are translated. (Barring the soon-to-be-redesigned Masternode Dashboard).

If any errors are found, the PR works unexpectedly, or you have viable suggestions to improve the UX or functionality of the PR, let me know!

Note: prettier will be ran before merge, to make it easier for translators to work without dealing with linting.


ES6, node and electron support

glslify needs some maintenance to keep up with changes in the broader JavaScript ecosystem.  It is currently quite onerous to set up in electron or node environments and it also has issues with ES6 syntax.
In the next version we should take advantage of things like tagged template strings for writing shaders inline.
In order to support node and electron out of the box though we'll need to break the interface in 3 major ways:

Because we can't figure out the __dirname of the module which is invoking glslify as a function, we'll need to modify module.exports to return a constructor object which then creates the new properly configured glslify instance.
Invoking glslify should return a string immediately, so we'll have to modify glslify-deps and glslify-resolve to be synchronous.
Calling glslify directly now invokes glslify so the transform interface will have to be split out into a separate module or moved to a different entry point (glslify/transform, glslify-transform?)

👋
What would the __dirname fix look like? I know @yoshuawuyts and @ahdinosaur had a solution for sheetify in Node that worked around the problem without changing API, but I'm not fully aware of the tradeoffs.
Would be great for us to avoid making breaking API changes, or at least make the transition straightforward, to minimize the impact on pixi.js and others :)
If moving to glslify/transform or glslify-transform, is there a way to trigger an error/warning when someone uses glslify as a browserify transform directly?

My intuition around the sheetify stacktrace hack is that it's a fragile solution which could be unsuitable for unforseen new environments. I think a new API where __dirname is passed in explicitly would not be very hard to transition to:
var glx = require('glslify')(__dirname)

and then you can call glx.load(file), glx.compile(src), or use glx as a tagged template string function:
console.log(glx`
  #pragma glslify: noise = require('glsl-noise/simplex/3d')
  precision mediump float;
  varying vec3 vpos;
  void main () {
    gl_FragColor = vec4(noise(vpos*25.0),1);
  }
`)

I have some code working for this interface that works in node/electron natively and also in the browser with a browserify transform.
To port existing code to this new proposed system:

require('glslify') becomes require('glslify')(__dirname)
glslify(file) becomes glslify.file(file)

Branch with current progress: https://github.com/substack/glslify/tree/v6

That sheetify hack seems like an acceptable solution to me.  While it may be fragile, I think not breaking the API is a higher priority.  So :+1: for that hack.
Regarding template strings vs file names:  I think that template strings seem like a better default than taking a file as an argument.
@hughsk do you have any thoughts on how we could support this?  One way I was thinking about was to do dynamic dispatch on the arguments and check if the input is an array of strings (or input to a glslify string) and if so then running the template string version, otherwise doing a file look up.

These features have been published in 6.0.0.


admin: Richer HTML home page with forms for params

Commit Message:
High level: creates an HTML UI to tweak query params for admin endpoints.
This PR covers a few things and could be broken up.

adds ParamDescriptor abstraction and gives every endpoint a vector of those so the query-params can be specified before the admin page is visited.

Re-organizes CSS and HTML fragments so they are in their own files. This makes it easy to iterate on them as editors can use the right syntax-highlighting each file type, and you can hack the generator script during development to reference the file from a local server so you can iterate on the web markup without recompiling/relinking C++ or even restarting the server.

Enable adjusting query-params for admin points from the admin home page:

Adds an "html" format option for /stats and allow incremental adjustment of settings from that view also.

Adds selection of types (text-readouts, gauges, counters, histograms, or All) within /stats.

Some of these changes could be broken out as their own PRs if this is too large to review.
Additional Description:
This is was broken out from #18670 which will enable a hierarchical view of the stat names, made much more efficient by employing Stats::Scope to bound the traversal that must be done by the server.
Risk Level: medium -- this adds a novel new mechanism to build HTML and CSS files into the C++ binary as string constants, to simplify deployment. This appears to pass CI on non-Unix platforms so I think this is correct.
Docs Changes: will be needed in this PR but would like to get traction on code before adding that.
Platform Specific Features: n/a

/retest

/assign @envoyproxy/first-pass-reviewers

/assign-from @envoyproxy/first-pass-reviewers

@dmitri-d let me know if you'd prefer to break this up prior to review.

We are rolling back code on which this depends, so converting to draft mode for now. See https://github.com/envoyproxy/envoy/pull/20835

/retest

Re-opening as the related bug has now been resolved.
I'm OK with breaking this up if preferred e.g. based on the bullet points in the PR description.

Matt & Greg -- it'd be great to get your take on this at a high level at least; happy to find a first pass detailed review elsewhere.

High level extremely quick comment: What do you think about somehow moving this out to an extension or making it compile time switchable? I don't think this will be widely used and it would especially be nice to be able to compile something like this out for Envoy Mobile? WDYT?

This makes sense and I agree that it'd be great to have a minimal E-M build. What is the right partitioning?
Will there be an admin endpoint? Stats sinks? E.g. currently the admin "/" provides a minimal HTML response, whereas I think it used to, a long time back, respond with a text/plain list of endpoints. Is that a better behavior for E-M? Are things like Prometheus used in E-M?
I have to admit I don't have a great intuition about how this is used in a mobile setting; I understand why a proxy is good but idk how to monitor it.

Will there be an admin endpoint? Stats sinks? E.g. currently the admin "/" provides a minimal HTML response, whereas I think it used to, a long time back, respond with a text/plain list of endpoints. Is that a better behavior for E-M? Are things like Prometheus used in E-M?

I think in general very few people use any kind of HTML/browser interaction with the admin endpoint when running at scale. IMO this is really great for local examples and learning Envoy and maybe targeted debugging but in general seems like something that wouldn't be widely used, even on server.
Could we potentially just have all the HTML stuff be behind a compile time option even if not an extension? If we want to do an extension, another way of thinking about it would be as a bootstrap extension that could register different admin handlers (HTML variants)?

I agree that I don't think it would be widely used, and I like the idea of adding it in via an extension. I don't think I've ever accessed the admin endpoint with anything other than curl.
We've discussed admin listener extensions a few times. Would it make sense to support an admin listener filter chain? Another recent request I saw was for compressing stats responses, which is another good use case for adding filters.
I think previous brainstorming on this topic was to make the admin endpoint just a regular filter to put on a normal listener. This was difficult because many admin actions need to happen on the main thread, but listeners handle traffic on worker threads. What if instead we kept the admin listener as special and always on the main thread, but still allow some configurable filters?
But it's also possible that the admin listener is just too different from normal dataplane listeners, and this isn't worth the effort it would take.

I don't think it's a problem to have the admin filter run on a worker thread. It can just post to the main thread if it needs to read data that way. If that enables compression to be added into the chain, and to make it easier for admin endpoints to be extensions that SGTM.
WDYT?

I'm not opposed to that. There has been previous work and discussion in this area. See #11367 and #2763. But I'd love to solve this "for real" since it has come up repeatedly over the years.

One other related thought -- if no one other than us uses the html version of the admin endpoint should we consider removing it from Envoy OSS and put back the text/plain list-of-endpoints that was originally there? I think we can add the alternate entry-point here without much difficulty.
That might also have the benefit of reducing the current code footprint and making E-M smaller.

Also for this PR I think what I'll do first is fork off the Params refactor since is a straight code simplification and will make it easier to than add RE2-based filtering, as std::regex is a bottleneck.

Yeah I would be in favor of removing the existing HTML and making it all optional somehow.

Unassigned myself. Please reassign when not a draft.

/retest

OK I'm going to open this up for review. I think it functionally does what I want and I'd like to start a dialog about a couple of the novel things in this PR.

Re-assigning to Matt now that this is not a draft. I think this passes CI also though it seems to be stuck in some steps now. I'm sure there will be suggestions anyway :)

/retest

admin.zip

sorry hold off on this a moment -- getting the associations right between param elements and forms has broken the form submission data :)

OK this seems to work. An example of a fragment with one parameter is here:

  <form action='init_dump' method='get' id='init_dump' class='home-form'>
    <button class='button-as-link'>init_dump</button>
  </form>
  dump current Envoy init manager information (experimental)

  <input type='text' name='mask' id='param-12-init_dump-mask' form='init_dump' />
  The desired component to dump unready targets. The mask is parsed as a ProtobufWkt::FieldMask. For example, get the unready targets of all listeners with /init_dump?mask=listener`

@mattklein123 does it make sense for you to take a look now or do you want me to get another maintainer to look over the C++ and BUILD aspects of this first?

thanks @Mythra !


[wip] user data content filtering

closes #1534
potentially need additional options to support yaml or multi-part cloud init, but for regex and string match this pr suffices.
https://cloudinit.readthedocs.io/en/latest/

on launch config allow for this, by having separate deserialize type deferred method invoked on notification.


Regarding isolation forest

Greetings, this is a great tool. I have a question: I run isolation forest on a dataset. I run it multiple times on the same dataset with the same hiperparameters and I never get similar results. Im not sure im implementing it right, because I think that I should get similar results when I run it on the same dataset.  This is the code i run multiple times:
$IsolationForest = new IsolationForest(500,0.2,0.05);
$IsolationForest->train($dataset);
$resultado = $IsolationForest->predict($dataset);
I train with the dataset and then predict on it. Is that the way to do it? I apreciate any help. Greetings Martin.

Hi @drakon47 thanks for the great question, I have also had fairly dissimilar results with Isolation Forest in the past
Isolation Forest is an algorithm that works on the principle of randomness. An Isolation Tree is a completely randomized decision tree - refer to the split method on the Isolator node. The logic being that anomalies will get separated into their own Cell (leaf) node earlier in the grow process and thus receive a higher isolation score.
In addition, Isolation Forest, in much the same way as Random Forest seeks to minimize the variance of an ensemble of estimators by training each learner on a randomized subset of the training set (called a bootstrap set) and then averaging their predictions.
So it is perfectly normal to encounter results of varying degrees due to the stochastic nature of the algorithm. To remove some of the variance you can try adding additional estimators to the ensemble. Try 1000 or more.

Are you able to cross validate with ground truth labels? If so, is the accuracy good or bad?
What kind of features are you using?

Thank you Andrew for your response. I kept playing around with it and I have additional information that might be useful:
-I decided to try with a different dataset because I had a very homogeneous dataset and I suspected that could be he problem.
-I run the same experiments with the classic diabetes dataset but I get the same results. To test the accuracy of detecting anomalies I run the same isolation forest (1000 trees) multiple times on the same dataset and then I compared how many records where identified as anomalies on all the runs.
-Results are very varaible. For example, on the diabetes data set I run it 3 times. The set has 800 records. The algorithm isolates around 70 items each time (this does not vary). But those 70 items are most of the times different on each run. For example: after I run it 3 times the Isolation Forest separately on the same dataset, only one record shows as anomaly on the 3 runs results. Most of them show as anomaly only on one of the run.
-I understand there can be variability. But is it right to have that much? Everytime I run the algorithm shows a completely different dataset of anomalies.
-So, I decided to run the exact same experiment on Python, using isoltaion forest implemented on sklearn. Exact same data set, run the IF 3 times. Then I compared results. Most of the data points are repeated on the 3 runs. THey are consistently identified as anomalies on all runs. There are a few different, but very little (less than 5% of all detected anomalies).
I hope my thoughts help. Sorry for my english.

Thanks for the helpful intelligence @drakon47
Both the Rubix ML and Scikit-learn implementations of Islolation Forest are based on the two original papers by Liu et al. The Rubix ML version, however, implements extended IF as described in the Garchery et al paper for the addition of categorical feature support. They SHOULD behave very similarly for continuous features, but your experiments are not confirming this.
I took another look at my work and indeed I made a mistake on the isolation score calculation. Specifically, the calculation is supposed to divide by the total expected depth of an average search for the whole ensemble. See this commit https://github.com/RubixML/RubixML/commit/bc720014c1fd978358b76271a5d9f8af52eba935#diff-08b1873f5aa259f041b4b08edecaee46L239
Having that said, we may not be finished just yet - although I would like you to composer install the latest dev-master to see if the latest commit worked/helped
How many features were in your original dataset? Diabetes has 20 is looks like ... I'm wondering if we should implement max_features per learner like the ScikitLearn implementation. I understand that in practice Isolation Forest works best with a constrained set of features.

Excelent job! It is deffinitely behaving very different now. I installed the new versionand played around with both datasets and results are consistent with scikitlearn comparison.
-The diabetes dataset (i used a 9 features version, smaller: https://idealsur.com/borrar/diabetes.csv) run with 500 trees gives back a very consistent set of data every time. I comapred 5 runs of it and 95% of the data shows up on all runs.
-The other dataset, behave similar. THe percentaje is higher.
I havent palyed aruond with max_features, but will be trying it and comaring it so I can give you more feedback.
I love this php implementation of all the ml algorithms. I see a great potencial in it. Good work!

@drakon47 I'm glad that commit solved the issue, thanks again for the great bug report
Keep us up to date with your experience so far and don't hesitate to get involved if you find something else that isn't working right
I have an idea in my head as to how we'd implement max_features so let us know if that feature will be useful - I'd be happy to work with you if you felt that was something you'd like to contribute to the project
I'm also curious to know the speed difference between the Rubix ML and the Scikit-learn implementation
Thanks again for the great work, feedback, and for your help in bringing quality ML tools to the PHP language


[bug] Data Normalization - TypeError: unhashable type: 'dict'

Background
If you have AWS SecurityHub service enabled in your AWS account, it will generate cloudwatch events and it may trigger exception with TypeError: unhashable type: 'dict' error due to StreamAlert normalizes source field into sourceAddress while the source field in SecurityHub events containing a dictionary eventually. See the normalization conf here.
            "source": {
                "owner": "AWS",
                "sourceIdentifier": "RESTRICTED_INCOMING_TRAFFIC"
            },

The walkaround is remove source key in conf/normalized_types.json.
The long term solution is to handle this exception. Other CloudWatch events may contain source address in source field.
For your reference, here is a CloudWatch event generated by SecurityHub
{
    "eventID": "79fc6769-d50c-4947-8573-4790f0f24395",
    "responseElements": null,
    "sharedEventID": "",
    "eventType": "AwsApiCall",
    "streamalert:envelope_keys": {
        "owner": "123456789012",
        "logStream": "123456789012_CloudTrail_us-east-1",
        "subscriptionFilters": [
            "cloudtrail_delivery"
        ],
        "messageType": "DATA_MESSAGE",
        "logGroup": "CloudTrail/DefaultLogGroup"
    },
    "errorCode": "",
    "eventSource": "config.amazonaws.com",
    "requestID": "fc51187c-241f-11e9-97ca-bb002a57e007",
    "userAgent": "securityhub.amazonaws.com",
    "recipientAccountId": "123456789012",
    "eventName": "PutConfigRule",
    "eventTime": "2019-01-29T23:45:40Z",
    "serviceEventDetails": [],
    "resources": [],
    "eventVersion": "1.05",
    "additionalEventData": [],
    "apiVersion": "",
    "errorMessage": "",
    "readOnly": false,
    "requestParameters": {
        "configRule": {
            "configRuleState": "ACTIVE",
            "description": "Checks whether the incoming RDP traffic is Allowed from <IP_ADDRESS>/0. This rule is compliant when incoming RDP traffic is restricted.",
            "configRuleName": "securityhub-restricted-rdp-b69qbh",
            "configRuleArn": "arn:aws:config:us-east-1:123456789012:config-rule/aws-service-rule/securityhub.amazonaws.com/config-rule-memyg0",
            "source": {
                "owner": "AWS",
                "sourceIdentifier": "RESTRICTED_INCOMING_TRAFFIC"
            },
            "createdBy": "securityhub.amazonaws.com",
            "inputParameters": "{}",
            "scope": {
                "complianceResourceTypes": [
                    "AWS::EC2::SecurityGroup"
                ]
            },
            "configRuleId": "config-rule-memyg0"
        }
    },
    "awsRegion": "us-east-1",
    "userIdentity": {
        "principalId": "BBBBBBBBBBBBBBBBBBBBB:securityhub",
        "accessKeyId": "ABCDABCDABCDABCDABCD",
        "invokedBy": "securityhub.amazonaws.com",
        "sessionContext": {
            "sessionIssuer": {
                "userName": "AWSServiceRoleForSecurityHub",
                "type": "Role",
                "arn": "arn:aws:iam::123456789012:role/aws-service-role/securityhub.amazonaws.com/AWSServiceRoleForSecurityHub",
                "principalId": "BBBBBBBBBBBBBBBBBBBBB",
                "accountId": "123456789012"
            },
            "attributes": {
                "creationDate": "2019-01-29T23:45:38Z",
                "mfaAuthenticated": "false"
            }
        },
        "type": "AssumedRole",
        "arn": "arn:aws:sts::123456789012:assumed-role/AWSServiceRoleForSecurityHub/securityhub",
        "accountId": "123456789012"
    },
    "vpcEndpointId": "",
    "sourceIPAddress": "securityhub.amazonaws.com",
    "managementEvent": false
}

The traceback is
Traceback (most recent call last):
  File "test_kinesis_events.py", line 27, in <module>
    main()
  File "/Users/chunyong_lin/Work/virtual_environments/streamalert/lib/python2.7/site-packages/moto/core/models.py", line 74, in wrapper
    result = func(*args, **kwargs)
  File "/Users/chunyong_lin/Work/virtual_environments/streamalert/lib/python2.7/site-packages/mock/mock.py", line 1724, in _inner
    return f(*args, **kw)
  File "/Users/chunyong_lin/Work/virtual_environments/streamalert/lib/python2.7/site-packages/mock/mock.py", line 1305, in patched
    return func(*args, **keywargs)
  File "test_kinesis_events.py", line 23, in main
    Classifier().run(data.get('Records', []))
  File "/Users/chunyong_lin/Work/streamalert/stream_alert/classifier/classifier.py", line 244, in run
    self._classify_payload(payload)
  File "/Users/chunyong_lin/Work/streamalert/stream_alert/classifier/classifier.py", line 184, in _classify_payload
    Normalizer.normalize(parsed_rec, record.log_type)
  File "/Users/chunyong_lin/Work/streamalert/stream_alert/shared/normalize.py", line 105, in normalize
    record.update({cls.NORMALIZATION_KEY: cls.match_types(record, log_normalized_types)})
  File "/Users/chunyong_lin/Work/streamalert/stream_alert/shared/normalize.py", line 62, in match_types
    for key, keys_to_normalize in normalized_types.iteritems()
  File "/Users/chunyong_lin/Work/streamalert/stream_alert/shared/normalize.py", line 62, in <dictcomp>
    for key, keys_to_normalize in normalized_types.iteritems()
TypeError: unhashable type: 'dict'

Desired Change
Handle TypeError due to the dictionary in the normalized field correctly.

I hit the same bug but with Macie for recipientAccountId from https://github.com/airbnb/streamalert/blob/master/conf/normalized_types.json#L89 due to Macie using the format:
"recipientAccoundId": { "123456789012": 431 }

(I have no idea what that 431 means)
See example Macie event at https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/EventTypes.html#macie-event-types

Resolved #1031


wrong emoji suggestion priority order

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

Action Performed:

type :rock

Expected results:
suggestions should be ranked on name matching first and then keywords but we don't see :rocket: (rocket) emoji until we reach :rocke . The suggestions till :rock have rock as substring in their keywords and not in name (except the rock emoji). This is not how its implemented in other apps like slack
Actual results:
keywords prioritized over title in emoji suggestion
Workaround:
Can the user still use Expensify without this being fixed? Have you informed them of the workaround?
Platforms:

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

[x] Android / native
[x] Android / Chrome
[x] iOS / native
[x] iOS / Safari
[x] MacOS / Chrome / Safari
[x] MacOS / Desktop

Version Number: <IP_ADDRESS>
Reproducible in staging?: y
Reproducible in production?: y
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation

https://user-images.githubusercontent.com/43996225/235790004-02832dce-9df9-4fec-9074-192ef4bb26a4.mp4
In slack

Expensify/Expensify Issue URL:
Issue reported by: @chiragxarora
Slack conversation: https://expensify.slack.com/archives/C049HHMV9SM/p1683018206388899
View all open jobs on GitHub

Triggered auto assignment to @garrettmknight (Bug), see https://stackoverflow.com/c/expensify/questions/14418 for more details.

Bug0 Triage Checklist (Main S/O)

[ ] This "bug" occurs on a supported platform (ensure Platforms in OP are ✅)
[ ] This bug is not a duplicate report (check E/App issues and #expensify-bugs)

If it is, comment with a link to the original report, close the issue and add any novel details to the original issue instead

[ ] This bug is reproducible using the reproduction steps in the OP. S/O

If the reproduction steps are clear and you're unable to reproduce the bug, check with the reporter and QA first, then close the issue.
If the reproduction steps aren't clear and you determine the correct steps, please update the OP.

[ ] This issue is filled out as thoroughly and clearly as possible

Pay special attention to the title, results, platforms where the bug occurs, and if the bug happens on staging/production.

[ ] I have reviewed and subscribed to the linked Slack conversation to ensure Slack/Github stay in sync

Proposal
Please re-state the problem that we are trying to solve in this issue.
Emoji suggestions list does not suggest the emoji user searches for
What is the root cause of that problem?
Root cause of the issue is wrong logic in suggestEmojis method in EmojiUtils.js.
https://github.com/Expensify/App/blob/74e5d322f1afb0f89c83860074e9079495b391e5/src/libs/EmojiUtils.js#L240-L265
What we are doing here is picking the matches from regex one by one and on each of them we perform following steps:

push the matched emoji in matching array
push all the suggestions of that emoji in matching array

This is wrong because when we add first matched emoji in the array, then for the same emoji we add all the suggestions and it exhausts the limit of suggestions which is 5. This way user does not get to see the emoji he searched for.
Example :rock does not show rocket emoji because first one is rock and remaining are the suggestion emojis of rock.
What changes do you think we should make in order to solve the problem?
We should modify the logic in a way that in the suggestions list, user first gets all the emojis with matching title that he searched for, and then if the limit is not yet reached, user sees the suggestion emojis of each. This can be done by breaking the main loop in two parts like this ...
function suggestEmojis(text, limit = 5) {
    const emojiData = text.match(CONST.REGEX.EMOJI_SUGGESTIONS);
    if (emojiData) {
        const matching = [];
        const nodes = emojisTrie.getAllMatchingWords(emojiData[0].toLowerCase().slice(1), limit);
        // first put all the matching titles
        for (let j = 0; j < nodes.length; j++) {
            if (nodes[j].metaData.code && !_.find(matching, obj => obj.name === nodes[j].name)) {
                if (matching.length === limit) {
                    return matching;
                }
                matching.push({code: nodes[j].metaData.code, name: nodes[j].name, types: nodes[j].metaData.types});
            }
        }
        // now put the suggestions of each
        for(let j=0;j<nodes.length;j++) {
            const suggestions = nodes[j].metaData.suggestions;
            for (let i = 0; i < suggestions.length; i++) {
                if (matching.length === limit) {
                    return matching;
                }
                if (!_.find(matching, obj => obj.name === suggestions[i].name)) {
                    matching.push(suggestions[i]);
                }
            }
        }
        return matching;
    }
    return [];
}

This is optimal because it gets the job done in same  O(n*m) time complexity as the original function
where n = maximum matched titles (nodes.length),
m = maximum suggestions length of a node

Results

What alternative solutions did you explore? (Optional)
None

Reproduced, opening up.

Job added to Upwork: https://www.upwork.com/jobs/~0197173baf284d3463

Current assignee @garrettmknight is eligible for the External assigner, not assigning anyone new.

Triggered auto assignment to Contributor-plus team member for initial proposal review - @thesahindia (External)

Triggered auto assignment to @cristipaval (External), see https://stackoverflow.com/c/expensify/questions/7972 for more details.

My proposal to another related issue can solve this: https://github.com/Expensify/App/issues/15946#issuecomment-1471204650 though it was closed long ago. FIY, I don't know if there's any coincidence but the above proposal looks somewhat similar to my proposal.

Just saw the issue you shared, it does look similar but the solution we've shared is pretty generic and it's the first improvement that comes to mind on seeing suggestEmojis  implementation.
Though that issue is closed for 2 months+ now, I don't see any relevance of that here

@thesahindia any of these look like they'll do the job?

Good catch - I'll close.


Wrong field APIReportsFinance- external document no.

In APIReportsFinance the Customer/Vendor/GL Entries have wrong field for externalDocumentNo, it shows Document No. instead of External Document No.

Processing for 22.2.

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.
Build ID: 10790.

Availability update: We will publish a fix for this issue in the next update for release 22.
Build ID to track: 56698.


Venv activate doesn't work / PATH not correctly set in venv

Steps to Reproduce

rye init rye-test
cd rye-test
rye add uvicorn
rye sync
source .venv/bin/activate
uvicorn

Expected Result
Running uvicorn after manually activating venv should work.
Actual Result
Rye venv path nor uvicorn is not in the PATH (zsh: command not found: uvicorn)
My PATH starts with /Users/uninen/.rye/shims before and after activating venv manually running source .venv/bin/activate, nothing else rye-related in it before or after.
Otherwise Rye works; rye run uvicorn and rye shell both work.
Also noticed that source deactivate fails with pyenv-virtualenv: no virtualenv has been activated. after running source .venv/bin/activate. (Plain deactivate results in pyenv-virtualenv: deactivate must be sourced. Run 'source deactivate' instead of 'deactivate')
Not sure if I'm doing something wrong or is it my setup. Petty familiar with venvs and pip-tools but couldn't figure this one out.
Version Info
rye 0.21.0
commit: 0.21.0 (2e0e02459 2024-02-03)
platform: macos (aarch64)
self-python<EMAIL_ADDRESS>symlink support: true

Stacktrace
No response

Just figured out that this is due to a clash with pyenv; if I rename .python-version everything Just Works.

uninen@nataly  ~/Code/Misc/rye-test   main  source .venv/bin/activate
uninen@nataly  ~/Code/Misc/rye-test   main  rm .python-version
uninen@nataly  ~/Code/Misc/rye-test   main  source .venv/bin/activate
(rye-test)  uninen@nataly  ~/Code/Misc/rye-test   main 

FWIW I wasn't able to repro this in a fresh environment
@cnpryer ➜ /workspaces $ rye init rye-test
success: Initialized project in /workspaces/rye-test
  Run `rye sync` to get started
@cnpryer ➜ /workspaces $ cd rye-test/
@cnpryer ➜ /workspaces/rye-test (main) $ rye add uvicorn
Added uvicorn>=0.27.0.post1 as regular dependency
@cnpryer ➜ /workspaces/rye-test (main) $ rye sync
Initializing new virtualenv in /workspaces/rye-test/.venv
Python version<EMAIL_ADDRESS>Generating production lockfile: /workspaces/rye-test/requirements.lock
Creating virtualenv for pip-tools
Generating dev lockfile: /workspaces/rye-test/requirements-dev.lock
Installing dependencies
Looking in indexes: https://pypi.org/simple/
Obtaining file:///. (from -r /tmp/tmppr6fu8mw (line 2))
  Installing build dependencies ... done
  Checking if build backend supports build_editable ... done
  Getting requirements to build editable ... done
  Preparing editable metadata (pyproject.toml) ... done
Collecting click==8.1.7 (from -r /tmp/tmppr6fu8mw (line 1))
  Using cached click-8.1.7-py3-none-any.whl.metadata (3.0 kB)
Collecting h11==0.14.0 (from -r /tmp/tmppr6fu8mw (line 3))
  Downloading h11-0.14.0-py3-none-any.whl (58 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.3/58.3 kB 1.2 MB/s eta 0:00:00
Collecting uvicorn==0.27.0.post1 (from -r /tmp/tmppr6fu8mw (line 4))
  Downloading uvicorn-0.27.0.post1-py3-none-any.whl.metadata (6.4 kB)
Using cached click-8.1.7-py3-none-any.whl (97 kB)
Downloading uvicorn-0.27.0.post1-py3-none-any.whl (60 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 60.7/60.7 kB 1.4 MB/s eta 0:00:00
Building wheels for collected packages: rye-test
  Building editable for rye-test (pyproject.toml) ... done
  Created wheel for rye-test: filename=rye_test-0.1.0-py3-none-any.whl size=1315 sha256=def78796a1bafc03e0ff17289bcd4c4b821b06e345c6e893375e0a152989044c
  Stored in directory: /tmp/pip-ephem-wheel-cache-1gnotgbj/wheels/8b/19/c8/73a63a20645e0f1ed9aae9dd5d459f0f7ad2332bb27cba6c0f
Successfully built rye-test
Installing collected packages: uvicorn, rye-test, h11, click
Successfully installed click-8.1.7 h11-0.14.0 rye-test-0.1.0 uvicorn-0.27.0.post1
Done!
@cnpryer ➜ /workspaces/rye-test (main) $ . ./.venv/bin/activate
(rye-test) @cnpryer ➜ /workspaces/rye-test (main) $ uvicorn
Usage: uvicorn [OPTIONS] APP
Try 'uvicorn --help' for help.

Error: Missing argument 'APP'.

@cnpryer ➜ /workspaces/rye (main) $ rye --version
rye 0.21.0
commit: 0.21.0 (2e0e02459 2024-02-03)
platform: linux (x86_64)
self-python<EMAIL_ADDRESS>symlink support: true

With some effort I can try and repro on my Mac, but could you share how you installed Rye?

I should have mentioned that I also set up pyenv and installed a Python distribution to use.
@cnpryer ➜ /workspaces/rye (main) $ which pyenv
/home/codespace/.pyenv/bin/pyenv

My hunch is that this might have to do with pyenv's shims that it puts into ~/.pyenv somewhere. They are not virtualenv aware and wrack havoc if used with higher priority. I have seen problems before where you you need to run rehash on such a file. I'm not sure what can be done here.

With some effort I can try and repro on my Mac, but could you share how you installed Rye?

Not sure how to get all of the info but I selected the "Transparently pass through to non Rye (system, pyenv, etc.) Python" option and moved the source "$HOME/.rye/env" from ~/.profile to ~/.zshrc as it didn't work from the former.
I just tested the install on another Mac where I thought I had identical setup, there I couldn't repro this either, Rye works fine.
Maybe I should just close this issue as it's clearly just my setup?

I will close it for now as it does not seem actionable. I will keep it in mind though if it comes up again.

I had the same problem. I have disabled the pyenv plugin in .zshrc. Then it works.


Enhancement: Add plugin to support image generation using Flux AI API

What features would you like to see added?
I'd like to request a plugin that supports image generation using Flux Pro API on replicate and fal.ai
More details
The below links can be used to send API requests
https://fal.ai/models/fal-ai/flux-pro
https://replicate.com/black-forest-labs/flux-pro
Which components are impacted by your request?
Plugins
Pictures
No response
Code of Conduct

[X] I agree to follow this project's Code of Conduct

Great idea, but plugins are kinda a dead end road, because it works only with OpenAI models. It would be better if there was an option to configure our Flux API (e.g. FalAI) and it would work with any model, for example after command /img or /flux or something like that. Though I think some similar system is being worked on.

Great idea, but plugins are kinda a dead end road, because it works only with OpenAI models.

You're right, they will be deprecated for a Tool system that is more modular, and open to every endpoint, see the discussion on this: https://github.com/danny-avila/LibreChat/issues/3607

It would be better if there was an option to configure our Flux API (e.g. FalAI) and it would work with any model, for example after command /img or /flux or something like that. Though I think some similar system is being worked on.

Also great idea, and it's somewhat related to the open issue I linked. This is very closely aligned to something else I have cooking :)

Moving to discussion because something like this is planned with a more general approach, to allow any image generation api to work,


Command failed: gm convert: No decode delegate for this image format

I am getting this error when I use the exact code written in the npm documentation's first example.
Error: Command failed: gm convert: No decode delegate for this image format (C:\Users\acer\AppData\Local\Temp\gmnP1bMn).

    at ChildProcess.onExit (D:\Suyash\Work\pennywise\pdf-manipulation\node_modules\gm\lib\command.js:301:17)
    at ChildProcess.emit (events.js:315:20)
    at ChildProcess.cp.emit (D:\Suyash\Work\pennywise\pdf-manipulation\node_modules\cross-spawn\lib\enoent.js:40:29)
    at maybeClose (internal/child_process.js:1048:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:288:5) {
  code: 1,
  signal: null
}

I am using windows 10 64-bit architecture and have installed the following and added them in window's path:

GraphicsMagick-1.3.36-Q8-win64-dll
gs952w64

What am I doing wrong? @yakovmeister

Hi @Suyash-Purwar , will you be able to provide a snippet of your code?

Thanks for responding! Here's the snippet
const { fromPath } = require('pdf2pic');

const options = {
  density: 100,
  saveFilename: "untitled",
  savePath: "./images",
  format: "png",
  width: 600,
  height: 600
};

// Path to pdf is different in my case but  it's of this exact format
const storeAsImage = fromPath("/path/to/pdf/sample.pdf", options);
const pageToConvertAsImage = 1;

storeAsImage(pageToConvertAsImage).then((resolve) => {
  console.log("Page 1 is now converted as image");

  return resolve;
});

@Suyash-Purwar , have you tried the solution mentioned in this page? https://stackoverflow.com/questions/66732199/how-to-fix-the-graphicsmagik-error-gm-convert-no-decode-delegate-for-this-imag

Hey @yakovmeister
I am having a problem installing the fonts. Below is the image of the prompt.

@Suyash-Purwar Hmmm.. I'm not sure why it's not installing. Can you try converting those fonts to .ttf format and install the .ttf font format?

I'll try and will get back to you asap. Thanks a lot!

@yakovmeister  Converted the .pfb files to .tff format and installed them. Error is still there.
This is the pdf I'm trying to convert.
input-pdf.pdf

I'm getting the same issue with a specific pdf. Did you find any solution for this? @Suyash-Purwar.
I'm using Ubuntu 20.04 LTS and GraphicsMagick 1.3.35 2020-02-23

I've got the same issue. Using this GraphicsMagick version fix the problem: GraphicsMagick-1.3.31-Q8-win64-dll
Maybe the newer version isn't compatible with gs952w64.


Calling convention uses RV64GQ without definition or reference

https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-cc.adoc#default-abis says:

Although RV64GQ systems can technically use LP64Q, it is strongly recommended to use LP64D on general-purpose RV64GQ systems for compatibility with standard RV64G software.

The term "RV64GQ" is used without reference or link. The term is not common (48 hits on Google, all of them pointing at the above quote), so perhaps a link or definition should be added.

It's an ISA string like any other. We're not here to define what a RISC-V ISA string is.

I think it is fair for this document to assume a reading of the ISA spec without making explicit references: there would simply be too many.
"RV64GQ" is well defined following the ISA spec, Vol. I, Ch. 30.

Thanks for the pointers.
The information is surprisingly hard to find, even with the above information (as I mentioned, the string "RV64GQ" is essentially absent from Internet). I eventually found the Subset Naming Convention.
I understand that it makes sense to close this ticket, as there is a lot of "you should already know this" which makes some references redundant.
I do not know whether I fit the target audience: I am porting a commercial programming language implementation, based on an emulator written in C, so most things "just works" in Ubuntu on risc64, but I need to write a small assembly stub for calling from our language to "foreign functions" written in C.
So, I know next to nothing about RISC-V but I need the details about the calling convention. For other targets (x86/x64/PPC/ARM64) I have done this by just looking at calling convention documentation (and the assembly reference, of course).


allow alt dns names for certs

modifies security-setup to allow passing --dns_alt_cert_names_string
in SAN format to include extra names in cert such as wildcards.

[x] Installs cleanly on a fresh build of most recent master branch
[x] Upgrades cleanly from the most recent release
[x] Updates documentation relevant to the changes

I got the green light for fresh installs and upgrades, and you added documentation to security-setup, I'm saying that this is ready to be merged. @ryane, what milestone should this be in?

@kbroughton the documentation in http://mantl.readthedocs.org/en/latest/security/security_setup.html needs to be updated. This .rst file is located in docs/security/security_setup.rst.
We can't merge until docs are updated.

Oops, missed steve's comment.  I've updated the docs with this
If you are getting X509 errors that the url requested was example.com but the certificate is for *.node.consul or a similar mis-match, you may need to add alternate SAN names when generating the certificate.  run security-setup --dns_alt_cert_names_string "alternative SAN names for cert here"
And rebased against master this morning.

I'm making some changes soon that will obsolete the way we do this with security-setup, but we can still improve this :smile:

The original need for this is largely obsoleted by https://github.com/CiscoCloud/mantl/pull/1463
If there are other use cases where it might come in handy, then it can be rebased on 1463.  For example, you might want to allow the container to choose to match on either mantl CA or official wildcard certs.

Thanks @kbroughton!


Add Peripheral Consensus Engine Objects

This PR adds the peripheral objects used by the consensus engine API including:

All consensus engine API message handlers
A Proxy object that routes requests between message handlers and internal validator objects
A Notifier object that encapsulates sending updates to consensus engines from internal validator objects

It also implements the query services and networking services.

commit message for Add separate consensus service and dispatcher
interferring -> interfering

Looks good to me, but since I have commits in there, I don't think I should formally approve it.

Lint is broken on this but jenkins is not checking it correctly


MP REST Client disable SSL classes

Modify MP REST Client implementation to be able to completely disable SSL class usage if it's not enabled. This helps with DCE.

Once this is approved/merged, it would be great if we could get a 4.1.1.Final released

@asoldano @ronsigal Not sure why my changes result in a failure on JDK 8 on WF 15, given my changes don't impact the RESTEasy Client at all. Any ideas?

@patriot1burke can you take a look?

@kenfinnigan you can ignore the failure, it's unrelated and transient.

No problem for having a 4.1.1 if this all is critical.

Woohoo, CI passed this time!
@asoldano are these tests sufficient?

@asoldano made the changes to the tests.
Will do another PR when this is merged to update to latest MP REST Client spec


Add a test to see if Az.ResourceGraph module is already installed

Otherwise it reinstalls every time.

Solved in v6.0


optimal-imports codemod not working with typescript

[X] The issue is present in the latest release.
[X] I have searched the issues of this repository and believe that this is not a duplicate.

Current Behavior 😯
I'm trying to run codemod on my typescript project. Tried to execute in bulk, no success:
#!/usr/bin/env bash

find src \( -name '*.ts' -o -name '*.tsx' \) -print | xargs jscodeshift --verbose=2 --parser=tsx --extensions=ts,tsx -t<EMAIL_ADDRESS>
Then I tried to apply it to a single file, like this:
jscodeshift --verbose=2 \
            --dry-run \
            --parser=tsx \
            --extensions=ts,tsx \
             -t<EMAIL_ADDRESS>\
              src/components/NotFound.tsx

Here are the file imports:
import { Typography } from '@material-ui/core';
import Box from '@material-ui/core/Box';
import React from 'react';

Codemod does not affect this file:
Processing 1 files...
Spawning 1 workers...
Sending 1 files to free worker...
 NOC src/components/NotFound.tsx
All done.
Results:
0 errors
1 unmodified
0 skipped
0 ok

Expected Behavior 🤔
I expect codemod to affect the file and transform the first import into
import Typography from '@material-ui/core/Typography';

Steps to Reproduce 🕹

Steps:
see above
Context 🔦

Your Environment 🌎

Tech
Version

Material-UI
v4.3.1

React
16.9.0-alpha.0

Browser

TypeScript
3.5.3

@material-ui/codemod
4.3.0

@doomsower The plugin won't perform the following diff:
-import { Typography } from '@material-ui/core';
+import Typography from '@material-ui/core/Typography';

It's meant to do:
-import Typography from '@material-ui/core/Typography/Typography';
+import Typography from '@material-ui/core/Typography';

@oliviertassinari @doomsower
I am working in a project that has this problem, the only way to solve this would be to do it manually?, is there a solution that can be applied in a massive way?
Current
import { Fade, IconButton, makeStyles, Modal, Paper, Grid } from '@material-ui/core'
Expected
import Fade from '@material-ui/core/Fade import Paper from '@material-ui/core/Paper
...

@11ume Same feedback: https://github.com/mui-org/material-ui/issues/16879#issuecomment-518008595. We have no codemod to do this transformation. You can keep the current imports, it's often good enough for performance in dev mode (no impact in prod).
If you are interested in contributing this codemod, it could be interesting.


Incorrect Permalink being displayed in manager

Hi, I have the latest Piranha MVC (and dependent) Nuget Packages installed and running in VS 2013 development and published to my local IIS as well as a development server.  In all cases, when I set up an additional site from the "manger", and enter a host name, it does not populate the permalink field with the correct host name when I add or edit a page.  Do I need to modify a setting somewhere?  I can navigate to the actual page once it is published, using the correct host name, but the preview function does not work within manager.
Thanks in advance for any help.

I take a look at it just to verify the bug. If I can reproduce it I'll add a fix for it!

Thanks!

I just realized there's a reason for this. The permalink in the manager is populated from the hostname you are currently accessing. As soon as you create a new site and assign a hostname to it the manager interface will be accessible from that hostname as well. When you log into the manager that site will be the default site when navigating to Page. Preview links will also be rendered for the hostname you're accessing. The reason for this is:

In many cases you'll add multiple hostnames, for dev & production. For example subsite.local, subsite.publicdomain.com

If you are to render "correct" preview links for all sites the hostname functionality needs to be aware of which one of the host names to choose for the current environment. Any thoughts?

How about when you click preview you get a dialog that ask which host you would like to see. If there is just one just use that host.


update debian base image to latest

Description
Update docker base image to latest debian. Latest debian no longer supports openjdk 8, so include custom repo from https://adoptopenjdk.net/index.html. Other trivial cleanup to remove the number of docker image layers (by condensing multiple commands into one).
Related Issues
Replace this paragraph with a list of issues related to this PR from our issue database. Indicate, which of these issues are resolved or fixed by this PR. There should be at least one issue listed here.
Tests
I added the following tests:
Replace this with a list of the tests that you added as part of this PR. A change in behaviour with no test covering it
will likely get reverted accidentally sooner or later. PRs must include tests for all changed/updated/fixed behaviors. See Test Coverage.
Checklist
Before you create this PR confirm that it meets all requirements listed below by checking the relevant checkboxes ([x]). This will ensure a smooth and quick review process.

[ ] I read the Contributor Guide and followed the process outlined there for submitting PRs.
[ ] I signed the CLA.
[ ] I read and followed the Flutter Style Guide, including Features we expect every widget to implement.
[ ] I read the Tree Hygiene wiki page, which explains my responsibilities.
[ ] I updated/added relevant documentation (doc comments with ///).
[ ] All existing and new tests are passing.
[ ] The analyzer (flutter analyze --flutter-repo) does not report any problems on my PR.
[ ] I am willing to follow-up on review comments in a timely manner.

Breaking Change
Did any tests fail when you ran them? Please read Handling breaking changes.

[ ] No, no existing tests failed, so this is not a breaking change.
[ ] Yes, this is a breaking change. If not, delete the remainder of this section.

[ ] I wrote a design doc: https://flutter.dev/go/template Replace this with a link to your design doc's short link
[ ] I got input from the developer relations team, specifically from: Replace with the names of who gave advice
[ ] I wrote a migration guide: https://flutter.dev/go/breaking-changes-template Replace this with a link to a pull request that adds the migration guide to https://flutter.dev/docs/release/breaking-changes

Gold has detected about 1 untriaged digest(s) on patchset 1.
View them at https://flutter-gold.skia.org/cl/github/61977


[Schema Registry] Remove test resources failing in nightly runs

Schema Registry nightly test runs are failing with:

Error message:
D:\a_work\1\s\eng\common\TestResources\Remove-TestResources.ps1 : Could not find resource group name environment variable 'SCHEMAREGISTRY_RESOURCE_GROUP'. This is likely due to an earlier failure in the 'Deploy Test Resources' step above.
At D:\a_work_temp\6d2dffe1-01cf-4031-aaa4-553f0d03e87d.ps1:9 char:1
eng/common/TestResources/Remove-TestResources.ps1 `~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Remove-TestResources.ps1
##[error]PowerShell exited with code '1'.

For more details check here:

https://dev.azure.com/azure-sdk/internal/_build/results?buildId=1661481&view=results

Label prediction was below confidence level 0.6 for Model:ServiceLabels: 'Schema Registry:0.24970597,ARM:0.14620616,Resource Graph:0.034890216'

The issue is now fixed


[Snyk] Security upgrade httpd from 2.4.43 to 2.4.60

This PR was automatically created by Snyk using the credentials of a real user.![snyk-top-banner](https://github.com/andygongea/OWASP-Benchmark/assets/818805/c518c423-16fe-447e-b67f-ad5a49b5d123)
Snyk has created this PR to fix 4 vulnerabilities in the dockerfile dependencies of this project.
Keeping your Docker base image up-to-date means you’ll benefit from security fixes in the latest version of your chosen image.
Snyk changed the following file(s):

base/httpd/2.4.43/Dockerfile

We recommend upgrading to httpd:2.4.60, as this image has only 63 known vulnerabilities. To do this, merge this pull request, then verify your application still works as expected.
Vulnerabilities that will be fixed with an upgrade:

Issue
Score

Resource Exhaustion SNYK-DEBIAN10-NGHTTP2-5953390
  829

CVE-2023-26604 SNYK-DEBIAN10-SYSTEMD-3339153
  786

CVE-2023-26604 SNYK-DEBIAN10-SYSTEMD-3339153
  786

Integer Overflow or Wraparound SNYK-DEBIAN10-EXPAT-2331803
  714

OS Command Injection SNYK-DEBIAN10-OPENSSL-2933515
  714

[!IMPORTANT]

Check the changes in this PR to ensure they won't cause issues with your project.
Max score is 1000. Note that the real score may have changed since the PR was raised.
This PR was automatically created by Snyk using the credentials of a real user.

Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open fix PRs.
For more information:
🧐 View latest project report
📜 Customise PR templates
🛠 Adjust project settings
📚 Read about Snyk's upgrade logic

Learn how to fix vulnerabilities with free interactive lessons:
🦉 Resource Exhaustion
🦉 OS Command Injection

Checkmarx One – Scan Summary & Details – c13e2ee3-089c-43b2-b8f3-c2d144a5d9da
New Issues

Severity
Issue
Source File / Package
Checkmarx Insight

Path_Traversal
/base/oracle-java/utils/list-versions.py: 57
Attack Vector

Fixed Issues

Severity
Issue
Source File / Package

Client_DOM_XSS
/electron/CVE-2018-15685/src/index.html: 17

Client_Potential_XSS
/electron/CVE-2018-15685/src/index.html: 17

Path_Traversal
/python/PIL-CVE-2017-8291/app.py: 37

Path_Traversal
/base/oracle-java/utils/list-versions.py: 57


test after 1/15 release

Migrated from GitLab: https://gitlab.com/meltano/meltano/-/issues/285
Originally created by @derek-knox on 2019-01-15 13:38:51

[x] test after release to ensure non-dev path works as intended
[x] update tutorial docs to match subtle cli command changes

View 6 previous comments from the original issue on GitLab


Tabular v1.0: FastAI FutureWarning

From user:
With AutoGluon Tabular and Python 3.10.13 in a JupyterLab notebook, I'm getting the following message when I call predictor.predict() or predictor.predict_proba().  It's just a warning, but I wanted to flag it:
/home/ec2-user/anaconda3/envs/ag/lib/python3.10/site-packages/autogluon/tabular/models/fastainn/tabular_nn_fastai.py:200: FutureWarning: The 'downcast' keyword in fillna is deprecated and will be removed in a future version. Use res.infer_objects(copy=False) to infer non-object dtype, or pd.to_numeric with the 'downcast' keyword to downcast numeric results.
  df = df.fillna(column_fills, inplace=False, downcast=False)

Assuming this has been resolved. Please open a new issue if the problem persists.


Aligning D410 with Platform Camera

Required Info

Camera Model
D410

Firmware Version
<IP_ADDRESS>

Operating System & Version
Win 10

Platform
PC (C#.NET)

SDK Version
2.9.1

Hi,
I have a device which has a D410 depth module with no RealSense colour camera, but it does also have a rear-facing webcam. I want to be able to map from the colour photo from the platform camera (webcam) to the depth data so I can tap on the colour image to get the corresponding depth value. The physical distance between the right lens of the depth camera and the colour camera is approx. (93mm, 17mm, 10mm), and they have different focal lengths, fields of view etc. I am using C# to further complicate the matter.
I've gotten the extrinsic calibration between the two cameras, as well as their individual intrinsics, using OpenCv; and I've gotten them both streaming at the same time (using Sensor.Start for the platform camera and Pipeline.Start for depth) but I'm struggling with doing the actual mapping.
I have tried several approaches: reverse engineering the Align class & implementing align_images myself in C# (wasn't mapping correctly & was extremely slow); exposing a new entry point into the existing Align class allowing me to inject my own extrinsics (align.Process always times out); and finally, using the new SoftwareDevice interface, which I've had a go at wrapping myself and seems fine up until I pass my Syncer object to Sensor.Start where I get a compile error that Syncer can't convert to FrameQueue or FrameCallback.
So anyway, my real question is: do any of these approaches sound reasonable? In your opinion, do you think what I want to do is possible with the current SDK (or with relatively small modifications to it)?
It's entirely likely that I've made mistakes while modifying the SDK as I'm not very well versed in C++ or interop stuff, but I don't know if it's worth me spending the time going into it if it turns out that either I'll need to do loads of extra stuff beyond just getting the wrapper working, or you guys are working on something that'll make it really easy, or the differences between the cameras makes it a really hard problem to solve without lots of expertise (that I lack!)
Thanks for any help or advice you may be able to offer.
James

[Realsense Customer Engineering Team Comment]
hi @jb455,
I didn't see anything relative to this in v2.11.0 release note, but would like to confirm with you if the issue still the same for your usage in latest release?
thanks.

Hi,
It looks as though the new FrameSource class will be useful to 'bundle' the two frames together (negating the need for a separate syncer I think), but there doesn't appear to be a way to register extrinsics between them. Getting there though!
Thanks
James
PS: I get a couple of errors when trying to build the wrapper from a freshly-cloned copy of source at the moment: "Your project.json doesn't have a runtimes section. You should add '"runtimes": { "win-x64": { } }' to your project.json and then re-run NuGet restore." and "The command "CMake --version" exited with code 9009." (opening the vs15 solution in vs17 because I don't want .net core)

Hi @jb455
Sorry for not getting there faster. We still have to wrap the software device and offer some sample code.
We are still interested in supporting this use-case, just a question of time and resources.
I wasn't able to reproduce the build problem, please check that you have cmake and it is reachable from command line.

Hi,
I did have a look at the dynamic calibration tool and whilst it looked promising, it doesn't appear as though you can enable the platform camera in the tool to obtain the extrinsic calibration between the Realsense depth camera and the platform colour. I have gotten calibration code working through OpenCV though. WIth the API which allows you to write custom calibrations to a camera, would that allow me to write my extrinsics to the D410 module and have it use that when mapping to the platform camera?
I've now been trying to get this done in C++ as a 'proof of concept' to check it does work whilst waiting for the relevant parts to be included in the wrapper, but I'm having problems.
You can see what I've tried here: https://gist.github.com/jb455/5ed20c1d77dd8695799bdf8a58d8a545, starting from the rs-capture app and incorporating parts from a few other samples including rs-software-device. Note I'm a C++ novice so there's bound to be better ways of doing what I've done!
My problem is that I can only ever get one image from the syncer at line 186. With the code as it is in the gist, only the depth image shows up. If I swap the dev_color_sensor.on_video_frame section (#171-175) with dev_depth_sensor.on_video_frame (#177-182) so depth is processed before colour, only the colour frame shows up.  I thought it may be a problem with the syncer matcher but I've tried a couple of different matching methods with the same result. I've also tried using a pipeline instead of the sensor to run the depth camera but again, no difference.
Can you see anything I've done wrong?
Thanks!

I've now managed to get both camera streams out of the software device, by passing the timestamps of the actual frames rather than the synthetic timestamp generated from the frame number. My gist has been updated with this change: https://gist.github.com/jb455/5ed20c1d77dd8695799bdf8a58d8a545/revisions.
However, I'm now getting an exception when trying to align the images. When calling align.process on the frameset obtained from the syncer, I get 0x000001a43fcad300 "Error occured during execution of the processing block! See the log for more info". I can't find the log file to diagnose further (I did set the variable as suggested in https://github.com/IntelRealSense/librealsense/wiki/Troubleshooting-Q%26A#q-how-do-i-enable-librealsense-logs but can't find where the log file is saved).
Do you know what might be wrong now please?
Thanks

[Realsense Customer Engineering Team Comment]
hi @jb455,
for log file, i would suggest you to refer to rs-data-collect, having rs2::log_to_file(); in the first line, then when you run the binary, the log file will be generated at the same folder, then we can check what we have in the log.

[Realsense Customer Engineering Team Comment]
hi @jb455,
thanks for confirm so i think we can close this ticket now?

Hi, we still need the software device stuff implemented in the C# wrapper ideally. Me doing the C++ app was just to let us know if it would be worth the wait!
Thanks

Ok, I'm really struggling here. I hit a wall trying to create the syncer object in the wrapper again so now I'm trying to add new functions to the software_device api which will create an internal syncer and start the software_sensors using that syncer so I can create another function like software_device::wait_for_frames to return frames from the syncer so I don't need the syncer at all in the wrapper. Does that make sense? sound reasonable?
So, in software-device.h I want to add a private 'syncer' object. Can I use rs2::syncer, or will that cause problems with opening it up to the C api? The  rs2::syncer class is defined in rs_processing.hpp whereas all the other types used are defined in the header files. The only syncer-type object I can find in the C headers is syncer_process_unit, but software_sensor.start won't accept that as an argument.
If you could help by just filling in the following please hopefully I'll be alright from there, I can use the template followed by all the other functions to open it out to the API assuming the solution to this won't be completely different to what's come before. I'm on a really tight deadline now and tearing my hair out trying to get this working so any quick help would be hugely appreciated!
[software-device.h]
public:
    void start_streaming();

    rs_frame* wait_for_frames();
private:
    //define syncer object. Will one of these work?
    //std::shared_ptr<syncer_process_unit> _syncer;
    //std::shared_ptr<rs2::syncer> _syncer;

[software_device.cpp]
void software_device::start_streaming()
{
    for (auto&& s : _software_sensors)
        s->start(_syncer);
        //I assume I should convert back from the shared pointer to the actual syncer object but don't know how to.
}

rs2_frame* software_device::wait_for_frames()
{
    return _syncer.WaitForFrames();
}


Use PropTypes from prop-types #3

Remove warning from React about PropTypes, use prop-types instead

Could you combine all of these into 1 pull-request?

Yes, but at the beginning of the week
On Jun 17, 2017 11:03, "Peter Pistorius"<EMAIL_ADDRESS>wrote:
Could you combine all of these into 1 pull-request?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/react-community/react-navigation/pull/1911#issuecomment-309200670,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AHGCPtnKQOWsVLX16VEy7_UAS2hP03Pmks5sE4hagaJpZM4N8-4C
.


Better documentation of behaviour with irregular source chunks

Hiya!
In some source datasets the original chunks have irregular sizes. For example one netcdf file per year, where some years are leap years hence shorter than others.
Although the data model would seem to support this in principle, I couldn't get Rechunk or ConsolidateChunks to work without regular source chunk sizes.
Is this a fundamental limitation or something that could be in scope to address? And do you have any recommendations for getting data like this into regular chunks? In the leap year case, first splitting the source chunks into one chunk per day using SplitChunks could be an option. Although in general this would require splitting into chunks of gcd(*all_possible_source_chunk_sizes) which could be too small.

This should totally work! This happens internally in rechunking all the time, if the source and destination chunks are not a multiple of the other.
If you can provide an reproducible example, that would be very helpful for narrowing this down.

And do you have any recommendations for getting data like this into regular chunks? In the leap year case, first splitting the source chunks into one chunk per day using SplitChunks could be an option. Although in general this would require splitting into chunks of gcd(*all_possible_source_chunk_sizes) which could be too small.

You can do this via SplitChunks followed by ConsolidateChunks with the same chunks, as described this section of the docs:
https://xarray-beam.readthedocs.io/en/latest/rechunking.html#low-level-rechunking
Xarray-Beam uses a smarter algorithm than splitting into the GCD of all source chunk sizes. Instead, it should only make just the right irregular chunks (in SplitChunks) such that they can be joined together into the new regular chunks (in ConsolidateChunks).

To give a concrete example, here's what it would look like to rechunk "per year" daily data into a chunk-size of exactly 365 days:
import apache_beam as beam
import pandas as pd
import numpy as np
import xarray
import xarray_beam as xbeam

def make_chunks():
  offset = 0
  for year in range(2010, 2020):
    time = pd.date_range(f'{year}-01-01', f'{year}-12-31', freq='D')
    key = xbeam.Key({'time': offset})
    chunk = xarray.Dataset({'foo': ('time', np.zeros(time.size)), 'time': time})
    yield key, chunk
    offset += time.size

print(
    make_chunks()
    | beam.MapTuple(lambda k, v: v.sizes['time'])
)
# [365, 365, 366, 365, 365, 365, 366, 365, 365, 365]

print(
    make_chunks()
    | xbeam.SplitChunks({'time': 365})
    | beam.MapTuple(lambda k, v: v.sizes['time'])
)
# [365, 365, 365, 1, 364, 1, 364, 1, 364, 1, 364, 2, 363, 2, 363, 2, 363, 2]

print(
    make_chunks()
    | xbeam.SplitChunks({'time': 365})
    | xbeam.ConsolidateChunks({'time': 365})
    | beam.MapTuple(lambda k, v: v.sizes['time'])
)
# [365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 2]

Ah that's great, thanks! This solves my problem, but just to give a bit more detail why I was confused about this:
With Rechunk, it explicitly asks for a dict of source_chunks: sizes of source chunks so not clear at all what you would pass for this if the source chunks are irregular, I tried passing None, {} and {"time": None} none of which worked. I now see that if I pass source_chunks={"time": some_arbitrary_incorrect_number} it seems to work, although I'd be wary relying on this?
With ConsolidateChunks: I now see that this does work provided that each consecutive grouping of chunks adds up to the exact requested target chunk size. I was trying to use it without first splitting the chunks into this form, and got a rather opaque AssertionError. A simplified example of what I was attempting:
inputs = [
  (xb.Key({"time": 0}, {"foo"}), xa.Dataset({"foo": (("time",), np.zeros(2))})),
  (xb.Key({"time": 2}, {"foo"}), xa.Dataset({"foo": (("time",), np.ones(7))})),
  (xb.Key({"time": 9}, {"foo"}), xa.Dataset({"foo": (("time",), np.ones(3))})),
]
with beam.Pipeline() as p:
    p | beam.Create(inputs) | xb.ConsolidateChunks(target_chunks={"time": 7})

=> AssertionError: (Key(offsets={'time': 7}, vars={'foo'}), Key(offsets={'time': 9}, vars={'foo'}))

My mistake although a better error would help here.
I also wasn't aware that SplitChunks would work the way it does with irregular chunks (with consecutive groupings in its output summing to the requested chunk size), I had assumed it would split each input chunk independently in a way that wouldn't guarantee this invariant, or that it would only split into an exact divisor of the source chunk size. Although now I see the example under low-level rechunking which clarifies things a bit.
It would help if these functions (SplitChunks, ConsolidateChunks, Rechunk) had some explanation in their docstrings about what invariants they require in their input and guarantee in their output. And for Rechunk, some guidance on whether irregular chunk sizes are supported and if so, what to pass for source_chunks.
Your example above would be great to include in the docs too, to demonstrate how to work with irregularly-chunked source data :)
Thanks again!

With Rechunk, it explicitly asks for a dict of source_chunks: sizes of source chunks so not clear at all what you would pass for this if the source chunks are irregular, I tried passing None, {} and {"time": None} none of which worked. I now see that if I pass source_chunks={"time": some_arbitrary_incorrect_number} it seems to work, although I'd be wary relying on this?

Indeed, Rechunk can safely handle arbitrary source chunks. They are only used by the heuristic for determining intermediate chunks, so it's OK if they are not exact. The algorithm should handle small descrepancies (like 365 vs 366 elements) just fine.
I agree that this would all be well worth documenting!

With ConsolidateChunks: I now see that this does work provided that each consecutive grouping of chunks adds up to the exact requested target chunk size. I was trying to use it without first splitting the chunks into this form, and got a rather opaque AssertionError. A simplified example of what I was attempting:
inputs = [
  (xb.Key({"time": 0}, {"foo"}), xa.Dataset({"foo": (("time",), np.zeros(2))})),
  (xb.Key({"time": 2}, {"foo"}), xa.Dataset({"foo": (("time",), np.ones(7))})),
  (xb.Key({"time": 9}, {"foo"}), xa.Dataset({"foo": (("time",), np.ones(3))})),
]
with beam.Pipeline() as p:
    p | beam.Create(inputs) | xb.ConsolidateChunks(target_chunks={"time": 7})

=> AssertionError: (Key(offsets={'time': 7}, vars={'foo'}), Key(offsets={'time': 9}, vars={'foo'}))

My mistake although a better error would help here.

Thinking about this case a little more, I think we could actually probably safely remove this assertion error (after adding suitable documentation).
The behavior of ConsolidateChunks would then be simply to group together all chunks starting within the given multiple of the origin. If existing chunks don't exactly align with the multiples of the desired chunks, then you'll end up with irregular groups, but they'll be roughly the same size.


output-management-v1: add head identifying information

Add events to zwlr_output_head_v1 for make, model and serial number of a display. This allows clients to identify displays from previous compositor sessions and reload accordingly configurations that were saved previously.
I have an example implementation with:

Generic Wayland client library: https://gitlab.com/kwinft/wrapland/-/merge_requests/75
Output management client library: https://gitlab.com/kwinft/disman/-/merge_requests/9
KDisplay client: https://gitlab.com/kwinft/kdisplay/-/merge_requests/6

The form in which the client combines this information to recognize the display again is unspecified and depends on how permissive it is.
For example in case of Disman I use a string <make>:<model>:<serial_number>:<name> which I then MD5-hash and hex convert for the name of the output configuration files.
I also use the name in there because I only want to load a configuration when the display is connected to the same connector (displays can have different capabilities on different connectors).
Closes https://github.com/swaywm/wlr-protocols/issues/68

Thanks for working on this! Can you submit a PR against wlr-protocol too?

Thanks for working on this! Can you submit a PR against wlr-protocol too?

Sure, wasn't sure how this is supposed to work so I first put it here. I will create one with only the first commit there.

Thanks!


Dependency deprecation warning: conventional-changelog-lint (npm)

On registry https://registry.npmjs.org/, the "latest" version (v2.1.1) of dependency conventional-changelog-lint has the following deprecation notice:
renamed to commitlint: https://git.io/vQ1rU
Marking the latest version of an npm package as deprecated results in the entire package being considered deprecated, so contact the package author you think this is a mistake.
Affected package file(s): package.json
If you don't care about this, you can close this issue and not be warned about conventional-changelog-lint's deprecation again. If you would like to completely disable all future deprecation warnings then add the following to your config:
"suppressNotifications": ["deprecationWarningIssues"]

:tada: This issue has been resolved in version 2.66.5 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Difficulty accessing docker when following tutorial

One of our developers in Taiwan  had a issue:  When I practice Azure IoT Edge topic with VSCode, received an error message
https://us-prod.asyncgw.teams.microsoft.com/v1/objects/0-cus-d5-16efcd1766f83ffcbe02468ade2524fc/views/imgo
ERROR: Could not connect to Docker daemon. Please make sure Docker is running : Install pypiwin32 package to enable npipe:// support
I checked Docker container desktop is still running. I switched both window mode and Linux mode.
win 10 Build 1809,Python 3.8,pip installed
https://us-prod.asyncgw.teams.microsoft.com/v1/objects/0-cus-d7-7896e570682cd01bd5ed492e1abda919/views/imgo
Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 5a3f2f86-40bf-19f2-4f56-9dc71ed47fa2
Version Independent ID: 20e8912c-4a10-68b9-c46a-e945a62421d6
Content: Develop and debug modules for Azure IoT Edge
Content Source: articles/iot-edge/how-to-vs-code-develop-module.md
Service: iot-edge
GitHub Login: @shizn
Microsoft Alias: xshi

Hi @Gamecock I'm sorry to hear that. Can you confirm this is the same issue as here: https://github.com/Azure/iotedgehubdev/issues/224

Confirmed -> downgrading to Python 3.7 resolved.

Hi, @Gamecock ,  thanks for your feedback, currently the docker-py libary which used by iotedgehubdev is not compitable with python 3.8, so it would throw "Could not connect to Docker daemon" error.  We will add python version limitation in next release of iotedgehubdev. When docker-py officially support python 3.8, we would remove this limitation.

Might be worth updating tutorials that say they work on Python3.7+.
On Sun, Nov 17, 2019 at 9:01 PM Renlong Tu<EMAIL_ADDRESS>wrote:

Hi, @Gamecock https://github.com/Gamecock , thanks for your feedback,
currently the docker-py libary which used by iotedgehubdev is not
compitable with python 3.8, so it would throw "Could not connect to Docker
daemon" error. We will add python version limitation in next release of
iotedgehubdev. When docker-py officially support python 3.8, we would
remove this limitation.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/MicrosoftDocs/azure-docs/issues/42849?email_source=notifications&email_token=ABMSCSTLE52LSVYW25MZ5WDQUHZOVA5CNFSM4JNQSSDKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEEI54OI#issuecomment-554819129,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABMSCSVYCG4PUQX56BDVWY3QUHZOVANCNFSM4JNQSSDA
.

@Gamecock Thanks for your suggestion! We added changes to the doc to address it. We will now proceed to close this thread. If there are further questions regarding this matter, please tag me in your reply. We will gladly continue the discussion and we will reopen the issue.


Fix typo in the variable name in NcpBuffer

Current coverage is 74.27% (diff: 66.66%)

Merging #979 into master will decrease coverage by 0.01%

@@             master       #979   diff @@
==========================================
  Files           123        123
  Lines         17720      17720
  Methods        2483       2483
  Messages          0          0
  Branches       2133       2133
==========================================
- Hits          13163      13161     -2
- Misses         3882       3893    +11
+ Partials        675        666     -9

Powered by Codecov. Last update 208c4d3...295666b


Update build scripts to use msbuild 15.0

@KevinRansom @jaredpar

@KevinRansom appveyor didn't kick in for this PR as well. Here is my passing run:
https://ci.appveyor.com/project/otawfik-ms/visualfsharp/build/<IP_ADDRESS>