Karpenter Consolidation constantly replaces the same node type

Version
0.27.0
Expected Behavior
Some instance replacements perhaps, but certainly not permanently, and not with the same instance types.
Actual Behavior
Replacing the same instance type over and over again.

Steps to Reproduce the Problem
This time this was in a completely new EKS 1.25 cluster. Why this issue occurs, I cannot say, but disabling consolidation in the provisioner stops it.
Resource Specs and Logs
---
apiVersion: karpenter.sh/v1alpha5
kind: Provisioner
metadata:
  name: arm
spec:
  requirements:
  - key: karpenter.sh/capacity-type
    operator: In
    values: ["on-demand","spot"]
  - key: "kubernetes.io/arch"
    operator: In
    values:
    - arm64
  - key: karpenter.k8s.aws/instance-category
    operator: In
    values:
    - c
    - m
    - r
    - t
    - a
  - key: karpenter.k8s.aws/instance-hypervisor
    operator: In
    values: ["nitro"]
  taints:
  - key: arch
    value: arm64
    effect: NoSchedule
  limits:
    resources:
      cpu: 100
  providerRef:
    name: default
  consolidation:
    enabled: true
  ttlSecondsUntilExpired: 604800
  weight: 30
  kubeletConfiguration:
    systemReserved:
      cpu: 250m
      memory: 200Mi
      ephemeral-storage: 1Gi
    kubeReserved:
      cpu: 250m
      memory: 200Mi
      ephemeral-storage: 1Gi
    evictionHard:
      memory.available: 0.2Gi
      nodefs.available: 10%
      nodefs.inodesFree: 10%
    evictionSoft:
      memory.available: 500Mi
      nodefs.available: 15%
      nodefs.inodesFree: 15%
    evictionSoftGracePeriod:
      memory.available: 180s
      nodefs.available: 180s
      nodefs.inodesFree: 180s
    evictionMaxPodGracePeriod: 180
---
apiVersion: karpenter.sh/v1alpha5
kind: Provisioner
metadata:
  name: x86
spec:
  requirements:
  - key: karpenter.sh/capacity-type
    operator: In
    values: ["on-demand","spot"]
  - key: "kubernetes.io/arch"
    operator: In
    values:
    - amd64
  - key: karpenter.k8s.aws/instance-category
    operator: In
    values:
    - c
    - m
    - r
  - key: karpenter.k8s.aws/instance-generation
    operator: Gt
    values:
    - "3"
  - key: karpenter.k8s.aws/instance-hypervisor
    operator: In
    values: ["nitro"]
  limits:
    resources:
      cpu: 100
  providerRef:
    name: default
  consolidation:
    enabled: true
  ttlSecondsUntilExpired: 604800
  weight: 20
  kubeletConfiguration:
    systemReserved:
      cpu: 250m
      memory: 200Mi
      ephemeral-storage: 1Gi
    kubeReserved:
      cpu: 250m
      memory: 200Mi
      ephemeral-storage: 1Gi
    evictionHard:
      memory.available: 0.2Gi
      nodefs.available: 10%
      nodefs.inodesFree: 10%
    evictionSoft:
      memory.available: 500Mi
      nodefs.available: 15%
      nodefs.inodesFree: 15%
    evictionSoftGracePeriod:
      memory.available: 180s
      nodefs.available: 180s
      nodefs.inodesFree: 180s
    evictionMaxPodGracePeriod: 180

Community Note

Please vote on this issue by adding a 👍 reaction to the original issue to help the community and maintainers prioritize this request
Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request
If you are interested in working on this issue or have submitted a pull request, please leave a comment

