feat: backwards compatible labelling per node per nodepool.

And now you can remove / replace individual nodes in a nodepool, instead of having to set the count all the way to zero to make sure that the one sick node is removed.
This is an example implementation of the discussion https://github.com/kube-hetzner/terraform-hcloud-kube-hetzner/discussions/1038 .

@valkenburg-prevue-ch Looks great! I will review ASAP. It's something that might help us too with the placement group issue we had. See comment by @mnencia here on his findings: https://github.com/kube-hetzner/terraform-hcloud-kube-hetzner/pull/1161#issuecomment-1882681214. And the original issue here https://github.com/kube-hetzner/terraform-hcloud-kube-hetzner/issues/1157. If you can address this too, I would be super greatful!

@valkenburg-prevue-ch Looks great! I will review ASAP. It's something that might help us too with the placement group issue we had. See comment by @mnencia here on his findings: #1161 (comment). And the original issue here #1157. If you can address this too, I would be super greatful!

Thanks! I'll make some small modifications after @maggie44 already went through everything and proposed some improvements.

Oh by the way, added a section in the readme for migrating from count-based to map-based node pools, it's super simple in the end.

Thank you. I'll review the PR ASAP.

Thank you. I'll review the PR ASAP.

Actually, now that I read the placement group issue, I realize that this PR is broken when someone uses node keys > 10 or simply more than 10 nodes, as the placement group logic doesn't account for this sparse use of indices. I think I'll make a separate PR which fixes the placement group bug, but I'm struggling to find an implementation which is backwards compatible.

@valkenburg-prevue-ch Good job with #1217 fixing the placement group, logic. So this current PR is ready too? 🙏

@valkenburg-prevue-ch Good job with #1217 fixing the placement group logic. So this current PR is ready too? 🙏

Yes! I think both are ready. But if course to be tested live in a staging environment, I guess.

@kube-hetzner/core Please review if you can, super important PR. I think it adds loads of possibility to the agent nodes setup without making the code overly complex. @maggie44 You also please, you are one of the main stakeholders here ;)

@valkenburg-prevue-ch  In light of the new review(s), will await your signal to merge this 🙏
@aleksasiriski @mnencia FYI

Rebased on master, with some added code for making the placement-group logic work well with the individual node configuration. Adopted comments from @maggie44 . New review, anyone?

Rebased on master, with some added code for making the placement-group logic work well with the individual node configuration. Adopted comments from @maggie44 . New review, anyone?

Awesome, will review ASAP 🙏

@kube-hetzner/core This is merging soon, if you want to review it's now or never!

@valkenburg-prevue-ch @maggie44 Shipped in v2.13.0, thanks for the wonderful work people!


Pod kraftcontroller-0 in StatefulSet kraftcontroller failed error: Pod "kraftcontroller-0" is invalid: spec.initContainers[0].name: Duplicate value: "config-init-container"

I'm trying to deploy Kafka cluster using this example https://github.com/confluentinc/confluent-kubernetes-examples/blob/master/general/cp-version/confluent-platform-kraft-7.6.0.yaml
However when StatefulSet of kraftcontroller is starting it throwing the following error:
Pod kraftcontroller-0 in StatefulSet kraftcontroller failed error: Pod "kraftcontroller-0" is invalid: spec.initContainers[0].name: Duplicate value: "config-init-container"

Same thing happens if I try to deploy with zookeeper.
Confluent Operator was deployed to kubernetes cluster using helm chart with kraft enabled.
Helm chart deployment guide: https://docs.confluent.io/operator/current/co-deploy-cfk.html#deploy-co-from-confluent-s-helm-repo
Deployment is done using ArgoCD.
Additional info:
>kubectl version
Client Version: v1.29.3
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.28.2

ArgoCD version: v2.10.9+c071af8
CFK helm chart: confluent-for-kubernetes:0.921.20
I don't know if this is the proper place to report such issue. Any assistance would be appreciated

Turns out it was due to a faulty policy on my cluster.


Make use of github actions

