[openmetrics] Offer option to send histograms as bucket counters AND distribution metrics

Output of the info page
===============
Agent (v7.16.1)
===============
  Status date: 2020-02-25 22:22:05.129654 UTC
  Agent start: 2020-02-25 19:45:25.923801 UTC
  Pid: 338
  Go Version: go1.12.9
  Python Version: 3.7.4
  Build arch: amd64
  Check Runners: 4
  Log Level: WARN
  Paths
  =====
    Config File: /etc/datadog-agent/datadog.yaml
    conf.d: /etc/datadog-agent/conf.d
    checks.d: /etc/datadog-agent/checks.d
  Clocks
  ======
    NTP offset: -6.989ms
    System UTC time: 2020-02-25 22:22:05.129654 UTC
  Host Info
  =========
    bootTime: 2020-02-10 21:50:08.000000 UTC
    kernelVersion: 3.10.0-1062.1.1.el7.x86_64
    os: linux
    platform: debian
    platformFamily: debian
    platformVersion: 10.2
    procs: 67
    uptime: 357h55m27s
    virtualizationRole: guest
    virtualizationSystem: docker
  Hostnames
  =========
    host_aliases: [ocp-app-01q.lab1.bwnet.us]
    hostname: ocp-app-01q.lab1.bwnet.us
    socket-fqdn: datadog-agent-jnpb5
    socket-hostname: datadog-agent-jnpb5
    host tags:
      [cluster:cluster.lab1]
    hostname provider: container
    unused hostname providers:
      aws: not retrieving hostname from AWS: the host is not an ECS instance, and other providers already retrieve non-default hostnames
      configuration/environment: hostname is empty
      gce: unable to retrieve hostname from GCE: Get http://<IP_ADDRESS>/computeMetadata/v1/instance/hostname: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
  Metadata
  ========
    hostname_source: container