@tzneal here are some logs:
2023-03-20T13:14:27.887Z	INFO	controller.termination	cordoned node	{"commit": "dc3af1a", "node": "ip-10-102-173-187.ec2.internal"}
2023-03-20T13:14:28.417Z	INFO	controller.termination	deleted node	{"commit": "dc3af1a", "node": "ip-10-102-173-187.ec2.internal"}
2023-03-20T13:14:28.700Z	INFO	controller.termination	deleted node	{"commit": "dc3af1a", "node": "ip-10-102-173-187.ec2.internal"}
2023-03-20T13:16:30.128Z	INFO	controller.provisioner	found provisionable pod(s)	{"commit": "dc3af1a", "pods": 1}
2023-03-20T13:16:30.128Z	INFO	controller.provisioner	computed new node(s) to fit pod(s)	{"commit": "dc3af1a", "nodes": 1, "pods": 1}
2023-03-20T13:16:30.128Z	INFO	controller.provisioner	launching machine with 1 pods requesting {"cpu":"2240m","memory":"9106Mi","pods":"9"} from types r5ad.24xlarge, c5n.2xlarge, r5a.xlarge, m5ad.12xlarge, m5a.4xlarge and 214 other(s)	{"commit": "dc3af1a", "provisioner": "x86"}
2023-03-20T13:16:36.048Z	INFO	controller.provisioner.cloudprovider	launched new instance	{"commit": "dc3af1a", "provisioner": "x86", "id": "i-09d2571131ecef937", "hostname": "ip-10-102-188-226.ec2.internal", "instance-type": "m6id.xlarge", "zone": "us-east-1c", "capacity-type": "spot"}
2023-03-20T13:21:47.141Z	INFO	controller.deprovisioning	deprovisioning via consolidation delete, terminating 1 nodes ip-10-102-188-226.ec2.internal/m6id.xlarge/spot	{"commit": "dc3af1a"}
2023-03-20T13:21:47.157Z	INFO	controller.termination	cordoned node	{"commit": "dc3af1a", "node": "ip-10-102-188-226.ec2.internal"}
2023-03-20T13:21:47.531Z	INFO	controller.termination	deleted node	{"commit": "dc3af1a", "node": "ip-10-102-188-226.ec2.internal"}
2023-03-20T13:21:47.847Z	INFO	controller.termination	deleted node	{"commit": "dc3af1a", "node": "ip-10-102-188-226.ec2.internal"}
2023-03-20T13:23:16.527Z	INFO	controller.provisioner	found provisionable pod(s)	{"commit": "dc3af1a", "pods": 1}
2023-03-20T13:23:16.527Z	INFO	controller.provisioner	computed new node(s) to fit pod(s)	{"commit": "dc3af1a", "nodes": 1, "pods": 1}
2023-03-20T13:23:16.528Z	INFO	controller.provisioner	launching machine with 1 pods requesting {"cpu":"2240m","memory":"9106Mi","pods":"9"} from types m5zn.6xlarge, m5d.xlarge, m5.8xlarge, m5ad.12xlarge, r6i.xlarge and 214 other(s)	{"commit": "dc3af1a", "provisioner": "x86"}
2023-03-20T13:23:23.464Z	INFO	controller.provisioner.cloudprovider	launched new instance	{"commit": "dc3af1a", "provisioner": "x86", "id": "i-0e29e0adfcdcacd4d", "hostname": "ip-10-102-162-206.ec2.internal", "instance-type": "m6id.xlarge", "zone": "us-east-1c", "capacity-type": "spot"}
2023-03-20T13:27:31.242Z	INFO	controller.provisioner	found provisionable pod(s)	{"commit": "dc3af1a", "pods": 1}
2023-03-20T13:27:31.242Z	INFO	controller.provisioner	computed new node(s) to fit pod(s)	{"commit": "dc3af1a", "nodes": 1, "pods": 1}
2023-03-20T13:27:31.329Z	INFO	controller.provisioner	launching machine with 1 pods requesting {"cpu":"2240m","memory":"9106Mi","pods":"9"} from types c6id.8xlarge, m6id.2xlarge, m5a.16xlarge, m5d.8xlarge, r6a.xlarge and 183 other(s)	{"commit": "dc3af1a", "provisioner": "x86"}
2023-03-20T13:27:35.131Z	INFO	controller.provisioner.cloudprovider	launched new instance	{"commit": "dc3af1a", "provisioner": "x86", "id": "i-0ebb187210c0b1f87", "hostname": "ip-10-102-133-245.ec2.internal", "instance-type": "m6id.xlarge", "zone": "us-east-1c", "capacity-type": "spot"}
2023-03-20T13:33:25.829Z	INFO	controller.provisioner	found provisionable pod(s)	{"commit": "dc3af1a", "pods": 1}
2023-03-20T13:33:25.829Z	INFO	controller.provisioner	computed new node(s) to fit pod(s)	{"commit": "dc3af1a", "nodes": 1, "pods": 1}
2023-03-20T13:33:25.829Z	INFO	controller.provisioner	launching machine with 1 pods requesting {"cpu":"2240m","memory":"9106Mi","pods":"9"} from types r6a.2xlarge, m5dn.2xlarge, m6id.2xlarge, r6in.12xlarge, c5n.2xlarge and 183 other(s)	{"commit": "dc3af1a", "provisioner": "x86"}
2023-03-20T13:33:30.628Z	INFO	controller.provisioner.cloudprovider	launched new instance	{"commit": "dc3af1a", "provisioner": "x86", "id": "i-087059e4669d19efe", "hostname": "ip-10-102-185-248.ec2.internal", "instance-type": "m6id.xlarge", "zone": "us-east-1c", "capacity-type": "spot"}
2023-03-20T13:37:45.576Z	INFO	controller.deprovisioning	deprovisioning via consolidation delete, terminating 3 nodes ip-10-102-162-206.ec2.internal/m6id.xlarge/spot, ip-10-102-133-245.ec2.internal/m6id.xlarge/spot, ip-10-102-185-248.ec2.internal/m6id.xlarge/spot	{"commit": "dc3af1a"}
2023-03-20T13:37:45.595Z	INFO	controller.termination	cordoned node	{"commit": "dc3af1a", "node": "ip-10-102-162-206.ec2.internal"}
2023-03-20T13:37:45.605Z	INFO	controller.termination	cordoned node	{"commit": "dc3af1a", "node": "ip-10-102-133-245.ec2.internal"}
2023-03-20T13:37:45.626Z	INFO	controller.termination	cordoned node	{"commit": "dc3af1a", "node": "ip-10-102-185-248.ec2.internal"}
2023-03-20T13:37:46.270Z	INFO	controller.termination	deleted node	{"commit": "dc3af1a", "node": "ip-10-102-185-248.ec2.internal"}
2023-03-20T13:37:46.272Z	INFO	controller.termination	deleted node	{"commit": "dc3af1a", "node": "ip-10-102-133-245.ec2.internal"}
2023-03-20T13:37:46.273Z	INFO	controller.termination	deleted node	{"commit": "dc3af1a", "node": "ip-10-102-162-206.ec2.internal"}
2023-03-20T13:37:46.650Z	INFO	controller.termination	deleted node	{"commit": "dc3af1a", "node": "ip-10-102-133-245.ec2.internal"}
2023-03-20T13:37:46.652Z	INFO	controller.termination	deleted node	{"commit": "dc3af1a", "node": "ip-10-102-185-248.ec2.internal"}
2023-03-20T13:37:46.653Z	INFO	controller.termination	deleted node	{"commit": "dc3af1a", "node": "ip-10-102-162-206.ec2.internal"}
2023-03-20T13:39:41.343Z	INFO	controller.provisioner	found provisionable pod(s)	{"commit": "dc3af1a", "pods": 1}
2023-03-20T13:39:41.343Z	INFO	controller.provisioner	computed new node(s) to fit pod(s)	{"commit": "dc3af1a", "nodes": 1, "pods": 1}
2023-03-20T13:39:41.344Z	INFO	controller.provisioner	launching machine with 1 pods requesting {"cpu":"2240m","memory":"9106Mi","pods":"9"} from types r5a.2xlarge, r5.24xlarge, r6id.2xlarge, m6idn.12xlarge, r6a.2xlarge and 214 other(s)	{"commit": "dc3af1a", "provisioner": "x86"}
2023-03-20T13:39:45.865Z	INFO	controller.provisioner.cloudprovider	launched new instance	{"commit": "dc3af1a", "provisioner": "x86", "id": "i-07343524413ea3a9e", "hostname": "ip-10-102-163-219.ec2.internal", "instance-type": "m6id.xlarge", "zone": "us-east-1c", "capacity-type": "spot"}
2023-03-20T13:44:53.136Z	INFO	controller.provisioner	found provisionable pod(s)	{"commit": "dc3af1a", "pods": 1}
2023-03-20T13:44:53.136Z	INFO	controller.provisioner	computed new node(s) to fit pod(s)	{"commit": "dc3af1a", "nodes": 1, "pods": 1}
2023-03-20T13:44:53.136Z	INFO	controller.provisioner	launching machine with 1 pods requesting {"cpu":"2240m","memory":"9106Mi","pods":"9"} from types r6i.xlarge, r6id.2xlarge, m5a.2xlarge, r6idn.2xlarge, r6a.xlarge and 183 other(s)	{"commit": "dc3af1a", "provisioner": "x86"}
2023-03-20T13:44:56.333Z	INFO	controller.provisioner.cloudprovider	launched new instance	{"commit": "dc3af1a", "provisioner": "x86", "id": "i-0d55b96d331c7665f", "hostname": "ip-10-102-145-255.ec2.internal", "instance-type": "m6id.xlarge", "zone": "us-east-1c", "capacity-type": "spot"}
2023-03-20T13:48:53.037Z	INFO	controller.provisioner	found provisionable pod(s)	{"commit": "dc3af1a", "pods": 1}
2023-03-20T13:48:53.037Z	INFO	controller.provisioner	computed new node(s) to fit pod(s)	{"commit": "dc3af1a", "nodes": 1, "pods": 1}
2023-03-20T13:48:53.037Z	INFO	controller.provisioner	launching machine with 1 pods requesting {"cpu":"2240m","memory":"9106Mi","pods":"9"} from types r6i.xlarge, r6id.2xlarge, m5a.2xlarge, r6idn.2xlarge, r6a.xlarge and 183 other(s)	{"commit": "dc3af1a", "provisioner": "x86"}
2023-03-20T13:48:57.035Z	INFO	controller.provisioner.cloudprovider	launched new instance	{"commit": "dc3af1a", "provisioner": "x86", "id": "i-0502f45d47ef81646", "hostname": "ip-10-102-148-221.ec2.internal", "instance-type": "m6id.xlarge", "zone": "us-east-1c", "capacity-type": "spot"}```

Happened today again. We have deployed a new version of an application (Spryker). Then Karpenter launched a new node to place the new pods there. After few minutes the same node was replaced again. I have observed it several times in the last weeks: seems to happen during a deployment, which starts new replicas.
Unfortunately the fix is to disable the consolidation temporary.
Here the logs:
2023-04-04T18:39:19.341Z	INFO	controller.provisioner	pod spryker/spryker-reward-shop-glue-7bd6497558-wglvh has a preferred TopologySpreadConstraint which can prevent consolidation	{"commit": "dc3af1a"}
2023-04-04T18:39:19.341Z	INFO	controller.provisioner	pod spryker/spryker-reward-shop-yves-758596f78d-9wqjg has a preferred TopologySpreadConstraint which can prevent consolidation	{"commit": "dc3af1a"}
2023-04-04T18:39:22.355Z	INFO	controller.provisioner	found provisionable pod(s)	{"commit": "dc3af1a", "pods": 3}
2023-04-04T18:39:22.355Z	INFO	controller.provisioner	computed new node(s) to fit pod(s)	{"commit": "dc3af1a", "nodes": 1, "pods": 3}
2023-04-04T18:39:22.356Z	INFO	controller.provisioner	launching machine with 3 pods requesting {"cpu":"495m","memory":"1698Mi","pods":"9"} from types c5n.2xlarge, r6i.xlarge, r5a.xlarge, m5d.xlarge, r6id.12xlarge and 201 other(s)	{"commit": "dc3af1a", "provisioner": "x86"}
2023-04-04T18:39:25.547Z	INFO	controller.provisioner.cloudprovider	launched new instance	{"commit": "dc3af1a", "provisioner": "x86", "id": "i-034d539613941a591", "hostname": "ip-10-18-148-58.eu-central-1.compute.internal", "instance-type": "m6i.large", "zone": "eu-central-1c", "capacity-type": "spot"}
2023-04-04T18:42:16.767Z	INFO	controller.deprovisioning	deprovisioning via consolidation delete, terminating 1 nodes ip-10-18-148-58.eu-central-1.compute.internal/m6i.large/spot	{"commit": "dc3af1a"}
2023-04-04T18:42:16.869Z	INFO	controller.termination	cordoned node	{"commit": "dc3af1a", "node": "ip-10-18-148-58.eu-central-1.compute.internal"}
2023-04-04T18:42:20.971Z	INFO	controller.provisioner	pod spryker/spryker-reward-shop-glue-54b676f9c-t76pl has a preferred TopologySpreadConstraint which can prevent consolidation	{"commit": "dc3af1a"}
2023-04-04T18:42:20.971Z	INFO	controller.provisioner	pod spryker/spryker-reward-shop-yves-6dbdcbbbc-dqd67 has a preferred TopologySpreadConstraint which can prevent consolidation	{"commit": "dc3af1a"}
2023-04-04T18:42:20.971Z	INFO	controller.provisioner	pod spryker/spryker-reward-shop-zed-77d775ff49-bz8gx has a preferred TopologySpreadConstraint which can prevent consolidation	{"commit": "dc3af1a"}
2023-04-04T18:42:21.666Z	INFO	controller.provisioner	found provisionable pod(s)	{"commit": "dc3af1a", "pods": 3}
2023-04-04T18:42:21.666Z	INFO	controller.provisioner	computed new node(s) to fit pod(s)	{"commit": "dc3af1a", "nodes": 1, "pods": 3}
2023-04-04T18:42:21.667Z	INFO	controller.provisioner	launching machine with 3 pods requesting {"cpu":"495m","memory":"1698Mi","pods":"9"} from types c5d.large, m5dn.2xlarge, m6id.xlarge, m6a.2xlarge, m5dn.12xlarge and 201 other(s)	{"commit": "dc3af1a", "provisioner": "x86"}
2023-04-04T18:42:24.179Z	INFO	controller.provisioner.cloudprovider	launched new instance	{"commit": "dc3af1a", "provisioner": "x86", "id": "i-00dade32dccd5396a", "hostname": "ip-10-18-149-8.eu-central-1.compute.internal", "instance-type": "m6i.large", "zone": "eu-central-1c", "capacity-type": "spot"}```

deprovisioning via consolidation delete

This bit is odd to me. We seem to think that this node is empty.
	// Deprovisioning action with no replacement machines
	case actionDelete:
		return "delete"

Are you sure the pods are even scheduling correctly? Are you certain your pods aren't terminal with SUCCEEDED or FAILED? Can you describe events for pods and nodes?

deprovisioning via consolidation delete