This fixes the default branch name (it's 'main' not 'master') so that ghactions are useful. This also switches to go 1.17, and tests builds on macOS 12.

The latest commit (artifact upload) depends on https://github.com/code-ready/vfkit/pull/3

Regarding the artifact upload, it's better to release the binary built on macOS11 as in my testing it was compatible with both macOS 11 and 12. The binary built on macOS 12 does not run on macOS 11.


Feat: Implement DRY protostar testing structure

Separate setup directory for shared testing libs
Include helpers for common tasks
Allow for arbitrary module deployments for speed efficiency
Create tests utilising this structure where possible

Useful to wait for some other PR's to merge before implementing

Let's park this until Cairo 1 - with the Cairo 1 sprint we will build out the test suite at the same time


function name conflict causing neovim to crash

For the following awk example, neovim editor crashes
{
    for (d in k) {
        if ( d == -1 ) continue
        #print
    }
}

Steps to recreate:

Install nvim-treesitter/playground in neovim
Install this awk treesitter parser in nvim-treesitter by adding the following config

    parser_config.awk = {
        install_info = {
            url = "/home/user/tree-sitter-awk", -- local path or git repo
            files = {"src/parser.c", "src/scanner.c"},
        },
        filetype = "awk", -- if filetype does not match the parser name
    }

open the above awk example and open Playground by entering :TSPlaygroundToggle
the editor will crash

The crash is observed only when used with neovim. It does not crash for tree-sitter parse test.awk
The reason for the crash is a function name conflict since both neovim and src/scanner.c has a function called skip_comment. Which causes the process to choose the neovim's function instead of the awk's one. Refer the stack trace below
#0  skip_comment (line=0x101ba90 "#", process=<optimized out>, include_space=<optimized out>, is_comment=0x23) at neovim/src/nvim/ops.c:3847
#1  0x00007fffee818227 in is_if_else_separator (lexer=0x101ba90) at src/scanner.c:127
#2  0x00007fffee818451 in tree_sitter_awk_external_scanner_scan (payload=0x0, lexer=0x101ba90, valid_symbols=0x7fffeea1c198 <ts_external_scanner_states+8>) at src/scanner.c:235

frame #0 refers to a function owned by neovim which instead should be the skip_comment function in the src/scanner.c
Will it be possible to add prefixes to the function names to make them unique? That will fix this issue

Thanks, @Badhi.
I can replicate the issue. Fix will be ready in a few moments.


ROX-10003: make generated store code more style check compliant (pass 2)

Description
In order to reduce the code adjustment efforts to pass style checks when generated code has to be manually edited, more changes have been introduced.
The changes at hand here are aiming at removing snake case from variable names in generated store code.
Checklist

[ ] Investigated and inspected CI test results
- [ ] Unit test and regression tests added
- [ ] Evaluated and added CHANGELOG entry if required
- [ ] Determined and documented upgrade steps
- [ ] Documented user facing changes (create PR based on openshift/openshift-docs and merge into rhacs-docs)

If any of these don't apply, please comment below.
Testing Performed
CI should be sufficient.
Additional manual testing:

remove the generated code comment from the store and schema code files
manually run make style and check what errors are left

Current dependencies on/for this PR:

master

PR #6478

PR #6518   👈

This comment was auto-generated by Graphite.


Local path should not be exposed

The local path is exposed on __NUXT__.config.public.vueEmail.emailsDir in the production environment.

we just merged a new project rewrite, please do check the docs and the updated logic https://vuemail.net/


Draft bundle KG

I tried to create a draft for the discussed bundles as KG to get a better picture and common understanding.
It's not yet complete, but it is meant to draft the (possible) structure.
I sketched it manually and tried to write some RDFish code below (comments after #).
Is that useful and does the structure makes sense? @fabianneuhaus

Bundle-KG
oekg:bundleA a oeo:bundle                                                          # tbd oeo

oekg:bundleA xyz:has_IRI < address of website on OEP >

oekg:bundleA xyz:has_part  oekg:studyA1

    oekg:studyA1 a oeo:study report                                                # OEO_00020012

    oekg:studyA1 xyz:has_IRI < address of website on OEP >

    oekg:studyA1 xyz:has_analysis_scope oekg:anascope_a1

        oekg:anascope_a1 a oeo:analysis scope                                  # OEO_00020072

        oekg:anascope_a1 xyz:is_about oekg:studyregion_sr1

            oekg:studyregion_sr1 a oeo:study region                        # OEO_00020032

        oekg:anascope_a1 xyz:is_about oekg:szyear_y1

            oekg:szyear_y1 a oeo:scenario year                                  # OEO_00020097

        oekg:anascope_a1 xyz:is_about oekg:szyear_y2

            oekg:szyear_y2 a oeo:scenario year                                   # OEO_00020097

        oekg:anascope_a1 xyz:is_about oekg:sector_s123

            oekg:sector_s123 a oeo:sector                                            # OEO_00000367

        oekg:anascope_a1 xyz:is_about oekg:sector_s124

            oekg:sector_s124 a oeo:sector                                              # OEO_00000367

        ...

    oekg:studyA1 xyz:has_publication_detailes oekg:pub_details_pA1

        oekg:pub_details_pA1 a oeo:information content entity                  # ?

        oekg:pub_details_pA1 xyz_has_part oekg:DOI_12345

            oekg:DOI_12345 a oeo:DOI                                                      # ...

            oekg:DOI_12345 xyz:has_DOI < DOI >

        oekg:pub_details_pA1 xyz_has_part oekg:funder_f1

            oekg:funder_f1 a oeo:funder                                               # OEO_00090001  --> also IRI?

        oekg:pub_details_pA1 xyz_has_part oekg:institution_i1

            oekg:institution_i1 a oeo:institution                                 # OEO_00000238 --> also IRI?

        oekg:pub_details_pA1 xyz_has_part oekg:iauthor_au1

            oekg:iauthor_au1 a oeo:author                                       # OEO_00000238 --> also IRI?, author is a role!

        oekg:pub_details_pA1 xyz_has_part oekg:title_t1

            oekg:title_t1 a oeo:title                                                     # OEO_?

        ....

    oekg:studyA1 xyz:uses oekg:model_m1

        oekg:model_m1 a oeo:model

        oekg:model_m1 xyz:has_IRI < address of website of MF on OEP >

    oekg:studyA1 xyz:is_about oekg:scenario123

        oekg:scenario123 a oeo:scenario

        oekg:scenario123 xyz:has_IRI < address of website on OEP >

        oekg:scenario123 xyz:has_record oekg:table456.

            oekg:table456 a xyz:Table.                                                 # <---- from here on automated KG population

            oekg:table456 xyz:has_IRI < address of website on OEP >  .

            oekg:table456 is about oeo:entity.

    ...

For the relations has study region and has scenario year, see also https://github.com/OpenEnergyPlatform/ontology/issues/1335

This looks good to me. Concerning whether we should connect output to scenario projections or to scenario study, there are at least two  things to consider / decisions to be made:
(a) Is every table either an input or an output of  some scenario projection (even if unknown) or are there tables that contain information related to the scenario study that have nothing to do with a scenario projection?
(b) x has_output y imply that all of y is the output of x? If yes, then we need to deal with  tables that are not the output of a scenario projection, because they combine results of several scenario projections.  One way of solving that would be  to connect some tables to scenario studies directly (as outputs) without an intermediate scenario projection. However, that's only one alternative and might not be the best.  (E.g.,  one could include parts of tables, which are the output scenario projections).

Let's dicuss both aspects (a) and (b) with the team.
Regarding (b): x has_output y imply that all of y is the output of x?
has output is RO_0002234 and defined as  p has output c iff c is a participant in p, c is present at the end of p, and c is not present at the beginning of p.
As I read it, the answer to the question "Does x has_output y imply that all of y is the output of x?" is yes.
Scenario projection refers to output data, not to tables in its definition: Scenario projection is an intentional process in which output (endogenous) data of interest are quantified for future points in time using one or more model calculation based on a scenario.
One could argue, that technically, the output data is not the table itself, but the entries the table contains. And the table is the result of some postprocessing... 🤔

From the last SIROP project meeting: this is how the bundle KG should be implemented.

Minor comments:

There should be only one class "Data", because whether something is input or output depends on the process.
The based_on-relationship between scenario_study and scenario should be inferred and, thus, not added manually.
I think we also spoke about the possibility of tables being associated with scenario studies, although not being linked to a scenario projection. Thus, we need some relationship for that. (I.e. has_associated_table or something along these lines)


Exported chevron down icon

Warnings

:warning:
There are no updates provided to CHANGELOG. Ensure there are no publicly visible changes introduced by this PR.

  Generated by :no_entry_sign: dangerJS


Cookies are not persisted between requests

Currently, the cookie jar is not handled by the restcli. There is an option to disable it isNoCookieJar but it's never used.
Is there a plan for handling persistent cookies between requests (cookie jar). This feature is available in IJ.

Yes, I planned to implement the (cookie jar) in the next version.
I will update this issue when the code is done.
Thank you for the feedback!

Great news! Really good job on this project. Well done.


Update pydantic version specifier

Proposed Changes
Update pydantic version specifier to allow newer releases. Some background: version 1.10.9 was released yesterday but due to the hard coded requirement, it can't be installed for Home-Assistant.
It would be great if you could release a new version after this.
https://github.com/pydantic/pydantic/releases/tag/v1.10.9

Thanks!


Pax Bundler not loading under macOS Ventura

building on this comment
After upgrading to ventura i've noticed that the Pax bundler is not loading.
The for @chandlers -> $h { loop in Bundle.rakumod is calling next before adding pax to to @handlers because ::("$h").able returns False

Please verify this is fixed in version 39

Please verify this is fixed in version 39

how?
v39 does not appear to be in this codebase, and there appears to be no mechanism to get it to tell you what it's using in the packaged version.
the only mechanism I know of to be able to determine what it's using is to put debugging lines in the source code and run that, but i don't have access to the source code to 39.

fez version tells you what version of fez you're running.  This is info that should always be included in these reports (and checked first to see if an upgrade will resolve the issue).  zef install --force 'fez:ver<39>' will force install v39.


Empty map deserialized as string

I think this is the same issue as https://github.com/traefik/traefik/issues/8772, which was unfortunately closed without resolution.
The following traefik dynamic configuration object:
http:
  // -- snip --
  middlewares:
    testPluginMiddleware:
      plugin:
        testPlugin:
          variantA: {}

Is deserialized as (copied from traefik's --log.level=DEBUG logs):
DEBU[XXXX-XX-XXTXX:XX:XX-XX:XX] Configuration received: {"http":{"routers":"/* -- snip -- */","services":"/* -- snip -- */","middlewares":{"testPluginMiddleware":{"plugin":{"testPlugin":{"variantA":""}}}}},"tcp":{},"udp":{},"tls":{}}  providerName=file

variantA sub-option is "" (empty string) instead of {} (empty map) in the JSON serialization
This error happens regardless of the type of config file used (JSON, TOML, and YAML are all affected)

paerser_test.go
package traefik_plugin_thumbor_test

import (
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/traefik/paerser/file"
	"github.com/traefik/traefik/v2/pkg/config/dynamic"
	"github.com/traefik/traefik/v2/pkg/tls"
)

func newConfiguration() *dynamic.Configuration {
	return &dynamic.Configuration{
		HTTP: &dynamic.HTTPConfiguration{
			Routers:           make(map[string]*dynamic.Router),
			Middlewares:       make(map[string]*dynamic.Middleware),
			Services:          make(map[string]*dynamic.Service),
			ServersTransports: make(map[string]*dynamic.ServersTransport),
		},
		TCP: &dynamic.TCPConfiguration{
			Routers:     make(map[string]*dynamic.TCPRouter),
			Services:    make(map[string]*dynamic.TCPService),
			Middlewares: make(map[string]*dynamic.TCPMiddleware),
		},
		TLS: &dynamic.TLSConfiguration{
			Stores:  make(map[string]tls.Store),
			Options: make(map[string]tls.Options),
		},
		UDP: &dynamic.UDPConfiguration{
			Routers:  make(map[string]*dynamic.UDPRouter),
			Services: make(map[string]*dynamic.UDPService),
		},
	}
}

const yamlContent = `http:
  middlewares:
    testPluginMiddleware:
      plugin:
        testPlugin:
          variantA: {}
`

func TestYaml(t *testing.T) {
	configuration := newConfiguration()

	err := file.DecodeContent(yamlContent, ".yaml", configuration)
	if err != nil {
		t.Fatal(err)
	}

	assertEmptyMap(t, configuration)
}

func assertEmptyMap(t *testing.T, configuration *dynamic.Configuration) {
	t.Helper()

	value := configuration.HTTP.Middlewares["testPluginMiddleware"].Plugin["testPlugin"]["variantA"]
	assert.IsType(t, "", value) // PASS
	assert.IsType(t, make(map[string]interface{}), value) // FAIL
}

Context
I'm writing a traefik plugin which accepts one of a few possible configuration variants, which I was planning on implementing in the "traefik way" by using the pattern of one of many map fields.
For example, traefik dynamic config accepts:
http:
  middlewares:
    MIDDLEWARE_NAME:
      MIDDLEWARE_VARIANT:
        MIDDLEWARE_VARIANT_OPTION: MIDDLEWARE_VARIANT_OPTION_VALUE

...where "variant" might be addPrefix (the type of the middleware); exactly one variant is accepted.
In the same vein, I was structuring my plugin's config to be something like:
http:
  middlewares:
    MIDDLEWARE_NAME:
      plugin:
        PLUGIN_NAME:
          PLUGIN_VARIANT:
            PLUGIN_VARIANT_OPTION: PLUGIN_VARIANT_OPTION_VALUE

...where "variant" is one of the few possibilities mentioned above; exactly one variant is accepted. However, I ran into this issue because one of my "variants" doesn't have any sub-options, but the key is still required to be present. I believe this does not affect traefik because all its "variants" have sub-options.
plugin.go
package plugin

import (
	"context"
	"http"
)

type Config struct {
	VariantA *ConfigVariantA `json:"variantA,omitempty" toml:"variantA,omitempty" yaml:"variantA,omitempty"`
	VariantB *ConfigVariantB `json:"variantB,omitempty" toml:"variantB,omitempty" yaml:"variantB,omitempty"`
}

type ConfigVariantA struct {}

type ConfigVariantB struct {
 	Option int `json:"option,omitempty" toml:"option,omitempty" yaml:"option,omitempty"`
}

// -- SNIP --

With the following dynamic config (same as above):
http:
  // -- snip --
  middlewares:
    testPluginMiddleware:
      plugin:
        testPlugin:
          variantA: {}

...I get the following error message from traefik:
ERRO[XXXX-XX-XXTXX:XX:XX-XX:XX] plugin: failed to decode configuration: 1 error(s) decoding:

* 'VariantA' expected a map, got 'string'  entryPointName=web routerName=router@file

Hello,
I confirm the bug, as a workaround, you have to define explicitly the default value of the field.
Paerser handles different sources of data (mainly labels, but also files and env vars), and this diversity of sources induces complexity of the side effects.

No doubt parsing is a complex task! Would you accept a PR to fix this specifically for the file parser?

Ahh, after testing a bit further, I think I see why this is an issue specifically for plugins.
Emtpy maps are only allowed via the "emptyMap" label, which is fine for traefik's typed config. For example: https://github.com/traefik/traefik/blob/d97d3a6726ad6e50110dd2ff2b552a8b17eeed55/pkg/config/dynamic/http_config.go#L50
type Router struct {
        // -- snip --
	TLS         *RouterTLSConfig `json:"tls,omitempty" toml:"tls,omitempty" yaml:"tls,omitempty" label:"allowEmpty" file:"allowEmpty" kv:"allowEmpty" export:"true"`
}

But since a plugin's config is deserialized as a PluginConf (an untyped map[string]interface{}) (https://github.com/traefik/traefik/blob/v2.9.6/pkg/config/dynamic/plugins.go#L8), paerser don't have any "hints" as to what type it's supposed to be, and for empty maps falls back to an empty string.
type Configuration struct {
	Key map[string]interface{} `json:"key" toml:"key" yaml:"key"`
}

const yamlContent = `key:
  emptyMap: {}
`

func TestYaml(t *testing.T) {
	configuration := &Configuration{}

	err := file.DecodeContent(yamlContent, ".yaml", configuration)
	if err != nil {
		t.Fatal(err)
	}

	assertEmptyMap(t, configuration)
}

func assertEmptyMap(t *testing.T, configuration *Configuration) {
	t.Helper()

	value := configuration.Key["emptyMap"]
	assert.IsType(t, "", value) // PASS
	assert.IsType(t, make(map[string]interface{}), value) // FAIL
}

So, I think this only affects deserialization of map[string]interface{} types.

Hello @ezracelli,

No doubt parsing is a complex task! Would you accept a PR to fix this specifically for the file parser?

This feature would not make it to our roadmap as we are focused elsewhere. If you or a community member would like to build it, let us know, and we will work with you to ensure you have all the information needed to merge it.
We prefer to work with our community members at the beginning of the design process to ensure that we are aligned and can move quickly with the review and merge process. Let us know here or create a PR before you start, and we will work with you there.
Don’t forget to check out the contributor docs and link the PR to this issue.


Added test for config.ts

This PR seems to incorporate the changes from #198, but doesn't address the comments on that issue. Can you address the feedback from #198 in this issue? We can probably just close the other PR once done.


Operator Does Not Respect Collector Memory Configuration

Hi everyone, thanks for making that project happen!
We are running the latest version of the managed Prometheus engine(v0.4.1) in a gke cluster version below using kubectl
client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.3", GitCommit:"816c97ab8cff8a1c72eccca1026f7820e93e0d25", GitTreeState:"clean", BuildDate:"2022-01-25T21:17:57Z", GoVersion:"go1.17.6", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.8-gke.200", GitCommit:"87bd5277f85536686030dd1fd7d6e39776dd44d1", GitTreeState:"clean", BuildDate:"2022-03-17T20:42:25Z", GoVersion:"go1.16.14b7", Compiler:"gc", Platform:"linux/amd64"}

Our collector is running out of memory (OOMKilled). After doing some digging, we found that there's some variables to control the memory of the collector. We tried bumping these by editing the operator's deployment but with no luck. In comparison, we tried to change the same variable for the evaluator, it worked just fine, the memory increase was reflected and the operator rolledout a new evaluator with the updated information. This never happened on the collector, even after manually deleting the daemonset to force a clean creation.
Here are the operator's arguments
  50       - args:
  51         - --public-namespace=gmp-public
  52         - --priority-class=gmp-critical
  53         - --image-collector=gke.gcr.io/prometheus-engine/prometheus:v2.28.1-gmp.7-gke.0
  54         - --image-config-reloader=gke.gcr.io/prometheus-engine/config-reloader:v0.4.1-gke.0
  55         - --image-rule-evaluator=gke.gcr.io/prometheus-engine/rule-evaluator:v0.4.1-gke.0
  56         - --webhook-addr=:10250
  57         - --collector-memory-limit=6000
  58         - --collector-memory-resource=3000
  50         - --evaluator-memory-resource=3000

We think a better documentation of the operator's configuration would be useful for other people facing the same problem. Mainly variables available here. Happy to open a PR if this is needed.
Not 100% sure if this is the problem but it looks like the collector's memory is hardcoded here where as the evaluator's memory is being taken from the resource opts here
Any idea in the first place why our collector is consuming more than 3Gb? Is this expected? We only have 5 podmonitoring resource deployed with a scrape interval of 30 seconds.

Thanks in advance for the help, happy to provide more debugging information.

Hi,

We think a better documentation of the operator's configuration would be useful for other people facing the same problem. Mainly variables available here. Happy to open a PR if this is needed.

Please do!

Not 100% sure if this is the problem but it looks like the collector's memory is hardcoded here where as the evaluator's memory is being taken from the resource opts here

Thanks for reporting! This is indeed a bug as you noted in (2).
We're actually in the process of removing these flags, favoring a yaml manifest where users can configure these things themselves without having to funnel everything through the operator.
In the meantime, if you're interested in opening a PR with the fix, that'd be helpful. We may cut a release before https://github.com/GoogleCloudPlatform/prometheus-engine/pull/227 is merged.

Any idea in the first place why our collector is consuming more than 3Gb? Is this expected? We only have 5 podmonitoring resource deployed with a scrape interval of 30 seconds.

The collector is a thinly forked Prometheus that pushes data to Google Cloud Monitoring. Because of this we document

Streaming data to Managed Service for Prometheus consumes additional resources. If you are manually deploying collectors, then we recommend increasing CPU and memory limits by 5x and adjusting them based on actual usage.

This is mainly attributed to buffering and serializing time series data protobuf messages before sending them over the wire. Some figures of interest would be knowing the time series volume being ingested by your OOMing collectors. For example, querying a collector via
% kubectl port-forward <ooming-collector-pod> -ngmp-system 19090

# Then access the Prometheus UI in a browser via http://localhost:19090 and query
prometheus_tsdb_head_series

and

rate(prometheus_tsdb_head_samples_appended_total[5m])

would give you some idea of volume load. Note: the collector is only scraping targets co-located on the same node - all metrics it's gathering are constrained to workloads on that node.
Two things you can try:

Increase scrape duration to > 30s, say 60s.
The OperatorConfig has a .Collection.Filter field where you can filter out metrics from being cached and sent to Cloud Monitoring. Adding filters to discard unused metrics can help here (and can substantially lower your bill!)

Hope that helps

Hello @pintohutch I opened a small PR fixing this bug.
Thanks to everyone who made this project happened!

Hey @pintohutch thanks for the review.
There's any change we can have a new release any time soon?

Hi @raphapassini,
Apologies for the delayed response here. Yes, we will cut a release with this fix soon. I'll post here with an update when we're ready.

@pintohutch any updates here? Our collectors keep crashing due to OOM and with the inability to increase the memory (it has to be done through the operator) we're missing metrics and therefore affecting the "perceived SLA" of GMP.

Hi @HaddadJoe,
Yes! We actually have the latest release publicly available at (v0.4.2-gke.1)[https://github.com/GoogleCloudPlatform/prometheus-engine/releases/tag/v0.4.2-gke.1]. We're in the process of drafting release notes, but the manifest and images should be good to use now.
Wanna give them a try?

This has been released publicly with the launch of v0.4.3-gke.0, which is rolling out now.


Opcode 03 (and maybe more?) null cycle

Hi.
I'm just programming my tester to ignore this.
Opcode 03 is only one opcode cycle, but the "cycles" section has 2, one of which is normal, and one of which is null.
Thanks

0x03 (INC BC) should take 2 M-cycles.


Error with SavingCallback defaulting to Array{Float64,1} with CVODE?

I'm not very good at making a MWE so I took the example from  and replaced Tsit5() with CVODE_BDF(). I assumed it would still work since it's just a different solver, albeit not very efficient since it is a stiff solver.
prob = ODEProblem((du,u,p,t) -> du .= u, rand(4,4), (0.0,1.0))
saved_values = SavedValues(Float64, Tuple{Float64,Float64})
cb = SavingCallback((u,t,integrator)->(tr(u),norm(u)), saved_values)
sol = solve(prob, CVODE_BDF(), callback=cb)

It errors with
Closest candidates are:
  tr(!Matched::Array{T,2}) where T at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.4\LinearAlgebra\src\dense.jl:331
  tr(!Matched::Hermitian) at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.4\LinearAlgebra\src\symmetric.jl:363
  tr(!Matched::Diagonal) at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.4\LinearAlgebra\src\diagonal.jl:547
  ...
in top-level scope at untitled:6
in  at DiffEqBase\ytJuW\src\solve.jl:100
in #solve#458 at DiffEqBase\ytJuW\src\solve.jl:102
in solve_up##kw at DiffEqBase\ytJuW\src\solve.jl:107
in #solve_up#459 at DiffEqBase\ytJuW\src\solve.jl:114
in solve_call##kw at DiffEqBase\ytJuW\src\solve.jl:65
in #solve_call#455 at DiffEqBase\ytJuW\src\solve.jl:92
in  at Sundials\UNvwn\src\common_interface\solve.jl:10
in __solve##kw at Sundials\UNvwn\src\common_interface\solve.jl:10
in __solve##kw at Sundials\UNvwn\src\common_interface\solve.jl:10
in __solve##kw at Sundials\UNvwn\src\common_interface\solve.jl:10
in __solve##kw at Sundials\UNvwn\src\common_interface\solve.jl:10
in #__solve#22 at Sundials\UNvwn\src\common_interface\solve.jl:10
in  at Sundials\UNvwn\src\common_interface\solve.jl:42
in #__init#23 at Sundials\UNvwn\src\common_interface\solve.jl:322
in initialize_callbacks! at Sundials\UNvwn\src\common_interface\solve.jl:1318
in initialize_callbacks! at Sundials\UNvwn\src\common_interface\solve.jl:1323
in initialize! at DiffEqBase\ytJuW\src\callbacks.jl:315
in initialize! at DiffEqBase\ytJuW\src\callbacks.jl:325
in saving_initialize at DiffEqCallbacks\yz7kf\src\saving.jl:91
in SavingAffect at DiffEqCallbacks\yz7kf\src\saving.jl:46
in  at DiffEqCallbacks\yz7kf\src\saving.jl:77
in  at untitled:5

My code creates this error, which is almost identical apart from
in #solve_up#459 at DiffEqBase\ytJuW\src\solve.jl:114  from example above
in #solve_up#459 at DiffEqBase\ytJuW\src\solve.jl:110 in error from below
MethodError: Cannot `convert` an object of type Array{Float64,1} to an object of type Float64
Closest candidates are:
  convert(::Type{T}, !Matched::Unitful.Quantity) where T<:Real at C:\Users\Helga\.julia\packages\Unitful\MOEUx\src\conversion.jl:145
  convert(::Type{T}, !Matched::Unitful.Level) where T<:Real at C:\Users\Helga\.julia\packages\Unitful\MOEUx\src\logarithm.jl:22
  convert(::Type{T}, !Matched::Unitful.Gain) where T<:Real at C:\Users\Helga\.julia\packages\Unitful\MOEUx\src\logarithm.jl:62
  ...
in top-level scope at untitled:51
in  at DiffEqBase\ytJuW\src\solve.jl:100
in #solve#458 at DiffEqBase\ytJuW\src\solve.jl:102
in solve_up##kw at DiffEqBase\ytJuW\src\solve.jl:107
in #solve_up#459 at DiffEqBase\ytJuW\src\solve.jl:110
in solve_call##kw at DiffEqBase\ytJuW\src\solve.jl:65
in #solve_call#455 at DiffEqBase\ytJuW\src\solve.jl:92
in  at Sundials\UNvwn\src\common_interface\solve.jl:10
in __solve##kw at Sundials\UNvwn\src\common_interface\solve.jl:10
in __solve##kw at Sundials\UNvwn\src\common_interface\solve.jl:10
in __solve##kw at Sundials\UNvwn\src\common_interface\solve.jl:10
in __solve##kw at Sundials\UNvwn\src\common_interface\solve.jl:10
in #__solve#22 at Sundials\UNvwn\src\common_interface\solve.jl:10
in  at Sundials\UNvwn\src\common_interface\solve.jl:42
in #__init#23 at Sundials\UNvwn\src\common_interface\solve.jl:322
in initialize_callbacks! at Sundials\UNvwn\src\common_interface\solve.jl:1318
in initialize_callbacks! at Sundials\UNvwn\src\common_interface\solve.jl:1323
in initialize! at DiffEqBase\ytJuW\src\callbacks.jl:315
in initialize! at DiffEqBase\ytJuW\src\callbacks.jl:321
in initialize! at DiffEqBase\ytJuW\src\callbacks.jl:325
in saving_initialize at DiffEqCallbacks\yz7kf\src\saving.jl:91
in SavingAffect at DiffEqCallbacks\yz7kf\src\saving.jl:46
in  at DiffEqCallbacks\yz7kf\src\saving.jl:77
in copyat_or_push! at RecursiveArrayTools\DBKJE\src\utils.jl
in copyto! at base\multidimensional.jl:962
in setindex! at base\array.jl:826

using Sundials, DiffEqCallbacks, LinearAlgebra
prob = ODEProblem((du,u,p,t) -> du .= u, rand(4,4), (0.0,1.0))
saved_values = SavedValues(Float64, Tuple{Float64,Float64})
cb = SavingCallback((u,t,integrator)->(tr(reshape(u,4,4)),norm(reshape(u,4,4))), saved_values)
sol = solve(prob, CVODE_BDF(), callback=cb)

is a workaround. We have to internally flatten for Sundials' API, and we normally reshape before f to hide that from the user. But it looks like it's exposing itself here. This one is one of those issues that is particularly difficult to solve, but extremely easy to workaround, so I'm just going to leave it hanging until after JuliaCon.


Replace module name 'Purescript' by 'PureScript'

That's how the PureScript library calls it. :)

fixed by #34


Limited Android options available

For some reason I am only getting 4 options to share with on Android - no Facebook, hangouts etc.
Any guidance would be greatly appreciated.
I am using phonegap build and using this code in the config,xml:
<gap:plugin name="cordova-plugin-x-socialsharing" source="npm" />
And this code in the app:
// this is the complete list of currently supported params you can pass to the plugin (all optional)
var options = {
message: 'share this', // not supported on some apps (Facebook, Instagram)
subject: 'the subject', // fi. for email
files: ['', ''], // an array of filenames either locally or remotely
url: 'https://www.website.com/foo/#bar?a=b',
chooserTitle: 'Pick an app' // Android only, you can override the default share sheet title,
appPackageName: 'com.apple.social.facebook' // Android only, you can provide id of the App you want to share with
};
var onSuccess = function(result) {
console.log("Share completed? " + result.completed); // On Android apps mostly return false even while it's true
console.log("Shared to app: " + result.app); // On Android result.app since plugin version 5.4.0 this is no longer empty. On iOS it's empty when sharing is cancelled (result.completed=false)
};
var onError = function(msg) {
console.log("Sharing failed with message: " + msg);
};
window.plugins.socialsharing.shareWithOptions(options, onSuccess, onError);
Thanks

Pass in a variable parameters to the msg, link,url

@mikeooi  Did the above solution work for you?


ci: run ffi-check on aarch64 linux

Still investigating segmentation fault in the pydantic-core test suite...

Thanks for moving this forward @messense! Looks like it took ~10 minutes on that step, so we probably want to move it to its own job.
It also ran on Python 3.10 (I guess that's what ships with ubuntu 22.04), I guess we want to run on 3.12 or 3.13 really. Maybe we can use uv to download a newer Python inside the image.
I guess I am now also wondering, should we be trying more than just ffi-check for these architectures? e.g. we could try to run more / all of the test suite. As PyO3 / Rust usage is getting wider across the Python ecosystem, good coverage of less popular architectures probably is more important now than it was a couple of years ago.
... so time to load up CI even more? 😢

Alternative we can consider run Linux aarch64 pipeline natively on Cirrus CI before GH Actions aarch64 Linux runner becoming available for public repos?


Replace Homebrew constants with Hbc variables (fix test suite)

This most likely caused tests in this tap to fail:
https://github.com/caskroom/homebrew-cask/commit/b40b0c99e1ea43ca3a7126dd099356bf8e7c4720
so I'm fixing it in a very similar manner.

Merged this myself, so we can carry on with other pull-requests that are currently all in red.


Update the capture response structures

Since today I've started receiving a somewhat strange reply from paypal on order capture, here is the excerpt that causes deserialization error:
{
...
  "payment_source": {
    "paypal": {
      "email_address"<EMAIL_ADDRESS>      "account_id": "58XXXXXXXX",
      "name": {
        "given_name": "Test",
        "surname": "Test"
      },
      "address": {
        "country_code": "US"
      }
    }
  },
...

This field is not documented except in the response samples on the PayPal docs site. I've added them still and accounted for the fact that other fields in that structure can be missing.

thanks!


Don't add tags to my mods

Please don't add tags to my mods, I'm going to be doing an update with all my .netkans
I've written a script to make it easy for myself, using the suggested tags
Thanks

Sorry, but I want to get lots of them done, and it's a pain to check which ones are yours. You can always fix them later if you don't like what I pick.

Ok, in that case I'll wait until you are done and then will review

I'd also like to get a consistent base laid down before we get into a full free-for-all of lots of mod authors making up their own random tags. It's tempting to hyper-customize, but the resulting user experience would be pretty frustrating.

I was trying to save you work, and was only going to use the suggested tags, but that's fine

(For what it's worth, I do also think there's room for a few more suggested tags. combat in particular seems pretty justifiable, and I expect to find others during this survey.)

Would you like to try my script?  It will go through the .netkan files in a directory, present you with a list of possible tags, and then update the .netkan when done.  Restartable

Thanks for the offer, but I've already got a pretty good workflow. The bottlenecks are researching the mods and waiting for the PR validation scripts, editing the metadata is the easy quick part.


Add Dropout layer, Lstm dropout handling, pass training placeholder during layer.apply()

Attempt#1 for handling dropout. Background as I know it: dropout should be applied as an additional layer (1) after the input layer, (2) after any dense layers. For Lstm layers, dropout is handled internally by TensorFlow w/ a different mechanic, so should be passed as an argument (as it currently is). AFAIK you don't use dropout w/ Conv2d (to investigate). So an example: [{type: 'dropout', rate: .5}, {type: 'lstm', dropout=.5, ...}, {type: 'dense', ...}, {type: 'dropout', rate: .5}]
The dropout layers (tf.layers.dropout & tf.contrib.rnn.DropoutWrapper) take a training tf.placeholder argument. Usually tf.placeholder_with_default(False, ...) so we're forced to explicitly activate it during training (that is, during model.update()).
This was simpler in #master (sloppy commit https://github.com/lefnire/tensorforce/commit/4c0224ca719cc8e827029f0ccca6b41846f16187). It's tougher here; as you can see I'm passing the training arg to every network.apply => layer.tf_apply, which results in scattering this arg all over the place. It would be cleaner if training were passed to __init__ functions, but the order in which model subclasses are calling parent __init__ fns makes it difficult to so do (LMK if you want a detailed explanation of that).
Anyway, worth chatting about - I expect this won't be merged as is :)

Thanks @lefnire. It's a bit like deterministic in the case of distributions, I guess. Maybe it's worth handling all this via an initialization function which is called for distributions/layers/etc in Model.initialize, but we have to think about this. One question though: It seems to me as if the training boolean placeholder really is an update placeholder (training act() still should not apply dropout), so I would probably suggest renaming it (and explicitly setting both values, instead of placeholder_with_default for clarity?).

Maybe it's worth handling all this via an initialization function which is called for distributions/layers/etc in Model.initialize

Agreed. I hit snags trying such in the order in which Model subclasses call super. I'll sit with it again & write a proper description to show what I mean. Will chew on the second part of your comment soon & make necessary adjustments.

Thanks for updating conflicts, will be merged shortly

Snap, I appreciate! Just do a double check that it all makes sense according to the grand scheme if you could. I've been using it in the wild for a while now, seems to work hunky-dory. Just felt a bit hack-job the way I did it.

Hi @lefnire, just to confirm: The training flag is set only for the update, right? Because for another reason I integrated an update placeholder, and I would then go ahead and combine them (I think the distinction update/non-update is clearer than training/testing in RL, as mentioned above).

@AlexKuhnle you might need to go with your gut on this, my newness to RL strikes again - I still don't quite get the difference. In supervised learning, dropout is applied only during session.run(minimize_loss). Any time you're making a prediction (even if checking training residuals) the flag is False. However that translates :/

The difference would be that even in the 'training phase' one always wants to act to the best of one's knowledge (hence the training flag is set to False), even though the same experience is then used in update with dropout (training set to True) to optimize.

I think that sounds like the right way. Yeah I think you only want to apply dropout during backprop / loss-min, and your way sounds compatible

I'm changing this then, essentially replacing training with update, and integrating it a bit more with the library structure. That's definitely a useful flag, I think, if only for more specific things. Thanks again!
The reason why the update flag was added, for instance, was because only during an update summaries can be extracted, because only then the full feed_dict covering all placeholders is passed. This just fyi. ;-)


Fix type of Poll::{correct_option_id,open_period} fields: i32 => u8 and u16

Params correct_option_id and open_period of sendPoll method use smaller types, because correct_option_id is in the range 0..9 and fits in u8, and open_period in the range 5..600 can be u16. As I understand it, this is just a typo mistake.

LGTM!
Could also you add your changes to the changelog?

@WaffleLapkin Wait, are you sure? What if it will be changed in future?

@p0lunin yes, I'm sure. We already doing the same all other the codebase. A poll with 256 options doesn't sound like it will be ever added.

Could also you add your changes to the changelog?

Done


Dirichlet distribution uses looping and autodiff

Summary:
Current implementation of the dirichlet lpmf could be made more efficient by using matrix operations and analytic gradients.
Description:
The distribution currently loops over the vector inputs to construct log probability, Eigen's matrix operations would be more efficient. Similarly, adding analytic gradients would improve the speed of estimation.
Reproducible Steps:
N/A
Current Output:
N/A
Expected Output:
N/A
Additional Information:
N/A
Current Version:
v2.17.0

Closed via #788


Document all of the env vars that azd creates/uses/modifies

Let's document all of the env vars azd creates/uses/modifies and how a dev would take advantage of them.

@rajeshkamal5050  Do we have a list of these + info about their use anywhere? I believe CSS had this same feedback.

@rajeshkamal5050 Do we have a list of these + info about their use anywhere? I believe CSS had this same feedback.

https://github.com/Azure/azure-dev/issues/1458 was something @weikanglim was consolidating. Can we use that and close this one?

Yep! Perfect.


Add "...doesn't work" to the end of syntax rules for gitignore files examples in about-code-owners.md

Code of Conduct

[X] I have read and agree to the GitHub Docs project's Code of Conduct

What article on docs.github.com is affected?
https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
What part(s) of the article would you like to see updated?

{% warning %}
Warning: There are some syntax rules for gitignore files that do not work in CODEOWNERS files:

Escaping a pattern starting with # using \ so it is treated as a pattern and not a comment
Using ! to negate a pattern
Using [ ] to define a character range

{% endwarning %}

Per this issue, each of the examples in this list should have "doesn't work" appended to the end for clarity -

{% warning %}
Warning: There are some syntax rules for gitignore files that do not work in CODEOWNERS files:

Escaping a pattern starting with # using \ so it is treated as a pattern and not a comment doesn't work
Using ! to negate a pattern doesn't work
Using [ ] to define a character range doesn't work

{% endwarning %}

Additional information
No response

Is this on me?

@SirJosh1987 Apologies, can you clarify what you mean by your last message? Are you asking if you can submit a PR for this issue? 💛

My friend all I know is I get a lot of notifications from git and all I do it start clicking on things never really doing anything I feel like

@SirJosh1987 I see, thank you for explaining!
If you're looking to have those notification issues solved, we'd recommend checking out this doc regarding configuring notifications or reaching out to our wonderful support team to see if they can assist 💛

#34814 will fix this


[Self-guided tours][V3] Add tour link to FAB

Details

Fixed Issues

$ https://github.com/Expensify/App/issues/50926
PROPOSAL: N.A.
Tests

Admin

Create a new account
For onboarding purpose, choose "manage my team's expenses"
Verify that FAB menu has tour link and it opens admin tour.
Verify that you don't see tour link anymore in FAB menu.

Other onboarding purpose

Create a new account
For onboarding purpose, choose anything other than "manage my team's expenses"
Verify that you see New workspace button in FAB.
Verify that FAB menu has tour link and it opens employee tour.
Verify that you don't see tour link anymore in FAB menu.

Old accounts that have not completed onboarding ever.
If a user has never completed onboarding, then they won't see the tour link in FAB.
They should see in search page tho.
Old accounts that have completed onboarding should be able to see tour link.

[x] Verify that no errors appear in the JS console

Offline tests

QA Steps

[x] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

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

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:

[x] I verified that all the inputs inside a form are aligned with each other.
[x] I added Design label and/or tagged @Expensify/design so the design team can review the changes.

[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

https://github.com/user-attachments/assets/00c55170-b3eb-43cf-91c9-cc65454b75e9
Hovered

Without hover

MacOS: Desktop

Now that we've updated the option rows, I wonder if we should tone back the Take a tour option row and remove the green. Maybe something like this?

Keen to get @Expensify/design thoughts before we charge ahead though.

I like that, this way it also won't compete with the green icon we use for creating a workspace from the global create menu right?

Yeah, though there's a question of whether we should use the same treatment for that too? Actually. Let's just quickly take this to Slack before posting the final mocks here.

Is this okay or should this icon's outer boundary should always be circular?
cc: @Expensify/design

@rushatgabhane
This was for Spanish because the text is longer.

Looks great from a visual perspective 👍

Reviewer Checklist

[ ] I have verified the author checklist is complete (all boxes are checked off).
[ ] I verified the correct issue is linked in the ### Fixed Issues section above
[ ] I verified testing steps are clear and they cover the changes made in this PR

[ ] I verified the steps for local testing are in the Tests section
[ ] I verified the steps for Staging and/or Production testing are in the QA steps section
[ ] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[ ] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[ ] I checked that screenshots or videos are included for tests on all platforms
[ ] I included screenshots or videos for tests on all platforms
[ ] I verified tests pass on all platforms & I tested again on:

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

[ ] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[ ] I verified proper code patterns were followed (see Reviewing the code)

[ ] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[ ] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[ ] I verified that comments were added to code that is not self explanatory
[ ] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[ ] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[ ] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[ ] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
[ ] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[ ] I verified the JSDocs style guidelines (in STYLE.md) were followed

[ ] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[ ] I verified that this PR follows the guidelines as stated in the Review Guidelines
[ ] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[ ] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[ ] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[ ] If a new component is created I verified that:

[ ] A similar component doesn't exist in the codebase
[ ] All props are defined accurately and each prop has a /** comment above it */
[ ] The file is named correctly
[ ] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[ ] The only data being stored in the state is data necessary for rendering and nothing else
[ ] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[ ] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[ ] All JSX used for rendering exists in the render method
[ ] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[ ] If any new file was added I verified that:

[ ] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[ ] If a new CSS style is added I verified that:

[ ] A similar style doesn't already exist
[ ] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG)

[ ] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[ ] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[ ] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[ ] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[ ] If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:

[ ] I verified that all the inputs inside a form are aligned with each other.
[ ] I added Design label and/or tagged @Expensify/design so the design team can review the changes.

[ ] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[ ] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[ ] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

Just to confirm - does the tour open up in a new tab/new window? I think so, but just want to double check.

Sweet thanks for confirming!

Design-wise this looks good to me 👍

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.


Multiple routes trigger first one to fire multiple times

I have a following code:
routie('search/:text', function(text) { ... });
routie('view-group/:id', function(id) { ... });
routie('view-test1/:id', function(id) { ... });
routie('view-test2/:id', function(id) { ... });
When reloading a page, first handler ('search/:text') when route is matched is fired 4 times, for each route declared. If I remove view-test1 and view-test2, it is fired 2 times.
Is this a serious bug?

I have opened a pull request that fixes this issue. https://github.com/jgallen23/routie/pull/47

@NicholasEymann Thanks! I'll take a look at it soon and get back to you in the actual pull request.


Fixed -f placeholder in ModuleIsNotCatalogSigned

In ModuleIsNotCatalogSigned, the placeholder value {0} represents the newest version of the module being installed, which doesn't make sense after the modifier "previously-installed module".
the previously-installed module '{0}' with version '{4}'

I changed the placeholder value to {1} which represents the module name.
For example, changed:
the previously-installed module '4.0' with version '1.0'

To:
the previously-installed module 'CoolModule' with version '1.0'

@juneb,
Thanks for having already signed the Contribution License Agreement. Your agreement was validated by Microsoft. We will now review your pull request.
Thanks,
Microsoft Pull Request Bot

@yutingc Could you please take a look at the two failed test cases related to Update-ModuleManifest cmdlet?
With the latest changes for Test-ModuleManifest cmdlet in PS Core, we might have to update these two failed test cases.

@bmanikm  Yes, with the new check in Test-ModuleManifest, RootModule and Dependency fields need to point to a valid .psm1, , .cdxml, .xaml or .dll.  We should update the tests accordingly.


New article: PnP PowerShell 1.10 released

Category

[ ] Content fix
[x] New article

Contents of the Pull Request
Add a new article detailing the PnP PowerShell 1.10 changes.
Please let me know if you need to change/add/update anything.

thanks for the article @gautamdsheth  and @KoenZomers 👏 - as you didn't define a correct path to a tn image in the frontmatter, I took care of that. If you want to change the current image to something else, please feel free to do that :-)
Your PR is already merged into main and the site is deployed again.

@LuiseFreese - thanks for fixing it , my bad :(
However , I am looking at the blog: https://pnp.github.io/blog/pnp-powershell/pnp-powershell-v1-10/
It doesn't have that image, anything I need to do, maybe I missed something or maybe you can check it ?

Hey @gautamdsheth - it is the thumbnail image for the blog post, which means that it appears in the overview site of all blog posts with that image.
you can check this here: https://pnp.github.io/blog/ (you will need to scroll down a bit)
For your convenience, here is a screenshot:

If you want to insert the image IN your blog post, please do with
![alt text](images/this-is-your-image.png)
Let me know if I can help with anything.

Got it , thanks !


Font Feature not applied correctly in Rich Text

Steps to Reproduce

Execute flutter run on the code sample

Expected results:
The text span part "Should be superscript" should all be displayed in superscript
Actual results:
The text span part "Should be superscript" is only partly displayed superscript (the "script" part only)
Note
This looks like some indexing issue.
Weird thing is that if I use TextStyle(fontFeatures: [FontFeature.subscripts()]) in the text span directly, instead of querying it from the Theme, it works.

Code sample
import 'dart:ui';

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.blue,
        textTheme: TextTheme(
          titleSmall: TextStyle(fontFeatures: [FontFeature.subscripts()]),
          titleLarge: TextStyle(fontFeatures: [FontFeature.superscripts()]),
        ),
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text("compared to normal"),
                Text("subscript", style: Theme.of(context).textTheme.titleSmall)
              ],
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text("compared to normal"),
                Text("superscript", style: Theme.of(context).textTheme.titleLarge),
              ],
            ),
            SizedBox(height: 20),
            Text.rich(
              TextSpan(
                children: [
                  TextSpan(text: "Spans normal "),
                  TextSpan(
                    text: "Should be supscript",
                    style: Theme.of(context).textTheme.titleSmall,
                  ),
                ],
              ),
            )
          ],
        ),
      ),
    );
  }
}