=========
Collector
=========
  Running Checks
  ==============
    cpu
    ---
      Instance ID: cpu [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/cpu.d/conf.yaml.default
      Total Runs: 627
      Metric Samples: Last Run: 6, Total: 3,756
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 0s
    disk (2.5.3)
    ------------
      Instance ID: disk:e5dffb8bef24336f [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/disk.d/conf.yaml.default
      Total Runs: 626
      Metric Samples: Last Run: 452, Total: 282,952
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 1.378s
    docker
    ------
      Instance ID: docker [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/docker.d/conf.yaml.default
      Total Runs: 619
      Metric Samples: Last Run: 8,820, Total: 1 M
      Events: Last Run: 0, Total: 716
      Service Checks: Last Run: 1, Total: 619
      Average Execution Time : 3.658s
    file_handle
    -----------
      Instance ID: file_handle [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/file_handle.d/conf.yaml.default
      Total Runs: 626
      Metric Samples: Last Run: 5, Total: 3,130
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 0s
    io
    --
      Instance ID: io [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/io.d/conf.yaml.default
      Total Runs: 626
      Metric Samples: Last Run: 455, Total: 284,515
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 3ms
    kubelet (3.4.0)
    ---------------
      Instance ID: kubelet:d884b5186b651429 [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/kubelet.d/conf.yaml.default
      Total Runs: 626
      Metric Samples: Last Run: 3,814, Total: 1 M
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 4, Total: 2,504
      Average Execution Time : 6.386s
    load
    ----
      Instance ID: load [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/load.d/conf.yaml.default
      Total Runs: 626
      Metric Samples: Last Run: 6, Total: 3,756
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 0s
    memory
    ------
      Instance ID: memory [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/memory.d/conf.yaml.default
      Total Runs: 626
      Metric Samples: Last Run: 17, Total: 10,642
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 0s
    network (1.12.2)
    ----------------
      Instance ID: network:e0204ad63d43c949 [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/network.d/conf.yaml.default
      Total Runs: 626
      Metric Samples: Last Run: 31, Total: 19,406
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 105ms
    ntp
    ---
      Instance ID: ntp:d884b5186b651429 [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/ntp.d/conf.yaml.default
      Total Runs: 11
      Metric Samples: Last Run: 1, Total: 11
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 11
      Average Execution Time : 981ms
    openmetrics (1.3.0)
    -------------------
      Instance ID: openmetrics:argo:24ca5ec29bda41f3 [OK]
      Configuration Source: kubelet:docker://bcc5c94c61083c1fe11de4936f12f733ececa08414e66c44bdd5ac800d673246
      Total Runs: 86
      Metric Samples: Last Run: 89, Total: 7,627
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 86
      Average Execution Time : 29ms
      Instance ID: openmetrics:argo:e822becabdb98fb [OK]
      Configuration Source: kubelet:docker://d5414e1f44598239e76bef98f8ac623d20596ca8e99fc960c80d827faeb8a208
      Total Runs: 158
      Metric Samples: Last Run: 84, Total: 13,023
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 158
      Average Execution Time : 50ms
      Instance ID: openmetrics:jenkins:1cb698262b8693f [OK]
      Configuration Source: kubelet:docker://31b523ea583d7a7698dddde960d108432d1db81be4df5e4d7b40f2a77c628a31
      Total Runs: 626
      Metric Samples: Last Run: 1,223, Total: 765,570
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 626
      Average Execution Time : 493ms
      Instance ID: openmetrics:jenkins:4098d8357e61abc9 [OK]
      Configuration Source: kubelet:docker://5c0eb29d1c1f0a4e9cb19983a5b2d02ccf466ea0b3b92f4d00f6c18f588cd765
      Total Runs: 626
      Metric Samples: Last Run: 52, Total: 32,552
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 626
      Average Execution Time : 161ms
      Instance ID: openmetrics:jenkins:6ff158361907b312 [OK]
      Configuration Source: kubelet:docker://c4d08888c74a76777b9e2970f0d77b30c5007e85a71e144ba6a5ae2c78f40a47
      Total Runs: 626
      Metric Samples: Last Run: 1,202, Total: 752,452
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 626
      Average Execution Time : 544ms
      Instance ID: openmetrics:jenkins:804a23f6b7eb0cea [OK]
      Configuration Source: kubelet:docker://fa5867c5238ecd5d3b12e679ca9c5c72108b4c010568137667489ae5a5efb12d
      Total Runs: 626
      Metric Samples: Last Run: 52, Total: 32,552
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 626
      Average Execution Time : 12ms
      Instance ID: openmetrics:one-id:6f2950c5f7b7a6ab [OK]
      Configuration Source: kubelet:docker://5ed03916f3709d75f249ea1c02daf943bdc646ae0e550f7311582f61bd3c443c
      Total Runs: 626
      Metric Samples: Last Run: 13, Total: 8,138
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 626
      Average Execution Time : 56ms
      Instance ID: openmetrics:one-id:a7f9db6bf5c8fae5 [OK]
      Configuration Source: kubelet:docker://c651eea322b9e239ae715cd4b0428c41f2fa678eb642fe36cf763b382f5e2947
      Total Runs: 627
      Metric Samples: Last Run: 239, Total: 149,853
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 627
      Average Execution Time : 188ms
      Instance ID: openmetrics:one-id:aa0c2448f34cb741 [OK]
      Configuration Source: kubelet:docker://a6bd60e32e66bc703aeeda6e3825bd50ab9b189e01f728728c9f1d91aa78cf50
      Total Runs: 626
      Metric Samples: Last Run: 13, Total: 8,138
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 626
      Average Execution Time : 117ms
      Instance ID: openmetrics:one-id:e0441bd923a5b179 [OK]
      Configuration Source: kubelet:docker://99ab07bcc79b4436656415cff0b3ae77faf1ca29e3ce977fb73aceaf28e1e662
      Total Runs: 626
      Metric Samples: Last Run: 224, Total: 140,224
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 626
      Average Execution Time : 234ms
    uptime
    ------
      Instance ID: uptime [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/uptime.d/conf.yaml.default
      Total Runs: 626
      Metric Samples: Last Run: 1, Total: 626
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 0, Total: 0
      Average Execution Time : 0s
========
JMXFetch
========
  Initialized checks
  ==================
    no checks
  Failed checks
  =============
    no checks
=========
Forwarder
=========
  Transactions
  ============
    CheckRunsV1: 626
    Dropped: 0
    DroppedOnInput: 0
    Events: 0
    HostMetadata: 0
    IntakeV1: 376
    Metadata: 0
    Requeued: 0
    Retried: 0
    RetryQueueSize: 0
    Series: 0
    ServiceChecks: 0
    SketchSeries: 0
    Success: 2,871
    TimeseriesV1: 626
  API Keys status
  ===============
    API key ending with 6f1b6: API Key valid
==========
Endpoints
==========
  https://app.datadoghq.com - API Key ending with:
      - 6f1b6
==========
Logs Agent
==========
  Logs Agent is not running
=========
Aggregator
=========
  Checks Metric Sample: 10.4 M
  Dogstatsd Metric Sample: 45,710
  Event: 717
  Events Flushed: 717
  Number Of Flushes: 626
  Series Flushed: 10.1 M
  Service Check: 20,725
  Service Checks Flushed: 21,335
=========
DogStatsD
=========
  Event Packets: 0
  Event Parse Errors: 0
  Metric Packets: 45,709
  Metric Parse Errors: 0
  Service Check Packets: 0
  Service Check Parse Errors: 0
  Udp Bytes: 2.9 M
  Udp Packet Reading Errors: 0
  Udp Packets: 45,710
  Uds Bytes: 0
  Uds Origin Detection Errors: 0
  Uds Packet Reading Errors: 0
  Uds Packets: 0
=====================
Datadog Cluster Agent
=====================
  - Datadog Cluster Agent endpoint detected: https://<IP_ADDRESS>:5005
  Successfully connected to the Datadog Cluster Agent.
  - Running: 1.4.0+commit.f102bd8

Additional environment details (Operating System, Cloud provider, etc):

Adopt OpenJDK 12.0.2
Spring Boot 2.2.4.RELEASE
OpenShift v3.11.98

Steps to reproduce the issue:

We are using Spring Boot's Micrometer instrumentation library to collect OpenMetrics from our webservers. By default, Micrometer ships with an OpenMetrics summary http_server_requests_seconds. We have enabled the Micrometer's SLA feature to make it a histogram with the following Spring properties:

management:
  metrics:
    distribution:
      sla:
        http.server.requests: 50ms,100ms,250ms,500ms

which produces OpenMetrics such as:
http_server_requests_seconds_bucket{exception="None",method="POST",outcome="SUCCESS",status="200",uri="/oauth2/token",le="0.05",} 9804.0
http_server_requests_seconds_bucket{exception="None",method="POST",outcome="SUCCESS",status="200",uri="/oauth2/token",le="0.1",} 9804.0
http_server_requests_seconds_bucket{exception="None",method="POST",outcome="SUCCESS",status="200",uri="/oauth2/token",le="0.25",} 9804.0
http_server_requests_seconds_bucket{exception="None",method="POST",outcome="SUCCESS",status="200",uri="/oauth2/token",le="0.5",} 9804.0
http_server_requests_seconds_bucket{exception="None",method="POST",outcome="SUCCESS",status="200",uri="/oauth2/token",le="+Inf",} 9804.0
http_server_requests_seconds_count{exception="None",method="POST",outcome="SUCCESS",status="200",uri="/oauth2/token",} 9804.0
http_server_requests_seconds_sum{exception="None",method="POST",outcome="SUCCESS",status="200",uri="/oauth2/token",} 52.225603882

I then wanted to send my metrics as distribution metrics so I can visualize my latency for various percentiles and combinations of tags. As a result, I've attached the following annotations to my pod:

    ad.datadoghq.com/signum.check_names: '["openmetrics"]'
    ad.datadoghq.com/signum.init_configs: '[{}]'
    ad.datadoghq.com/signum.instances: |-
      [
        {
          "prometheus_url": "http://%%host%%:8888/actuator/prometheus",
          "namespace": "one-id",
          "metrics": ["http*"],
          "type_overrides": {},
          "send_histogram_buckets": true,
          "send_monotonic_counter": true,
          "send_distribution_buckets": true,
          "send_distribution_counts_as_monotonic": true
        }
      ]
    ad.datadoghq.com/signum.tags: |-
      {
        "team": "keystone",
        "env": "dev",
        "apiVersion": "v1"
      }

Describe the results you received:
This works great! I am able to visualize all the percentiles I want. However, when I enable distribution metrics via send_distribution_buckets I lose my bucket counter metrics i.e. one_id.http_server_requests_seconds.count which had tags like upper_bound and status.
Describe the results you expected:
I was wanting send_distribution_buckets to still send the raw counters as well, because although its more metrics/money I can use them to calculate SLIs (i.e. were 99% of requests succesful/fast) as well as Apdex scores. For example, we have been using this query in our SLO monitor and dashboards:
(per_second(sum:one_id.http_server_requests_seconds.count{upper_bound:0.5,$env,$cluster}.as_count()) - per_second(sum:one_id.http_server_requests_seconds.count{upper_bound:0.5,status:500,$env,$cluster}.as_count()))
/
per_second(sum:one_id.http_server_requests_seconds.count{upper_bound:none,$env,$cluster}.as_count())

Percentile estimations are great for visualizing performance trends and triaging, but they are not great performance indicators for alerting. And so, I'm wondering two things:

Is my approach to getting SLIs and percentiles via OpenMetrics sane? Should I be considering other alternatives?

Is it reasonable to propose (and likely contribute) an additional boolean config var for the openmetrics check that would allow users to opt-in to still sending the raw counters too, something along the lines of send_bucket_counters_with_distributions?

Thanks for the time and help!

Received help from the office hour folks yesterday. I was able to get both my counters and percentiles by simply creating two checks with the following annotations:
    ad.datadoghq.com/signum.check_names: '["openmetrics", "openmetrics"]'
    ad.datadoghq.com/signum.init_configs: '[{}, {}]'
    ad.datadoghq.com/signum.instances: |-
      [
        {
          "prometheus_url": "http://%%host%%:8888/actuator/prometheus",
          "namespace": "one-id",
          "metrics": ["http*"],
          "type_overrides": {},
          "send_histogram_buckets": true,
          "send_monotonic_counter": true,
          "send_distribution_buckets": false,
          "send_distribution_counts_as_monotonic": true
        },
        {
          "prometheus_url": "http://%%host%%:8888/actuator/prometheus",
          "namespace": "one-id",
          "metrics": ["http*"],
          "type_overrides": {},
          "send_histogram_buckets": true,
          "send_monotonic_counter": true,
          "send_distribution_buckets": false,
          "send_distribution_counts_as_monotonic": true
        }
      ]
    ad.datadoghq.com/signum.tags: |-
      {
        "team": "keystone",
        "env": "dev",
        "apiVersion": "v1"
      }

After some consideration, although the workaround ^ is acceptable for the time being I think it would be preferred to avoid the second, unnecessary HTTP request by adding another config var.
I'll reopen and work on a PR for this to get folks feedback as this should be simple but there's quite a bit of boolean vars now for openmetrics.

Chiming onto this issue, another issue we've seen is that the sum and count information doesn't seem to be looked at all when distribution buckets are enabled, meaning we can't look at the count of requests coming in anymore.

It would also be nice if the naming of these are made consistent:
send_histogram_buckets
send_monotonic_counter
send_distribution_buckets
send_distribution_counts_as_monotonic

To
send_histogram_buckets
send_histogram_counts_as_monotonic <-
send_distribution_buckets
send_distribution_counts_as_monotonic

Hey @hfuss @adammw @tonglil
Earlier this year, we introduced a new and improved version of the Openmetrics base check, called OpenMetricsBaseCheckV2.
You can enable V2 by using the openmetrics_endpoint instead of prometheus_url. You need to be on Agent 7.26.x+ and Python 3.
As part of Openmetrics V2, we now support collecting histogram counters when distribution metrics is enabled.
https://github.com/DataDog/integrations-core/blob/763da121dccfc3e7a3e5d6e9e6c57f8e56e8a1b7/openmetrics/datadog_checks/openmetrics/data/conf.yaml.example#L220-L225
To see the complete list of options, see the conf.yaml.example: https://github.com/DataDog/integrations-core/blob/master/openmetrics/datadog_checks/openmetrics/data/conf.yaml.example
There were some config option changes, so please check if your openmetrics instances use any of these and replace the options (types should be compatible, but you can read more about them in the conf.yaml.example):

type_overrides is incorporated in the metrics option now
ignore_metrics is now exclude_metrics
prometheus_metrics_prefix is now raw_metric_prefix
health_service_check is now enable_health_service_check
labels_mapper is now labels_rename
label_joins is now share_labels
send_histograms_buckets is now collect_histogram_buckets
send_distribution_buckets is now histogram_buckets_as_distributions


chore(backport): remove refs from checkout since the branch is deleted

Signed-off-by: iliapolo<EMAIL_ADDRESS>

The backport to k8s-21/main failed:
The process '/usr/bin/git' failed with exit code 1

To backport manually, run these commands in your terminal:
# Fetch latest updates from GitHub
git fetch
# Create a new working tree
git worktree add .worktrees/backport-k8s-21/main k8s-21/main
# Navigate to the new working tree
cd .worktrees/backport-k8s-21/main
# Create a new branch
git switch --create backport-547-to-k8s-21/main
# Cherry-pick the merged commit of this pull request and resolve the conflicts
git cherry-pick --mainline 1 26485b72effcbe2fe4f1605af6922250c33a2bd8
# Push it to GitHub
git push --set-upstream origin backport-547-to-k8s-21/main
# Go back to the original working tree
cd ../..
# Delete the working tree
git worktree remove .worktrees/backport-k8s-21/main

Then, create a pull request where the base branch is k8s-21/main and the compare/head branch is backport-547-to-k8s-21/main.

The backport to k8s-20/main failed:
The process '/usr/bin/git' failed with exit code 1

To backport manually, run these commands in your terminal:
# Fetch latest updates from GitHub
git fetch
# Create a new working tree
git worktree add .worktrees/backport-k8s-20/main k8s-20/main
# Navigate to the new working tree
cd .worktrees/backport-k8s-20/main
# Create a new branch
git switch --create backport-547-to-k8s-20/main
# Cherry-pick the merged commit of this pull request and resolve the conflicts
git cherry-pick --mainline 1 26485b72effcbe2fe4f1605af6922250c33a2bd8
# Push it to GitHub
git push --set-upstream origin backport-547-to-k8s-20/main
# Go back to the original working tree
cd ../..
# Delete the working tree
git worktree remove .worktrees/backport-k8s-20/main

Then, create a pull request where the base branch is k8s-20/main and the compare/head branch is backport-547-to-k8s-20/main.

💚 All backports created successfully

Status
Branch
Result

✅
k8s-21/main

Questions ?
Please refer to the Backport tool documentation

💚 All backports created successfully

Status
Branch
Result

✅
k8s-20/main

Questions ?
Please refer to the Backport tool documentation


Review pr75

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

3 of 3 (100.0%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.05%) to 82.921%

Totals

Change from base Build<PHONE_NUMBER>:
0.05%

Covered Lines:
188

Relevant Lines:
188

💛  - Coveralls

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

3 of 3 (100.0%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.05%) to 82.921%

Totals

Change from base Build<PHONE_NUMBER>:
0.05%

Covered Lines:
188

Relevant Lines:
188

💛  - Coveralls


Undefined variable: logger

Hi,
Can you tell me where the $logger object comes from per the README, i.e. how to initialize a logger to pass to a workflow?  I'm reading in a csv file in strict mode and I want to capture and display any errors to the user.
My code:
require_once 'vendor/autoload.php';
use Ddeboer\DataImport\Workflow;
use Ddeboer\DataImport\Reader\CsvReader;
use Ddeboer\DataImport\Filter;

$file = new \SplFileObject('mydata.csv');
$reader = new CsvReader($file);
$reader->setHeaderRowNumber(0);
$reader->setStrict(true);
$workflow = new Workflow($reader, $logger); // what is $logger?
$result = $workflow
    ->setSkipItemOnFailure(false)
    ->process();

echo "<pre>" . print_r($result, 1) . "</pre>";

I assume $logger is part of the data-import library..or is it some sort of generic php logger utility?
Thanks for the help!

You can omit the $logger property. But i would recommend you to lean the php basics before you use this library.

Yes, I ended up omitting it.
I know php pretty well, and I'm using this library quite successfully.  I'm just not familiar with what the $logger object refers to. Is there a built-in php logging function or library you could refer me to?  For example, python has a built-in logger facility, but I've never used a similar one for php.  Google doesn't give me a clear road to that either, so any recommendations would be appreciated.  klogger perhaps?

The most common logger library is seldaek/monolog, which follows the psr standard.


use-ts-loader recipe - "export 'ReactComponent' was not found in..

Hi,
We are using the ts-loader recipe found here https://github.com/gsoft-inc/craco/blob/master/recipes/use-ts-loader/craco.config.js
But when we want to export our svgs as an ReactComponent
export { ReactComponent as LogoIconSmall } from './logo_small.svg';
we get the following error message
Failed to compile.

./src/assets/icons/index.tsx
"export 'ReactComponent' (reexported as 'LogoIconSmall') was not found in './logo_small.svg'

How can we support this?
Thanks!

I have the same problem and tried to add

SVGR loader config to craco config file, but it didn't work for me as well .
react-svg-loader to the craco config file, but didn't work for me as well.

The only way that worked for me(using react-svg-loader)  however i don't like it
export  LogoIconSmall from '-!react-svg-loader!./logo_small.svg';
keep in mind that -! allows it to bypass the existing loaders , and I don't know how to bypass the existing loaders using craco config


please do completion on tab

I find the way completion currently works extremely annoying, constantly popping up boxes while I type. I would much prefer to get the very nice completions box on tab only. Maybe this could be configurable.

Autocompletion has more options than you can shake a stick at, just head into the autocomplete-plus settings from the main settings menu. This is the top one.

Ok, thanks. I clearly don't know how to use this thing.

No worries, it's not always super obvious what features/settings are coming from where. These issues are good suggestions for future docs :)

I unchecked that option and put the following in ~/.atom/keymap.cson:
'atom-text-editor':
  'tab': 'autocomplete-plus:activate'

However it still doesn't seem to work. I can still get completion with ctrl-space, but not with tab.

Try
'atom-text-editor:not([mini])':
  'tab': 'autocomplete-plus:activate

The selector needs to be at least as specific as the one you want to override, which is
'atom-text-editor:not([mini])':
  'tab': 'editor:indent'

in this case.

That worked, thanks!
I also notice completion sometimes seems to take a very long time --- julia is at 100% cpu for many seconds. Is that due to fuzzy matching? Is there a way to disable fuzzy matching for julia completions?

No, the fuzzy matching happens in Atom.
I've only seen signifcant delays when getting the first completion in a session, because we get all completions (plus minimal docstrings) then; there may also be some compilation overhead, not sure. I guess if you're getting completions for some module with a lot of functions that might take some time as well, but not multiple seconds.
Disabling fuzzy matching is possible in prinicple, but that'd need to be implemented -- right now we're relying on the built in matching.


Model name bug if the name is end of s

I have a model call Boss.
When I execute this command rake db:seed:dump MODELS=Boss  APPEND=true, it threw
NameError: uninitialized constant Bos

I need to execute by using rake db:seed:dump MODELS=Bosss  APPEND=true, that is I must to put the extra s to fit it.

@fifiteen82726 In your rails app console, what does "Boss".x.strip.underscore.singularize.camelize.constantize returns ?


Attack state can get confused

@FrostRaptor I have a bit of an oddity for you. I here have a log that shows that a Locust IIC (a 25 ton mech) did 95 damage with a kick (and 48 instability). Here's the relevant log excerpt:
19:41:22.553 Melee sequence 1387 created for attacker: Locust IIC_Recruit_124FB4F4 vs. target: Nightstar_Slapdash_7B9F1E30 using position: (-444.0, 163.8, -145.5)
19:41:22.553   -- Initial requested weapons:
19:41:22.554 Setting current melee type to: Kick and weapon to: Melee
19:41:22.554 For Locust IIC_Recruit_124FB4F4 set melee weapon damage: 95 and instability: 48
19:41:35.999 == Resolving cluster damage, instability, and unsteady on melee attacker: Locust IIC_Recruit_124FB4F4 and target: Nightstar_Slapdash_7B9F1E30.
19:41:35.999  -- AttackSequence: 1390 hit the target.
19:41:35.999  -- Adding 48 absolute instability to target.
19:41:35.999  -- Forcing target to become unsteady from attack!
File attached. This is obviously wrong, but I'm not sure why it's happening. Ticket is #ticket-0563 if you want full logs.

Looks like the state got confused between player selection of type and the action, because the AI calculated retaliation:
19:41:22.533 AITUIL_EDFA - entered.
19:41:22.533 === Calculating expectedDamage for Nightstar_Slapdash_7B9F1E30 melee attack from position: (-457.9, 164.9, -124.7) against target: Locust IIC_Recruit_124FB4F4 at position: (-457.9, 164.9, -124.7)
19:41:22.533   useRevengeBonus: False
19:41:22.533   --- weaponList:
19:41:22.533       Melee
19:41:22.533       LRM20
19:41:22.533       Gauss Rifle
19:41:22.533       Gauss Rifle
19:41:22.533       ER M Laser
19:41:22.533       ER M Laser
19:41:22.533       C3 Master
19:41:22.534 Modifying Nightstar_Slapdash_7B9F1E30's melee attack damage for utility
19:41:22.534 Evaluating utility against state: KICK


Info

Hi!
Your project seems very promising. I have a few questions for  you.

Do you believe the devide will be available in the near future?
Which biosignals do you plan on using?

Good luck with everything!
Pénélope

Hello! Thanks for your questions :)

Given that our data collection has been postponed due to the pandemic, I doubt it :(
We were planning on using biosignals extracted from in-ear audio recordings, likely the heart rate. But to obtain data for training the emotion recognition system, we were going to build off of an existing study where electrodermal activity, skin temperature, and blood volume pulse is recorded with a finger sensor, so that will give us the opportunity to compare the in-ear biosignals to another modality.

Hello! Thanks for your questions :)
Given that our data collection has been postponed due to the pandemic, I doubt it :(
We were planning on using biosignals extracted from in-ear audio recordings, likely the heart rate. But to obtain data for training the emotion recognition system, we were going to build off of an existing study where electrodermal activity, skin temperature, and blood volume pulse is recorded with a finger sensor, so that will give us the opportunity to compare different modalities.

Hello! Thanks for your questions :)
Given that our data collection has been postponed due to the pandemic, I doubt it :(
We were planning on using biosignals extracted from in-ear audio recordings, likely the heart rate. But to obtain data for training the emotion recognition system, we were going to build off of an existing study where electrodermal activity, skin temperature, and blood volume pulse is recorded with a finger sensor, so that will give us the opportunity to compare different modalities.

Hi ! Based on an answer from your teammate Achraf, he mentioned you were thinking about maybe choosing PSD and phase as EEG features. I was curious if you had any frequency range in mind to correlate with the rest of your biosignal data features and emotion recognition ? It seems like you have a lot of data options to choose from for your ambitious (and great) project, so I was wondering which type of classifier you had in mind to integrate all these different types of data in your model ?

Hi @beapdk :) We were thinking of extracting many "potential" features and then only using the most relevant features for emotion recognition (e.g.  if p < 0.05) based on the training set. So for example, we would use the PSD from theta, alpha, beta, and gamma bands as potential features, and then if p < 0.05 only for the alpha and gamma bands we would only include those as features for the classifier. Regarding your second question: right now, it isn't our goal to build a multimodal classifier - first we wanted to see what results we could get using just one biosignal. If we have time though, it would be interesting to try out data fusion. We're very open to suggestions if you have any!


Azure Data factory Pipelines, created using git version control reposatory(Azure DevOps Git), are not fetched by azure-mgmt-datafactory library

Package Name: azure-mgmt-datafactory
Package Version: 3.1.0
Operating System: LINUX
Python Version: 3.8.10

Describe the bug
Azure Data factory Pipelines, created using git version control repository (Azure DevOps Git), are not fetched by azure-mgmt-datafactory library.
following function to fetch list of all the azure data factory pipelines  is showing blank list of pipeline in the response even if there are so many pipelines there:
**def get_data_factory_pipelines():
client = DataFactoryManagementClient(
credential=credential,
subscription_id=subscription_id,
)
response = client.pipelines.list_by_factory(
    resource_group_name=resource_group_name,
    factory_name=data_factory_name,
)
for pipeline in response:
    print(pipeline)
return response**

Other functions are not working as well for pipeline with the source of Azure DevOps Git repository.
Kindly help me to fix the issue ASAP.
Thanks

Hi, @regarhariram
Could you find your pipelines under the tab "Pipelines" as expected in the Azure Data Factory Studio?
If so, please make sure you have published all these changes.

Yes,  we find all the pipelines under the tab "Pipelines" as expected in the Azure Data Factory Studio. Now, can we fetch all the pipelines data without publishing it on data factory directly from Azure DevOps Git?

@regarhariram
Afraid not. There are only api and sdk methods that allow you to get the resources stored in the factory, which you can see from live mode.

You can try to  follow https://learn.microsoft.com/en-us/azure/data-factory/continuous-integration-delivery-improvements#create-an-azure-pipeline to config auto publishing, or open an issue in https://github.com/Azure/azure-rest-api-specs/issues to request this feature.


🐛 Bug Report: LDAP admin group not connecting

👟 Reproduction steps
set up the LDAP admin group, the members of the group can not log in.

👍 Expected behavior
log users of the group in as admins
👎 Actual Behavior
failed login "wrong username or password"
📜 Logs
[Nest] 44  - 09/30/2024, 9:47:06 AM     LOG [AuthService] Failed login attempt for user Admin_account from IP MyIP

@WolverinDEV i know you helped on the other LDAP issues.

also i tested the ldapsearch with this:
ldapsearch -x -b "ou=all users,dc=domain,dc=domain,dc=domain" -H ldap://ServerIP -D "cd=admin_account,ou=administrators,ou=all users,dc=domain,dc=domain,dc=domain" -w Password 'memberOf=CN=FileSharingAdmins,OU=Groups,OU=All Users,DC=domain,DC=domain,DC=domain'
comes back with the users of the group.

@WolverinDEV i know you helped on the other LDAP issues.

Hey, sorry for the late reply.
I'm currently on vacation. I'll be back at Tuesday:)

@WolverinDEV i know you helped on the other LDAP issues.

Hey, sorry for the late reply. I'm currently on vacation. I'll be back at Tuesday:)

Enjoy your vacation!

Hey @dnielso5,
If I understood your issue correctly, you stated that "admin users" cannot log in, while "regular users" can?
Just to clarify, the admin group is only checked after the user has been authenticated. For instance, we first search for the user, then we validate their password. If the password matches, only then do we check if the user is a member of the admin group to determine if they have admin privileges.
So if the admin users cannot log in at all, it suggests that the system can't find those users during the initial search, not that it's an admin group issue.

Hey @dnielso5,
If I understood your issue correctly, you stated that "admin users" cannot log in, while "regular users" can?
Just to clarify, the admin group is only checked after the user has been authenticated. For instance, we first search for the user, then we validate their password. If the password matches, only then do we check if the user is a member of the admin group to determine if they have admin privileges.
So if the admin users cannot log in at all, it suggests that the system can't find those users during the initial search, not that it's an admin group issue.

I see, so you need to be in BOTH groups to be an admin. I was under the impression that if you were added into the admin group it was assumed you were also able to log in.
At this point i was able to get my admin account logged in and be able to see the admin configs.
Thank you!


[FEATURE REQUEST] Compact view for showing a shopping list on a read-only dashboard (or custom CSS)

Is your feature request related to a problem? Please describe.
I have a dashboard screen in my kitchen where I would like to show our grocery list. We use Alexa to add groceries to the list, and then sync this with Todoist.
I like that I can disable some of the UI features for this card, but the buttons are still adding a lot of padding (even though they are invisible). This is taking up too much vertical space:

Describe the solution you'd like
Compact view without too much padding. I modified some CSS in the developer tools to get this:

Describe alternatives you've considered
I'm going to create a fork but my version will probably be a bit of a quick hack for now. If I implement this cleanly would you consider merging a PR? (No worries if you're too busy, I totally understand how GitHub projects can become really annoying to maintain. Happens to me a lot!)

Got it working nicely over here: https://github.com/ndbroadbent/todoist-compact-display-card

It's a bit of a hack. Maybe we can just leave it like this and people can easily install the forked repo in HACS if they want

Hey, @ndbroadbent! This already happens when you disable the show_item_close option - buttons are changing to icons. In your case the icons are not loading for some reason. Were there any errors in your browser's developer console?

Since there is no new information on this issue, I'm closing it for now. @ndbroadbent, you can reopen it if needed.


Rename fact docker_version to ceph_docker_version

The name docker_version is very generic and is also used by other
roles. As a result, there may be name conflicts. To avoid this a
ceph_ prefix should be used for this fact. Since it is an internal
fact renaming is not a problem.

Backport would be nice, we actually have a name conflict in one of our environments.

jenkins test luminous-ansible2.4-purge_bluestore_osds_non_container


Tweak signing handling in publishing

Currently includes https://github.com/VirtusLab/scala-cli/pull/1545.

Needs non-regression tests.

Already in https://github.com/VirtusLab/scala-cli/pull/1432


Pass -DQT_REQUIRE_HOST_PATH_CHECK=OFF in cross-compiled builds

Fix https://github.com/conda-forge/qt-main-feedstock/issues/273 .
Checklist

[x] Used a personal fork of the feedstock to propose changes
[x] Bumped the build number (if the version is unchanged)
[ ] Reset the build number to 0 (if the version changed)
[x] Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
[x] Ensured the license file is being packaged.

@conda-forge-admin, please rerender


Fix references to Organizer object class

The Organizer object class moved files in change #183
Update any tools that reference that object class and correct the issue.

Commit:
https://github.com/cjcodeproj/medialibrary/commit/baf91f9dda10fe9f2366852e14aee204ccb9f7f3

File removal commit:
https://github.com/cjcodeproj/medialibrary/commit/dc2f8381e10eb81689c8f7ed0c34736629ad8baf


Q: how to convert .utm disk to qcow2?

I've created a VM with qcow2 disk, but i can see the only file for the vm - .utm. How can i get/convert it to .qcow to be used with qemu command-line?

> ls -l /Users/dev/Library/Containers/com.utmapp.UTM/Data/Documents
total 16
...
drwxr-xr-x@  5 dev  staff   160 18 oct 00:38 asvm2.utm
...

@iamrecursion thank you!


Fix RSD generator

The latest RSD changed the way how source code list is stored, and the generator/rsd does not support the new RSD. This PR fixes the generator and it can obtain RSD source code list correctly again.

From my testing, at least verilator seems to be able to correctly parse the RSD.
This PR is derived from dependabot/submodules/third_party/cores/rsd-5bc4a20. This branch has not been merged and imports the latest RSD.
I do not have sufficient knowledge of the structure of sv-tests, so if any other modifications are needed, I would be grateful for your instructions.

Thanks for the fixes! I see that the formatting check still fails. Could you please run make format on your code?

I'm sorry for making the small commits. I fixed the formatting issue and pushed the fixed version. It appears that all checks, including the formatting check, have passed and some of the runners can now handle RSD correctly.

Thank you very much. I am very happy that my PR has been merged.
The RSD build method may change in the future. If the build method is changed, I would like to create a patch for sv-tests again.

That would be fantastic, thanks!


Data/asia development bank

Summary
Added various bits of economic data on Asian economies to the data folder in the repo and set up continuous deployment via including travis.yml file.
To Check

[ ] We have four data items in there:
     GDP
     Basic Statistics
     Trade Balance
     Exchange Rate
     External Debt Outstanding

Problem with Travis.CI seems to be down to Rcpp package.


All supported sizes are being retired?

So... is AVD retiring support for GPU series VMs?

Select one of Azure's NV-series, NVv3-series, NVv4-series, NVadsA10 v5-series, or NCasT4_v3-series VM sizes to use as a session host.

Note that NV-series VMs are planned to be retired. For more information, see NV retirement.

Document Details
⚠ Do not edit this section. It is required for learn.microsoft.com ➟ GitHub issue linking.

ID: 1d3e1c81-42fd-8a46-b816-9dcce9e6b3f3
Version Independent ID: 06ab7ec2-2a39-c4de-8d9e-5e33a523b284
Content: Configure GPU for Azure Virtual Desktop - Azure
Content Source: articles/virtual-desktop/enable-gpu-acceleration.md
Service: virtual-desktop
GitHub Login: @femila
Microsoft Alias: femila

Never mind, NV-series is one of the 5 series that are supported.

@jonwbstr
Glad to know you have self-resolved the issue. If there are further questions regarding this topic, please do let us know and we will gladly continue the discussion.


Merge release7x to get javadoc package-list changes

@bot-gradle test and merge

I've triggered a build for you.


[bugfix] Do not reset sourcesdir to None if it is set to a URL

Fixed a bug in the pipeline's _rfm_init, where sourcesdir was reset to None if the directory didn't exist. Consequently, when sourcesdir is a git repo and is set in the class body, _rfm_init would just reset it to None.

Hmm, this behaviour is a feature actually. Here is the feature request, if I remember correctly: #1094.

Well, at least we need to make sure that we don't revert the feature in #1094.

Well, at least we need to make sure that we don't revert the feature in #1094.

I think that should be fixed now. But I guess that we should move all the stuff that affects the vars to a post-init hook in the future.

@jenkins-cscs retry daint


Issue 14

Resolves #14. The color option can be used for the terminal. If the color is invalid, the default color (Blue) will be used for the plot and a message will be thrown in the terminal.
Please update, if the requirements are different or resolution is required.

Updated the changes requested in comments.

@kvaghel1 great !! From next time please squash your commits into one, that is there should be one commit per PR. This helps in review process :)
Once again thanks for working on this :)

@kvaghel1  also make sure the PRs are descriptive and not just an issue number. you need to add the issue number in the body as , Fixes: #<issue_number>


[bug] MouseEvent.MovementX and MouseEvent.MovementY do not work correctly on Linux

Describe the bug
MouseEvent.MovementX and MouseEvent.MovementY should be equal to the difference between the current mouse position and the mouse position during the previous MouseEvent, but in this case, they seem to be equal to coordinates of the cursor on the page (i.e. the same as pageX and pageY.)
Reproduction

Create a project with create-tauri-app using the svelte-ts template
Create two files App.svelte and Draggable.svelte with the following contents:

App.svelte:

<Draggable>
  TEST
</Draggable>

Draggable.svelte:

<svelte:window on:mouseup={end} on:mousemove={move} />

  <slot></slot>

Run the program and attempt to drag the TEST text on the screen

Expected behavior
The text should follow the cursor instead of drifting off the screen
Platform and versions
Environment
› OS: Arch Linux Unknown X64
› Node.js: 18.7.0
› npm: Not installed!
› pnpm: 7.9.4
› yarn: Not installed!
› rustup: Not installed!
› rustc: 1.63.0
› cargo: 1.63.0
› Rust toolchain:
Packages
› @tauri-apps/cli [NPM]: 1.0.5
› @tauri-apps/api [NPM]: 1.0.2
› tauri [RUST]: 1.0.5,
› tauri-build [RUST]: 1.0.4,
› tao [RUST]: 0.12.2,
› wry [RUST]: 0.19.0,
App
› build-type: bundle
› CSP: unset
› distDir: ../dist
› devPath: http://localhost:1420/
› framework: Svelte
Stack trace
No response
Additional context
No response

from MDN:

Warning: Browsers use different units for movementX and screenX than what the specification defines. Depending on the browser and operating system, the movementX units may be a physical pixel, a logical pixel, or a CSS pixel.

So it seems that this property is not reliable anyways and you should compute it yourself, MDN also gives you how to compute it properly

currentEvent.movementX = currentEvent.screenX - previousEvent.screenX


[ci] Reenable Dom in the Jenkinsfile

Codecov Report

Merging #709 into master will decrease coverage by 0.02%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #709      +/-   ##
==========================================
- Coverage   91.85%   91.83%   -0.03%
==========================================
  Files          77       77
  Lines        9494     9494
==========================================
- Hits         8721     8719       -2
- Misses        773      775       +2

Impacted Files
Coverage Δ

reframe/core/config.py
82.75% <0%> (-1.73%)
:arrow_down:

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 7188703...4d9baea. Read the comment docs.


Move ts-express-decorators on Github organization

But I haven't idea to the name of organization.

All project will be moved on @tsed npm organisation. Next step is to move ts-express-decorators under tsed organisation.


Kicost not run

Hi
I am trying to get the file processed by Kicost with no success.
The program seems to do absolutely nothing.

I tried to install the program on another pc and I have the same error

Possible duplicated from https://github.com/xesscorp/KiCost/issues/412


Add missing undo on CloseCurve

Add missing undo on CloseCurve and avoid the button spamming.

Thanks! And congrats for your first merged Godot contribution :tada:


Memory Leaks

When I test my app I am getting a memory leak from alamofire but do not know how to fix this leaks ? Have attached screen shot too so please guide me how to fix this ?

What did you do?
ℹ I have checked my app in an instrument and getting leaks in some files.
What did you expect to happen?
ℹ memory leaks should not occur
What happened instead?
ℹ showing an error
Alamofire Environment
Alamofire version: 4.7.3
Xcode version: 10.1
Swift version:  4.2
Platform(s) running Alamofire:  iOS - 12.0
**macOS version running Xcode: macOS - 10.13.6 **
.

@KarthickHero Were you using validate() or validate(contentType:) at all?

The fix for the validate() memory leak was back ported to 4.9.0.


[BEAM-3773] [SQL] Add support for setting PipelineOptions

Add support for setting PipelineOptions for pure SQL pipelines.

Follow this checklist to help us incorporate your contribution quickly and easily:

[X] Format the pull request title like [BEAM-XXX] Fixes bug in ApproximateQuantiles, where you replace BEAM-XXX with the appropriate JIRA issue, if applicable. This will automatically link the pull request to the issue.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

It will help us expedite review of your Pull Request if you tag someone (e.g. @username) to look at it.

Failed on :beam-runners-flink_2.11:compileJava

run java precommit

R: @kennknowles
cc: @akedin @XuMingmin @xumingming

run go precommit

This should now handle BeamSqlCli as well. I also fixed the spotless test failure.

@XuMingmin where are we with this? Do you still have concerns? If you do, are you available for a meeting next week to discuss?

@apilloud let's have a 30-minutes call to sync-up some details, want to make sure that the change can work with BeamSqlCli vs JDBC, PCollectionTable vs KafkaTable etc.


Look into alternatives to dropbox

We are getting to the point where dropbox wants us to pay 100 $ per year to store our data, its a good problem to have but I don't really want to pay it. The main reason we are using dropbox instead of a free service like OSF is dropbox is much faster upload speed. We may want to test out zenodo: https://developers.zenodo.org/ to see if we can get the same speed without spending the extra money.

Done


Error: Could not create the Java Virtual Machine.

The error message I encounter when running the ./joern command is as follows. How can I resolve this?

joern-cli:v2.0.330

This has been fixed with https://github.com/joernio/joern/pull/4667


Introduce a useSingleton hook

This addresses #132 — it hasn't been fully tested, but I just wanted to push up what I have for any feedback/discussion. The basic usage is:
import Tippy, {useSingleton} from<EMAIL_ADDRESS>
function Demo() {
  const singleton = useSingleton({delay: 500});

  return (

      <Tippy singleton={singleton} content="Tooltip 1">
        <button>One</button>
      </Tippy>
      <Tippy singleton={singleton} content="Tooltip 2">
        <button>Two</button>
      </Tippy>
      <Tippy singleton={singleton} content="Tooltip 3">
        <button>Three</button>
      </Tippy>

  );
}

What benefits does this have over the filtering technique I mentioned in the issue? e.g.
<TippySingleton>

  <Tippy content="tooltip">
    <button />
  </Tippy>

  <Tippy content="tooltip">
    <button />
  </Tippy>

</TippySingleton>

// If `content` isn't enough (e.g. other children have this prop),
// fallback to them specifying `singleton` as a prop to make it work
// Or is there a better way?
function isTippyChild(child) {
  return child.props.content || child.props.singleton;
}

Yeah, basically this allows us to group tippy instances regardless of where they are in our component tree. In our case, I may be able to restructure things such that they’re all children of the same container, but it’s not convenient to do so. Using the hook means it doesn’t matter where your Tippy components live in your app…

I'm just wondering if we should instead add a render props API to <TippySingleton /> instead of a hook?
I know the whole purpose of hooks was to reduce nesting in component trees, but in this case, I dislike how there would be "two ways" to do things in terms of importing functionality 😖

The story on the README might be something like:
Singleton
Wraps the createSingleton() method.

If each of your reference elements are adjacent to one another with no nesting in the tree, import the <TippySingleton /> component:

import Tippy, {TippySingleton} from<EMAIL_ADDRESS>
// ...

<TippySingleton delay={500}>
  <Tippy content="a">
    <button />
  </Tippy>
  <Tippy content="b">
    <button />
  </Tippy>
</TippySingleton>

If your reference elements are not adjacent, or there is nesting in the tree, import the useSingleton hook:

import Tippy, {useSingleton} from<EMAIL_ADDRESS>
function App() {
  const singleton = useSingleton({delay: 500});

  return (
    <>
      <Tippy content="a" singleton={singleton}>
        <button />
      </Tippy>
      <button />

        <Tippy content="b" singleton={singleton}>
          <button />
        </Tippy>

    </>
  );
}

I did consider using Context, would eventually mean converting TippySingleton to a context provider, and then have all Tippy instances check for that context internally. It would work with nested components without adding a new API, but my preference is for the hook as it feels more natural to me.

I do also think that offering 2 ways is OK, especially right now, since some people like the hooks API and some prefer classes and render props.
Personally, if I never have to deal with another render prop, that will make me very happy :)

I think the hook is fine =]
As for tests - the <TippySingleton /> tests are far from robust or well written, but hopefully you can write some decent ones for it?

@atomiks Alright, I replicated all the tests in TippySingleton.test.js as their useSingleton counterparts. All the tests pass, and you can take a look at it in the demo/ as well. Let me know if you have any other concerns…

Thanks a lot!
What is onComponent? createSingleton also has onCreate prop which should cover that

It’s basically there for testing only. I’m using it to access the singleton instance and the array of instances in the test. It’s not ideal, but it feels necessary.

It’s basically there for testing only. I’m using it to access the singleton instance and the array of instances in the test. It’s not ideal, but it feels necessary.

Yeah you're right 😳 Maybe it should be underscored and highlighted it's only for testing?

Yeah, maybe I’ll rename it to __dangerouslyWatchCommponentRef or something. I’m on my phone right now but will update my PR in a bit.

Actually, I was able to remove that method entirely and get all the instance references I needed with wrapper components.

I'll have to update the README after release, right? Once this is merged it will be live but not released (I have a PR to make after this)

Cool, I like your tweaks to the README!

Thank you for all your hard work on Tippy—and especially the fantastic documentation. It's a great library.

Just realized –– does this hook need types? /cc @KubaJastrz


[Feature] Additional Codes for BOFA

Additional codes I'd like to use for Bank of America files. Not completely sure about the CodeTransaction or CodeLevel enums, let me know what you think.
159 and 459: https://x9.org/wp-content/uploads/2018/07/BTRS-BAI2-Transaction-Codes-and-Format-to-Support-Real-Time-Payments.pdf
906 and 907: https://cashproonline-cdn1.cpoacc.com/cpwportal/cms/public/html/CashProOnline/CPO_Help/Reporting/IRR/PDFs/BAI_Codes.pdf

Closed in favour of https://github.com/ministryofjustice/bai2/pull/24


Added carthage support. Refactored code.

Changes:

Added Carthage support for this project.
Added badges to readme.
Moved code from pod folder into project.
Remove #imports for frameworks switched to @import.

Notes:
I haven't tested the Cocoapod.

Hi Josh,
Thanks for the PR! I've asked our mobile team to review. :+1:

Cheers, Just a heads up my changes appear to have broken the sample project.
My latest commit has some fixes for Swift support, Apple Pay support when using the module and I have set the deployment target to iOS 8, it has silenced a lot of deprecation notices.


Added missing fields in Better MTD sample data

Fixes missing fields in Better MTD sample data

Thanks @nazang  for the quick response.


Walking Foh skips buffing and gets stuck in river of flame

Details
Walking Foh skips buffing holy shield at waypoint when no CTA is equipped.
Bot will cast holy shield about 1/3rd of the way to chaos.
When CTA is equipped the bot buffs at the waypoint like normal.
Bot then gets stuck on monsters while navigating through river of flame and has trouble clearing a path.
Does not happen in 0.5.1
https://github.com/user-attachments/assets/c2688dd5-2977-4812-87f1-b19700d11621
Version
refactor
Logs
time=01:52:44 level=INFO msg="Starting Game #4. Run list: diablo"
time=01:52:44 level=DEBUG msg="Fetching map data..." seed=330551600 difficulty=nightmare
time=01:52:49 level=DEBUG msg="Fetch completed" ms=4773
time=01:52:49 level=DEBUG msg="Switching to legacy mode..."
time=01:52:50 level=DEBUG msg="Checking for items to identify..."
time=01:52:50 level=DEBUG msg="No items to identify..."
time=01:52:50 level=DEBUG msg="Belt Stats Health: 2/8 healing, 4/4 mana, 0/4 rejuv."
time=01:52:50 level=DEBUG msg="Need more pots, let's buy them."
time=01:52:50 level=INFO msg="Visiting vendor..." forceRefill=false
time=01:52:54 level=DEBUG msg="Buying: 6 Healing potions and 0 Mana potions"
time=01:52:55 level=DEBUG msg="Purchased Greater Healing Potion [X:9 Y:9]"
time=01:52:56 level=DEBUG msg="Purchased Greater Healing Potion [X:9 Y:9]"
time=01:52:57 level=DEBUG msg="Purchased Greater Healing Potion [X:9 Y:9]"
time=01:52:58 level=DEBUG msg="Purchased Greater Healing Potion [X:9 Y:9]"
time=01:52:59 level=DEBUG msg="Purchased Greater Healing Potion [X:9 Y:9]"
time=01:53:00 level=DEBUG msg="Purchased Greater Healing Potion [X:9 Y:9]"
time=01:53:01 level=DEBUG msg="Checking for items to stash..."
time=01:53:01 level=DEBUG msg="Checking for items to stash..."
time=01:53:01 level=DEBUG msg="Cube recipes are disabled, skipping"
time=01:53:05 level=DEBUG msg="Post CTA Buffing..."
time=01:53:28 level=DEBUG msg="Monsters detected close to the item being picked up, killing them..." monster="{UnitID:34 Name:305 IsHovered:false Position:{X:7784 Y:5722} Stats:map[life:31744 maxlife:32768 level:57 fireresist:60 lightningresist:60 velocitypercent:75 attackrate:100 otheranimrate:100 pierceidx:13508] Type:None States:[44 105]}"
time=01:53:28 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:29 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:29 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:29 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:29 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:30 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:30 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:30 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:30 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:31 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:31 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:31 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:31 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:32 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:32 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:32 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:32 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:33 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:33 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:33 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:33 level=DEBUG msg="Item Detected: Flail [6] at X:7778 Y:5733"
time=01:53:33 level=DEBUG msg="Picking up: Flail [Rare]"
time=01:53:33 level=DEBUG msg="Using HealingPotion potion on Mercenary [Column: 2]. HP: 51"
time=01:53:36 level=INFO msg="Picked up: Flail [Rare]"
time=01:53:36 level=DEBUG msg="Monsters detected close to the item being picked up, killing them..." monster="{UnitID:34 Name:305 IsHovered:false Position:{X:7784 Y:5722} Stats:map[life:28672 maxlife:32768 level:57 fireresist:60 lightningresist:60 velocitypercent:75 attackrate:100 otheranimrate:100 pierceidx:13510] Type:None States:[28 44 105 107]}"
time=01:53:36 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:36 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:36 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:37 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:37 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:37 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:38 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:38 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:38 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:38 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:39 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:39 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:39 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:39 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:40 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:40 level=DEBUG msg="Item Detected: ShortSpear [4] at X:7780 Y:5729"
time=01:53:41 level=DEBUG msg="Picking up: Short Spear [Magic]"
time=01:53:41 level=INFO msg="Picked up: Short Spear [Magic]"
time=01:53:41 level=DEBUG msg="Monsters detected close to the item being picked up, killing them..." monster="{UnitID:33 Name:305 IsHovered:false Position:{X:7791 Y:5713} Stats:map[life:32768 maxlife:32768 level:57 fireresist:60 lightningresist:60 velocitypercent:75 attackrate:100 otheranimrate:100 pierceidx:13502] Type:None States:[105]}"
time=01:53:41 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:42 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:42 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:42 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:42 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:43 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:43 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:43 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:44 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:53:44 level=DEBUG msg="Item Detected: RejuvenationPotion [2] at X:7778 Y:5729"
time=01:53:44 level=DEBUG msg="Picking up: Rejuvenation Potion [Normal]"
time=01:53:44 level=INFO msg="Picked up: Rejuvenation Potion [Normal]"
time=01:53:45 level=DEBUG msg="Post CTA Buffing..."
time=01:53:52 level=DEBUG msg="Using HealingPotion potion [Column: 2]. HP: 74 MP: 100"
time=01:54:00 level=DEBUG msg="Using HealingPotion potion [Column: 2]. HP: 75 MP: 100"
time=01:54:10 level=DEBUG msg="Monsters detected close to the item being picked up, killing them..." monster="{UnitID:43 Name:305 IsHovered:false Position:{X:7827 Y:5670} Stats:map[life:32768 maxlife:32768 level:57 fireresist:60 lightningresist:60 velocitypercent:75 attackrate:100 otheranimrate:100 pierceidx:13519] Type:None States:[105 107]}"
time=01:54:11 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:54:11 level=INFO msg="Enemy is out of range and can not be reached" monster=305
time=01:54:19 level=DEBUG msg="Using HealingPotion potion [Column: 2]. HP: 70 MP: 100"
time=01:54:24 level=DEBUG msg="Using HealingPotion potion [Column: 1]. HP: 63 MP: 100"
time=01:54:27 level=DEBUG msg="Using RejuvenationPotion potion [Column: 4]. HP: 85 MP: 100"
time=01:54:34 level=DEBUG msg="Using HealingPotion potion on Mercenary [Column: 1]. HP: 78"
time=01:54:42 level=DEBUG msg="Using HealingPotion potion [Column: 1]. HP: 68 MP: 100"
time=01:54:52 level=DEBUG msg="Using HealingPotion potion [Column: 1]. HP: 74 MP: 100"
time=01:54:55 level=DEBUG msg="Item Detected: Amulet [4] at X:7822 Y:5621"
time=01:54:56 level=INFO msg="At least 4 monsters detected close to the character, targeting closest one: 189"
time=01:55:06 level=DEBUG msg="Picking up: Amulet [Magic]"
time=01:55:06 level=INFO msg="Picked up: Amulet [Magic]"
time=01:55:06 level=DEBUG msg="Monsters detected close to the item being picked up, killing them..." monster="{UnitID:59 Name:311 IsHovered:false Position:{X:7822 Y:5621} Stats:map[life:32256 maxlife:32768 level:57 fireresist:40 lightningresist:80 coldresist:40 poisonresist:40 velocitypercent:75 attackrate:100 otheranimrate:100 pierceidx:13442] Type:None States:[105]}"
time=01:55:11 level=DEBUG msg="Item Detected: Amulet [4] at X:7822 Y:5621"
time=01:55:11 level=DEBUG msg="Picking up: Amulet [Magic]"
time=01:55:12 level=INFO msg="Picked up: Amulet [Magic]"
time=01:55:12 level=DEBUG msg="Item Detected: Flail [4] at X:7780 Y:5676"
time=01:55:23 level=DEBUG msg="Picking up: Flail [Magic]"
time=01:55:24 level=INFO msg="Picked up: Flail [Magic]"
time=01:55:24 level=DEBUG msg="Clearing area around character..." distance=10
time=01:55:26 level=DEBUG msg="Checking for items to identify..."
time=01:55:26 level=INFO msg="Identifying 4 items..."
time=01:55:37 level=INFO msg="Visiting vendor..." forceRefill=false
time=01:55:43 level=DEBUG msg="Buying: 8 Healing potions and 0 Mana potions"
time=01:55:44 level=DEBUG msg="Purchased Greater Healing Potion [X:9 Y:8]"
time=01:55:45 level=DEBUG msg="Purchased Greater Healing Potion [X:9 Y:8]"
time=01:55:46 level=DEBUG msg="Purchased Greater Healing Potion [X:9 Y:8]"
time=01:55:47 level=DEBUG msg="Purchased Greater Healing Potion [X:9 Y:8]"
time=01:55:48 level=DEBUG msg="Purchased Greater Healing Potion [X:9 Y:8]"
time=01:55:49 level=DEBUG msg="Purchased Greater Healing Potion [X:9 Y:8]"
time=01:55:50 level=DEBUG msg="Purchased Greater Healing Potion [X:9 Y:8]"
time=01:55:51 level=DEBUG msg="Purchased Greater Healing Potion [X:9 Y:8]"
time=01:55:51 level=DEBUG msg="Filling TP Tome..."
time=01:55:52 level=DEBUG msg="Filling IDs Tome..."
time=01:55:54 level=DEBUG msg="Item Amulet [Magic] sold"
time=01:55:55 level=DEBUG msg="Item Flail [Rare] sold"
time=01:55:56 level=DEBUG msg="Item Flail [Magic] sold"
time=01:55:57 level=DEBUG msg="Item Short Spear [Magic] sold"
time=01:55:57 level=DEBUG msg="Checking for items to stash..."
time=01:55:57 level=DEBUG msg="Checking for items to stash..."
time=01:55:57 level=DEBUG msg="Cube recipes are disabled, skipping"
time=01:55:58 level=INFO msg=Pausing... configuration="lower foh"

thats because refactor branch is not a final product  its constantly changing.
Currently doesnt handle the clearing to chaos by walking  but is on the todo list.


Thousand / decimal separator

How can I configure the thousand / decimal separator? I need to display this number 1.000.000 (one million) and here in Brazil we use dots "." instead of commas "," as a thousand separator, while the decimal separator is a comma.

In Rusia we also use dots as thousand separator and comma as float separator.

Same here, i need points as thousand seperator and comma as decimal seperator


fbsetbg from fluxbox creates a malformed .fehbg in nixos-18.03

Issue description
Using fbsetbg from fluxbox-1.3.7 and feh-2.25 on nixos-18.03 to set the desktop wallpaper creates a malformed .fehbg file.
Steps to reproduce
Running:
fbsetbg -a -r ~/.backgrounds

where ~/.backgrounds is a folder containing one or more image files (tested with jpg) results in a ~/.fehbg file containing:
#!/bin/sh
'/run/current-system/sw/bin/feh' '--theme=feh' '--bg-fill' '/home/u/.backgrounds/4123.jpg'

Executing this script by either sh ~/.fehbg or ~/.fehbg results in:
.fehbg: line 3: unexpected EOF while looking for matching `''
.fehbg: line 4: syntax error: unexpected end of file

In the past the .fehbg file didn't contain quotes around each argument behaving as expected.
Technical details
 - system: `"x86_64-linux"`
 - host os: `Linux 4.14.32, NixOS, 18.03.git.efd3f40 (Impala)`
 - multi-user?: `yes`
 - sandbox: `yes`
 - version: `nix-env (Nix) 2.0`
 - channels(root): `"nixos-17.09.1547.2231575a7d"`
 - channels(u): `"nixos-unstable-18.03pre117690.ab2cc75f78"`
 - nixpkgs: `/var/nixpkgs-channels/nixos-17.09`

I should also add that simply using an older fluxbox path I had on the system (from 17.09) produced the same result.
This leads me to believe the issue lies elsewhere but is now triggered by fbsetbg.

This has long been fixed


Android support?

I assume you have it already! - Just not on this table https://agrevster.github.io/pocketbase-kotlin/#support

I am not at all familiar with Android development. I have JVM as a target, is there something else I need to do to add android?

Hmm let me try. Adding to my kotlin.sourceSets of build.gradle.kts:
androidMain.dependencies {
    implementation(libs.ktor.client.okhttp)
    implementation(libs.ktor.client.android)
    implementation(libs.ktor.serialization.kotlinx.json)
}

commonMain.dependencies {
    implementation(libs.coil.network.ktor3)
    implementation(libs.ktor.client.core)
    implementation(libs.kotlinx.coroutines.core)
    implementation(libs.ktor.serialization.kotlinx.json)
    implementation(libs.ktor.client.content.negotiation)
    implementation("io.github.agrevster:pocketbase-kotlin:2.6.3")
}

But getting this error:
java.lang.NoClassDefFoundError: Failed resolution of: Lio/ktor/client/plugins/contentnegotiation/ContentNegotiation;
                                                                                at io.github.agrevster.pocketbaseKotlin.PocketbaseClient.httpClient$lambda$3(PocketbaseClient.kt:95)
                                                                                at io.github.agrevster.pocketbaseKotlin.PocketbaseClient.$r8$lambda$35QVJFy4Gam8I0rsxXs0bQWumTk(Unknown Source:0)
                                                                                at io.github.agrevster.pocketbaseKotlin.PocketbaseClient$$ExternalSyntheticLambda3.invoke(D8$$SyntheticClass:0)
                                                                                at io.github.agrevster.pocketbaseKotlin.Module_cioKt.httpClient$lambda$1(Module.cio.kt:7)
                                                                                at io.github.agrevster.pocketbaseKotlin.Module_cioKt.$r8$lambda$c5sYuqMXPLJmxFVMt1fY_dgx_4k(Unknown Source:0)
                                                                                at io.github.agrevster.pocketbaseKotlin.Module_cioKt$$ExternalSyntheticLambda0.invoke(D8$$SyntheticClass:0)
                                                                                at io.ktor.client.HttpClientKt.HttpClient(HttpClient.kt:42)
                                                                                at io.github.agrevster.pocketbaseKotlin.Module_cioKt.httpClient(Module.cio.kt:7)
                                                                                at io.github.agrevster.pocketbaseKotlin.PocketbaseClient.<init>(PocketbaseClient.kt:94)
                                                                                at io.github.agrevster.pocketbaseKotlin.PocketbaseClient.<init>(PocketbaseClient.kt:21)

Which as far AFAIK is from the fully-qualified name:
import androidx.compose.material.Text
import androidx.compose.runtime.Composable

import io.ktor.http.URLProtocol

private val client = io.github.agrevster.pocketbaseKotlin.PocketbaseClient({
    protocol = URLProtocol.HTTP
    host = "localhost"
    port = 8090
})

@Composable
fun ClientContent() {
    Text(client.toString())
}

From what I’ve read JVM target will work for Android. Can you send your versions toml file?

It looks like it might be a problem on your end

So is it working with Android | Kotlin Multiplatform ?

Strange... I will investigate again.

All done with finals. I am taking a look now.


Can not new a Baremetal Instance when using cloudstack to manager the Baremetal Server ?

We want using cloudstack to manager the Baremetal Server to achieve to deploy the OS on physical server.
ISSUE TYPE

Bug Report
Baremetal Management

COMPONENT NAME

Baremetal Management

CLOUDSTACK VERSION

CloudStack <IP_ADDRESS>

CONFIGURATION

The Zone name is csbm using Basic (Network type). and the cluster Hypervisor is BareMetal

Management Network: VLAN2128 : <IP_ADDRESS>/24  (IP range is: <IP_ADDRESS> ---> <IP_ADDRESS>)
Guest Network:   10.25.30.X/24 (IP range is: <IP_ADDRESS>  --->  <IP_ADDRESS>).   I think this is also the IPMI network.

The config  is as below:

STEPS TO REPRODUCE

Create a basic Zone as above
Add Baremetal Server info:

ilo:   <IP_ADDRESS>
Ilo Host MAC: f4:02:70:9c:a5:d0
of CPU cores:  14
CPU (in MHz): 1000
Memory (in MB): 515240   (MemTotal:       527606672 kB)
Host Net MAC: 34:80:0d:43:39:ec

Add second storage using NFS
Add the above  Baremetal Server to the cluster
The template is ks=http://<IP_ADDRESS>:8080/cloudstack_ks/CentOS-79-x86_64.ks;kernel=<IP_ADDRESS>:/var/lib/tftpboot/images/CentOS-7.9-x86_64/vmlinuz;initrd=<IP_ADDRESS>:/var/lib/tftpboot/images/CentOS-7.9-x86_64/initrd.img and add it to the zone:
Add BaremetalDhcpProvider and BaremetalPxeProvider:

Add compute offering:

New a Instance:

The error on web UI:

Request failed. (431)
Hypervisor BareMetal does not support rootdisksize override

The cloudstack manager error log is:
2023-11-01 11:52:11,611 WARN  [o.a.c.a.ProjectRoleBasedApiAccessChecker] (qtp1955920234-21:ctx-6316c47a ctx-d191f040) (logid:8b62d839) Project is null, ProjectRoleBasedApiAccessChecker only applies to projects, returning API [deployVirtualMachine] for user [User {"username":"admin","uuid":"5be40e54-0958-11ec-8fc1-005056b6a63a"}.] as allowed.
2023-11-01 11:52:11,613 DEBUG [o.a.c.a.StaticRoleBasedAPIAccessChecker] (qtp1955920234-21:ctx-6316c47a ctx-d191f040) (logid:8b62d839) RoleService is enabled. We will use it instead of StaticRoleBasedAPIAccessChecker.
2023-11-01 11:52:11,614 DEBUG [o.a.c.r.ApiRateLimitServiceImpl] (qtp1955920234-21:ctx-6316c47a ctx-d191f040) (logid:8b62d839) API rate limiting is disabled. We will not use ApiRateLimitService.
2023-11-01 11:52:11,642 DEBUG [c.c.u.AccountManagerImpl] (qtp1955920234-21:ctx-6316c47a ctx-d191f040) (logid:8b62d839) Access granted to Account [{"accountName":"admin","id":2,"uuid":"5be302d9-0958-11ec-8fc1-005056b6a63a"}] to org.apache.cloudstack.quota.vo.ServiceOfferingVO$$EnhancerByCGLIB$$46ce7255@3e0fe605 by AffinityGroupAccessChecker
2023-11-01 11:52:11,643 DEBUG [c.c.u.AccountManagerImpl] (qtp1955920234-21:ctx-6316c47a ctx-d191f040) (logid:8b62d839) Access granted to Account [{"accountName":"admin","id":2,"uuid":"5be302d9-0958-11ec-8fc1-005056b6a63a"}] to null by AffinityGroupAccessChecker
2023-11-01 11:52:11,658 INFO  [c.c.a.ApiServer] (qtp1955920234-21:ctx-6316c47a ctx-d191f040) (logid:8b62d839) Hypervisor BareMetal does not support rootdisksize override
2023-11-01 11:52:11,659 DEBUG [c.c.a.ApiServlet] (qtp1955920234-21:ctx-6316c47a ctx-d191f040) (logid:8b62d839) ===END===  <IP_ADDRESS> -- GET  zoneid=f84ce38e-19a1-406c-b084-77fe9f2e0938&podid=89c04114-3d16-42a0-8b94-545d03d75574&clusterid=a26a640e-8196-436a-93a1-b4a6f8a1700f&hostid=651f88a7-7289-47b5-b546-ef082d3a469e&boottype=BIOS&bootmode=LEGACY&templateid=20886ce1-de64-4bcb-8b18-a46c5c0f1711&startvm=true&serviceofferingid=8625dc84-75b5-423f-b496-22dd266c8f71&affinitygroupids=&keypairs=&name=test001&displayname=test001&command=deployVirtualMachine&response=json

I don't know why the web UI using command=deployVirtualMachine  to create a Baremetal Instance.  Could you please take a look at this problem?  If need other info, please add a comment.
EXPECTED RESULTS
Create a Baremetal Instance successfully
ACTUAL RESULTS
Can not Create a Baremetal Instance

I can not find some useful info on the official doc, I just find the belows:
Reference:

http://events17.linuxfoundation.org/sites/events/files/slides/Baremetal-v4.1a.pdf
https://github.com/apache/cloudstack/issues/5772
https://cwiki.apache.org/confluence/display/CLOUDSTACK/Baremetal+KickStart
https://download.cloudstack.org/centos/7/4.18/cloudstack-baremetal-agent-<IP_ADDRESS>-1.el7.x86_64.rpm
https://github.com/apache/cloudstack/issues/8091
https://docs.accelerite.com/app/cloudplatform/pdf/CloudPlatform_powered_by_Apache_CloudStack_Version_4.5.1_Getting_Started_Guide.pdf

@harikrishna-patnala  @utchoang @hooklee2000

@xuanyuanaosheng good to see the usage of baremetal in the deployments. Thanks.
The steps that you've followed seems to be correct to me. The error that you are facing seems like a regression
https://github.com/shapeblue/cloudstack-apple/blob/1b35a5aa1c5112ff3de7461939da9700f131348d/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java#L4341
This call should not be here unless there are custom parameters defined to override disk offering.
We can fix it somehow but we need your help to verify the pull request due to lack of infrastructure. is it possible for you @xuanyuanaosheng
Also I'm not sure if full work flow for baremetal is in working condition as I've last tested it many years ago.

@harikrishna-patnala  I'm very happy to proceed with the next test. Please provide the relevant installation package.

@harikrishna-patnala  Any update?

@xuanyuanaosheng I'll need to investigate the issue and prepare a fix. Realistically I cannot promise a PR for this as I cannot reproduce the issue (due to lack of infra) but I'll give it a try

@harikrishna-patnala   Thanks, I will wait for you

@harikrishna-patnala is there a way to work around this issue? we face the same problem now.


[Azure Search] Introduce the minimumPrecision parameter for Entity recognition skill

minimumPrecision was already exposed by the REST API, but it was reserved.
Soon (next couple of weeks), that parameter will be used to filter out low confidence entities.
Latest improvements:
MSFT employees can try out our new experience at OpenAPI Hub  - one location for using our validation tools and finding your workflow.

Contribution checklist:

[x] I have reviewed the documentation for the workflow.
[x] Validation tools were run on swagger spec(s) and have all been fixed in this PR.
[x] The OpenAPI Hub was used for checking validation status and next steps.

ARM API Review Checklist

[ ] Service team MUST add the "WaitForARMFeedback" label if the management plane API changes fall into one of the below categories.
adding/removing APIs.
adding/removing properties.
adding/removing API-version.
adding a new service in Azure.

Failure to comply may result in delays for manifest application. Note this does not apply to data plane APIs.

[ ] If you are blocked on ARM review and want to get the PR merged urgently, please get the ARM oncall for reviews (RP Manifest Approvers team under Azure Resource Manager service) from IcM and reach out to them.
Please follow the link to find more details on API review process.

Automation for azure-sdk-for-go

FYI: @brjohnstmsft

Automation for azure-sdk-for-js

Automation for azure-sdk-for-python

Automation for azure-sdk-for-ruby

Can one of the admins verify this patch?

Automation for azure-sdk-for-java

Adding @shahabhijeet & @ds-ms to get their opinion on .NET SDK generation failure

@sarangan12 Per RPs request we are skipping code generation here as posted in the error messages. We can turn those into Warnings if you'd prefer.
tldr; expected error, disregard


Clear CloudFront cache as part of CI for TM Frontend Deploy

Recently, we had some really hard to track down issues post a deploy of the Tasking Manager frontend that were partly caused because the CloudFront cache had different versions of files for different users.
We should always fully clear the CloudFront cache after a deploy, as part of the CI deploy process.

@batpad This been already implemented and tested in staging and production :
https://github.com/OpenHistoricalMap/tasking-manager/tree/production
The code added in github-action is going to create invalidations to clean the cache in cloudfront. 👇

cc. @danrademacher


Update invalid icon

In the pattern discussion from 02.05.2024 we discussed the validation icon for invalid error messages. We decided to put the icon within the error message and change it from the exclamation mark to the exclamation mark within a triangle. This helps visibility on small font sizes and bad screens.
Old icon:

New icon:

### Replace icon for
- [ ] Input text
- [ ] Select
- [ ] Textarea
- [ ] Checkbox
- [ ] Radio button
- [ ] Switch
- [ ] Card control
- [ ] Slider

### Tasks
- [ ] Make validation messages mandatory for all components that can be validated

Ready for dev

Form validation is kept as is for now.


C++ API confusion

new to google cloud cpp, first cpp is not listed at client-api page: https://developers.google.com/api-client-library
then there is a page saying c++ client api is deprecated: https://google.github.io/google-api-cpp-client/latest/
so I thought OK only AWS provides a c++ SDK these days, then I saw this project at github from google: https://github.com/googleapis/google-cloud-cpp which is also listed here: https://cloud.google.com/apis/docs/cloud-client-libraries
so, is this google-cloud-app a replacement for the deprecated c++ client api?
also cloud-storage-c++-api is include here as well?
sorry I could not find a place to ask general questions.

first cpp is not listed at client-api page: https://developers.google.com/api-client-library

Correct.  Without going too much into history, this project (google-cloud-cpp) aims to provide C++ client libraries for Google Cloud Platform, and we are only human, so we have prioritized the libraries with most demand (as we understand it) first.  We are not trying to write C++ client libraries for all google services, e.g., Ads.  If we have missed a library or you think we should prioritize some Cloud service ahead of the others do let us know, that is valuable information.

then there is a page saying c++ client api is deprecated: https://google.github.io/google-api-cpp-client/latest/

Correct.  Those libraries were based on automatic code generation for the REST APIs.  For a number of reasons that is not the best approach for some of the most interesting services (e.g., Google Cloud Storage, or Cloud Spanner).

so, is this google-cloud-cpp a replacement for the deprecated c++ client api?

See above.  I think the answer is "partially yes".

also cloud-storage-c++-api is include here as well?

This repository contains a client library for Google Cloud Storage, yes.  See the README for details:
https://github.com/googleapis/google-cloud-cpp/blob/main/google/cloud/storage/README.md

sorry I could not find a place to ask general questions.

Using an issue is perfectly fine, using GitHub Discussions is also fine.  Your preference.

Thanks a lot for the clarification.


Dash eye Icon Script added

Title of the Pull Request

[X] Have you renamed the PR Title in a meaningful way?

Related Issue

Closes: #1134
Description

Dash eye Icon Script added in sign in and sign up page
How Has This Been Tested? ⚙

Screenshots 📷
https://github.com/user-attachments/assets/bb7af121-921b-4106-a838-f258822241d1
Type of change
What sort of changes have you made:

[X] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Code style update (formatting, local variables)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update

Checklist

[X] My code follows the code style of this project.
[X] I have followed the contribution guidelines
[X] I have performed a self-review of my own code.
[X] I have ensured my changes don't generate any new warnings or errors.
[X] I have updated the documentation (if necessary).
[X] I have resolved all merge conflicts.

Thank you


Add specific version of used dataset

First of all, thank you for the nice work and for open-sourcing it.
I'm opening this issue to suggest you to indicate in the README the specific version of the HeySnips dataset to be used given that two different versions exist.
In particular, when using the first version, i.e., the one associated to Coucke et al., 2019, "Efficient keyword spotting using dilated convolutions and gating" an error is raised in the self_learning_personalized_kws.py script at line 184 due to the fact that the minimum number of positive samples is <= 10.
Best,
Matteo

Thanks for noticing. The correct version is the V2. I updated the README and I will point this out also in an updated paper version. I hope you were able to reproduce the paper results using the data.


Does not work with subarrays

A bug with Node.js is causing the offsets of subarrays to not be registered when using the following pattern:
v8::Local<v8::Float64Array> array = argument.As<v8::Float64Array>();
void *data = array->Buffer()->GetContents().Data();
double *x = static_cast<double*>(data);

This seems to be fixed by using the following hack:
v8::Local<v8::Float64Array> array = argument.As<v8::Float64Array>();
void *data = array->Buffer()->GetContents().Data();

size_t offset = array->ByteOffset();
size_t data_ptr = reinterpret_cast<size_t>(data);
data_ptr += offset;

double *x = reinterpret_cast<double*>(data_ptr);

However, it appears to be undefined behaviour in C++. Not sure if I should wait for Node.js to patch the bug or if I should incorporate above into the code.
Ping @metabench.

I'd hesitate to call the first example a 'pattern', no offence to its authors intended. It looks like it gets the contents of the underlying buffer, and may not be the right code to match the intention. It's a general area I'm unsure about though, and am asking others, including those who run node.js to consider, and to establish and document what the patterns are.
See https://github.com/nodejs/node/issues/8269
I'm hopeful that those with a thorough understanding of V8 and C++ can agree on what the best practice for this is. I've not yet tried the provided hack. If no-one else has done this yet, I suppose that by default it is best practice as well as being a hack.

Searched the node repo for GetContents() occurrences and found a few interesting results, e.g. this test binding for zlib:
auto buffer = view->Buffer();
auto contents = buffer->GetContents();
auto data = static_cast<unsigned char*>(contents.Data()) + byte_offset;

...

auto result = node::Buffer::Copy(info.GetIsolate(),
                                 reinterpret_cast<const char*>(buf),
                                 sizeof(buf) - stream.avail_out);

They cast the underlying buffer to unsigned char*, add the offset and then later in the code use reinterpret_cast so it might be acceptable to do like that.

I got this to work:
void *data = array->Buffer()->GetContents().Data());
size_t offset = array->ByteOffset();
unsigned char* data_offset = static_cast<unsigned char*>(data + offset);
double *x = reinterpret_cast<double*>(data_offset);

The first line of that example does not have matching brackets. Having removed an extra bracket at the end, I also get a compilation error:
error C2036: 'void *' : unknown size

on the line that corresponds with:
unsigned char* data_offset = static_cast<unsigned char*>(data + offset);

Wow that was sloppy pasting on my part, the + offset should be outside of the cast. Edited the code above.

I took the last two lines of your corrected code and condensed it into:
double *x = reinterpret_cast<double*>(static_cast<unsigned char*>(data) + offset);

I suggest that would be better as it does not leave the unsigned char *data_offset data structure in memory, what's your opinion on this, @mateogianolio?

Looks good!
I'm going to update the code in this repo with the fix and submit a pull request.


Support layers in generated server codes.

Feature Request
Crates

tonic, tonic-build
Motivation

Servers generated by tonic-build have with_interceptor method, so that users can inject some layers before underlying service. However,  async/await is unavailable in an interceptor.
Although the document  and examples suggest to use Server::layer for such demand,  there are some limitations.

Users cannot choose services to be wrapped.
Layers cannot access tonic::Request (http::Request is available instead) .

Proposal

Make tonic-build to generate layer method for each server.
Server::builder()
    .add_service(ServerA::new(service_a).layer(MyLayer))
    .add_service(ServerB::new(service_b))
    .serve()
    .await?

struct MyLayer {
   ..
}

impl Layer<S> for  MyLayer {
    type Service = MyService<S>;
    ..
}

struct MyService<S> {
   ..
}

impl<S, T, U> Service<tonic::Request<T>> for MyService<S>
where
    S: Service<tonic::Request<T>, Response = tonic::Response<U>, Error = tonic::Status>,
    ..
{
     type Response = tonic::Response<U>;
     type Error = tonic::Status;
     ..
}

Alternatives

A workaround is to conduct routing and type conversion (http::Request/Response <-> tonic::Request/Response) in layers of Server::layer. This is redundant since generated servers do routing and type conversion in them.

You can use tower's ServiceBuilder for this.

No, ServiceBuilder cannot inject layers that handles tonic::Request and tonic::Response .
I tried with examples/src/helloworld/server.rs
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let addr = "[::1]:50051".parse().unwrap();
    let greeter = MyGreeter::default();

    println!("GreeterServer listening on {}", addr);

    let service = tower::ServiceBuilder::new()
        .layer(MyLayer {})
        .service(GreeterServer::new(greeter));

    Server::builder().add_service(service).serve(addr).await?;

    Ok(())
}

#[derive(Clone)]
struct MyLayer {}

impl<S> tower::Layer<S> for MyLayer {
    type Service = MyService<S>;

    fn layer(&self, inner: S) -> Self::Service {
        MyService { inner }
    }
}

#[derive(Clone)]
struct MyService<S> {
    inner: S,
}

impl<S, T, U> tower::Service<tonic::Request<T>> for MyService<S>
where
    S: tower::Service<tonic::Request<T>, Response = tonic::Response<U>>,
{
    type Response = tonic::Response<U>;
    type Error = S::Error;
    type Future = S::Future;

    fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
        self.inner.poll_ready(cx)
    }

    fn call(&mut self, request: tonic::Request<T>) -> Self::Future {
        self.inner.call(request)
    }
}

This code raises the following errors.
error[E0277]: the trait bound `MyService<GreeterServer<MyGreeter>>: Service<request::Request<tonic::transport::Body>>` is not satisfied
   --> examples/src/helloworld/server.rs:41:35
    |
41  |     Server::builder().add_service(service).serve(addr).await?;
    |                       ----------- ^^^^^^^ the trait `Service<request::Request<tonic::transport::Body>>` is not implemented for `MyService<GreeterServer<MyGreeter>>`
    |                       |
    |                       required by a bound introduced by this call
    |
    = help: the trait `Service<tonic::Request<T>>` is implemented for `MyService<S>`
note: required by a bound in `Server::<L>::add_service`
   --> /home/admin/github.com/hyperium/tonic/tonic/src/transport/server/mod.rs:364:12
    |
362 |     pub fn add_service<S>(&mut self, svc: S) -> Router<L>
    |            ----------- required by a bound in this associated function
363 |     where
364 |         S: Service<Request<Body>, Response = Response<BoxBody>, Error = Infallible>
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `Server::<L>::add_service`

error[E0277]: the trait bound `MyService<GreeterServer<MyGreeter>>: NamedService` is not satisfied
   --> examples/src/helloworld/server.rs:41:35
    |
41  |     Server::builder().add_service(service).serve(addr).await?;
    |                       ----------- ^^^^^^^ the trait `NamedService` is not implemented for `MyService<GreeterServer<MyGreeter>>`
    |                       |
    |                       required by a bound introduced by this call
    |
    = help: the following other types implement trait `NamedService`:
              GreeterServer<T>
              tonic::service::interceptor::InterceptedService<S, F>
              Either<S, T>
note: required by a bound in `Server::<L>::add_service`
   --> /home/admin/github.com/hyperium/tonic/tonic/src/transport/server/mod.rs:365:15
    |
362 |     pub fn add_service<S>(&mut self, svc: S) -> Router<L>
    |            ----------- required by a bound in this associated function
...
365 |             + NamedService
    |               ^^^^^^^^^^^^ required by this bound in `Server::<L>::add_service`

For more information about this error, try `rustc --explain E0277`.
error: could not compile `examples` (bin "helloworld-server") due to 2 previous errors

Why do you need it to use tonic::Request and tonic::Response? You should be using hyper::Request and hyper::Response. To resolve the error about the missing NamedService bound, you can implement the trait on your layer.
impl<S> Service<hyper::Request<Body>> for MyService<S>
where
    S: Service<hyper::Request<Body>, Response = hyper::Response<BoxBody>> + Clone + Send + 'static,
    S::Future: Send + 'static,
{
    type Response = S::Response;
    type Error = S::Error;
    type Future = BoxFuture<'static, Result<Self::Response, Self::Error>>;

    fn poll_ready(
        &mut self,
        cx: &mut std::task::Context<'_>,
    ) -> std::task::Poll<Result<(), Self::Error>> {
        self.inner.poll_ready(cx)
    }

    fn call(&mut self, mut request: hyper::Request<Body>) -> Self::Future {
        // This is necessary because tonic internally uses `tower::buffer::Buffer`.
        // See https://github.com/tower-rs/tower/issues/547#issuecomment-767629149
        // for details on why this is necessary
        let clone = self.inner.clone();
        let mut inner = std::mem::replace(&mut self.inner, clone);

        Box::pin(async move {
            Ok(inner.call(req).await?)
        })
    }
}

// Required by the server builder when converted into a [tonic::transport::server::Router]
impl<S> NamedService for MyService<S>
where
    S: NamedService,
{
    const NAME: &'static str = S::NAME;
}

There is a example here https://github.com/hyperium/tonic/blob/master/examples/src/tower/server.rs

Why do you need it to use tonic::Request and tonic::Response?

In my case, I'd like to access remote_addr in my layer. tonic::Request also provides some useful fields.

You should be using hyper::Request and hyper::Response. To resolve the error about the missing NamedService bound, you can implement the trait on your layer.

I know I can make my code work as I wrote in Alternatives above.
I'm asking to add a new helper so that I can write it easily.


[BUG] Some widgets don't respond to CSS text-decoration

Checklist before submitting an issue

[X] I have searched through the existing closed and open issues for eww and made sure this is not a duplicate
[X] I have specifically verified that this bug is not a common user error
[X] I am providing as much relevant information as I am able to in this bug report (Minimal config to reproduce the issue for example, if applicable)

Description of the bug
When trying to use text-decoration: underline; on some elements, this option does nothing.
Reproducing the issue
For example this works:
* {     text-decoration: underline; }
However, this does not:
button:hover {     text-decoration: underline; }
Expected behaviour
Underline specified text.
Additional context
No response

I suppose the reason for that is that unlike the label widget, the button widget doesn't specifically have the :text property. This is why it does not work when you apply text-decoration: underline; to it. It simply is not the widget that contains text within itself and it is a separate widget. If you try button { text-decoration: underline; }, it won't work, but label { text-decoration: underline; } will.
If you want to apply this property to text inside of your button, you should access the child element that displays the text itself. Take a look at this example configuration:
eww.yuck:
(defwindow example
    :monitor "0"
    :geometry (geometry
        :x "0"
        :y "0"
        :width "100%"
        :height "35px"
        :anchor "top center")
    :exclusive "true"
    (button
        (label :text "underlined on hover")))

eww.scss:
button:hover > label { text-decoration: underline; }

Result:

Works just fine, as you can see.
I am no expert and might be wrong, but that's what I think. Let me know what you think!

Well, thank you for your help! Your solution was indeed correct and helped me fixing that problem. Now i have working underline on hover.
Either way, I will leave this here since it would be still better if it could be done without using such "hack"

I wouldn't really call it a "hack", it's just the way it works. Since Eww is based on GTK3, this behavior comes from there. In the CSS documentation on the text-decoration property it is stated:

Text decorations are drawn across descendant text elements. This means that if an element specifies a text decoration, then a child element can't remove the decoration.

and it indeed works like that in the browser for example.
However, GTK's CSS doesn't always works the exact same way, and this is of those cases. If you tried to make a GTK application with a single button in pure C and tried to apply the text-decoration property to it, you would see that it doesn't do anything at all. I don't think this is some kind of a bug, seems like a deliberate choice to me. Unfortunately, I couldn't find any documentation from GTK on this matter, so it is what it is.
Anyway, the text-decoration property is not inheritable by default, but of course you can override it:
* {
    text-decoration: inherit;
}

button:hover {
    text-decoration: underline;
}

With this configuration, all the widgets will inherit the text-decoration property from their parents and therefore you can apply it to button and all the children will get it as well. This way you don't have to access the child element explicitly if you don't like it. And imo it would be better than the behavior mentioned above anyway.
So this isn't really a bug and this behavior actually seems pretty intuitive, there's not much Eww can do about it either even if it was a bug. Hope this helped!


[FR] Some way to have @RequestParam(required = false) be interpreted as @Nullable

I just added NullAway 0.10.10 to the build process of a collection of microservices that use Spring Boot and Feign to communicate.  The interfaces that the microservices use are annotated to indicate whether the function parameters are put in the URL path , as query parameters, or as a request body.   Most query parameters are optional and should be treated as nullable if they have the required = false argument to the @RequestParam annotation.  Unfortunately, required = true is the default and there are many other arguments that the annotation takes.
In my case, it seems like treating the @RequestParam annotation as equivalent to @Nullable makes some sense because we use required = false 99% of the time, but I can imagine other times where the extra accuracy would be helpful.

Hi there, if I understand correctly, you would like to treat @RequestParam(required = false) as equivalent to @Nullable?  We do have support for custom nullability annotations but that just matches on name, not on the parameters passed.  So I'm not too sure we have an out-of-the-box solution that will work for your use case.  If you use required = false 99% of the time, maybe it would be best to @RequestParam as equivalent to @Nullable using the aformentioned option, and then deal with the remaining false positives using an initialization suppression?
@lazaroclapp in case you have other ideas here

Thanks.  I'm requesting the feature that allows for matching on parameters.  I have used the custom nullability annotations that you mentioned, which is probably good enough for my personal use case but I can imagine it not being sufficient for others.  I definitely understand that matching on parameters will be difficult and this is very low priority for me personally.  This issue exists mostly to document that the need may be out there.

Thanks! Matching on parameters may not be difficult but it would have to be done with care to ensure no negative impact on NullAway performance when it is not required. If someone really needs this we are open to discussion / evaluating a PR.