This bit is odd to me. We seem to think that this node is empty.
	// Deprovisioning action with no replacement machines
	case actionDelete:
		return "delete"

Are you sure the pods are even scheduling correctly? Are you certain your pods aren't terminal with SUCCEEDED or FAILED? Can you describe events for pods and nodes?

Thank you for investigation! I'm sure that the pods have started successfully and were running. Also the same behaviour we have seen in other clusters with other applications. The next time I will copy the events of pods an nodes.

 These can cause a situation where we launch multiple nodes to fulfill your preference, but if one node comes up slightly quicker and has enough capacity, the kube-scheduler will bind more pods to it.  This leaves an empty node that is then removed.

Having these topology spread constraints seems to be best practice, can you implement some solution or slowdown in order to support topology spread constraints? We have also been using them with cluster-autoscaler without any problem.

We do support topology constraints in both forms. There are some interactions with the kube-scheduler where its not aware that a new node is coming online in seconds that would meet the preferred constraint, and schedules it against an existing node that is ready.  If you use a topology spread with a whenUnsatisfiable set to DoNotSchedule, then kube-scheduler won't violate your preference and you should see this less.

Changing it to noschedule will cause big problems in case of an az outage. Our topology spreads ensure that workload are on different nodes and they try to also spread on different azs. In case of an outage we could tolerate that for that moment.

Another person has a very similar issue with only a single pod and no topology spread constraints https://github.com/aws/karpenter/issues/3807. I don't think it can be explained away with that alone. We saw a lot of replacements nodes being the exact same instance type in the same AZ

Can you supply logs that show this?  I looked at the log attached and it appears to have been caused by preferred topology spread and a race with kube-scheduler where it scheduled pods to the first nodes that went ready, leaving an empty un-needed node that was then consolidated.

+1 I'm also experiencing this.

The same node just keeps on getting terminated and then newly initialised

@flashpaper12 Can you supply Karpenter logs and also events for the node (e.g. run kubectl describe node node-name)?

We have similar issue recently, and found out that our pods have node affinity settings to require arm64 node, however, all of new arm64 nodes created by karpenter received the balance recommendation event and were replaced by aws-node-termination-handler. Just removing the node affinity settings didn't really resolve this node creation/termination loop issue because karpenter still kept creating arm64 nodes, we eventually resolve it by deploy cluster-overprovisioner pods for amd64 nodes to ensure there are always available capacity to avoid the spot capacity shortage in specific instance type

@tzneal is it the right place to ask whether you planning to expose more controls over the consolidate logic to the user?
such as:

Weights to each of three mechanisms
Ability to control the timing of the decisions such as in (batchIdleDuration)

It might help this use case, and others, such as dev cluster with dynamic workloads?

Was this supposed to be closed? I believe it is an ongoing issue (I still have consolidation disabled due to the issue)

@autarchprinceps have you still been seeing this happen? It's tough to find the issue since we don't have the way to reproduce this at the moment. We've made some bug fixes to our Consolidation/Deprovisioning logic since v0.27.0, so I think it would be worth the upgrade to the most recent version and let us know if you see it again. If you do, logs as always would be helpful.

@autarchprinceps re-pinging here. Any updates? Do you still see this happening?

Hi @billrayburn I am seeing this issue with karpenter v1.0.0 on EKS. I have a nodepool for AL2 AMI's and karpenter is just deleting the same instance continuously.
Resource specs:
---
# Source: raw/templates/resources.yaml
apiVersion: karpenter.k8s.aws/v1
kind: EC2NodeClass
metadata:
  labels:
    app: raw
    chart: raw-0.2.3
    heritage: Helm
    release: nodepool
  name: al2
spec:
  amiFamily: AL2
  role: <role>
  securityGroupSelectorTerms:
  - tags:
      karpenter.sh/discovery: <>
  subnetSelectorTerms:
  - tags:
      karpenter.sh/discovery: <>
---
# Source: raw/templates/resources.yaml
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  labels:
    app: raw
    chart: raw-0.2.3
    heritage: Helm
    release: nodepool
  name: al2
spec:
  disruption:
    budgets:
    - nodes: 30%
  limits:
    cpu: "350"
    memory: 1316Gi
  template:
    metadata:
      labels:
        errors.ea.com/linux-distro: al2
    spec:
      expireAfter: 720h
      nodeClassRef:
        apiVersion: karpenter.k8s.aws/v1beta1
        kind: EC2NodeClass
        name: al2
      requirements:
      - key: topology.kubernetes.io/zone
        operator: In
        values:
        - us-east-1a
        - us-east-1b
        - us-east-1c
      - key: node.kubernetes.io/instance-type
        operator: In
        values:
        - c5.large
        - c5.xlarge
        - c5.2xlarge
        - c6i.large
        - c6i.xlarge
        - c6i.2xlarge
        - m5.large
        - m5.xlarge
        - m5.2xlarge
        - m6i.large
        - m6i.large
        - m6i.2xlarge
        - r5.large
        - r5.xlarge
        - r6i.large
        - r6i.xlarge
      - key: kubernetes.io/arch
        operator: In
        values:
        - amd64
      - key: kubernetes.io/os
        operator: In
        values:
        - linux
      - key: karpenter.sh/capacity-type
        operator: In
        values:
        - on-demand


[HUDI-4762] Avoid update metastore schema if only missing column in input

Change Logs
Currently when move a hudi table from schema1 to schema2 and then insert data with the old schema1, then schema 2 is kept for the whole table.
This is not consistent with hive metastore which get its schema updated to the old schema1.
Then this PR avoid update the hive schema when only missing columns are in the input data.
This might only work as proposed here when reconcile = true
see https://hudi.apache.org/docs/configurations#hoodiedatasourcewritereconcileschema
Impact
Describe any public API or user-facing feature change or any performance impact.
Risk level: none | low | medium | high
Choose one. If medium or high, explain what verification was done to mitigate the risks.
Contributor's checklist

[ ] Read through contributor's guide
[ ] Change Logs and Impact were stated clearly
[ ] Adequate tests were added if applicable
[ ] CI passed

added jira

Agreed, I will close this
On Thu, 2022-09-15 at 22:47 -0700, Shiyan Xu wrote:

@xushiyan commented on this pull request.