Logs
[✓] Flutter (Channel unknown, 3.0.4, on macOS 12.4 21F79 darwin-arm, locale en-GB)
    • Flutter version 3.0.4 at /Users/balazs/bin/flutter
    • Upstream repository unknown
    • Framework revision 85684f9300 (13 days ago), 2022-06-30 13:22:47 -0700
    • Engine revision 6ba2af10bb
    • Dart version 2.17.5
    • DevTools version 2.12.2

[!] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/balazs/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0
    • ANDROID_HOME = /Users/balazs/Library/Android/sdk
    • ANDROID_SDK_ROOT = /Users/balazs/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    ! Some Android licenses not accepted.  To resolve this, run: flutter doctor --android-licenses

[✓] Xcode - develop for iOS and macOS (Xcode 13.4.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)

[✓] IntelliJ IDEA Community Edition (version 2021.2.4)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart

[✓] Connected device (3 available)
    • iPhone 13 (mobile) • DFF1F3F5-D41C-458F-82F4-6432B614E3E9 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-15-5 (simulator)
    • macOS (desktop)    • macos                                • darwin-arm64   • macOS 12.4 21F79 darwin-arm
    • Chrome (web)       • chrome                               • web-javascript • Google Chrome 103.0.5060.114

[✓] HTTP Host Availability
    • All required HTTP hosts are available

! Doctor found issues in 1 category.

Looks like in master, the uppercase letters aren't being subscripted. But the lowercase ones work as expected.

Screenshot

Code sample
import 'dart:ui';

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.blue,
        textTheme: const TextTheme(
          titleSmall: TextStyle(fontFeatures: [FontFeature.subscripts()]),
          titleLarge: TextStyle(fontFeatures: [FontFeature.superscripts()]),
        ),
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                const Text("compared to normal"),
                Text("subscript", style: Theme.of(context).textTheme.titleSmall)
              ],
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                const Text("compared to normal"),
                Text("superscript",
                    style: Theme.of(context).textTheme.titleLarge),
              ],
            ),
            const SizedBox(height: 20),
            Text.rich(
              TextSpan(
                children: [
                  const TextSpan(text: "Spans normal "),
                  TextSpan(
                    text: "ShoulD BE supscript",
                    style: Theme.of(context).textTheme.titleSmall,
                  ),
                ],
              ),
            )
          ],
        ),
      ),
    );
  }
}

flutter doctor -v (Stable)
[✓] Flutter (Channel stable, 3.0.4, on macOS 12.4 21F79 darwin-arm, locale en-US)
    • Flutter version 3.0.4 at /Users/nabeelparkar/fvm/versions/stable
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 85684f9300 (13 days ago), 2022-06-30 13:22:47 -0700
    • Engine revision 6ba2af10bb
    • Dart version 2.17.5
    • DevTools version 2.12.2

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/nabeelparkar/Library/Android/sdk/
    • Platform android-33, build-tools 33.0.0
    • ANDROID_SDK_ROOT = /Users/nabeelparkar/Library/Android/sdk/
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.4.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • CHROME_EXECUTABLE = /Applications/Brave Browser.app/Contents/MacOS/Brave Browser