@@ -286,7 +286,11 @@ private boolean syncSchema(String tableName,
boolean tableExists, boolean useRea
           config.getBooleanOrDefault(HIVE_SUPPORT_TIMESTAMP_TYPE));
       if (!schemaDiff.isEmpty()) {
         LOG.info("Schema difference found for " + tableName);
-        syncClient.updateTableSchema(tableName, schema);
+        if (!schemaDiff.getAddColumnTypes().isEmpty() ||
!schemaDiff.getUpdateColumnTypes().isEmpty()) {

we should always keep schema up to date. when later data written with
old schema,
https://hudi.apache.org/docs/configurations#hoodiedatasourcewritereconcileschema
 this config is to adapt the data into the new schema. so i don't
think we should skip update schema


#10 fixed typo in label mean reciprocal rank

vGHC OSD

@piyalibanerj Can you please close and re-open this PR? We have just fixed the issue with our build process, so I want to make sure it's run for this PR as well.

@piyalibanerj Can you please close and re-open this PR? We have just fixed the issue with our build process, so I want to make sure it's run for this PR as well.

@wontonswaggie Done!!

Coverage remained the same at 100.0% when pulling a41d0778d5864fdc5b0533b98ab72b5e9908e0eb on piyalibanerj:piyali/readme into 5f693fc763e4fd55727c6d182427586748f3f510 on intuit:master.


Feature Request: method to select items.

if Input.is_action_just_pressed("inventory_slot1"):
var hotbar_slot = $"../UI/HotbarAndBackpack/InventoryHotbar".get_item_at(Vector2i(0,0))
		if hotbar_slot != null:
			print(hotbar_slot.get_title())

I can press the key (1) on my keyboard to get the title/id of the item in hotbar slot 1, but it doesn't look like there is a method in the docs for programmatically selecting an item (like when you left click with the mouse).
It kind of relates to this https://github.com/peter-kish/gloot/pull/67 . However, I don't really need full blown keyboard or controller support. Just a method where you can select an item would be great (mainly just the visual of it highlighted, I can program the player logic that it is selected), I think it would be a pretty common use case as well.

Yeah, I think having a select_inventory_item(item: InventoryItem) for all CtrlInventory* classes would make a lot of sense and it wouldn't be too hard to implement. Especially since there's already a get_selected_inventory_items() method (could also make it select_inventory_items(items: Array)).

CtrlInventory and CtrlInventoryGrid now have a select_inventory_item(item: InventoryItem) method that selects the given item in the inventory.
deselect_inventory_item() can be used to deselect the currently selected item.
get_selected_inventory_items() has been replaced with get_selected_inventory_item(), as multi-selections are not yet supported.


added append method to add more csv data

What I have right now does not work. I tried chat GPT, it's saying something about the file path

I think this is a valuable experiment to try and better understand the JAR and CSV file process.


[CLOSED] Employment appeal tribunal decisions

 Issue by robmckinnon
Friday 30 October 2015 at 14:03 GMT
Originally opened as https://github.com/alphagov/specialist-publisher/pull/594

Add a finder for employment appeal tribunal decisions. The Employment Appeal Tribunal publishes decisions that describe the outcome of a tribunal case.
Tribunal decision finders are used by public, professionals and the tribunals themselves to search for past decisions.
Published decisions form a part of case law and are used for research purposes and to prepare for current or future cases.
Requires this rummager pull request be merged: alphagov/rummager#539

robmckinnon included the following code: https://github.com/alphagov/specialist-publisher/pull/594/commits

 Comment by robmckinnon
Friday 30 October 2015 at 14:16 GMT

Associated govuk-content-schemas pull request is here: alphagov/govuk-content-schemas#138


Support for Textarea

Hey guys,
is there any support forseen for textarea auto-complete support or should I contribute to the project?
Best Regards,
Stefan

I don't picture this. Could you explain more about it?

I do have a texatarea that can be expanded by the user. This textarea should have the autocomplete ability as well. Now?

Textarea is very different from input (mainly singleline vs multiline), and ng2-auto-complete does not have support for textarea at the moment.
I would suggest that you still can use this ng2-auto-complete as it is for your textarea  to display anywhere within your textarea because it has its own input field and dropdown.
I can picture this.

There are two UI parts for this module.

Ng2AutoCompleteDirective
Ng2AutoCompleteComponent

I have designed this to be used for multiple auto complete, and Ng2AutoCompleteComponent is the core of this. You can forget about Ng2AutoCompleteDirective, and just use Ng2AutoCompleteComponent for your own textarea autocomplete. e.g. Ctrl-Tab to show Ng2AutoCompleteComponent.
I may go too far.
Or, you can create Ng2AutoCompleteTextareaDirective by cloning Ng2AutoCompleteDirective.
The bottom line is, not having textarea support yet.


blurry canvas if deviceScaleFactor > 1

Steps to reproduce
Tell us about your environment:

Puppeteer version: 1.5.0
Platform / OS version: Mac OS X 10.11.6
URLs (if applicable):
Node.js version: 9.4.0

What steps will reproduce the problem?

Go to https://try-puppeteer.appspot.com/. Use the following code:

const browser = await puppeteer.launch();

const page = await browser.newPage();
await page.goto('https://www.google.de/maps/@52.5197103,13.4068538,16.11z');

await page.setViewport({
    width: 800,
    height: 600,
    deviceScaleFactor: 3
});

await page.waitFor(5000);

await page.screenshot({path: 'screenshot.png'});

await browser.close();

Check screenshot and compare it against what you can see while browsing https://openlayersbook.github.io/ch06-styling-vector-layers/example-03.html on a retina display device in a real Chrome.

What is the expected result?
Sharp canvas.
What happens instead?
Blurry canvas.

@iwan-uschka I don't really see any blurriness; however, I didn't quite understand what do I compare it against in your step (2). The link https://openlayersbook.github.io/ch06-styling-vector-layers/example-03.html seems to be completely unrelated to the gmaps screenshot we do in (1).
However, I have one advice that might help: try emulating viewport before navigating page to the url.
const browser = await puppeteer.launch();

const page = await browser.newPage();
await page.setViewport({
    width: 800,
    height: 600,
    deviceScaleFactor: 3
});
await page.goto('https://www.google.de/maps/@52.5197103,13.4068538,16.11z');
await page.waitFor(5000);
await page.screenshot({path: 'screenshot.png'});
await browser.close();

This is important because canvas is usually set up with page dpi in mind, so page queries its DPI right away. Check out this hidpi canvas write-up for details.
Let me know if it helps.

@aslushnikov Thanks a lot. It actually did help to set the viewport before loading the page, even if it's a web application and not a static page and the canvas gets loaded a few steps after opening the page.
Sorry for mixing up the google maps example with the openstreetmaps example.
pre set viewport:

post set viewport:

I am using puppeteer to create app screenshots to use them within store presentations. Screenshots with different pixel ratios needs to be captured (@2x default, @3x for 5.5-Inch Retina).
Right now i open the app, do some JS navigation stuff and capture the view, set the viewport to other specific dimensions and pixel ratio, capture the view again, and again until every viewport has been captured. After that i navigate to the next view and do this routine again.
Doing it this way is not the right way regarding your advice because the page should be reloaded completely after switching viewports. It would take nearly twice the time capturing all views and change the viewport after it than capturing a view with all viewports and change the view after it.
Any ideas how to solve this?

FYI if anyone else ends up here with a related issue, I was going to report that our iframes changed their rendering quality in a recent upgrade of puppeteer, but moving setViewport to before we set the page content fixed the problem.

FYI if anyone else ends up here with a related issue, I was going to report that our iframes changed their rendering quality in a recent upgrade of puppeteer, but moving setViewport to before we set the page content fixed the problem.

@bbugh can this be closed then?

I think it is a bug. It was working fine for us on a previous puppeteer version (1.8.0) with setViewport after setContent, and then we upgraded to a later version (1.13.0) and we had to move it above the setContent. I would never have figured it out if not for your suggestion in this thread (thanks for that!).  Since it was a breaking API change over a minor version, and it's not an intuitive or obvious workaround, I would call it a bug.
As far as a solution, I think one or all of:

a warning if setViewport is called after setting the page content would prevent others from getting tripped up this.
fix it so that it behaves as it did before the breaking change.
add some documentation about the order of operations

a warning if setViewport is called after setting the page content would prevent others from getting tripped up this.

@bbugh Calling setViewport after page load is a totally legit usecase - this way you can simulate orientation changes, size changes and so on.

fix it so that it behaves as it did before the breaking change.

There's no behavior change; calling page.setViewport after page load is a race condition and always was. Check out the explanation in the end of this comment.

add some documentation about the order of operations

Fair enough: https://github.com/GoogleChrome/puppeteer/pull/4319

That looks great to me! We actually got caught on setContent, not goto, but hopefully someone will either find this thread or the documentation if they get stuck. Maybe mention what possible scenarios could cause the issue? (canvas or iframes rendering blurry). Nice. 👍

Just to be clear, if a canvas does not listen for DPI changes, that is a bug in the canvas. This can happen in the real world for example if a window is dragged between two monitors or the zoom is changed (on desktop). So while setting the viewport before the page is loaded might "fix" the problem, it is actually just avoiding a bug in the website.


Countdown Timer in the Mobile site

Increase the width of the countdown timer cards in the mobile version

I've used 80px as the width. How do you exactly want it to be?

I've used 80px as the width. How do you exactly want it to be?

As much as it needs to look visually appealing.


Vehicle Weapon Item sheet Image display issue

Vehicle Weapon images are set to square - they cut off images that are wider than the max width.
Example:

The issue is that max-width is set to 130px on the vehicle weapon item sheets
Please can this be increased to match weapon item sheets, to be max-width: 500px

Done, will be released in 1.902. Thanks for the report!


7.31.3 keeps making new releases

The problem
We noticed today that our CICD generated 10+ new releases

After looking into it we've discovered that the problem is the newest version of SR itself. The current version of SR (7.31.3) keeps making new releases even if we don't push any new commits. Just running it on the clean master branch causes it to make a new release.
❯ pip list | grep python-semantic-release
python-semantic-release 7.31.3

❯ semantic-release publish --noop
Current version: 14.0.0, Current release version: 14.0.0
warning: No operation mode. Should have bumped from 14.0.0 to 15.0.0

The previous version (7.31.2) works as expected
❯ pip list | grep python-semantic-release
python-semantic-release 7.31.2

❯ semantic-release publish --noop
Current version: 14.0.0, Current release version: 14.0.0
No release will be made.

A clear and concise description of what the bug is.
Expected behavior
If I run semantic release without changing any of the code in master then I won't get a release. But the actual behavior is we do get a release. This is not the case for previous versions of SR.
 Should have bumped from 14.0.0 to 15.0.0

@zjgoodman can you post your configuration please? Are the commits in your screenshot the full messages that you're releasing with, or is there more to them that isn't shown (like a message body)?
I suspect https://github.com/relekang/python-semantic-release/blob/aad17b0bdaac088b7538d3d3e04622c15ab31e60/semantic_release/vcs_helpers.py#L40 is not producing the same message as your configuration does when PSR commits on a release, so it "thinks" it hasn't found a commit releasing this version. Combined with going back over the history, probably finding your last major release (v2?), taking that as max level bump and bumping major version.
Are you running this in a CI on a cron trigger?

Hi thanks for looking into this!

Are the commits in your screenshot the full messages that you're releasing with, or is there more to them that isn't shown (like a message body)?

The commits do have a body but it's just the default SR body, as shown below.

can you post your configuration please?

Below is the config for SR that I have in my pyproject.toml file.
[tool.semantic_release]
version_variable = [
    "src/myproject/__init__.py:__version__",
    "pyproject.toml:version"
]
branch = "master"
build_command = "poetry build"
prerelease_tag = "dev"
tag_commit = false
hvcs = "gitlab"
ignore_token_for_push = false
upload_to_repository = true
repository_name = "artifactory"
repository_url = "https://myartifactory.com"
upload_to_release = false

Are you running this in a CI on a cron trigger?

No this CI pipeline is triggered by commits.  So what you're seeing with all these commits is that semantic release is running and determining that a new release should be made, then commits the release, which triggers a new pipeline, which runs semantic release and then the cycle repeats. On previous versions of semantic release, it determines that there's no need to make a new release and so it doesn't commit, so another pipeline doesn't get triggered.

@zjgoodman - not sure if the tag worked properly - the issue was that trailing newlines in git commit history were breaking a stricter comparison introduced in https://github.com/relekang/python-semantic-release/pull/488. I've been able to fix this in a test repo - have replicated with your config etc

@bernardcooke53 I can confirm that the fix in 7.31.4 worked and the problem is resolved. Thanks for taking care of this
7.31.3
Not working (as reported in this bug)
debug: Commits found since last release: 22
debug: evaluate_version_bump -> minor
debug: get_new_version('14.3.0', '14.3.0', 'minor', False, True)
debug: get_new_version -> 14.4.0
debug: get_repository_owner_and_name()
debug: get_repository_owner_and_name -> ('myorg/myteam', 'myproject')
debug: Running publish on branch master
debug: checkout(master)
debug: checkout -> Branch 'master' set up to track remote branch 'master' from 'origin'.
warning: No operation mode. Should have bumped from 14.3.0 to 14.4.0

7.31.4
Working as expected
debug: Commits found since last release: 0
debug: get_new_version('14.3.0', '14.3.0', None, False, True)
debug: get_new_version -> 14.3.0
debug: get_repository_owner_and_name()
debug: get_repository_owner_and_name -> ('myorg/myteam', 'myproject')
debug: Running publish on branch master
debug: checkout(master)
debug: checkout -> Branch 'master' set up to track remote branch 'master' from 'origin'.
No release will be made.


Call inspect on the time that couldn't be parsed

This commit makes the error message clearer when parsing fails due to a trailing
space in a string with cron syntax.
Fixes #726

Removed the comment in the README


classToClass was renamed to instanceToInstance

https://github.com/typestack/class-transformer/issues/1005
On >=0.4.1 class-transformer had some problems with releases, removed some methods, ... Pinning on 0.4.0 solves the problem.

@techvlad
Could you make a fix?


Request OwnCloud instance - 4-letter domain

The issue was reported earlier, don't see it in the test_feedback, but the issue is still not resolved.
The email validation doesn't work with the email addresses ending in domain with more than 3-letters

duplicate https://github.com/threefoldtech/owncloud_deployer/issues/26


vscodium: <IP_ADDRESS>55 -> <IP_ADDRESS>10

Automatic update generated by nixpkgs-update tools. This update was made based on information from passthru.updateScript.
meta.description for vscodium is: Open source source code editor developed by Microsoft for Windows,
Linux and macOS (VS Code without MS branding/telemetry/licensing)
meta.homepage for vscodium is: https://github.com/VSCodium/vscodium
Updates performed

Ran passthru.UpdateScript

To inspect upstream changes

Release on GitHub

Compare changes on GitHub

Impact

Checks done (click to expand)

built on NixOS
The tests defined in passthru.tests, if any, passed
found <IP_ADDRESS>07 with grep in /nix/store/p0xdynrh63wzjzsgg83b4dwm6ff1n5g4-vscodium-<IP_ADDRESS>07
found <IP_ADDRESS>07 in filename of file in /nix/store/p0xdynrh63wzjzsgg83b4dwm6ff1n5g4-vscodium-<IP_ADDRESS>07

Rebuild report (if merged into master) (click to expand)

2 total rebuild path(s)

2 package rebuild(s)

First fifty rebuilds by attrpath
vscodium
vscodium-fhs

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/p0xdynrh63wzjzsgg83b4dwm6ff1n5g4-vscodium-<IP_ADDRESS>07 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A vscodium https://github.com/r-ryantm/nixpkgs/archive/7cb12bb32e80c99bf116945bf6629906107eb59d.tar.gz

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/p0xdynrh63wzjzsgg83b4dwm6ff1n5g4-vscodium-<IP_ADDRESS>07
ls -la /nix/store/p0xdynrh63wzjzsgg83b4dwm6ff1n5g4-vscodium-<IP_ADDRESS>07/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

2 packages built:

vscodium
vscodium-fhs

Maintainer pings
cc @Synthetica9 @turion @bobby285271 for testing.

@ofborg test vscodium

Automatic update generated by nixpkgs-update tools. This update was made based on information from passthru.updateScript.
meta.description for vscodium is: Open source source code editor developed by Microsoft for Windows,
Linux and macOS (VS Code without MS branding/telemetry/licensing)
meta.homepage for vscodium is: https://github.com/VSCodium/vscodium
Updates performed

Ran passthru.UpdateScript

To inspect upstream changes

Release on GitHub

Compare changes on GitHub

Impact

Checks done (click to expand)

built on NixOS
The tests defined in passthru.tests, if any, passed
found <IP_ADDRESS>10 with grep in /nix/store/sk7jgf48rwda427gr5473igzx2nixk7y-vscodium-<IP_ADDRESS>10
found <IP_ADDRESS>10 in filename of file in /nix/store/sk7jgf48rwda427gr5473igzx2nixk7y-vscodium-<IP_ADDRESS>10

Rebuild report (if merged into master) (click to expand)

2 total rebuild path(s)

2 package rebuild(s)

First fifty rebuilds by attrpath
vscodium
vscodium-fhs

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/sk7jgf48rwda427gr5473igzx2nixk7y-vscodium-<IP_ADDRESS>10 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A vscodium https://github.com/r-ryantm/nixpkgs/archive/02040d7d7432bbdf26287c1397b7fe2d64ba3bff.tar.gz

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/sk7jgf48rwda427gr5473igzx2nixk7y-vscodium-<IP_ADDRESS>10
ls -la /nix/store/sk7jgf48rwda427gr5473igzx2nixk7y-vscodium-<IP_ADDRESS>10/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

2 packages built:

vscodium
vscodium-fhs

Maintainer pings
cc @Synthetica9 @turion @bobby285271 for testing.


Fix #199 - Remove helper vectors from transformers

This PR fixes #199 by removing the helper vectors (e.g. pca_0, pca_1) from transformers.

TODOs:

[X] Remove helper vectors from transformers implementation (Pca, Umap, Ivis, Tsne and OpenTsne).
[X] Remove usage of helper vectors from documentation (in "readme.md" file, instead update the axis labels to be compatible with the existing image file).
[X] Update interactive charts json data to reflect the label changes, and also remove helper vectors datapoints.

Backwards incompatible changes:

Helper vectors have been removed from transformers and therefore any access to them after transformations would raise an error. This also applies to their usage in plot methods, e.g. embset.transform(Pca(2)).plot_interactive('pca_0', 'pca_1') would raise an error.

Thanks for submitting a pull request 🚀 @JustinaPetr will take a look at it as soon as possible ✨


fix: Updates for comments missed in previous isEntry PR

Addressing comments from https://github.com/microsoft/ConversationLearner-UI/pull/1321

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

npm package (@next dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Failing conformance tests for Ingress header match #8097

The new feature and the conformance tests "tag header based routing" is introduced by:
https://github.com/knative/serving/issues/8097
https://github.com/knative/serving/pull/8391
And the test is failing on net-kourier.
https://testgrid.knative.dev/serving#kourier-stable&include-filter-by-regex=headers/tags

/cc @davidor @jmprusi

/assign @jmprusi


Rewrite GroundItemsPlugin

Use caching for getting the data of each ground item
Use collectors for reducing items to sum prices and quantities
Add wilcard matching support
Use cache for wildcard matching results

Fixes: #658
Signed-off-by: Tomas Slusny<EMAIL_ADDRESS>Preview of the wildcards:

Updated OP with screenshots of the wildcards (i have GE prices disabled to fit on screenie, but they work)


Inefficiencies in data availability proofs

There are three major sources of inefficiency in the current construction for data availability proofs:

The structure demands a 2^k * 2^k square, so data needs to be padded to the next power of 4. This may on average double the amount of data that needs to be erasure-coded and stored by the network.
Due to EIP 1559 implementation, on average a block will be ~half full, requiring further zero-padding within the space allocated for each block.
The space allocated for each block is 2x the size of the block data itself; the remaining half is allocated for the block header and witnesses for state reads.

Possible ideas to improve efficiency:

Adjust EIP 1559 so that blocks are on average eg. 80% full. This will however nullify a large part of the benefit of EIP 1559, as blocks will much more frequently be full and so the first price auction mode will more frequently dominate.
Adjust the crosslink structure so that while there is a static per-epoch limit, individual blocks can take up different amounts of space. Allows EIP 1559 to keep functioning as long as the gasprice does not need more than ~half an epoch to adjust.
Adjust the crosslink structure so that it stores the concatenation of all block structures in SSZ format as dynamic-sized lists (so any extra zero bytes are not included, positions of individual blocks are variable, and the indices of each block appear at the left end of the tree structure). The main disadvantage is the need to do two Merkle tree accesses instead of one to access a shard block.
Be liberal with the witnesses for state reads allowed in the block (eg. allow an unlimited number of "top-level transactions") so more of the non-block-data space is used.
Somehow modify the erasure coding mechanism to be able to process large contiguous zero bytes trivially or at least more efficiently. This is ideal if possible, but not sure how to actually do this.
Remove the 2^k * 2^k requirement and replace it with an arbitary n * n (not sure this is actually an efficiency improvement; FFTs are easiest to use when handling exact powers of two)
Allow 2^k * 2^(k-1) rectangles.

This is still in "think mode"; better ideas may come up. So far (3) seems least bad, plus possibly (7). The issues are far from fatal, but hopefully there are easy ways to remove at least some of the current theoretical ~8x inefficiency.

Very interesting problem. I would love to think about these. How final are these ideas? Could there be other schemes out there and would we be willing to consider them at this point?
One question about https://arxiv.org/pdf/1809.09044.pdf (is this a good reference?), section 7.1: I am currently thinking about polynomial and functional commitment schemes. Is it possible that such a scheme could be used, rather than a full zk-SNARK (which is currently prohibitively expensive)?
I am currently looking at some polynomial commitment schemes that could potentially replace the proof of custody with a non-interactive version. They aren't quite ready for prime time yet (still some problems with efficiency and outsourcability), but I'm planning to post my thoughts to get some more outside thoughts about it.

In terms of how much is final and how much can be changed, I'd say there's good arguments for the use of erasure coding and commitment to erasure coded data in some form being optimal:

In a sharded system there's less replication of each piece of data and hence more reason to pay attention to making sure to maximize the chance of survival of each piece of data. Erasure coding strictly outperforms simple replication as a way of doing this for any specific redundancy factor.
If erasure-coded extension of block data is done anyway, then the marginal cost to commit to it and let people make data availability queries is low.

As far as choice of scheme goes, I think biggest pragmatic reason to stick to hash-based things in this case, aside from simplicity of implementation, future-proofness and all the other usual reasons, is that erasure codes and Merkle trees are really fast to generate (eg. I can do it within an epoch for 512 MB of data in python) but I don't see any more complicated scheme having the same property (as precedent, think of how the proving time for STARKs is 10x faster than for SNARKs). Additionally purely hash-based schemes can work over binary fields and one reason binary fields are especially nice is that they can represent 32-byte chunks with no overhead, whereas any finite field runs the risk that even if a block is entirely composed of values < 2**256, the extended chunks will not be (the same goes for any byte size less than 32).
Though it does seem to me like polynomial commitment schemes are a superior alternative to SNARKs over Merkle trees; they're more "direct", rather than one construction wrapping over a completely foreign one and hence incurring arithmetization inefficiencies. And the assumptions in polynomial commitment schemes are definitely milder than the assumptions in SNARKs.
Block layout in commitment data is still very flexible, and my intuition is that whatever efficiencies remain would remain the same regardless of the scheme used.

Idea from a conversation with Justin yesterday: if there are large segments of contiguous zero bytes, fill them with any of:

Portions of beacon chain state
Portions of shard state
Recent blocks of other shards (to incentivize more availability of that data)

All of these objects are larger than 64kb, so we can either randomly choose indices from where to include data each time, or store indices and try to cycle through the data.
I actually like this. There's definitely something unclean about "grab as many bytes of this thing as possible", but it allows us to preserve the existing (quite clean!) structure of the crosslink data.

@vbuterin @dankrad Can we close this issue for staleness? (Trying to address old Github issue, and data availability research has progressed significantly since June 2019.)

I'd say it can be closed. I would say the data availability proof now will
mostly follow from whatever we use for shard data commitments.
On Tue, 21 Apr 2020 at 13:38, Justin<EMAIL_ADDRESS>wrote:

@vbuterin https://github.com/vbuterin @dankrad
https://github.com/dankrad Can we close this issue for staleness?
(Trying to address old Github issue, and data availability research has
progressed significantly since June 2019.)
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/ethereum/eth2.0-specs/issues/1194#issuecomment-617153307,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABOYXL56QI2SPZCOFUN74K3RNWHWHANCNFSM4HZE7KNQ
.

--
Dr. Dankrad FeistResearcher at Ethereum Foundation
<EMAIL_ADDRESS>+44<PHONE_NUMBER>


$split suppresses trailing empty strings in result

While validating #29, found that this is also not working as expected:
$split("thisXXisXaXtestXXX", "X")
Output:
["this","","is","a","test"]
Expected:
["this","","is","a","test","","",""]
Java impl suppresses the 3 trailing empty strings.

Special cases to consider:
$split("characters", "")
and
$split("", "")


JSON code has no effect (the call fails?)

Challenge Get JSON with the jQuery getJSON Method has an issue.
User Agent is: Mozilla/5.0 (Windows NT 6.1; rv:47.0) Gecko/20100101 Firefox/47.0.
Please describe how to reproduce this issue, and include links to screenshots if possible.
Clicking the "Get message" button does nothing (the message doesn't change).
The button's onclick event is working, e.g this does execute:
 $(".message").html('Hi!');
But the json code isn't, as if the call were not succeeding.
I can pass the challenge (ctrl+enter runs and accepts it), but if I then move on to the next challenge (Convert JSON Data to HTML), the same thing happens - the json code produces no efffect at all.
Same results with Firefox 47 and Chrome 56.
My code:

Cat Photo Finder

      The message will go here

      <button id = "getMessage" class = "btn btn-primary">
        Get Message
      </button>

@marekjedlinski this is not a github issue. If you have questions regarding completing a challenge please ask in: https://gitter.im/FreeCodeCamp/Help
Anyways, your issue is you have spaces between the keywords 'class' & 'id' and then the '=' sign and then the appropriate string.

Thank you for reporting this issue.
This is a standard message notifying you that this issue seems to be a request for help. Instead of asking for help here, please click the "Help" button on the challenge on freeCodeCamp, which will take you to the help chatroom for that specific challenge. You can also view our full list of official chatrooms.
If you think I'm wrong in closing this issue, please reopen it and add further clarification. Thank you, and happy coding.

@Ethan-Arrowood The spaces around the equal sign are placed there by FCC. They may be ugly, and I do not use them myself, but they are not invalid:

xhtml 1.0 strict: http://www.tranglos.com/files/validatethis.html
html 4.01 strict: http://www.tranglos.com/files/validatethis401.html

Anyway, to clarify: the task provides a code snippet to be pasted. As-is, the code does not work (clicking the button has no effect). But, when you run the test, it checks out and the task is accepted. These two things contradict each other. If the code doesn't work in the "preview phone" app, then the tests should  fail., too. It seems that either the preview app is wrong, or the tests are wrong.
(@texas2010 No, I am not asking for help with my code. I am pointing out an inconsistency between the validation tests - which succeed - and the preview app, which fails).


Correction for raw affiliation Centre for Functional and Metabolic Mapping (CFMM), Robarts Research Institute, Western University, London, Ontario, Canada

Correction needed for raw affiliation Centre for Functional and Metabolic Mapping (CFMM), Robarts Research Institute, Western University, London, Ontario, Canada
raw_affiliation_name: Centre for Functional and Metabolic Mapping (CFMM), Robarts Research Institute, Western University, London, Ontario, Canada
new_rors: ;02grkyz14
previous_rors: 01e36dv41;02grkyz14
works_examples: W4363645571;W4323076722
contact: 9ba9390b23c03650ffc906e912ecd82c:aa0278f3dd7ffea7 @ uwo.ca

This issue was accepted and ingested by the OpenAlex team on 2024-12-19. The new affiliations should be visible within the next 7 days.


Guard against #878 looks like UI is submitting incorrect versions

[x] Check that you pass the basic style checks and unit tests by running mvn clean install

Coverage increased (+0.01%) to 71.731% when pulling 2f61c60df5377ac753e9e10d534a95b63dc274c1 on feature/version_guard into fe270fb5920a842981de8360531ecf4e2ca19d32 on develop.

Coverage increased (+0.05%) to 71.768% when pulling 2f61c60df5377ac753e9e10d534a95b63dc274c1 on feature/version_guard into fe270fb5920a842981de8360531ecf4e2ca19d32 on develop.

Coverage increased (+0.2%) to 71.904% when pulling 2434dbd4b3362d2b6344944214d73d09a8bff7c4 on feature/version_guard into fe270fb5920a842981de8360531ecf4e2ca19d32 on develop.


Cosmos app v1.6.0

Workaround for Windows May update (reduces latency by caching pubkeys)
GetVersion returns targetID (allows Lunie to behave differently depending on the device type)
Removes secp256k1 from the review screen

temporarily closing


fix: append Model to local model imports

In the case where a model shared the name with a prop the generated code would be invalid. Solve this issue by appending Model to model import names.
This is only really the first step to a full solution. The customer could still create a prop that is named something like UserModel and there would be a name collision. Long term we need to devise a way to prevent name collisions in generated components.

Codecov Report

Merging #320 (322ad25) into develop (0c257ac) will increase coverage by 0.05%.
The diff coverage is 100.00%.

@@             Coverage Diff             @@
##           develop     #320      +/-   ##
===========================================
+ Coverage    89.66%   89.72%   +0.05%
===========================================
  Files           36       36
  Lines         1248     1255       +7
  Branches       279      282       +3
===========================================
+ Hits          1119     1126       +7
  Misses         126      126
  Partials         3        3

Impacted Files
Coverage Δ

.../codegen-ui-react/lib/imports/import-collection.ts
100.00% <100.00%> (ø)

...egen-ui-react/lib/react-component-render-helper.ts
75.96% <100.00%> (+0.20%)
:arrow_up:

...gen-ui-react/lib/react-studio-template-renderer.ts
91.15% <100.00%> (ø)

Continue to review full report at Codecov.

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

This change could introduce a regression to customers who are already using the 'Model' naming scheme. I think since we have a mitigation in the UI to keep users from entering a colliding name today, we should try and search for a longer-term solution rather than go w/ the bandaid in this case.
Off the top of my head, I think we could look into creating a top-level declaration manager, similar to our imports which gives consistent priority and renames where necessary.

I'm not following the regression case. If they are already using UserModel it would import as UserModelModel. It would look a little strange but would be functional. But if we are happy with the current mitigation for now I'll go ahead and close this PR.

If I name my model PostModel it'll be renamed as PostModelModel, but if I bind a Post to the prop named PostModel it'll still collide I think (if I'm reading your comment correctly, and thinking about this reasonably). Screenshot of the case is attached.


Update wi-fi extension

Description
Users would have a better experience if the connected Wi-Fi is displayed at the top of the Wi-Fi list.
Benefits
Users will know that they are already connected to a specific Wi-Fi network, eliminating the need to scroll through the list to check.
Screencas

Checklist

[x] I read the extension guidelines
[x] I read the documentation about publishing
[x] I ran npm run build and tested this distribution build in Raycast
[x] I checked that files in the assets folder are used by the extension itself
[x] I checked that assets used by the README are placed outside of the metadata folder

Thanks for your contribution @louishuyng 🔥
Do you mind checking this @koinzhang

Great job louis!

Sure @koinzhang it has been updated 👍

One last thing I forgot to mention, do you mind adding the changelog entry @louishuyng

Sure @pernielsentikaer 👍 i just update it

Thanks @louishuyng 🔥


DBAL Query Builder

Thank you for your work!
Please make an adapter to possible use createQueryBuilder() from Doctrine\DBAL\Connection, not only from ORM.

@Evgeny1973 Sorry, we don't have any plans to do this at the moment. Please implement it and send us a pull request.

Unfortunately, I'm not a cool programmer like you and I won't be able to write such a component.

@Evgeny1973 Got it. No problem. We cannot do this right now, but we'll leave this issue as a task to tackle in the future. I hope you'll be patient.


lack of definition of CONTENT_WEIGHT, STYLE_WEIGHT(in style_transfer_sols.py), prev_layer_name (in vgg_model_sols.py)

HI, Tks for the post, very helpful.
As title, I found several variable undefined,
for prev_layer_name, I think, it should be prev_name.name, however ':' is not accepted as scope name. So I changed ':' to '_', and it works
For CONTENT_WEIGHT and STYLE_WEIGHT, how to define it ?
(of course, omitted the weight could let the program keep running)
Tks
Larry

you're right. i've added content_weight and style_weight. you don't need prev_layer_name


Issues when using platformIO

I just found this library and it suits my need.  Thanks!  I'm using platformio as my environment. It's really neat and way better than the arduino IDE.  There are some issues with this library, however..

There is no "max" defined.

void TelnetSpy::setMinBlockSize(uint16_t minSize) {
  minBlockSize = max(1, minSize);
}

So I had to include this in the code
#undef max
#define max(a,b) ((a)>(b)?(a):(b))

There is no RingBuf.h
You might want to update the readme to include something about which library is needed to be included.  I used
url=https://github.com/wizard97/ArduinoRingBuffer
And it seems to work.

in the example code and in the readme you have in the master branch you have:

This function installs a callback function which will be called on every telnet connect of this object (except rejected connect tries). Use NULL to remove the callback.
Default: NULL

void setCallbackOnConnect(void (*callback)());
and it's not there in the 1.1 tag.  Maybe add something to the master branch readme to have it mention to use the 1.1 readme and example.

All of these problems are related to the fact that PlatformIO only has the latest tagged version of the code, namely v1.1, which is from Oct 23, 2017!!! Max was resolved, no more external RingBuffer dependency, and documentation is correct for the version it relates to (Master branch is NOT v1.1!).
There are issues with the library post the last update to this library (related to changes from Sep 28, 2019 in the putc1 function in the ESP8266 Arduino core), which is why forks like strandaster/telnetspy exist. Best way to use these in PlatformIO now is to use the master branch as is, or tie it to a specific commit if you want to version lock it.
i.e. lib_deps = strandaster/telnetspy or lib_deps = strandaster/telnetspy#33b39d in your projects platformio.ini

With version 1.4 all problems should be gone.


RemoteDebug_Advanced example, little error

processCmdRemoteDebug doest work properly, in line 288
if (Debug.getLastCommand() = "bench1") {
should be "==" instead of "="?
also Debug.ative, ative is typo with active?
The library is amazing! Thank you

@grzegorzshub well spotted. Does anyone know how to disable Debug once it's been enabled with Debug.begin()?

HI,
Sorry for the delay. I dont see the gmail messages.
grzegorzshub:
Bug fixed, Thanks a lot
pieman64:
You can use stop() method.
Regards
Joao


Provide a way to disable the logging from the AHRS class

Provide a way for users to disable/enable the logging of things like SPI CRC Errors when disconnected.  Alternatively, only output SPI CRC Errors until the point when a "no longer disconnected" condition is detected, and only begin again logging of these errors when a "connected" condition is again detected.

This feature added, available in version 3.0.327.


Tags are not signed

Release tags are not signed. To verify integrity, sign every tag that is used for a release

fixed


add info about actionrunner, processor to manual and v from proper documentation

how it works
which objects to use, what goes on queue, how does it work
link to v docs where relevant

v docu is on https://freeflowuniverse.github.io/baobab/v/
its the branch development_calc which is used now

I'm going to add a yaml file that will push the documenation. It will only push on commits to development.


Custom registrars domain availability check.

I would like to add a custom method for checking if a domain is available when using a custom registrar. Am I correct in thinking that I need to do this in /bb-library/Registrar/Adaptor/Custom.php?

Yes, you can surely use /bb-library/Registrar/Adaptor/Custom.php but I will suggest you to create a copy of Custom.php and rename it as your registrar name as Enom.php for Enom.

Great. Thanks!


Recursive attr.evolve

In the same manner as attr.asdict(..., recursive=True) exists, I have a use case for a similar option to attr.evolve(). I want all attr instances evolved, but with no need to deepcopy any non-attr attributes. I ended up implementing the code below. Could this be a consideration for addition into python-attrs?
def evolve_recursive(inst, **changes):
    """ Recursive attr.evolve() method, where any attr-based attributes
        will be evolved too.
    """
    cls = inst.__class__
    attrs = attr.fields(cls)
    for a in attrs:
        if not a.init:
            continue
        attr_name = a.name  # To deal with private attributes.
        init_name = attr_name if attr_name[0] != "_" else attr_name[1:]
        if init_name not in changes:
            value = getattr(inst, attr_name)

            # New code
            if attr.has(value.__class__):
                value = evolve_recursive(value)

            changes[init_name] = value
    return cls(**changes)

Sorry for the late answer. Would you mind showing/elaborating some use cases for this?

I’ve had a similar issue in typed settings when I want to updated nested settings and fixed it by serializing instances to dicts, calling a _set_path function and later converting the dicts back to attrs instances (which only works when using (auto) converters, though).

We have a volunteer! ✨

Wat? 👀

attr.evolve() can be adjusted relatively easy to work recursively:
diff --git a/src/attr/_funcs.py b/src/attr/_funcs.py
index 56e3fcf..1cac98e 100644
--- a/src/attr/_funcs.py
+++ b/src/attr/_funcs.py
@@ -333,8 +333,13 @@ def evolve(inst, **changes):
             continue
         attr_name = a.name  # To deal with private attributes.
         init_name = attr_name if attr_name[0] != "_" else attr_name[1:]
+        value = getattr(inst, attr_name)
         if init_name not in changes:
-            changes[init_name] = getattr(inst, attr_name)
+            # Add original value to changes
+            changes[init_name] = value
+        elif has(value):
+            # Evolve nested attrs classes
+            changes[init_name] = evolve_recursive(value, **changes[init_name])

     return cls(**changes)

I’m not sure whether this is a backwards incompatible change or rather a bug fix that prevents nested classes from being replaced by a dict. 🤷♂

@hynek What are your requirements regarding the public API?
Do you prefer a new function or would you rather update the behavior of the existing one as in the diff above?

I think if you can do it backward compatible, there's no need for a new function?

I guess, it’ll be mostly backward compatible.  *mostly, because handling of nested dicts will be different if they map to attributes with attrs classes. ;-)
But the above changes did not break any of the existing tests.
I’ll do a PR once I figure out how to proberly use hypothesis and nested classes for the tests.

Unfortunately we had to revert the changes due to #804. I think we'll have to write a new function to make stuff unequivocal.
Sorry everyone! :(


Fix arrown navigation in dropdown with input

Fixes #36598
Apparently due to https://github.com/twbs/bootstrap/commit/bb7664db0aea2dddbc637992d2d0e78632dc2e68 I tried to reintegrate the previous behavior for input/textarea. If it was removed on purpose in this commit, please close this PR and the corresponding issue.
Live preview
For non-regression testing
Manual test

  <input id="search" class="form-control dropdown-toggle" type="text"
  placeholder="Search..."
  data-bs-toggle="dropdown"
  aria-expanded="false" aria-label="Search...">

Item 1

Item 2

Item 3

Item 4

Item 5

And then press UP/DOWN key when the input is focused.

@julien-deramond did we have any given example with this markup?
I am trying to figure it out, as this kind of markup doesn't seem so much valid to my eyes :fearful:

Closing it based on https://github.com/twbs/bootstrap/issues/36598#issuecomment-1173052036


perl: fix modules for compatibility with miniperl

Description of changes
When perl modules are cross-compiled, miniperl is used which do not allow dynamic loading.
This PR adds compatibitly for miniperl to following modules:

CPAN::Meta
JSON::PP
Data::Dumper

Additionally, this PR fixes #66741, the cross compilation for Perl module ModuleBuild. Following command will succeed:
nix-build -A pkgsCross.aarch64-multiplatform.perlPackages.ModuleBuild

Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
23.05 Release Notes (or backporting 22.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

I can help test this on aarch64. What commands should I run?

I rebased over mastet on my nixpkgs fork: https://github.com/G3zz/nixpkgs/commit/f5c7e6e55860a9d43d9d7eb8896e867122205bf4

The compilation of ModuleBuild give confidence for the patch. Thanks for your offer, but I do not know what else could be tested.

Hi there!
I think this looks like an interesting fix to issues with cross build. Planning on looking at this when perl-5.38.0 drops next week. The patches might need some work for 5.38.0 though.

I tried it on recent nixos-23.05 branch (with minimal required change -- one file renamed), it works and even allow me to build nix-build -A pkgsCross.aarch64-multiplatform.xdg-utils

Thanks for testing. I updated this PR to the latest version of branch statging.

I've included these commits, and updated them for perl-5.38.0 in:

https://github.com/NixOS/nixpkgs/pull/241848

Great, thanks. I will close this PR.

* [[staging] perl: 5.36.0 -> 5.38.0 #241848](https://github.com/NixOS/nixpkgs/pull/241848)

This has now been merged into staging, if anyone would like to test cross-builds


How to bypass batching/caching ?

Hi!
I would like to bypass dataloader-sequelize loaders as a workaround for #39
I tried omitting {[EXPECTED_OPTIONS_KEY]: context} option but I found out that requests are batched anyway.
Here is the code (https://github.com/ArnaudD/test-dataloader/blob/master/index.js) :
User.findByPk(1, {[EXPECTED_OPTIONS_KEY]: context}),
User.findByPk(2, {[EXPECTED_OPTIONS_KEY]: context}),
User.findByPk(3), // dataloader should be batching this ?
User.findByPk(4), // dataloader should be batching this ?

I am expecting to see these requests in the logs :
SELECT `id`, ... FROM `users` AS `user` WHERE `user`.`id` IN (1, 2);
SELECT `id`, ... FROM `users` AS `user` WHERE `user`.`id` = 3;
SELECT `id`, ... FROM `users` AS `user` WHERE `user`.`id` = 4;

but instead I got this :
SELECT `id`, ... FROM `users` AS `user` WHERE `user`.`id` IN (1, 2);
SELECT `id`, ... FROM `users` AS `user` WHERE `user`.`id` IN (3, 4);

Is it a bug or a feature ?
Thanks for your help !

It's not really either, the example without EXPECTED_OPTIONS_KEY works because that was how it worked in legacy (without caching).
We should be able to remove the legacy code and publish a major to solve this issue though.

Thanks for your quick response :)
Something like this ? https://github.com/mickhansen/dataloader-sequelize/compare/master...fizix-io:remove-global-cache?expand=1

Yeah that looks reasonable, if you open a PR i can get that deployed.

Great. I will update tests before opening a PR. Thanks!


Docker images are not building

Docker image hasn't been build since 2018-02-15T23:06:01.690Z.
Anything I could help with?

I asked @tomav to check this, I don't have access to the docker managment of this project.

Thanks, let's hope for the best then! :)

There where errors but it is build now.

Ok, well I got it with the latest Docker build from yesterday.. ¯_(ツ)_/¯
...von unnerwegs...

Am 26.02.2018 um 08:23 schrieb Johan Smits<EMAIL_ADDRESS>There where errors but it is build now.
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub, or mute the thread.


CO-1957_Improve_Login_Experience_/_Speed

Added spinner for login.Removed login dependency from installation path.

See comments in https://todos.internet2.edu/browse/CO-1957 -- it may be worthwhile considering a slightly different approach due to the performance hit when loading a full html page rather than just doing a header redirect.

Hi, Ioannis -
To simplify the existing page and remove external references, let's replace the spin.js code with simple CSS animation for loading. I'll follow along with this in the rest of the app. Please remove all Javascript references from index.php and add this style section to the :

Then in the body, we need only

...

Since the page is much simpler, we can move the remaining php in the body to the php block above the  tag and remove all attributes from the  tag.
Thanks!

Updated according to guidelines.

Need to review UsersController changes wrt Match.

I'm all in favor of getting rid of the /registry hardcoding, but for clarity I'd like to see that as a separate PR linked to CO-299.

This is good and checks out. This is ready for merge.

Ok here's the updated code:
The style should be:

and the div in the body is now

`

Hi @spartanicus ,
i made the change and rebased. Could you please review?
Ioannis

Thanks, Ioannis - this is great. The index.php piece of this is ready for merge. @boshrin I'll hand this off to you to review the UsersController.


feature：支持扩展，目前先支持DtpExecutor和ScheduledDtpExecutor的扩展

Nice pr, we will review it.

forget to set IDEA automatic package guidance prohibits import*，resulting in package merging

Modified, thank you for your CR


Remove user settings from server-system-logger

What this PR does:
Which issue(s) this PR fixes:
Fixes #
Checklist

[ ] Changes manually tested
[ ] Automated Tests added/updated
[ ] Documentation added/updated
[ ] CHANGELOG.md updated (not required for documentation PRs)
[ ] CLA Signed:  DataStax CLA

This requires more work and testing.


Recommended way to deal with Git in an "adminless Grav install"?

I was trying to figure out what the best way is use Grav is when you use it without the admin plugin, basically as a flat-file CMS that you deploy through Git.
I found that most people advice to just commit the user folder, but I found a few problems with that approach:

I don't want to reinstall Grav every time I pull the Git repo on a new machine, I need some sort of build script. Obviously I can run the composer create-project command every time, but it feels counter intuitive.
I want my environment to be consistent (in which Grav version is used, but also plugin versions)
It's kinda strange to commit the user/plugins folder, normally you don't modify those files yourself. However I understand it is not part of Grav either.

Wouldn't it be nicer to just have a build script that pulls the exact version of Grav needed, and also installs the required plugin versions and theme versions?
I created something like that as a simple bash script (that at least solves the first issue):
#!/bin/sh

# Remove current install
rm -rf webroot

# Clone grav
php composer.phar create-project getgrav/grav webroot <IP_ADDRESS>

# Install grav
cd webroot
bin/grav install

# Remove default user directories that we will replace with our own
rm -rf user/accounts
rm -rf user/config
rm -rf user/data
rm -rf user/pages
rm -rf user/plugins
rm -rf user/themes

# Create symlinks from our own user directories to the webroot/user folder
ln -sf ../../user/accounts user/accounts
ln -sf ../../user/config user/config
ln -sf ../../user/data user/data
ln -sf ../../user/pages user/pages
ln -sf ../../user/plugins user/plugins
ln -sf ../../user/themes user/themes

This works and I could probably extend it to include plugin and theme installs as well, however is there a recommended way to work with Git when I use Grav without the admin plugin?

I could not get this build script to work with a composer.json then symlinking to the vendor folder. But if someone can tell me how that can be done let me know.

Unrelated thing which I find really strange (I'm not a web or PHP developer, but do mostly JVM and C based languages), is that packages (plugins) include the full repository sources (Grav as well). Tests, unrelated readme files etc. are all pulled. To me that feels extremely wasteful, especially if you are used to JVM packages etc. But this is probably more a general Composer issue than it is a Grav issue.

The best approach is the first point you mentioned with only user in the repo. It might sound counterintuitive but you’ll find yourself able to manage better Grav updates.
It’s also good for separating local development from production instances of Grav.
Then you could integrate something like GitSync (https://github.com/trilbymedia/grav-plugin-git-sync) for the git synchronization, which expects only the user folder in the repo. Although it has a lot of user friendly implementation for the admin, it is not admin dependent and you can synchronize manually or via cronjob via the simple bin/plugin git-sync sync.
GitSync also supports webhooks so that you can have your site update if you manually push to GitHub.
The GitSync flow can also be manually reproduced by yourself with some simple scripting where you basically push/pull as needed, and if the user folder only is just too limiting for you, you can push everything.


RFC: Generate safer wrapper function

Remove type constraint in the wrapper so that it is compatible with the
ccall GC root mechanism.
Map char* to Cstring and wchar_t* to Cwstring

Closes https://github.com/ihnorton/Clang.jl/issues/152

Not sure where's the best place to mention the necessary user-supplied methods.

@ihnorton Is there anything specific holding this PR up?


Supported locales

I think this package should have a list (and be limited to that list) of available app locales in config. There is a problem that via URL I can set the application to use any locale. It breakes the app in my case (only 2 supported locales, but I can set any locale via URL). There is a package where this is done, https://github.com/mcamara/laravel-localization

Sorry for the delay, I just finished my exams!
It's in the works, I found a list of locales and I just need to properly integrate it to the package

Done! See v1.2.0


Build fail with AGP 8.0

Hi,
Please resolve issues with AGP 8.0 on Android.
Thank you.

app_links is resolved?

I decided to use app_links.
Thanks.


Add alloc feature

Follow up to #4005. This keeps a path open to add a no-alloc implementation without breaking changes in the future, making alloc a required feature for now.
(This makes default-features=false without adding std or alloc break again like in the current release, but prevents sudden breakage from adding a new default feature in a future release.)
Note: I don't feel too strongly about this, and I'm not sure how useful wasm-bindgen can be without alloc, this is mostly a precautionary change.

Alternatively to errorring without alloc feature, the build.rs could print a future-compat warning.
@daxpedda What do you think?

I don't think compiling without alloc is a worthwhile goal for wasm-bindgen.
For sure there are uses for wasm32-unknown-unknown without alloc, none of those need to interface with JS though.
Thank you for doing this however, its good that we discussed it at least and gave it a good think, appreciated!