[✓] Android Studio (version 2021.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)

[✓] IntelliJ IDEA Ultimate Edition (version 2022.1.3)
    • IntelliJ at /Applications/IntelliJ IDEA.app
    • Flutter plugin version 69.0.4
    • Dart plugin version 221.5921.27

[✓] VS Code (version 1.68.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.42.0

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-arm64   • macOS 12.4 21F79 darwin-arm
    • Chrome (web)    • chrome • web-javascript • Brave Browser <IP_ADDRESS>

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

flutter doctor -v (Master)
[✓] Flutter (Channel master, 3.1.0-0.0.pre.1630, on macOS 12.4 21F79 darwin-arm, locale en-US)
    • Flutter version 3.1.0-0.0.pre.1630 on channel master at /Users/nabeelparkar/fvm/versions/master
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 803ef6a456 (2 hours ago), 2022-07-13 11:07:59 +0200
    • Engine revision 20038216ac
    • Dart version 2.18.0 (build 2.18.0-272.0.dev)
    • DevTools version 2.15.0

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/nabeelparkar/Library/Android/sdk/
    • Platform android-33, build-tools 33.0.0
    • ANDROID_SDK_ROOT = /Users/nabeelparkar/Library/Android/sdk/
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.4.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 13F100
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • CHROME_EXECUTABLE = /Applications/Brave Browser.app/Contents/MacOS/Brave Browser

[✓] Android Studio (version 2021.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)

[✓] IntelliJ IDEA Ultimate Edition (version 2022.1.3)
    • IntelliJ at /Applications/IntelliJ IDEA.app
    • Flutter plugin version 69.0.4
    • Dart plugin version 221.5921.27

[✓] VS Code (version 1.68.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.42.0

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-arm64   • macOS 12.4 21F79 darwin-arm
    • Chrome (web)    • chrome • web-javascript • Brave Browser <IP_ADDRESS>

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

cc @jason-simmons

This was an issue in 3.0.0 but has been fixed on the current master branch.

@jason-simmons I can still see some irregularities with superscripts and subscripts. Consider the following code sample:

Code sample
import 'dart:ui';

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.blue,
        textTheme: const TextTheme(
          titleSmall: TextStyle(fontFeatures: [FontFeature.subscripts()]),
          titleLarge: TextStyle(fontFeatures: [FontFeature.superscripts()]),
        ),
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                const Text("compared to normal"),
                Text("subscript", style: Theme.of(context).textTheme.titleSmall)
              ],
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                const Text("compared to normal"),
                Text("superscript",
                    style: Theme.of(context).textTheme.titleLarge),
              ],
            ),
            const SizedBox(height: 20),
            Text.rich(
              TextSpan(
                children: [
                  const TextSpan(text: "Spans normal "),
                  TextSpan(
                    text: "ShoulD BE supscript",
                    style: Theme.of(context).textTheme.titleSmall,
                  ),
                ],
              ),
            )
          ],
        ),
      ),
    );
  }
}

Gives the following result:

flutter doctor -v (Stable)
[✓] Flutter (Channel stable, 3.0.5, on macOS 12.4 21F79 darwin-arm, locale en-US)
    • Flutter version 3.0.5 at /Users/nabeelparkar/fvm/versions/stable
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision f1875d570e (9 days ago), 2022-07-13 11:24:16 -0700
    • Engine revision e85ea0e79c
    • Dart version 2.17.6
    • DevTools version 2.12.2

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/nabeelparkar/Library/Android/sdk/
    • Platform android-33, build-tools 33.0.0
    • ANDROID_SDK_ROOT = /Users/nabeelparkar/Library/Android/sdk/
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.4.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • CHROME_EXECUTABLE = /Applications/Brave Browser.app/Contents/MacOS/Brave Browser

[✓] Android Studio (version 2021.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)

[✓] IntelliJ IDEA Ultimate Edition (version 2022.1.3)
    • IntelliJ at /Applications/IntelliJ IDEA.app
    • Flutter plugin version 69.0.4
    • Dart plugin version 221.5921.27

[✓] VS Code (version 1.69.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.44.0

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-arm64   • macOS 12.4 21F79 darwin-arm
    • Chrome (web)    • chrome • web-javascript • Brave Browser <IP_ADDRESS>

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

flutter doctor -v (Master)
[✓] Flutter (Channel master, 3.1.0-0.0.pre.1808, on macOS 12.4 21F79 darwin-arm, locale en-US)
    • Flutter version 3.1.0-0.0.pre.1808 on channel master at /Users/nabeelparkar/fvm/versions/master
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 9ac69bddd8 (28 minutes ago), 2022-07-22 02:33:07 -0400
    • Engine revision ed5d452e8f
    • Dart version 2.19.0 (build 2.19.0-24.0.dev)
    • DevTools version 2.15.0

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/nabeelparkar/Library/Android/sdk/
    • Platform android-33, build-tools 33.0.0
    • ANDROID_SDK_ROOT = /Users/nabeelparkar/Library/Android/sdk/
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.4.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 13F100
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • CHROME_EXECUTABLE = /Applications/Brave Browser.app/Contents/MacOS/Brave Browser

[✓] Android Studio (version 2021.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)

[✓] IntelliJ IDEA Ultimate Edition (version 2022.1.3)
    • IntelliJ at /Applications/IntelliJ IDEA.app
    • Flutter plugin version 69.0.4
    • Dart plugin version 221.5921.27

[✓] VS Code (version 1.69.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.44.0

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-arm64   • macOS 12.4 21F79 darwin-arm
    • Chrome (web)    • chrome • web-javascript • Brave Browser <IP_ADDRESS>

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

That is how this particular font renders capital letters when that font feature is applied.

@jason-simmons Thanks, it looks like the bug I described is fixed in master. Will it be released in the next version?

@jason-simmons Okay thanks for the explanation. @himamis Since it's fixed in master, I'll close this issue.


bashls: Set root_dir to nil when editing file in ~

A problem with bash-language-server is that it has a bad habit of trying to recursively scan the entire home folder if you for example tried to edit a shell script directly in ~ (e.g. ~/foo.sh).
This causes a bunch of weird behaviour and causes the server to take forever to start.
To prevent this we set root_dir to nil when the resolved root_dir happened to be ~. This solution is kind of hinted towards if you look at their own README for how you should configure it with coc.nvim (note the ignoredRootPaths):
"languageserver": {
  "bash": {
    "command": "bash-language-server",
    "args": ["start"],
    "filetypes": ["sh"],
    "ignoredRootPaths": ["~"]
  }
}

100000x this. Good idea.

100000x this. Good idea.

FYI pretty sure coc.nvim does this too:
https://github.com/neoclide/coc.nvim/wiki/Language-servers#bash

FYI pretty sure coc.nvim does this too:
https://github.com/neoclide/coc.nvim/wiki/Language-servers#bash

An annoying thing I noticed is that the server never actually initializes if it receives nil. So nothing is working which will be a frustrating user experience as well. Not sure how to handle that 🤔

An annoying thing I noticed is that the server never actually initializes if it receives nil. So nothing is working which will be a frustrating user experience as well. Not sure how to handle that 🤔

I would check what coc does, IMO it's fine not to start, but then maybe print to :messages why instead of logging to the log.

I would check what coc does, IMO it's fine not to start, but then maybe print to :messages why instead of logging to the log.

I would check what coc does, IMO it's fine not to start, but then maybe print to :messages why instead of logging to the log.

Seems like it mostly doesn't start either. Just provides some snippet completion included in coc-sh.
So I did some digging, and it turns out the glob pattern they use to find shell scripts is configurable via the GLOB_PATTERN environment variable (https://github.com/bash-lsp/bash-language-server/pull/187). It defaults to **/*@(.sh|.inc|.bash|.command).
I wonder if not a better solution would be to override it to only look into the current directory. It's gonna be good enough in most cases, maybe even better (how often do you actually want completion from shell scripts somewhere else in a repo). Something like this:
    cmd_env = {
      GLOB_PATTERN = vim.env.GLOB_PATTERN or "*@(.sh|.inc|.bash|.command)"
    },

I would check what coc does, IMO it's fine not to start, but then maybe print to :messages why instead of logging to the log.

Seems like it mostly doesn't start either. Just provides some snippet completion included in coc-sh.
So I did some digging, and it turns out the glob pattern they use to find shell scripts is configurable via the GLOB_PATTERN environment variable (https://github.com/bash-lsp/bash-language-server/pull/187). It defaults to **/*@(.sh|.inc|.bash|.command).
I wonder if not a better solution would be to override it to only look into the current directory. It's gonna be good enough in most cases, maybe even better (how often do you actually want completion from shell scripts somewhere else in a repo). Something like this:
    cmd_env = {
      GLOB_PATTERN = vim.env.GLOB_PATTERN or "*@(.sh|.inc|.bash|.command)"
    },

Ideally I would like to override GLOB_PATTERN conditionally based on the resolved root_dir. But since it's an environment variable I don't think it's possible.
Would've been better if it was a regular settings or init_options 🤷♂

Ideally I would like to override GLOB_PATTERN conditionally based on the resolved root_dir. But since it's an environment variable I don't think it's possible.
Would've been better if it was a regular settings or init_options 🤷♂

Alternative solution using GLOB_PATTERN: GH-686

Alternative solution using GLOB_PATTERN: GH-686

Closing since I merged GH-686

Closing since I merged GH-686


Support for struct in struct

Even nesting it only 1 time would be helpful
struct A {
float f;
};

struct B {
A a;
float f;
};

I have not thought though about the effects this might have on the alignment tbh.

I believe that examples like the one about should already work fine in Slang.
If there are specific cases you've found not to work, please let us know. Otherwise we will close out this issue as already implemented.

Closing, as it appears the desired use case works already.


JSON log format with metadata

It would be extremely useful to be able to tell logstash to send out it's logs in JSON with the docker hostname/image name/container name:tag/labels attached. If I'm running say 30 docker hosts with Mesos this would let me track down issues and plays very nicely with the json filter in Logstash.

+1 .. our entire structure log infrastructure is JSON based. JSON logs would make all of our logs structured automatically and vastly easier to parse!

+1

+1

https://github.com/looplab/logspout-logstash does this
on my fork of the above I also have some extra hacks to attach the taskId as set my marathon etc

Yeah I'm pretty sure there are a couple JSON based adapters...
On Fri, Jan 22, 2016 at 8:11 AM, David Keijser<EMAIL_ADDRESS>wrote:

https://github.com/looplab/logspout-logstash does this
on my fork of the above I also have some extra hacks to attach the taskId
as set my marathon etc
—
Reply to this email directly or view it on GitHub
https://github.com/gliderlabs/logspout/issues/138#issuecomment-173930699
.

--
Jeff Lindsay
http://progrium.com

To clarify, is the goal here to send json formatted logs to syslog and destinations other than logstash?

Changing this to documentation. I'll add an ADAPTERS.md file similar to dokku's community plugin doc

This already exists here
closing


ENH: Increase coverage for miscellaneous classes

Increase coverage for miscellaneous classes:

Test the Set/Get methods using the ITK_TEST_SET_GET_VALUE macro.
Test exceptions using the ITK_TRY_EXPECT_EXCEPTION macro.

PR Checklist

[X] No API changes were made (or the changes have been approved)
[X] No major design changes were made (or the changes have been approved)

/azp run ITK.macOS

@dzenanz @tbirdso @thewtex Not sure what's happening with the macOS build: it is unable to find Ninja. Suggestions are welcome.

In the macOS build log:

2022-11-02T12:34:09.0691690Z   WARNING: The script ninja is installed in '/Library/Frameworks/Python.framework/Versions/3.11/bin' which is not on PATH.

It looks like Python 3.11 is used by default but the build process is probably expecting 3.10?

It looks like Python 3.11 is used by default but the build process is probably expecting 3.10?

Maybe the all Azure builds have switched to Python 3.11 by default as it has been released last week.
However, IDK why it should affect ITK.macOS as it does not need Python.

@jhlegarreta The Azure pipeline appears to currently use whatever Python is available by default for pip install-ing dependencies. Here's the full log entry for installing ninja:
2022-11-02T12:34:04.4121660Z + sudo python3 -m pip install ninja
2022-11-02T12:34:08.3273160Z WARNING: The directory '/Users/runner/Library/Caches/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you should use sudo's -H flag.
2022-11-02T12:34:08.9320560Z Collecting ninja
2022-11-02T12:34:08.9630950Z   Downloading ninja-<IP_ADDRESS>-py2.py3-none-macosx_10_9_universal2.macosx_10_9_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl (231 kB)
2022-11-02T12:34:08.9732170Z      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 231.5/231.5 kB 39.8 MB/s eta 0:00:00
2022-11-02T12:34:09.0498210Z Installing collected packages: ninja
2022-11-02T12:34:09.0691690Z   WARNING: The script ninja is installed in '/Library/Frameworks/Python.framework/Versions/3.11/bin' which is not on PATH.
2022-11-02T12:34:09.0694040Z   Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
2022-11-02T12:34:09.0742320Z Successfully installed ninja-<IP_ADDRESS>

I don't see any dependency install failures in the log, so either of these paths should be a viable fix:

Enforce Python == 3.10 prior to pip install-ing dependencies
Set PATH=$PATH:/Library/Frameworks/Python.framework/Versions/3.11/bin before building ITK

:+1: thanks for the suggestions Tom.
Now, reading the CI configurations, all install Ninja through Python. Not sure why it only hit ITK.macOS, maybe it was the latest to trigger, and then the change came in.
I'd guess that we do not want to switch our CI builds to Python 3.11 for now (unless we start a separate CI to test against the latest Python version, whatever it may be).
I'll let you discuss the above and I'll propose a PR to change all builds:
https://github.com/InsightSoftwareConsortium/ITK/tree/abc6a272cda280b2428bcc2ad709c0185dde6624/Testing/ContinuousIntegration

I'd guess that we do not want to switch our CI builds to Python 3.11 for now (unless we start a separate CI to test against the latest Python version, whatever it may be).

I agree that at a minimum we should be setting the Python version that pipelines are using so that we aren't hit with surprise upgrades. In Python workflows it appears we use the UsePythonVersion task, I imagine this could be added to cxx workflows as well. Maybe these could be standardized to Python 3.9 for now? https://github.com/InsightSoftwareConsortium/ITK/blob/abc6a272cda280b2428bcc2ad709c0185dde6624/Testing/ContinuousIntegration/AzurePipelinesLinuxPython.yml#L27
At some point we will want to build Python 3.11 packages for distribution. @thewtex and @jcfr may be able to share thoughts on that effort.

I agree that at a minimum we should be setting the Python version that pipelines are using so that we aren't hit with surprise upgrades. In Python workflows it appears we use the UsePythonVersion task, I imagine this could be added to cxx workflows as well. Maybe these could be standardized to Python 3.9 for now?

:+1: PR #3716. Thanks Tom.

@jhlegarreta Would you please rebase on https://github.com/InsightSoftwareConsortium/ITK@master following #3716?

@jhlegarreta Would you please rebase on https://github.com/InsightSoftwareConsortium/ITK@master following https://github.com/InsightSoftwareConsortium/ITK/pull/3716?

Done.

/azp run ITK.macOS


There is no smooth transition for some cases between very sharp and too smooth solutions

@Sphinxxxx Can you check this one. I am not sure, but maybe this is related to major changes you've made. This assumption based on a fact that I had to add additional point in one of my expected results after your changes.
Here is list of points I've drawn on demo page:
var points = [[492,108],[492,111],[494,113],[496,117],[499,119],[503,122],[506,125],[508,126],[510,126],[512,126],[513,127],[515,127],[518,128],[520,128],[523,128],[525,128],[527,128],[529,128],[530,128],[532,128],[533,128],[533,128],[533,129],[534,129],[535,129],[537,129],[538,129],[539,129],[540,129],[541,130],[541,131],[541,134],[541,137],[542,141],[542,143],[542,145],[542,146],[542,147],[542,148],[543,148],[543,149],[543,150],[544,151],[544,152],[545,153],[546,154],[546,155],[547,155],[547,155],[548,155],[549,155],[550,155],[550,154],[551,154],[552,154],[552,154],[553,154],[554,154],[555,154],[556,154],[557,154],[559,154],[559,155],[560,155],[560,156],[561,156],[562,157],[563,158],[564,158],[564,159],[565,160],[566,160],[567,161],[567,161],[568,161],[568,162],[569,162],[570,163],[571,163],[571,164],[572,164],[573,165]];

Here is photos of this line:

What worries me, is that I can't made it up of just 3 points. It goes from 4 right to 2. I can see how there should be a solution with 3 points, that would lay somewhere in between 4 points and 2 point solutions.
Thoughts?

Hello! I'll take a look at this, maybe tomorrow. Do you have the exact coordinates for the expected 3-point solution (and the error tolerance)?

No, I don't have for this specific case. In this case I am just talking about "feeling" that there should be some solution in between. You can open demo past this:
rawLinesData = [[[492,108],[492,111],[494,113],[496,117],[499,119],[503,122],[506,125],[508,126],[510,126],[512,126],[513,127],[515,127],[518,128],[520,128],[523,128],[525,128],[527,128],[529,128],[530,128],[532,128],[533,128],[533,128],[533,129],[534,129],[535,129],[537,129],[538,129],[539,129],[540,129],[541,130],[541,131],[541,134],[541,137],[542,141],[542,143],[542,145],[542,146],[542,147],[542,148],[543,148],[543,149],[543,150],[544,151],[544,152],[545,153],[546,154],[546,155],[547,155],[547,155],[548,155],[549,155],[550,155],[550,154],[551,154],[552,154],[552,154],[553,154],[554,154],[555,154],[556,154],[557,154],[559,154],[559,155],[560,155],[560,156],[561,156],[562,157],[563,158],[564,158],[564,159],[565,160],[566,160],[567,161],[567,161],[568,161],[568,162],[569,162],[570,163],[571,163],[571,164],[572,164],[573,165]]];

into console and then slide the error slider.
The other case I've mentioned you can find here https://github.com/soswow/fit-curve/commit/172a646986528cc814aa4dea339e907eeadc8523
Expected result was two points, but I had to update it to three points. Not sure if this is related.

I have made this codepen to compare the old version (0.1.1) with the new one (0.1.4):
http://codepen.io/Sphinxxxx/pen/jALxvQ
From what I have tested, the new version overall creates just as smooth curves, using fewer segments than the old version. The main difference in the code is the find_t() method, which helps us estimate the distance from a source point to a curve segment more accurately than before (read the comment in that method).
Now, if you try the codepen with your test data [[0, 0], [10, 10], [10, 0], [20, 0]], the new version actually gives the same 2-segment result as the old version if you set the error slider to 3. But for lower error values, it decides that the first segment isn't close enough to the second point.

Nice. Let's remove my assumption that it were you changes that introduce this. Is there a way to make what I imagined with what we have? Maybe change some internal hyperparameters? Do we have any? Like how many times we want to sample a distance to measure an error? or anything else.

Yeah, that's a really good question. Sure, in some cases it would help if computeMaxError() sampled the error distance with a set of t values that are slightly lower and higher than what it gets from find_t() to find the best match.
However, I don't think that would give us much more "intelligent" fitting, i.e. the curve candidates coming from generateBezier()/newtonRaphsonRootFind(). I don't understand the math that goes on in there, but FWIW I made another codepen which shows all the different curve candidates that are tested along the way:
http://codepen.io/Sphinxxxx/pen/YWYOJK?editors=0010
Flip through the dropdown list of segments to see the progress. The green curve is the current segment candidate. The black arrow marks the source point that is furthest away from that curve, and the green circle marks the corresponding point on the curve (as estimated by computeMaxError())


[JavaScript_Type_Conversions]:

Description
This documentation contains the related information regards type conversion in javascript.
Domain
Frontend Dev HTML/CSS/JS
Type of Contribution
Documentation
Code of Conduct

[X] I follow Contributing Guidelines & Code of conduct of this project.

/assign


Try to add a export function ?

📝 Provide a description of the new feature
For some reason, my windows has crashed lots of times, so I re-install it for few times, but I has to set the key remapping, it's very troublesome. So I want a feature to export whole the configurations.
If you'd like to see this feature implemented, add a 👍 reaction to this post.

@Xionghaizi001
You want to be able to export/import the PowerToys Keyboard Manager configuration. Is it correct?

@Xionghaizi001 all settings or individual utility settings?
This is also tracked inside https://github.com/microsoft/PowerToys/issues/586