[Bug] pulsar-recovery and pulsar-bookie components do not supply metrics in the standard Prometheus format.

Search before asking

[X] I searched in the issues and found nothing similar.

Read release policy

[X] I understand that unsupported versions don't get bug fixes. I will attempt to reproduce the issue on a supported version of Pulsar client and Pulsar broker.

Version
apachepulsar/pulsar-all:4.0.0
Minimal reproduce step
Is this a bug or is it designed that way? Is there any solution for this? Because 2 other components send metrics in the correct format and prometheus reads them without problems. I don't use kube-prometheus-stack I add annotations to each component for my prometheus server to pick up the metrics.
For example:
autorecovery:
  replicaCount: 1
  podMonitor:
    enabled: false
  annotations:
    prometheus.io/scrape: “true”
    prometheus.io/path: “/metrics”
    prometheus.io/port: “8000”
broker:
  replicaCount: 1
  podMonitor:
    enabled: false
  annotations:
    prometheus.io/scrape: “true”
    prometheus.io/path: “/metrics”
    prometheus.io/port: “8080”

``/metrics` are visible in all components, so they are there.
What did you expect to see?
The same as in broker and zookeeper
pulsar-broker-0:/pulsar$ curl -I localhost:8080/metrics
HTTP/1.1 302 Found
Date: Sun, 01 Dec 2024 04:45:11 GMT
Location: http://localhost:8080/metrics/
Content-Length: 0
Server: Jetty(9.4.56.v20240826)

pulsar-zookeeper-0:/pulsar$ curl -I localhost:8000/metrics
HTTP/1.1 200 OK
Date: Sun, 01 Dec 2024 04:45:37 GMT
Content-Type: text/plain; version=0.0.4; charset=utf-8
Content-Length: 61427
Server: Jetty(9.4.56.v20240826)

What did you see instead?
pulsar-recovery-0:/pulsar$ curl -I localhost:8000/metrics
HTTP/1.1 405 Method Not Allowed

pulsar-bookie-0:/pulsar$ curl -I localhost:8000/metrics
HTTP/1.1 405 Method Not Allowed

Anything else?
No response
Are you willing to submit a PR?

[ ] I'm willing to submit a PR!

Hi, I'm experiencing the same behavior.  Seems to be related to Prometheus v3 being rolled out in latest kube-prometheus-stack, as it has a breaking change to fail to scrape if Content-Type is not valid or missing, as stated in https://prometheus.io/docs/prometheus/3.0/migration/#scrape-protocols:

Prometheus v3 is more strict concerning the Content-Type header received when scraping. Prometheus v2 would default to the standard Prometheus text protocol if the target being scraped did not specify a Content-Type header or if the header was unparsable or unrecognised. This could lead to incorrect data being parsed in the scrape. Prometheus v3 will now fail the scrape in such cases.

The Content-Type seems to be missing:
pulsar-bookie-0:/pulsar$ curl -X GET -v -I http://<IP_ADDRESS>:8000/metrics
*   Trying <IP_ADDRESS>:8000...
* Connected to <IP_ADDRESS> (<IP_ADDRESS>) port 8000
* using HTTP/1.x
> GET /metrics HTTP/1.1
> Host: <IP_ADDRESS>:8000
> User-Agent: curl/8.11.0
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< content-length: 264341
content-length: 264341
<

* shutting down connection #0


Suggest using allocatable arrays instead of pointers

Allocatable arrays generally are better to use than pointer arrays (and with Fortran 2003, they can be used in derived types now), so it would be good to have a rule that flags when a pointer array is used and suggest using an allocatable array instead.
This probably should also have some way to disable the check on specific declarations, though, since there might still be cases where someone might want to use a pointer array.
[1] Modern Fortran Explained, Section 6.12
[2] https://stackoverflow.com/questions/2300199/allocatable-arrays-or-pointer-arrays/2300367#2300367

Good suggestion, thanks!

This probably should also have some way to disable the check on specific declarations, though, since there might still be cases where someone might want to use a pointer array.

Yes, there are definitely cases where you would want a pointer array, even in a derived type. We're intending to have comments that would allow a rule to be selectively disabled, something like:
! allow(pointer-array)
integer, dimension(:), pointer :: array

Requires some more machinery first though!


Allow setting log level for calico-apiserver

Our logging agents current have a rate limit of 10 messages/s that calico-apiserver breaks occasionally. We would like to be able to set the log level for calico-apiserver component to not log INFO level messages.
Expected Behavior
Being able to set -v=0 or similar to have component only log WARN and higher level messages.
Current Behavior
I believe there is no way to control the log level.
Possible Solution
Expose a flag to be able to control log level. Alternatively tone down INFO level messages
Steps to Reproduce (for bugs)
Run default deployment of calico-apiserver as specified in manifests.
Context
@caseydavenport suggested that perhaps the component can be made less verbose in general: https://calicousers.slack.com/archives/C0BCA117T/p1693607380841419?thread_ts=1693466596.872479&cid=C0BCA117T
Your Environment

Calico version: v3.25.0
Orchestrator version (e.g. kubernetes, mesos, rkt): Kubernetes v1.27.2
Operating System and version: "Flatcar Container Linux by Kinvolk 3510.2.5 (Oklo)"

@george-angel We can drop some log levels to something less chatty. Can you show the manifest of the calico-apiserver and logs? I want to know which logs need to be dropped the level.

calico-apiserver Deployment: https://github.com/utilitywarehouse/calico-manifests/blob/master/base/apiserver.yaml#L15-L86
We use a Kustomize patch to set -v=0: https://github.com/utilitywarehouse/calico-manifests/blob/master/base/apiserver-args.yaml#L10-L11
Our config for dropping logs on the logging agent: https://github.com/utilitywarehouse/system-manifests/blob/master/promtail/promtail-config.yaml#L28-L32
And example snippet what I can see if I remove the exclusion config:
2024-02-05 16:32:49.926
time="2024-02-05T09:32:49Z" level=info msg="Main client watcher loop"
2024-02-05 16:32:49.925
I0205 09:32:49.925659       1 resource.go:206] Watch called with key: projectcalico.org/felixconfigurations on resource FelixConfiguration
2024-02-05 16:32:49.918
time="2024-02-05T09:32:49Z" level=info msg="Terminating main client watcher loop"
2024-02-05 16:32:49.918
time="2024-02-05T09:32:49Z" level=info msg="Process backend watcher done event in main client"
2024-02-05 16:32:27.714
time="2024-02-05T09:32:27Z" level=info msg="Main client watcher loop"
2024-02-05 16:32:27.713
I0205 09:32:27.713301       1 resource.go:206] Watch called with key: projectcalico.org/caliconodestatuses on resource CalicoNodeStatus
2024-02-05 16:32:27.706
time="2024-02-05T09:32:27Z" level=info msg="Terminating main client watcher loop"
2024-02-05 16:32:27.706
time="2024-02-05T09:32:27Z" level=info msg="Process backend watcher done event in main client"
2024-02-05 16:32:07.291
time="2024-02-05T09:32:07Z" level=info msg="Main client watcher loop"
2024-02-05 16:32:07.290
I0205 09:32:07.290146       1 resource.go:206] Watch called with key: projectcalico.org/clusterinformations on resource ClusterInformation
2024-02-05 16:32:07.283
time="2024-02-05T09:32:07Z" level=info msg="Terminating main client watcher loop"
2024-02-05 16:32:07.282
time="2024-02-05T09:32:07Z" level=info msg="Process backend watcher done event in main client"
2024-02-05 16:32:07.190
time="2024-02-05T09:32:07Z" level=info msg="Main client watcher loop"
2024-02-05 16:32:07.189
I0205 09:32:07.189481       1 resource.go:206] Watch called with key: projectcalico.org/globalnetworksets on resource GlobalNetworkSet
2024-02-05 16:32:07.181
time="2024-02-05T09:32:07Z" level=info msg="Terminating main client watcher loop"
2024-02-05 16:32:07.181
time="2024-02-05T09:32:07Z" level=info msg="Process backend watcher done event in main client"
2024-02-05 16:31:55.970
time="2024-02-05T09:31:55Z" level=info msg="Main client watcher loop"
2024-02-05 16:31:55.969
I0205 09:31:55.969179       1 resource.go:206] Watch called with key: projectcalico.org/bgpconfigurations on resource BGPConfiguration
2024-02-05 16:31:55.961
time="2024-02-05T09:31:55Z" level=info msg="Terminating main client watcher loop"
2024-02-05 16:31:55.961
time="2024-02-05T09:31:55Z" level=info msg="Process backend watcher done event in main client"

Thank you!

Thanks for the details. @george-angel
From the logs, the log keeps repeating the following 4 logs:
2024-02-05 16:32:49.925	I0205 09:32:49.925659       1 resource.go:206] Watch called with key: projectcalico.org/felixconfigurations on resource FelixConfiguration
2024-02-05 16:32:49.918	time="2024-02-05T09:32:49Z" level=info msg="Terminating main client watcher loop"
2024-02-05 16:32:49.918	time="2024-02-05T09:32:49Z" level=info msg="Process backend watcher done event in main client"
2024-02-05 16:32:27.714	time="2024-02-05T09:32:27Z" level=info msg="Main client watcher loop"

The first one comes from calico-apiserver, whose logging level we can easily drop. But the remaining three logs come from the k8s client's codebase, and it doesn't look like we can drop its log level directly ):

@cyclinder Every little helps :)
I'm happy to try a new release with changed log level and see if its still a problem and raise a separate issue?

I can try to fix the log level from the calico, and I agree there needs a separate issue for k8s client logs.

I believe this PR will help here: https://github.com/projectcalico/calico/pull/8697
It sets the Calico log output based on the -v argument passed to the apiserver.
-v=0 will log ERROR
-v=1 will log INFO
-v=2 will log DEBUG
It also downgrades the "called with key" logs

I think this should all be fixed now as of https://github.com/projectcalico/calico/pull/9600


remove frictionless from core pandera deps

quick question, why was that removed? It seems its still used as a dependency, so when just doing pip install pandera its not installed and I run into an error

hey @aiwalter what error message are you seeing?
the frictionless dependency is only needed for the pandera.io module, so if you're using that module you can do pip install pandera[io]

Yes I saw that later. I would recommend to introduce soft-dependency machanism that gives the user a proper exception and hinting to that multiple install options. How to do that, you can look into: https://github.com/alan-turing-institute/sktime/blob/24f6be86f95bfc1ec246dee7dcdd455e0a84a872/sktime/utils/validation/_dependencies.py#L5
This is then called in the particualar files that require additional packages that are not contained in the default installation.

cool! please feel free to open up an issue describing this improvement, and if you're open to it a PR!

pls see #778


VSCode incorrectly reports "Invalid version entered" for NuGet package with 4-segment version

Issue Description
Steps to Reproduce

Open a CSProj that has this package reference:

  <ItemGroup>
    <PackageReference Include="Xamarin.Forms" Version="<IP_ADDRESS>8675" />
  </ItemGroup>

You get a warning like this:

However, a 4-segment NuGet package version is valid (though not common).
Expected Behavior
This warning should not be present at all.
Actual Behavior
An incorrect warning is shown.
OmniSharp log
N/A
C# log
N/A
Environment information
VSCode version: 1.40.1
C# Extension: 1.21.7
Dotnet Information
.NET Core SDK (reflecting any global.json):
 Version:   3.1.100-preview2-014569
 Commit:    4bd5d24d87
Runtime Environment:
OS Name:     Windows
OS Version:  10.0.18363
OS Platform: Windows
RID:         win10-x64
Base Path:   C:\Program Files\dotnet\sdk\3.1.100-preview2-014569\
Host (useful for support):
Version: 3.1.0-preview2.19525.6
Commit:  5672978d91
.NET Core SDKs installed:
3.0.100 [C:\Program Files\dotnet\sdk]
3.1.100-preview2-014569 [C:\Program Files\dotnet\sdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.All 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.13 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.13 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.1.0-preview2.19528.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.1.13 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 3.1.0-preview2.19525.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 3.1.0-preview2.19525.6 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
To install additional .NET Core runtimes or SDKs:
https://aka.ms/dotnet-download

Visual Studio Code Extensions

Extension
Author
Version

azure-account
ms-vscode
0.8.7

azure-pipelines
ms-azure-devops
1.157.4

csharp
ms-vscode
1.21.7

docomment
k--kato
0.1.8

EditorConfig
EditorConfig
0.14.2

powershell
ms-vscode
2019.11.0

vscode-markdownlint
DavidAnson
0.32.0

vscode-versionlens
pflannery
0.24.0

xml
DotJoshJohnson
2.5.0

Originally posted at https://github.com/microsoft/vscode/issues/84934

Nevermind, it's not from this extension either. It's from here: https://github.com/vscode-contrib/vscode-versionlens/issues/105


change ldapjs.org dns record

The ldapjs.org dns needs to be updated. I updated the gh-pages and got this error by email:
The custom domain for your GitHub Pages site is pointed at an outdated IP address.
You must update your site's DNS records if you'd like it to be available via your custom domain.

It looks like the dns should point to
<IP_ADDRESS>
<IP_ADDRESS>
<IP_ADDRESS>
<IP_ADDRESS>

@jsumners do you know who controls the domain name?

Ugh. That's a thing we never got around to dealing with. Technically Joyent still owns all of that. I'll reach out to people and see if we can get it moved somewhere else. But it may be that we just need to kill of the domain.

We could just use ldapjs.github.io by moving the gh-pages branch to the repo ldapjs/ldapjs.github.io

Yeah, that sounds like a good solution.

I created the repo and set up https://ldapjs.github.io/ I think it would be better if we could work something out with Joyent to keep the domain, but if not we will just need to point everything to the new domain.

@melloc do you have any opinions about managing DNS for ldapjs.org?
Personally, I'm of the opinion that we should just let the domain die. Maybe add a year to it and set it up as a 301 to ldapjs.github.io. It'll be far easier to maintain as an organization going forward. If we were to try to keep ldapjs.org then someone would have to keep it paid for, and the org will always be wondering if that person will keep up with it or just disappear and be stuck without the domain.

👋
On February 22, 2023, we released version 3 of this library. As a result, we are closing this issue/pull request.
Please see issue #839 for more information, including how to proceed if you feel this closure is in error.


Freecinc down

Hello, seems like site and service are down, same GCP issue as last time? Thanks for the great resource!

Back up so closing this (weird, maybe a uni net thing?)

Sorry!  I didn't see any alerts about it..


Limited batched streaming when using inflight batching

System Info
p4d (8 x A100 40 GB GPUs)
TensorRTLLM: 0.8.0 release
Triton server: 24.02
Who can help?
@kaiyux @byshiue
Information

[X] The official example scripts
[ ] My own modified scripts

Tasks

[X] An officially supported task in the examples folder (such as GLUE/SQuAD, ...)
[ ] My own task or dataset (give details below)

Reproduction

Create checkpoint
python ./TensorRT-LLM/llama/convert_checkpoint.py --model_dir ./Llama-2-13b-chat-hf/ --output_dir ./checkpoint --dtype float16 --tp_size 4 --workers 8

Build engine
trtllm-build --checkpoint_dir ./checkpoint --output_dir ./engine --gemm_plugin float16 --remove_input_padding enable --paged_kv_cache enable --context_fmha enable --workers 8 --max_batch_size 32 --max_input_len 4096 --max_output_len 512

Load into Triton inference server in inflight batching mode
https://github.com/triton-inference-server/tensorrtllm_backend/tree/v0.7.1/all_models/inflight_batcher_llm

Test batched streaming inference (please substitute get_prompt function with test prompt)

import queue
import functools
import numpy as np
import tritonclient.grpc as grpcclient
from tritonclient.utils import np_to_triton_dtype, InferenceServerException

def prepare_tensor(name, input):
    t = grpcclient.InferInput(name, input.shape, np_to_triton_dtype(input.dtype))
    t.set_data_from_numpy(input)
    return t

CONCURRENCY = 4
INPUT_TOKENS = 3000
MAX_TOKENS = 40
client = grpcclient.InferenceServerClient(url="localhost:8001")

# get_prompt function returns a prompt of input size 3000
prompts: list[str] = [get_prompt(INPUT_TOKENS)] * CONCURRENCY
inputs = [
    [
        prepare_tensor("text_input", np.array([[prompt]], dtype=object)),
        prepare_tensor("max_tokens", np.array([[MAX_TOKENS]], dtype=np.int32)),
        prepare_tensor("stream", np.array([[True]], dtype=bool)),
    ]
    for prompt in prompts
]

# Start stream connection
response_queue = queue.Queue()
callback = lambda queue, result, error: queue.put(error if error else result)
client.start_stream(callback=functools.partial(callback, response_queue))

# Send requests
for index, inp in enumerate(inputs):
    client.async_stream_infer(model_name="ensemble", inputs=inp, request_id=str(index))

# Fetch responses
while True:
    try:
        response = response_queue.get(timeout=1)
        if type(response) != InferenceServerException:
            request_id = response.get_response().id
            print(request_id, end=", ", flush=True)
    except queue.Empty:
        break

# Stop stream
client.stop_stream()

Expected behavior
Tokens for multiple requests should be streamed out simultaneously
Example output (request ids):
0, 1, 3, 2, 4, 6, 5, 0, 1, 5, 9, 3, 2, 20, 10, 4, 6, 7, 8, 11, 12, 5, 9, 13, 14, 20, 10, 23, 14, 23, 15, 16, 15, 16, 5, 9, 13, 17, 18, 19, 21, 22, 0, 1, 3, 1, 3, 1, 3, 2, 4, 6, 4, 6, 4, 6, 7, 8, 11, 1, 3, 12, 10, 20, 10.....
actual behavior
Tokens for each request streamed one after the other
Output (request ids):
0, 0, 0, ..... 1, 1, 1, 1, 1, ..... 2, 2, 2, 2, .....
additional notes
For fewer input tokens (32), the streaming behavior is as expected. This behavior is only seen for larger input sizes.

In my case, the output words of every request are returned together, not one by one. And the callback only be called one time for every request, this make it not like streaming.

@Saigut could you expand more about the callback issue?
I see that the end to end grpc client example, which allows streaming, uses the same callback:
https://github.com/triton-inference-server/tensorrtllm_backend/blob/main/inflight_batcher_llm/client/end_to_end_grpc_client.py#L31-L35

@vnkc1 The issue I met is my fault, I didn't provide the "stream" INPUT to server.


Example/pbr

Finally, still missing the article with details

@Kuranes if you want to do a quick review


ContractArtifacts.at(address) is not supported

Contract.at() doesn't seem to be supported for now. Would be really helpful if support is added
Error: The construct contractArtifacts.at(address) is not currently supported by TronBox. It will be in the future. Stay in touch

Thank you, we will support this as soon as possible, please use the following code first.
tronWrap.contract().at(address)


Add SupportedStandards:LSP4DigitalAsset key

https://github.com/lukso-network/LIPs/pull/41

This is not relevant anymore as we load the keys from the erc725.js lib


[Python] Create Python examples of HTTP POST Arrow client/server supporting multipart/form-data request

Describe the enhancement requested
Contribute Python client and server examples to the HTTP POST multipart examples in the arrow-experiments repo. This should demonstrate a client sending a POST request to a server with a multipart request body (Content-Type: multipart/form-data) containing JSON data (Content-Type: application/json) and Arrow IPC stream data (Content-Type: application/vnd.apache.arrow.stream).
Component(s)
Python

A challenge with this approach is that the part boundaries must not occur in the data, as described here: https://www.w3.org/TR/html401/interact/forms.html#h-<IP_ADDRESS>
So to support all possible sequences of bytes that might occur in Arrow IPC stream data, the client would need to be able to dynamically choose a viable boundary sequence by checking that it is not contained in the IPC stream bytes to be sent in the request.
On the other hand, maybe it's sufficient for the client to simply use a part boundary that is highly unlikely to occur in the IPC stream bytes.


Fix response code digit comparison

fixed in 2ce31ec807abed6b8acb7abe10e61b237ce5791e

@andreif Sorry, seems like we crossed our streams.
I think I've integrated your changes (more or less) in 2ce31ec. I probably won't have time to dedicate to this PR until Monday.
I've added you as a collaborator to this fork, so if you want to take from here you can push directly to my branch :)

No problem! I have missed few things in my PR anyway


Error while using subapis at mounted swagger js and css

I have use the documentation for mounting the swagger docs as https://fastapi.tiangolo.com/advanced/extending-openapi/
but when I try to mount using this
authAPI = FastAPI(docs_url=None, redoc_url=None)
@authAPI.get("/docs", include_in_schema=False)
app.mount("/api/v1.0/auth" , authAPI , name="authAPI")
async def custom_swagger_ui_html():
return get_swagger_ui_html(
openapi_url=authAPI.openapi_url,
title=authAPI.title + " ENTEL SGIMP ",
oauth2_redirect_url=app.swagger_ui_oauth2_redirect_url,
swagger_js_url="/static/swagger-ui-bundle.js",
swagger_css_url="/static/swagger-ui.css",
)
the authAPI docs shows are from the openapi.json file not from the authAPI.Why does have this behavior?
Is there any way to fix it ?
main.zip

@rodrigoga799 feel free to edit the question with a proper code formatting, and I do not know what is in the main.zip but if it is main.py and it is too long to paste here, create a gist for it. So others can help with ease.

Thanks for the help @ycd! 🍰
@rodrigoga799 I'll close this issue now, but if you are still having problems, please create a new issue and follow the template form. That will allow us to properly understand your question and help you.

Sorry for the long delay! 🙈  I wanted to personally address each issue/PR and they piled up through time, but now I'm checking each one in order.


unable to copy text

Hi,
is there some way how could be possible to copy printed text. Like when I want to copy the ToxID, the selection of text keeps reseting itself (probably due to refresh of the window every time cursor blinks)
Thanks

This sounds like an issue with the terminal you are using, not minitox.  I SSH into my linux VPS and use minitox from the command line with not problems.  You can copy and paste toxIDs, etc. as you normally would in any linux terminal.


proposal: the current and the future state of material2

Just as I was about to write down this issue, someone linked me this which answered few of my questions, but let me post this anyway.
I, along a couple of people on gitter, wrote down a proposal of a couple of changes that could help push this repo forwards a bit.
The biggest issue with this repo is not that some of the fundamental components are missing, that there is no theming support, no animations, that there are bugs, that it's taking so long. The biggest problem is the lack of information about the current state, lack of community management. This leads to community fragmentation, people are creating more and more of their own material implementations(often times half baked, or using bits and pieces of material2), while they could be contributing here instead.
So here's a couple of points that could help, some might be realizable, some not, up to you to decide.
Be transparent about the current state of development
If material2 is currently on hold because members were reassigned to angular2, it's absolutely fine, but say so. There was no mention of anything material2 in weekly meeting notes since ever, one can either guess what's going on, or dig through dozens of closed issues to see if someone mentioned the current state. For someone that doesn't check this repo, and its issues daily, it's an impossible task. The best source of information can't be a post on material1 google group.
Proposed solution:

mention the current state in README
create a monthly iteration plan issue similar to what microsoft/vscode does

Be as contributor friendly as possible
You have limited resources, so wouldn't it be nice to involve some of those 4000 people that starred this repo? Or some of these people?

https://github.com/justindujardin/ng2-material
https://github.com/Promact/md2
https://github.com/sabbirrahman/ng2-mdl
https://github.com/mseemann/angular2-mdl
https://github.com/InfomediaLtd/angular2-materialize

Proposed solution:

create an issue for every single component that you plan on creating(you can start by simply taking a list of material1 components), put link to them on README, similar to how webpack/webpack.io does it(this could prevent some of the feature requesting issues as well)
actually include a description in those issues, not just something like this, that description could contain a summary of prior internal discussions(if there were any), a short summary on how you imagine the component should work, list of steps needed for the component to be acceptable as a community contribution(design doc, tests)
allow community to participate in design discussions, people could for example chime in on theming
have a presence on gitter, I know there is a slack channel for your internal team and privileged contributors, would be nice if external contributors could get some guidance as well
create a more elaborate "coding standards" doc for things like theming functions(md-color, md-palette), core services(portal, overlay) and a11y guidelines

What do you think? Could we make some of these happen?

@fxck Thanks for writing this. I look at this repo every now and then, but I have no idea what is the status of this repo.

This was asked & proposed many times. See #788  and  #710.
The Angular Material team was very clear: There will be a beta release at the end of the year. That's the only promise regarding this project AFAIK.

@hacknaked I'm not really asking for milestones or dates, I'm asking for a clear up to date information about the current status and friendliness towards contributors and proposing a couple of possibilities to go about it :) and yes, I'm aware of those issue, apart from commenting on most of these I actually went through all 30 pages of issues and re-read any related issues.

https://github.com/angular/material2/issues/13
https://github.com/angular/material2/issues/256
https://github.com/angular/material2/issues/818
https://github.com/angular/material2/issues/788
https://github.com/angular/material2/issues/767
https://github.com/angular/material2/issues/760
https://github.com/angular/material2/issues/710

I agree we could definitely be more clear about the current status of the project. For the most part, looking at the incoming PRs will give you the best idea of what we're up to. The biggest things lately have been:

Adding NgModules and other changes related to modules
Stop using all of the deprecated APIs that are being removed in Angular RC6
Change our build to gulp
Making sure material works with AoT compilation on Angular master

We can start adding updates like this to the Angular weekly meeting notes. We haven't been including these updates in the last several meetings because getting Angular to 2.0.0 final is taking up 90% of everyone's headspace.
Going beyond that, what kind of status updates do you expect to see? Something like?
Current status: preparing alpha.8 such that it will work with Angular RC6 and AoT compilation.
Working on menu and dialog.

Or are you looking for status on each component individually?
I'd be happy to accept PRs adding more links to component issues in the README. In general, we're happy to have contributions as long as folks follow our contributor guidelines.
More context about what we're doing at any given time:
A lot of the work we are doing lately is unfortunately not very visible on GitHub, such as testing changes in Angular core with material (particularly around ngc).
Work on other parts of the platform has temporarily become higher priority as Angular itself moves closer to 2.0.0 (e.g., @kara is the owner of @angular/forms and @hansl is the steward of angular-cli, both of which need to align with Angular 2 final). Once 2.0.0 final is released, most of these cycles will move back to material.
We also provide support and tooling for Google teams using material (which has included hunting down some gnarly bugs recently).
And, lastly, we've also had a couple of contributors leave the project recently, which will lead to less visible activity on GitHub (don't worry, though, we have two new team members who will be joining us over the next couple of months!).
We really appreciate the fact that so many people are invested in the project and will work on making it more apparent what we're doing.

@jelbourn here's a sketch of how I'd imagine README could look like - https://github.com/fxck/material2/blob/master/README.md
..where the iteration plan for August would link to an issue that would have a similar template to this https://github.com/Microsoft/vscode/issues/10145 it might be a little bit more lightweight, but I find it very informative, when you are blocked by work on angular, it can simple be stated there

See #1159

Here's an example of how each issue description could look like https://github.com/angular/material2/issues/508#issuecomment-221315582 to help people contribute. When people go thru the effort of actually creating the design doc, it would be great if someone from the team actually replied though.

@jelbourn could you update the readme?

@fxck I'm making my way there... it's the first work-day of October.

Updated in #1414.
Closing this issue now that the status is outlined in the readme.


Option for "- color" to be in hex format, not just RGB

I think that it would be nice to have an option for the "- color" in the fixed palette entries to take 24 bit/16 bit hex colors. Not sure if there's a reason this hasn't been done, but it would be useful to me at least.
For example:
- color: {index: 0, hex: #000000}

Added in dd54b88


[UI issues] Content blocks on Harvesting page are not centered

v0.13.5
WTR:
Go to Harvesting page
Result: you can see that blocks content are not centered

@NikolaiB could you verify?


RelWithDebInfo shouldnt be forced as the configuration

The configuration should be decided by the user, not by the project in the CMakeLists file. Debug and RelWithDebInfo are two different build configurations, and it may be helpful at times to have the ability to use Debug.

Closing just noticed #19


add docstring skip in hybrid script

@kevinthesun
I think this PR may resolve your issue #1667.

Thank you for quick response!


Possible memory leak in ajv.compile

What version of Ajv are you using?
8.1.0, 8.6.2
Does the issue happen if you use the latest version?
Yes
Ajv options object:
{allErrors: true}

Description
As per the issue reference https://github.com/ajv-validator/ajv/issues/1221, we have to use ajv.compile to validate meta schema for a custom keyword, because ajv.validateSchema is not performing it.
While doing so, its observed a possible memory leak in ajv.compile method. On frequent calling of ajv.compile on the same schema object keep increasing the memory usage. Even ajv.removeSchema does not clear up the cache.
Code
const Ajv = require('ajv');

const ajv = new Ajv({allErrors: true});

ajv.addKeyword({
  keyword: "range",
  type: "number",
  compile([min, max], parentSchema) {
    return (data) => data > min && data < max
  },
  errors: false,
  metaSchema: {
    // schema to validate keyword value
    type: "array",
    items: [{type: "number"}, {type: "number"}],
    minItems: 2,
    additionalItems: false,
  },
});

const schema = {
  $id: '/our/schema',
  type: "object",
  properties: {
    foo: {
        type: "number",
        range: [6, 1]
    },
    bar: {
        type: "number",
        range: [1, 5],
    }
  },
  required: ["foo"],
  additionalProperties: false
}

const run = () => {
    try {
       ajv.compile(schema)
    } catch (error) {
       console.error("Ajv schema is invalid", error)
    } finally {
        ajv.removeSchema(schema.$id)
    }

    ajv.validate(schema, { foo: 7, bar: 2 })
    ajv.validate(schema, { foo: 1, bar: 4 })
    console.log(Math.ceil(process.memoryUsage().heapUsed / 1024) + "KB")
}

for(let i=0; i < 10; i++) {
  run();
}

Its observe that memory usage is increased linearly, tested it for longer time and it end up filling GBs of memory.
Possible causes

It seesm ajv.compile is not recognizing the same schema object
And ajv.removeSchema is not clearing up the cache properly

A working example of the code can be tested here.
https://runkit.com/nazarhussain/60fad50131574c001bf0d784

I am not sure that this test indicates a memory leak, tbh.
Firstly, heap allocation only shows the used heap, including objects that can be garbage collected but are not garbage collected yet.
Secondly, compile by itself would not compile the same schema object - it would look it up in the map and return the same function - https://runkit.com/esp/6106515b6a5e3c001a8e2d63
But if you call removeSchema than ajv will have to compile the schema again, and it would generate the new function, that would use some heap space. At some later point previous functions would be garbage collected, but not instantly. See the same example.
So the experiment you did, does not show that there is any unexpected behaviour. Also - custom keyword is not important here, it would be the same without it.

@epoberezkin I am sorry if you found some information missing here.
I tried running thee process for serval hours and memory increase continued and not garbage collected. Anything point is if compile generate some functions and removeSchema clean those up then memory usage should not increase linearly.
Let me know if you want to have this tested with some other approach.

Depending on the schema, removeSchema may be not removing it fully - see #1293. Does your use case requires compiling and then removing schemas? Or could you just compile once?
Even with user-provided or dynamic schemas a better approach is to compile once and cache compiled schemas (or even save them as code with standaloneCode).

@epoberezkin Yes our use case is to compile the schema and remove them. We are holding this approach until this issue https://github.com/ajv-validator/ajv/issues/1221 is resolved, which will enable to validate meta schema for custom keywords with validateSchema, then we would not need to compile the schema anymore in our code.

#1221 is not an issue to be resolved, it’s a limitation that is not unlikely to be resolved.
You don’t want to just validate the schema - you want to confirm that it will compile, and the only way to do it is to compile it.
So, you need to do two things:

confirm that the schema is valid against the meta schema - it requires the ajv instance with meta schema added to it (and this meta schema would be compiled). This instance is best reused because meta-schema compilation is not too cheap.
compile the schema - that does not require meta-schema and can be done with another ajv instance, that could be disposed of completely after each compilation (which is ok, because without meta-schema added to it is is quite cheap to construct).

This way you can get what you need ensuring that no memory leaks happen, because the whole ajv instance would be garbage collected. Does it make sense?

@epoberezkin For now we fixed that behaviour to make sure we don't compile (validate meta schema) more than once for any schema in the application. But if that would get difficult in future (considering extensibility of application) then will try usage that approach you suggested. To create new Ajv instance for this task so it could be garbage collected.


Open dialog cuts off some files

code-server version: running directly from repo, latest pull
OS Version: macOS

Description
The open dialog seems to cut off the filename at the end of the list
Steps to Reproduce

Click file - open workspace
Select a folder with a lot of files/directories
See cutoff at the bottom

Screenshot

moved to frontend repo

I encountered the same issue too. After a bit survey, I think the root cause is that in packages/vscode/src/dailog.ts,Dailog class asks the UI widget to resolve the height of the scroll-able area at the wrong time. When it calls this.entryList.layout() at line 318, path is still empty so the height of the corresponding element is zero. After path is resolved, the element height becomes 28px and the height of the scroll-able area becomes 28px smaller, which is misaligned with the state the UI widget recorded.
One simple solution is to move line 318 to line 393 where path is just assigned. Not sure if there's better way.
Also, just curious, what's the frontend repo?

Thanks for the excellent diagnosis! I've just committed the fix.
Our frontend repository holds the coder.com website; I think this may have been mistakenly moved there.


Callback functions for after tweets are loaded

I would like to see some callback functions to run after the tweets are loaded. Is this possible already or not??

Yes, see the examples; in short, you bind a handler to the "loaded" event.

Wow, sorry, didn't think to look there!
Cheers...

No problem. The documentation could do with some improvement...


[求助/Help]v3.10.11，新集群部署后default-telegraf一直起不来

1，版本：
v3.10.11
3台新服务器高可用新集群部署，参考：https://www.cloudpods.org/docs/getting-started/full/ha-ce
切换 Influxdb 到 VictoriaMetrics( https://www.cloudpods.org/docs/operations/monitoring/migrating-to-vm )，已经切换好了。
2，问题：
kubectl get pods -n onecloud显示pods都是running，但是default-telegrafpod一直没运行起来。
default-telegraf-b6924   0/1     Init:CrashLoopBackOff   49   3h16m default-telegraf-nztw5  0/1     Init:CrashLoopBackOff   46   3h16m default-telegraf-xt8d2   0/1     Init:CrashLoopBackOff   49   3h16m
kubectl describe pod  default-telegraf-b6924 -n onecloud的内容：
[root@master1 ~]# kubectl describe pod  default-telegraf-b6924 -n onecloud
Name:           default-telegraf-b6924
Namespace:      onecloud
Priority:       0
Node:           master3/<IP_ADDRESS>
Start Time:     Sun, 31 Dec 2023 18:50:17 +0800
Labels:         app=telegraf
                app.kubernetes.io/component=telegraf
                app.kubernetes.io/instance=onecloud-cluster-486z
                app.kubernetes.io/managed-by=onecloud-operator
                app.kubernetes.io/name=onecloud-cluster
                controller-revision-hash=5c4b8d8f98
                pod-template-generation=3
Annotations:    onecloud.yunion.io/last-applied-configuration:
                  {"volumes":[{"name":"etc-telegraf","hostPath":{"path":"/etc/telegraf","type":"DirectoryOrCreate"}},{"name":"proc","hostPath":{"path":"/pro...
Status:         Pending
IP:             <IP_ADDRESS>
Controlled By:  DaemonSet/default-telegraf
Init Containers:
  telegraf-init:
    Container ID:  docker://6964ed997928566959e651e0b948c227242865fec08a8358041441d75851a96b
    Image:         registry.cn-beijing.aliyuncs.com/yunionio/telegraf-init:release-1.19.2-0
    Image ID:      docker-pullable://registry.cn-beijing.aliyuncs.com/yunionio/telegraf-init@sha256:dbda0b59b2506e76fd33547de7e13bc701b6571b4134485d1d96493b269b770e
    Port:          <none>
    Host Port:     <none>
    Command:
      /bin/telegraf-init
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Error
      Exit Code:    1
      Started:      Sun, 31 Dec 2023 22:07:44 +0800
      Finished:     Sun, 31 Dec 2023 22:07:44 +0800
    Ready:          False
    Restart Count:  50
    Environment:
      NODENAME:       (v1:spec.nodeName)
      INFLUXDB_URL:  https://default-victoria-metrics:30428
    Mounts:
      /etc/telegraf from etc-telegraf (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from onecloud-operator-token-ptgj2 (ro)
Containers:
  telegraf:
    Container ID:
    Image:         registry.cn-beijing.aliyuncs.com/yunionio/telegraf:release-1.19.2-2
    Image ID:
    Port:          <none>
    Host Port:     <none>
    Args:
      /usr/bin/telegraf
      -config
      /etc/telegraf/telegraf.conf
      -config-directory
      /etc/telegraf/telegraf.d
    State:          Waiting
      Reason:       PodInitializing
    Ready:          False
    Restart Count:  0
    Environment:
      HOST_ETC:           /hostfs/etc
      HOST_PROC:          /hostfs/proc
      HOST_SYS:           /hostfs/sys
      HOST_MOUNT_PREFIX:  /hostfs
    Mounts:
      /dev from dev (rw)
      /etc/telegraf from etc-telegraf (rw)
      /hostfs from root (ro)
      /hostfs/proc from proc (ro)
      /hostfs/sys from sys (ro)
      /opt/cloud from cloud (rw)
      /var/run from run (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from onecloud-operator-token-ptgj2 (ro)
Conditions:
  Type              Status
  Initialized       False
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  etc-telegraf:
    Type:          HostPath (bare host directory volume)
    Path:          /etc/telegraf
    HostPathType:  DirectoryOrCreate
  proc:
    Type:          HostPath (bare host directory volume)
    Path:          /proc
    HostPathType:  Directory
  run:
    Type:          HostPath (bare host directory volume)
    Path:          /var/run
    HostPathType:  Directory
  sys:
    Type:          HostPath (bare host directory volume)
    Path:          /sys
    HostPathType:  Directory
  root:
    Type:          HostPath (bare host directory volume)
    Path:          /
    HostPathType:  Directory
  dev:
    Type:          HostPath (bare host directory volume)
    Path:          /dev
    HostPathType:  Directory
  cloud:
    Type:          HostPath (bare host directory volume)
    Path:          /opt/cloud
    HostPathType:  Directory
  onecloud-operator-token-ptgj2:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  onecloud-operator-token-ptgj2
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node-role.kubernetes.io/controlplane:NoSchedule
                 node-role.kubernetes.io/master:NoSchedule
                 node.kubernetes.io/disk-pressure:NoSchedule
                 node.kubernetes.io/memory-pressure:NoSchedule
                 node.kubernetes.io/network-unavailable:NoSchedule
                 node.kubernetes.io/not-ready:NoExecute
                 node.kubernetes.io/pid-pressure:NoSchedule
                 node.kubernetes.io/unreachable:NoExecute
                 node.kubernetes.io/unschedulable:NoSchedule
Events:
  Type     Reason          Age                    From              Message
  ----     ------          ----                   ----              -------
  Warning  BackOff         31m (x745 over 3h12m)  kubelet, master3  Back-off restarting failed container
  Normal   SandboxChanged  22m                    kubelet, master3  Pod sandbox changed, it will be killed and re-created.
  Normal   Created         21m (x4 over 22m)      kubelet, master3  Created container telegraf-init
  Normal   Started         21m (x4 over 22m)      kubelet, master3  Started container telegraf-init
  Normal   Pulled          11m (x7 over 22m)      kubelet, master3  Container image "registry.cn-beijing.aliyuncs.com/yunionio/telegraf-init:release-1.19.2-0" already present on machine
  Warning  BackOff         99s (x99 over 22m)     kubelet, master3  Back-off restarting failed container

在web现实宿主机是0台:
[root@master1 ~]# climc host-list
***  Total: 0  ***
[root@master1 ~]#

服务器网络做了bonding：
1、eno1和eno2是2个千兆网口，bond1关联
2、ens1和ens2是2个万兆网口，bond0关联
同时发现host的log有错:
[root@master1 ~]# kubectl -n onecloud logs default-host-96pwl -c host
[info 231231 16:07:25 procutils.WaitZombieLoop(zombie_others.go:36)] My pid is not 1 and no need to wait zombies
[info 231231 16:07:25 options.parseOptions(options.go:331)] Use configuration file: /etc/yunion/host.conf
[warning 231231 16:07:25 structarg.(*ArgumentParser).parseJSONKeyValue(structarg.go:1215)] Cannot find argument enable-qmp-monitor
[warning 231231 16:07:25 structarg.(*ArgumentParser).parseJSONKeyValue(structarg.go:1215)] Cannot find argument enable-health-checker
[warning 231231 16:07:25 structarg.(*ArgumentParser).parseJSONKeyValue(structarg.go:1215)] Cannot find argument enable-rbac
[warning 231231 16:07:25 structarg.(*ArgumentParser).parseJSONKeyValue(structarg.go:1215)] Cannot find argument disk-is-ssd
[warning 231231 16:07:25 structarg.(*ArgumentParser).parseJSONKeyValue(structarg.go:1215)] Cannot find argument health-driver
[warning 231231 16:07:25 structarg.(*ArgumentParser).parseJSONKeyValue(structarg.go:1215)] Cannot find argument start-host-ignore-sys-error
[info 231231 16:07:25 options.parseOptions(options.go:354)] Set log level to "info"
[info 2023-12-31 16:07:25 options.parseOptions(options.go:331)] Use configuration file: /etc/yunion/common/common.conf
[info 2023-12-31 16:07:25 options.parseOptions(options.go:354)] Set log level to "info"
[info 2023-12-31 16:07:25 hostman.(*SHostService).InitService(host_services.go:63)] exec socket path: /var/run/onecloud/exec.sock
[info 2023-12-31 16:07:25 app.InitApp(app.go:32)] RequestWorkerCount: 8
[info 2023-12-31 16:07:25 appsrv.NewApplication(appsrv.go:120)] App hostId: pp61GboVMzg1TOiUsFhiiQMOqCQ= (host,master1,<IP_ADDRESS>)
2023/12/31 16:07:25 Allow hosts []
[info 2023-12-31 16:07:25 appsrv.(*Application).SetDefaultTimeout(appsrv.go:136)] adjust application default timeout to 60.000000 seconds
[info 2023-12-31 16:07:25 hostinfo.DetectCpuInfo(hostinfohelper.go:77)] cpuinfo freq 2699
[info 2023-12-31 16:07:25 hostinfo.NewHostInfo(hostinfo.go:2339)] CPU Model Intel(R) Xeon(R) Gold 6138 CPU @ 2.00GHz Microcode 0x2007006
[info 2023-12-31 16:07:25 hostinfo.NewHostInfo(hostinfo.go:2359)] Get kubelet container image Fs: /opt/docker, eviction config: {"evictionHard":{"imagefs.available":{"Signal":"imagefs.available","Operator":"LessThan","Value":{"Quantity":null,"Percentage":0.05}},"memory.available":{"Signal":"memory.available","Operator":"LessThan","Value":{"Quantity":"100Mi","Percentage":0}},"nodefs.available":{"Signal":"nodefs.available","Operator":"LessThan","Value":{"Quantity":null,"Percentage":0.05}},"nodefs.inodesFree":{"Signal":"nodefs.inodesFree","Operator":"LessThan","Value":{"Quantity":null,"Percentage":0.05}}}}
[error 2023-12-31 16:07:29 fileutils2.GetAllBlkdevsIoSchedulers(fileutils.go:170)] no block device avaiable
[info 2023-12-31 16:07:29 hostinfo.(*SHostInfo).prepareEnv(hostinfo.go:402)] I/O Scheduler switch to none
[info 2023-12-31 16:07:29 hostinfo.(*SHostInfo).getKubeReservedMemMb(hostinfo.go:1523)] Kubelet memory threshold subtracted: 100MB
[info 2023-12-31 16:07:29 hostinfo.(*SHostInfo).Init(hostinfo.go:196)] Start detectHostInfo
[info 2023-12-31 16:07:29 hostinfo.(*SHostInfo).detectKVMMaxCpus(hostinfo.go:863)] KVM API VERSION 12
[info 2023-12-31 16:07:29 hostinfo.(*SHostInfo).detectKVMMaxCpus(hostinfo.go:868)] KVM CAP MAX VCPUS: 384
[info 2023-12-31 16:07:29 hostinfo.(*SHostInfo).detectKVMMaxCpus(hostinfo.go:876)] KVM CAP NR VCPUS: 384
[info 2023-12-31 16:07:29 sysutils.detectNestSupport(kvm.go:146)] Host is support kvm nest ...
[info 2023-12-31 16:07:29 sysutils.detectNestSupport(kvm.go:151)] Host kvm nest is enabled ...
[info 2023-12-31 16:07:29 hostinfo.(*SHostInfo).detectOsDist(hostinfo.go:756)] DetectOsDist CentOS Linux 7.9.2009
[info 2023-12-31 16:07:29 hostinfo.(*SHostInfo).detectQemuVersion(hostinfo.go:830)] Detect qemu version is 4.2.0
[info 2023-12-31 16:07:29 hostinfo.(*SHostInfo).detectOvsVersion(hostinfo.go:971)] Detect OVS version is 2.12.4
[info 2023-12-31 16:07:29 hostinfo.(*SHostInfo).detectOvsKOVersion(hostinfo.go:988)] kernel module openvswitch version:        2.10.5
[info 2023-12-31 16:07:29 hostinfo.(*SHostInfo).Init(hostinfo.go:205)] Start parseConfig
[info 2023-12-31 16:07:29 hostinfo.NewNIC(hostinfohelper.go:233)] IP <IP_ADDRESS>/br0/bond1
[info 2023-12-31 16:07:29 hostbridge.(*SBaseBridgeDriver).ConfirmToConfig(hostbridge.go:172)] bridge br0 already has ip <IP_ADDRESS>
[info 2023-12-31 16:07:29 hostinfo.NewNIC(hostinfohelper.go:283)] Confirm to configuration!!
[info 2023-12-31 16:07:29 hostinfo.(*SNIC).SetupDhcpRelay(hostinfohelper.go:202)] Not enable dhcp relay on nic: &hostinfo.SNIC{Inter:"bond1", Bridge:"br0", Ip:"<IP_ADDRESS>", Network:"", WireId:"", Mask:24, Bandwidth:1000, BridgeDev:(*hostbridge.SOVSBridgeDriver)(0xc00056af60), dhcpServer:(*hostdhcp.SGuestDHCPServer)(0xc00056ba70)}
[info 2023-12-31 16:07:29 hostinfo.(*SHostInfo).setupOvnChassis(hostinfo.go:223)] Start setting up ovn chassis
[info 2023-12-31 16:07:30 hostman.(*SHostService).RunService.func1(host_services.go:84)] Auth complete!!
[info 2023-12-31 16:07:30 policy.(*SPolicyManager).init(policy.go:136)] policy fetch worker count 1
[info 2023-12-31 16:07:30 consts.SetNonDefaultDomainProjects(consts.go:109)] set non_default_domain_projects to false
[info 2023-12-31 16:07:30 watcher.(*SInformerSyncManager).startWatcher(watcher.go:83)]EndpointChangeManager: Start resource informer watcher for endpoint
[info 2023-12-31 16:07:30 storageman.StartSnapshotRecycle(storage_base.go:491)] Snapshot recyle job started
[info 2023-12-31 16:07:30 guestman.NewGuestCpuSetCounter(guesthelper.go:198)] NewGuestCpuSetCounter from topo: {"architecture":"numa","nodes":[{"caches":[{"level":1,"logical_processors":[0,40],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[1,41],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[2,42],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[3,43],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[4,44],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[5,45],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[6,46],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[7,47],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[8,48],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[9,49],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[10,50],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[11,51],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[12,52],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[13,53],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[14,54],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[15,55],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[16,56],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[17,57],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[18,58],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[19,59],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[0,40],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[1,41],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[2,42],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[3,43],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[4,44],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[5,45],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[6,46],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[7,47],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[8,48],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[9,49],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[10,50],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[11,51],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[12,52],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[13,53],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[14,54],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[15,55],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[16,56],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[17,57],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[18,58],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[19,59],"size_bytes":32768,"type":"data"},{"level":2,"logical_processors":[0,40],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[1,41],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[2,42],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[3,43],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[4,44],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[5,45],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[6,46],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[7,47],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[8,48],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[9,49],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[10,50],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[11,51],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[12,52],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[13,53],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[14,54],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[15,55],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[16,56],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[17,57],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[18,58],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[19,59],"size_bytes":1048576,"type":"unified"},{"level":3,"logical_processors":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59],"size_bytes":28835840,"type":"unified"}],"cores":[{"id":0,"index":0,"logical_processors":[0,40],"total_threads":2},{"id":1,"index":1,"logical_processors":[1,41],"total_threads":2},{"id":16,"index":2,"logical_processors":[10,50],"total_threads":2},{"id":17,"index":3,"logical_processors":[11,51],"total_threads":2},{"id":18,"index":4,"logical_processors":[12,52],"total_threads":2},{"id":19,"index":5,"logical_processors":[13,53],"total_threads":2},{"id":20,"index":6,"logical_processors":[14,54],"total_threads":2},{"id":24,"index":7,"logical_processors":[15,55],"total_threads":2},{"id":25,"index":8,"logical_processors":[16,56],"total_threads":2},{"id":26,"index":9,"logical_processors":[17,57],"total_threads":2},{"id":27,"index":10,"logical_processors":[18,58],"total_threads":2},{"id":28,"index":11,"logical_processors":[19,59],"total_threads":2},{"id":2,"index":12,"logical_processors":[2,42],"total_threads":2},{"id":3,"index":13,"logical_processors":[3,43],"total_threads":2},{"id":4,"index":14,"logical_processors":[4,44],"total_threads":2},{"id":8,"index":15,"logical_processors":[45,5],"total_threads":2},{"id":9,"index":16,"logical_processors":[46,6],"total_threads":2},{"id":10,"index":17,"logical_processors":[47,7],"total_threads":2},{"id":11,"index":18,"logical_processors":[48,8],"total_threads":2},{"id":12,"index":19,"logical_processors":[49,9],"total_threads":2}],"distances":[10,21],"id":0,"memory":{"supported_page_sizes":[1073741824,2097152],"total_physical_bytes":34359738368,"total_usable_bytes":33233096704}},{"caches":[{"level":1,"logical_processors":[20,60],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[21,61],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[22,62],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[23,63],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[24,64],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[25,65],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[26,66],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[27,67],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[28,68],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[29,69],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[30,70],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[31,71],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[32,72],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[33,73],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[34,74],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[35,75],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[36,76],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[37,77],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[38,78],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[39,79],"size_bytes":32768,"type":"instruction"},{"level":1,"logical_processors":[20,60],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[21,61],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[22,62],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[23,63],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[24,64],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[25,65],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[26,66],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[27,67],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[28,68],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[29,69],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[30,70],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[31,71],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[32,72],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[33,73],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[34,74],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[35,75],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[36,76],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[37,77],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[38,78],"size_bytes":32768,"type":"data"},{"level":1,"logical_processors":[39,79],"size_bytes":32768,"type":"data"},{"level":2,"logical_processors":[20,60],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[21,61],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[22,62],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[23,63],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[24,64],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[25,65],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[26,66],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[27,67],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[28,68],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[29,69],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[30,70],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[31,71],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[32,72],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[33,73],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[34,74],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[35,75],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[36,76],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[37,77],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[38,78],"size_bytes":1048576,"type":"unified"},{"level":2,"logical_processors":[39,79],"size_bytes":1048576,"type":"unified"},{"level":3,"logical_processors":[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79],"size_bytes":28835840,"type":"unified"}],"cores":[{"id":0,"index":0,"logical_processors":[20,60],"total_threads":2},{"id":1,"index":1,"logical_processors":[21,61],"total_threads":2},{"id":2,"index":2,"logical_processors":[22,62],"total_threads":2},{"id":3,"index":3,"logical_processors":[23,63],"total_threads":2},{"id":4,"index":4,"logical_processors":[24,64],"total_threads":2},{"id":8,"index":5,"logical_processors":[25,65],"total_threads":2},{"id":9,"index":6,"logical_processors":[26,66],"total_threads":2},{"id":10,"index":7,"logical_processors":[27,67],"total_threads":2},{"id":11,"index":8,"logical_processors":[28,68],"total_threads":2},{"id":12,"index":9,"logical_processors":[29,69],"total_threads":2},{"id":16,"index":10,"logical_processors":[30,70],"total_threads":2},{"id":17,"index":11,"logical_processors":[31,71],"total_threads":2},{"id":18,"index":12,"logical_processors":[32,72],"total_threads":2},{"id":19,"index":13,"logical_processors":[33,73],"total_threads":2},{"id":20,"index":14,"logical_processors":[34,74],"total_threads":2},{"id":24,"index":15,"logical_processors":[35,75],"total_threads":2},{"id":25,"index":16,"logical_processors":[36,76],"total_threads":2},{"id":26,"index":17,"logical_processors":[37,77],"total_threads":2},{"id":27,"index":18,"logical_processors":[38,78],"total_threads":2},{"id":28,"index":19,"logical_processors":[39,79],"total_threads":2}],"distances":[21,10],"id":1,"memory":{"supported_page_sizes":[1073741824,2097152],"total_physical_bytes":34359738368,"total_usable_bytes":33782239232}}]}
[info 2023-12-31 16:07:30 hostdhcp.(*SGuestDHCPServer).Start(dhcpserver.go:72)] SGuestDHCPServer starting ...
[info 2023-12-31 16:07:30 guestman.(*SGuestManager).InitQemuMaxCpus(guestman.go:143)] KVM max cpus count: 384
[info 2023-12-31 16:07:30 guestman.(*SGuestManager).InitQemuMaxCpus(guestman.go:161)] Machine type pc max cpus: 240
[info 2023-12-31 16:07:30 guestman.(*SGuestManager).InitQemuMaxCpus(guestman.go:161)] Machine type q35 max cpus: 240
[info 2023-12-31 16:07:30 guestman.(*SGuestManager).InitPythonPath.func1(guestman.go:176)] Python path /usr/bin/python
[info 2023-12-31 16:07:32 hostinfo.(*SHostInfo).ensureMasterNetworks(hostinfo.go:1206)] Master ip <IP_ADDRESS> to fetch wire
[error 2023-12-31 16:07:32 hostinfo.(*SHostInfo).GetMasterNicIpAndMask(hostinfo.go:996)] MasterNic (*netutils2.SNetInterface)(nil)
[info 2023-12-31 16:07:32 hostinfo.(*SHostInfo).tryCreateNetworkOnWire(hostinfo.go:1175)] Get master ip <IP_ADDRESS> and mask 24
[error 2023-12-31 16:07:32 hostinfo.(*SHostInfo).onFail(hostinfo.go:1114)] register failed: initHostRecords: initHostRecord: try create network: no matched networks like <IP_ADDRESS>/24
[error 2023-12-31 16:07:32 timeutils2.AddTimeout.func1.1(timeutils.go:31)] register failed, try 30 seconds later...
goroutine 661 [running]:
runtime/debug.Stack()
        /usr/lib/go/src/runtime/debug/stack.go:24 +0x65
runtime/debug.PrintStack()
        /usr/lib/go/src/runtime/debug/stack.go:16 +0x19
yunion.io/x/onecloud/pkg/util/timeutils2.AddTimeout.func1.1()
        /root/go/src/yunion.io/x/onecloud/pkg/util/timeutils2/timeutils.go:32 +0x59
panic({0x28665e0, 0x34ee2d0})
        /usr/lib/go/src/runtime/panic.go:838 +0x207
yunion.io/x/onecloud/pkg/hostman/hostinfo.(*SHostInfo).onFail(0xc000cf8180, {0x2b4f440?, 0xc001af81c8?})
        /root/go/src/yunion.io/x/onecloud/pkg/hostman/hostinfo/hostinfo.go:1116 +0xeb
yunion.io/x/onecloud/pkg/hostman/hostinfo.(*SHostInfo).register(0xc000cf8180)
        /root/go/src/yunion.io/x/onecloud/pkg/hostman/hostinfo/hostinfo.go:1081 +0x6f
yunion.io/x/onecloud/pkg/util/timeutils2.AddTimeout.func1()
        /root/go/src/yunion.io/x/onecloud/pkg/util/timeutils2/timeutils.go:37 +0x5c
created by yunion.io/x/onecloud/pkg/util/timeutils2.AddTimeout
        /root/go/src/yunion.io/x/onecloud/pkg/util/timeutils2/timeutils.go:28 +0x65
{"level":"warn","ts":"2023-12-31T16:07:38.182Z","logger":"etcd-client","caller":"v3/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"etcd-endpoints://0xc000794540/#initially=[http://default-etcd-client.onecloud.svc:2379]","attempt":0,"error":"rpc error: code = Unknown desc = context deadline exceeded"}
[error 2023-12-31 16:07:38 informer.NewWatchManagerBySessionBg.func1(watcher.go:46)] NewWatchManagerBySession error: new etcd informer backend: new etcd client: rpc error: code = Unknown desc = context deadline exceeded
[info 2023-12-31 16:07:48 informer.(*EtcdBackendForClient).StartClientWatch(etcd_client.go:84)] /onecloud/informer watched
[info 2023-12-31 16:07:48 informer.NewWatchManagerBySessionBg.func1(watcher.go:51)] callback with watchMan success.
[info 2023-12-31 16:08:02 hostinfo.(*SHostInfo).ensureMasterNetworks(hostinfo.go:1206)] Master ip <IP_ADDRESS> to fetch wire
[error 2023-12-31 16:08:02 hostinfo.(*SHostInfo).GetMasterNicIpAndMask(hostinfo.go:996)] MasterNic (*netutils2.SNetInterface)(nil)
[info 2023-12-31 16:08:02 hostinfo.(*SHostInfo).tryCreateNetworkOnWire(hostinfo.go:1175)] Get master ip <IP_ADDRESS> and mask 24
[error 2023-12-31 16:08:02 hostinfo.(*SHostInfo).onFail(hostinfo.go:1114)] register failed: initHostRecords: initHostRecord: try create network: no matched networks like <IP_ADDRESS>/24
[error 2023-12-31 16:08:02 timeutils2.AddTimeout.func1.1(timeutils.go:31)] register failed, try 30 seconds later...
goroutine 671 [running]:
runtime/debug.Stack()
        /usr/lib/go/src/runtime/debug/stack.go:24 +0x65
runtime/debug.PrintStack()
        /usr/lib/go/src/runtime/debug/stack.go:16 +0x19
yunion.io/x/onecloud/pkg/util/timeutils2.AddTimeout.func1.1()
        /root/go/src/yunion.io/x/onecloud/pkg/util/timeutils2/timeutils.go:32 +0x59
panic({0x28665e0, 0x34ee2d0})
        /usr/lib/go/src/runtime/panic.go:838 +0x207
yunion.io/x/onecloud/pkg/hostman/hostinfo.(*SHostInfo).onFail(0xc000cf8180, {0x2b4f440?, 0xc0016b00c0?})
        /root/go/src/yunion.io/x/onecloud/pkg/hostman/hostinfo/hostinfo.go:1116 +0xeb
yunion.io/x/onecloud/pkg/hostman/hostinfo.(*SHostInfo).register(0xc000cf8180)
        /root/go/src/yunion.io/x/onecloud/pkg/hostman/hostinfo/hostinfo.go:1081 +0x6f
yunion.io/x/onecloud/pkg/util/timeutils2.AddTimeout.func1()
        /root/go/src/yunion.io/x/onecloud/pkg/util/timeutils2/timeutils.go:37 +0x5c
created by yunion.io/x/onecloud/pkg/util/timeutils2.AddTimeout
        /root/go/src/yunion.io/x/onecloud/pkg/util/timeutils2/timeutils.go:28 +0x65
[root@master1 ~]#

https://www.cloudpods.org/docs/guides/onpremise/host/troubleshooting#宿主机的host服务启动失败且报错fail-to-get-network-infono-networks该怎么解决
根据以上信息，已解决！


Proposal for ResourcePackages (deserialization of arbitrary resources)

Leverage Java SPI to do classpath search and localise Service Providers that expose resources for given package in form of a single method:
def resourceConstructors: (PackageVersion, Map[ResourceType, Urn => CustomResource])
where:
PackageVersion is a newtype describing the version of the package (for custom equality rules)
Map[ResourceType, Urn => CustomResource] is a map containing all resources exposed by the package, keyed by their ResourceType newtype, value is a resource constructor function (proposed, open for change) that takes only Urn newtype (not implemented yet) and returns something that is a subtype of CustomResource (as all resources defined in provider packages are <: CustomResource
This design is relatively safe, given the version-locked unique pairing of ResourceType to concrete Resource case class type. Usage of such api forces only one safe downcast from CustomResource supertype to concrete type bound to given ResourceType.
What remains to discuss is how to wire this into the registration mechanism as creation of Resource case class instance is trivial but it has to be initialized by context correctly via readResource call.

This is not necessary (yay!) because types are properly pointed out in schemas and we can summon implicit typeclass instance for each field where it's needed.


Add --find-port parameter

#332 explored a --find-port parameter that was promising for situations when one wants to fallback from the default or defined port if it's unavailable...which will solve #325 & #215 bothersomeness.

989fa1c upgrades portfinder, which will solve #325 & #215. The new version of portfinder will guarantee  the port found to be a free port.
In the current codebase, portfinder.basePort = 8080 sets the default port to 8080, portfinder will find a free port (i.e. 8081, 8082, and so on.) if 8080 is not available.

So, the current 0.10.0 release does handle the fallback for the default port, but does not provide a fallback port--and still throws the error mentioned in #215 & #325.
Adding this --find-port option could fix that, but I'm not quite sure it's a good idea as specifying a port likely means the developer/operator expects that port to be available and if it is not, there should be an error...rather than just another port selected.
Open to input, though!

I think this should be implemented as -p 0  (port zero) flag . It's the unix convention for many server applications that is telling the OS to assign a random port. See #386.

I'm inclined to agree with @ahmetb that -p 0 seems the more "usual" way of specifying this. And, while http-server doesn't support random port usage with -p 0, it should already work to walk upward from 8080 until it finds an open port. @BigBlueHat feel free to re-open this if you disagree, but I'm closing for now since -p 0 already supports this functionality.

This functionality is not currently documented, I'm adding that now.


Dynamic setting of a default date will result in reset to actual date.

I have a problem with dynamic setting of new defaultDate. Default date is initialized correctly for first time, but when I use .set afterwards then the date is reset to actual date.
Steps to reproduce:

Open datepicker and you should see actual date minus 18 years.
Do nothing and click outside
Press the button
Check again the datepicker, there will be a new date.

https://codepen.io/anon/pen/yqvVLN
Your Environment

flatpickr version used: 4.5.1
Browser name and version: Google Chrome 67.0.3396.99
OS and version: macOs High Sierra 10.13.6

It looks like defaultDate is only set on initialize. It's a workaround, but you could re-initialize to change the default date

@aizerin defaultDate is only used on init. Use setDate to update selected date.
https://flatpickr.js.org/instance-methods-properties-elements/#setdate-date-triggerchange-datestrformat

hello there, i am trying to set the default date of a second picker based on the first picker date selected, but it seems not to work, its giving me error "Cannot read property 'dateFormat' of undefined". i dont know what that problem is
this is my code
https://codepen.io/augustusbuckman/pen/yLyJMNG

@aizerin defaultDate is only used on init. Use setDate to update selected date.
https://flatpickr.js.org/instance-methods-properties-elements/#setdate-date-triggerchange-datestrformat

Thanks! This worked for me.


Debug package vulnerability with ReDoS

Currently you are using debug package with version 2.1.3
which includes ms in version 0.7.0 vulnerable.
The solution is upgrade debug package version to latest.
Could you upgrade this? I'll generate the PR
Thanks

Sure, but the version that is published to npm does not include the dependency on debug.  Here is the package.json as published to npm: https://github.com/crypto-utils/keygrip/blob/1.0.1/package.json

I'm not sure how the develop branch got onto master, but I rolled back master to reflect what is on npm, so there is no longer any dependencies, as published.


Support for custom link handler in Markdown Cell and Webviews

VSCode Version:
OS Version:

1. Add support to handle Notebook output link clicks in extension code
2. Add support to handle Notebook Markdown cell link clicks in extension code.

Currently we (Python Extension) displays custom links in the webviews (our notebook implementation).

We do this in the Markdown of a cell
We do this in output of a cell.

We handle these clicks by monitoring the click event of the document.
Any link clicked that has an href starting with vscode is handled by our code in webview and then passed onto the extension.

With the new VS Code notebooks, we'll need to do the same to handle links displayed in the output. I can see two solutions (for outputs):

Use our own renderer when rendering HTML & and highjack all clicks to handle our custom links (not preferred, as I'd prefer to use VS Code renderers as much as possible).
Add links in HTML using href=javascript:acquireVsCodeAPI().postMessage(....).

However, we won't be able to handle click events in markdown

At least not with the above approach
Open to alternatives

Had a chat with @rebornix and it was suggested that VSCode could provide a custom API that works in Markdown + Output rendered in WebViews as well as Notebooks

@DonJayamanne what is the use case for this. How would another notebook tool handle these notebook files?

This wouldn't work across another notebook tool.
We were planning on adding these cells or output temporarily when displaying nb in VS Code (when saving to disc that cell wouldn't be added).
Our goal was to use Markdown to render some content and have the same look and feel as VSCode markdown renderer, & have ability to include links that can trigger some code in the extension.
E.g. we add a cell with markdown (containing) instructions for user with links in the cell (clicking that triggers extension code).
Similarly when output text > certain limit), we truncate it and add a message with a link allowing user to change the value.

Is this solved by supporting command: type links that will invoke a command when clicked? Or do you need to intercept the user's click on an arbitrary link like http://microsoft.com?

And changing the URLs to that type of link is a vscode-specific solution, is that a problem?

Is this solved by supporting command: type links that will invoke a command when clicked?

Yes that would work.

And changing the URLs to that type of link is a vscode-specific solution, is that a problem?

No, that would work.
Today we handle all link click handlers and if the link starts with http://command, then we execute the command (provided its a link we generated - by looking at a white list).

Ok, in markdown cells it will work in tomorrow's build. I'll have to think about it for output.

Moving this to June and we still need to discuss what's the right solution for this problem. Command links work well in VS Code but they are not platform agnostic.

@DonJayamanne we discussed this offline and command links are good as Python extension is already pre-processing the data, following links will work

[link](command:COMMANDID) in markdown cell
 in outputs

We can continue discussion if we find the solution not feasible.

These don't actually work in outputs currently though, I need to hook that up.

I tested command: links are working fine in outputs in webview and pushed a change to text/markdown static output to support it as well.


Features --> Refactoring

Major changes & refactoring

Removed all sudo scripts and merged into one for better useability as they were extremely similar code-wise

Changed import for sudo to new way and implemented the new way where needed

Added constants for repeated text as to make it easier to read and less repetitive

Refactored N_P_P.py for better readability and scaling. Also removes duped lines and adds a more effective system for showing the options based on the user's level

Created two new scripts to work upon, 'Notifications' and 'Staff_Portal'

Noticed previous variable of 'species' etc was unused in the filter so changed to 'species_query' etc

Ensured the filtered gender only returns those of Male or Female, not both as originally Male would also show Female due to the string containing 'male'

Code is not duplicated, this is due to the sudo_user_login script containing similar code due to its similarity however the lines it is referring to are actually changed so it works for that specific sudo login. This cannot be approved in SonarCloud so changed quality gate to reflect this issue and raised the duplication check from >3 to >18


Complete and test post routes

I think this is working because when I got to post a post, it cannot "get" BUT it's trying to get the login, so that is good, I think.


Missing features for layers in editor 3

"nice-to-have" work TBD that was encountered/identified while working on implementing analysis layers #6780
edit: created separate issues for remaining issues

Closing since some have already solved in the scope of other issues, and creating separate issues for each item remaining


Internal DNS entry

As a VANotify system owner
I want VANotify to be accessible on VA network
So that VA services can communicate with VANotify.
Acceptance criteria:

[ ] dev.api.notifications.va.gov points to our VAEC dev notification api load balancer
[ ] staging.api.notifications.va.gov points to our VAEC staging notification api load balancer
[ ] api.notifications.va.gov points to our VAEC prod notification api load balancer

This story depends on the Infra - need the Load Balancer DSN so that we can create appropriate CNAME records.

Opened up request for DNS change for dev environment in SNOW: CHG0111886

Opened up request for DNS change for staging environment in SNOW: CHG0113855

Opened up request for DNS change for staging environment in SNOW: CHG0113859

Screenshot of DNS queries in VA network:


Remove ES6 arrow functions from hover-box

Browsers such as Safari do not natively understand ES6 functions, thus during development only Chrome can be used when the hover box is imported into the page.
(On Safari the following error occurs:
SyntaxError: Unexpected token ')'
appendChild — index.html:77
hoverBox — template.v1.js:18012
renderOnLoad — template.v1.js:18217
(anonymous function) — template.v1.js:18227

, this is caused by the function arrow notation not being parsed).

I thought these got compiled out when we built things. @shancarter ?

Oh... The built process probably doesn't understand "hover-box.txt" is javascript that gets injected into the final page. I wonder if there's a better way we could do this, to ensure we transform it into the most widely browser compatible form?

Perhaps it is possible to call browserify/babel as a separate command to generate hover-box.txt, then import it (and then there would be an original hover-box-es6.js, and the transpiled file would have higher portability).

I'm merging this, but we'll add some more sustainable solution in the future.


csv.write not following RFC4180

RFC4180 states:
   6.  Fields containing line breaks (CRLF), double quotes, and commas
       should be enclosed in double-quotes.  For example:

       "aaa","b CRLF
       bb","ccc" CRLF
       zzz,yyy,xxx

   7.  If double-quotes are used to enclose fields, then a double-quote
       appearing inside a field must be escaped by preceding it with
       another double quote.  For example:

       "aaa","b""bb","ccc"

but this code:
try! csv.write(row: ["id", "testing,\"comma"])

generates this:
id,testing,"comma

instead of this:
id,"testing,""comma"

Thank you for reporting!
I fixed it in #56.


Import under ifdef unexpected behavior

imported module is being validated even though it should never be imported
fn main() -> u32 {
#ifdef USE_A
    return a::func();
#else
    return 0u;
#endif
}

#define_import_path a

fn func() -> u32 {
    incorrect;
}

    #[test]
    fn conditional_import2() {
        let mut composer = Composer::default();

        composer
            .add_composable_module(ComposableModuleDescriptor {
                source: include_str!("tests/conditional_import2/mod.wgsl"),
                file_path: "tests/conditional_import2/mod.wgsl",
                ..Default::default()
            })
            .unwrap();

        composer
            .make_naga_module(NagaModuleDescriptor {
                source: include_str!("tests/conditional_import2/top.wgsl"),
                file_path: "tests/conditional_import2/top.wgsl",
                ..Default::default()
            })
            .map_err(|err| println!("{}", err.emit_to_string(&composer)))
            .unwrap();
    }

results in
error: expected assignment or increment/decrement, found ';'
  ┌─ tests/conditional_import2/mod.wgsl:4:14
  │
4 │     incorrect;
  │              ^ expected assignment or increment/decrement
  │
  = expected assignment or increment/decrement, found ';'

I have a branch with this test here: https://github.com/arcashka/naga_oil/blob/failing_import_test/src/compose/test.rs#L1098
This example is silly looking because I tried to make it as minimal as possible. I found this issue when I used shader defs as an index for tonemapping lut bindings.
Conditional import
#ifdef TONEMAP_IN_SHADER
#import bevy_core_pipeline::tonemapping::tone_mapping
#endif

in tonemapping_shared.wgsl i had
@group(0) @binding(#TONEMAPPING_LUT_TEXTURE_BINDING_INDEX) var dt_lut_texture: texture_3d<f32>;
@group(0) @binding(#TONEMAPPING_LUT_SAMPLER_BINDING_INDEX) var dt_lut_sampler: sampler;

which resulted in
error: expected expression, found '#'
   ┌─ /home/arcashka/Documents/projects/other/bevy/crates/bevy_core_pipeline/src/tonemapping/tonemapping_shared.wgsl:13:20
   │
13 │ @group(0) @binding(#TONEMAPPING_LUT_TEXTURE_BINDING_INDEX) var dt_lut_texture: texture_3d<f32>;
   │                    ^ expected expression
   │
   = expected expression, found '#'

when TONEMAP_IN_SHADER is undefined

This is more a bevy issue than a naga oil issue. I think building the module would work in raw naga oil without ever importing A. But in bevy for asset loading to be complete we need all possible dependents loaded, and your dependent doesn’t load successfully.

Sorry, I don't think I understand :(
I wrote a test with this scenario and it fails in naga_oil repository. It doesn't have bevy as a dependency according to Cargo.toml.
Or you are saying it behaves as it does because it's required for bevy?

Ah sorry I misunderstood. And you’re right, it looks like we iterate and pull used items from all possible imports (which isn’t necessary in this case since there are none).
it would be a trivial fix to not try and load modules with no used items, but that would break virtual functions (no imported items would appear to be used so the module would be ignored). These might be broken anyway but I’d like to revive them if they are.
So we’d instead need to get preprocessor data with defines context … which is also a bit messy because modules can add shaderdefs themselves, and we can end up in an inconsistent state.
There is maybe a clean fix, but I wonder why you’re in this situation? Cant you remove the module import if it’s not valid, or fix it so it is?

Thank you for fast responses! :)
For my situation it's a little more complicated. My module is valid when correct shader defs are provided. It uses them for binding indices.
So in my code I either provide these indices or hide import under ifdef. But hiding fails, and leads to an error
error: expected expression, found '#'
   ┌─ /home/arcashka/Documents/projects/other/bevy/crates/bevy_core_pipeline/src/tonemapping/tonemapping_shared.wgsl:13:20
   │
13 │ @group(0) @binding(#TONEMAPPING_LUT_TEXTURE_BINDING_INDEX) var dt_lut_texture: texture_3d<f32>;
   │                    ^ expected expression
   │
   = expected expression, found '#'

There is more information regarding my scenario in the description. And you can also check PR where I encountered this behavior https://github.com/bevyengine/bevy/pull/13262
Also, right now it's not really an issue for me, I managed to bypass it by moving bindings into nested module like this https://github.com/bevyengine/bevy/pull/13262/files#diff-49ec0e7e6216fe88b72aa04b3ef5684978a425f9afbd8f09c5b1c025440c163f
I just thought it's better to at least document the issue

Ok that makes sense. Then you could wrap the binding declaration itself in an ifdef on the def for the binding index? I don’t think nesting achieves anything that you can’t do with a flatter structure.
The other alternative is to use a consistent binding across all the bevy use points, like 99 or something. Binding indexes don’t need to be sequential.

You are right, wrapping bindings in ifdef's should work, but it has it's own issues related to some specifics. Right now I feel like nesting is the cleanest solution.
Consistent binding is also an option, but I tried to do bindings sequential based on https://discord.com/channels/691052431525675048/743663924229963868/1237084482780270655 :laughing:


Can't get demo to work on android on first try

I couldn't get both demo and demo-ng to work on my first try by running the commands in the readme.
Here is the stacktrace when I run: npm run demo.android
Error: Cannot find module 'nativescript-dev-webpack'
Require stack:
....
code: 'MODULE_NOT_FOUND',
  requireStack: [
    '~/Desktop/learning/nativescript/ui-material-components/demo/webpack.config.js',
    '~/Desktop/learning/nativescript/ui-material-components/demo/node_modules/webpack-cli/bin/utils/convert-argv.js',
    '~/Desktop/learning/nativescript/ui-material-components/demo/node_modules/webpack-cli/bin/cli.js',
    '~/Desktop/learning/nativescript/ui-material-components/demo/node_modules/webpack/bin/webpack.js'
  ]

I have manually installed nativescript-dev-webpack:1.5.0 and I got this error:
TypeError: CleanWebpackPlugin is not a constructor
    at module.exports (/home/soscler/Desktop/learning/nativescript/ui-material-components/demo/webpack.config.js:290:13)

I tried this solution https://stackoverflow.com/a/57016146 yet it still doesn't work.
I am more interested in getting demo-ng to work.
Here is the stacktrace when I run: npm run demo.android with demo.andoid = cd demo-ng && tns run android
Cannot find module<EMAIL_ADDRESS>Require stack:
- ~/Desktop/learning/nativescript/ui-material-components/demo-ng/hooks/before-prepare/nativescript-community-ui-material-core.js
- ~Desktop/learning/nativescript/ui-material-components/node_modules/nativescript/lib/common/services/hooks-service.js
- ~/Desktop/learning/nativescript/ui-material-components/node_modules/nativescript/lib/common/yok.js
- ~/Desktop/learning/nativescript/ui-material-components/node_modules/nativescript/lib/bootstrap.js
- ~/Desktop/learning/nativescript/ui-material-components/node_modules/nativescript/lib/nativescript-cli.js
- ~/Desktop/learning/nativescript/ui-material-components/node_modules/nativescript/bin/tns

After removing the hooks folder I got into theses errors now
ERROR in src/app/examples/bottom-sheet/login-options.component.ts:2:35 - error TS2307: Cannot find module '@nativescript-community/ui-material-bottomsheet/angular' or its corresponding type declarations.

2 import { BottomSheetParams } from '@nativescript-community/ui-material-bottomsheet/angular';
...
ERROR in ./app/examples/activity-indicator/activity-indicator.module.ts
Module not found: Error: Can't resolve '@nativescript-community/ui-material-activityindicator/angular' in '~/Desktop/learning/nativescript/ui-material-components/demo-ng/src/app/examples/activity-indicator'
 @ ./app/examples/activity-indicator/activity-indicator.module.ts 3:0-124 10:44-87
 @ ./app/examples/examples.module.ts
 @ ./app/app.module.ts
 @ ./main.ts
...

I only get the demo-ng to work after I've changed the @nativescript-community/* packages versions in demo-ng/package.json to be 5.0.20 instead of pointing to the local file system.
It will be much appreciated if the demo works right after we install the dependencies and run it, or at least if there is a guide to help newcomers like me to avoid wasting time in solving the above errors.
Thank you for the amazing work you're doing here.

Sorry they are not up to date witj N7. Please try the vue demo. This is the one I maintain for now

Thank you for your quick answer.
The demo-view works better.
I got a single error related to the hooks which was solved after I deleted the hooks folder.
It's the same error I got earlier
Cannot find module<EMAIL_ADDRESS>Require stack:
- ~/Desktop/learning/nativescript/test/ui-material-components/demo-vue/hooks/before-prepare/nativescript-community-ui-material-core.js
- ~/Desktop/learning/nativescript/test/ui-material-components/node_modules/nativescript/lib/common/services/hooks-service.js
- ~/Desktop/learning/nativescript/test/ui-material-components/node_modules/nativescript/lib/common/yok.js
- ~/Desktop/learning/nativescript/test/ui-material-components/node_modules/nativescript/lib/bootstrap.js
- ~/Desktop/learning/nativescript/test/ui-material-components/node_modules/nativescript/lib/nativescript-cli.js
- ~/Desktop/learning/nativescript/test/ui-material-components/node_modules/nativescript/bin/tns

So it is working now ?

Yes, it's working now.
I'll close the issue.
Thanks


[ENH] Generate BIDS Derivatives-compatible outputs

Closes #5.

Changes proposed in this pull request:

Restructure outputs to match proposed structure in #5, ME-ICA/tedana#649, and ME-ICA/tedana#574.

TODO:

[x] Update tests
[ ] Column names
[ ] Ingestion of BIDS-Derivatives MELODIC outputs
[ ] BIDS-Derivatives-compatible MELODIC interface?

I honestly don't remember what I meant by "Column names", and I think that the MELODIC outputs will have to wait until a different PR.

I cannot figure out why the classifications are not the same!

Hopefully this will be easier to debug once #48 is merged.

I'm noticing that our artifact path (for the tests, not the docs build) and output directory for the integration test don't match up:
Artifact path for integration tests: /tmp/data
Output dir: /tmp/pytest-of-neuro/pytest-0/development_fmri/development_fmri/out
Probably worth tackling in a new issue.

I'm thinking we should re-generate our test data from main so that we have a cleaner comparison here. @eurunuela WDYT?

I'm noticing that our artifact path (for the tests, not the docs build) and output directory for the integration test don't match up:
Artifact path for integration tests: /tmp/data
Output dir: /tmp/pytest-of-neuro/pytest-0/development_fmri/development_fmri/out
Probably worth tackling in a new issue.

Is it possible this comes from using the nipype docker image?
I'd try rerunning with the miniconda image first.

Wanna merge his @tsalo ?
For the record, the problem was we were not using a seed and feature_time_series randomizes the selection of the 90% of the rows. I regenerated the benchmark data with a seed in main, added the same seed to the integration tests here, and the tests pass now.

Sure! Merging now.


Nvidia ctk using CDI

I'm on nixos and given that there the method currently documented for nvidia in the guide does not work. The cause is that nixos moved from using nvidia-wrapper to using CDI which is the new and advice way of mixing nvidia and docker.
I'm using   Driver Version: 555.58.02 and this dockerfile:
services:
  wolf:
    image: my-wolf
    buid: .
    environment:
      - XDG_RUNTIME_DIR=/tmp/sockets
      - HOST_APPS_STATE_FOLDER=/etc/wolf
      - NVIDIA_DRIVER_CAPABILITIES=all
      - NVIDIA_VISIBLE_DEVICES=nvidia.com/gpu=all
    volumes:
      - /etc/wolf/:/etc/wolf/
      - /tmp/sockets:/tmp/sockets:rw
      - /var/run/docker.sock:/var/run/docker.sock:rw
      - /dev/:/dev/:rw
      - /run/udev:/run/udev:rw
    device_cgroup_rules:
      - 'c 13:* rmw'
    devices:
      - /dev/dri
      - /dev/uinput
      - /dev/uhid
    deploy:
      resources:
        reservations:
          devices:
           - driver: cdi
             device_ids:
                - nvidia.com/gpu=all
    network_mode: host
    restart: unless-stopped

together with this Dockerfile:
 FROM ghcr.io/games-on-whales/wolf:stable
 RUN  cp /usr/local/nvidia/lib/libnvrtc* /usr/lib/

To workaround the fact that CDI will override the  /usr/local/nvidia/lib/ folder. Without it wolf can't find libnvrtc, therefore it fails finding nvidia encoders.
but I get this error while I try to start any App:
wolf-1  |    0:     0x7f573666c575 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hd736fd5964392270
wolf-1  |    1:     0x7f57366900fb - core::fmt::write::hc6043626647b98ea
wolf-1  |    2:     0x7f57366697df - std::io::Write::write_fmt::h0d24b3e0473045db
wolf-1  |    3:     0x7f573666c34e - std::sys_common::backtrace::print::h45eb8174d25a1e76
wolf-1  |    4:     0x7f573666d899 - std::panicking::default_hook::{{closure}}::haf3f0170eb4f3b53
wolf-1  |    5:     0x7f573666d63a - std::panicking::default_hook::hb5d3b27aa9f6dcda
wolf-1  |    6:     0x7f573666dd33 - std::panicking::rust_panic_with_hook::h6b49d59f86ee588c
wolf-1  |    7:     0x7f573666dc14 - std::panicking::begin_panic_handler::{{closure}}::hd4c2f7ed79b82b70
wolf-1  |    8:     0x7f573666ca39 - std::sys_common::backtrace::__rust_end_short_backtrace::h2946d6d32d7ea1ad
wolf-1  |    9:     0x7f573666d947 - rust_begin_unwind
wolf-1  |   10:     0x7f5736456f93 - core::panicking::panic_fmt::ha02418e5cd774672
wolf-1  |   11:     0x7f5736457426 - core::result::unwrap_failed::h55f86ada3ace5ed2
wolf-1  |   12:     0x7f57364ba2f5 - waylanddisplaycore::comp::init::h0646e1a9d0f59f64
wolf-1  |   13:     0x7f5736474cd0 - std::sys_common::backtrace::__rust_begin_short_backtrace::h3e12ecad4fbffac1
wolf-1  |   14:     0x7f5736478a7e - core::ops::function::FnOnce::call_once{{vtable.shim}}::h66c8be57d5da151d
wolf-1  |   15:     0x7f573667074b - std::sys::pal::unix::thread::Thread::new::thread_start::hb85dbfa54ba503d6
wolf-1  |   16:     0x7f573329ca94 - <unknown>
wolf-1  |   17:     0x7f5733329a34 - __clone
wolf-1  | 2024-09-09T18:31:57.170706Z ERROR waylanddisplaycore: Compositor thread panic'ed! err=Any { .. }
wolf-1  | thread '<unnamed>' panicked at /tmp/gst-wayland-display/wayland-display-core/src/lib.rs:87:41:
wolf-1  | called `Result::unwrap()` on an `Err` value: RecvError
wolf-1  | stack backtrace:
wolf-1  |    0:     0x7f573666c575 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hd736fd5964392270
wolf-1  |    1:     0x7f57366900fb - core::fmt::write::hc6043626647b98ea
wolf-1  |    2:     0x7f57366697df - std::io::Write::write_fmt::h0d24b3e0473045db
wolf-1  |    3:     0x7f573666c34e - std::sys_common::backtrace::print::h45eb8174d25a1e76
wolf-1  |    4:     0x7f573666d899 - std::panicking::default_hook::{{closure}}::haf3f0170eb4f3b53
wolf-1  |    5:     0x7f573666d63a - std::panicking::default_hook::hb5d3b27aa9f6dcda
wolf-1  |    6:     0x7f573666dd33 - std::panicking::rust_panic_with_hook::h6b49d59f86ee588c
wolf-1  |    7:     0x7f573666dc14 - std::panicking::begin_panic_handler::{{closure}}::hd4c2f7ed79b82b70
wolf-1  |    8:     0x7f573666ca39 - std::sys_common::backtrace::__rust_end_short_backtrace::h2946d6d32d7ea1ad
wolf-1  |    9:     0x7f573666d947 - rust_begin_unwind
wolf-1  |   10:     0x7f5736456f93 - core::panicking::panic_fmt::ha02418e5cd774672
wolf-1  |   11:     0x7f5736457426 - core::result::unwrap_failed::h55f86ada3ace5ed2
wolf-1  |   12:     0x7f573645e0a3 - waylanddisplaycore::MaybeRecv<T>::get::hfdc57fb8b9f1c5c8
wolf-1  |   13:     0x7f573645f74a - display_get_devices_len
wolf-1  |   14:     0x5602cd93be74 - _ZN4wolf4core15virtual_display22create_wayland_displayERKN5immer5arrayINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS2_13memory_policyINS2_21free_list_heap_policyINS2_8cpp_heapELm1024EEENS2_15refcount_policyENS2_15spinlock_policyENS2_20no_transience_policyELb0ELb1EEEEERKS9_
wolf-1  |                                at /wolf/src/core/src/platforms/linux/virtual-display/wayland-display.cpp:30:36
wolf-1  |   15:     0x5602cd735971 - _ZZZ23setup_sessions_handlersRKN5immer3boxIN5state8AppStateENS_13memory_policyINS_21free_list_heap_policyINS_8cpp_heapELm1024EEENS_15refcount_policyENS_15spinlock_policyENS_20no_transience_policyELb0ELb1EEEEERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt8optionalI11AudioServerEENK3$_2clERKNS0_INS1_13StreamSessionESA_EEENKUlvE_clEv
wolf-1  |                                at /wolf/src/moonlight-server/wolf.cpp:225:29
wolf-1  |   16:     0x7f57336eabb4 - <unknown>
wolf-1  |   17:     0x7f573329ca94 - <unknown>
wolf-1  |   18:     0x7f5733329a34 - __clone
wolf-1  | fatal runtime error: failed to initiate panic, error 5

I'm currently using the second way of running wolf documented in the guide (the volume with all the nvidia files) and that works fine, but it will probably drive me crazy the next time there is a nvidia update.

There's just been a report on Discord for NixOS:

Apparently, virtualisation.docker.enableNvidia is deprecated, they say to use hardware.nvidia-container-toolkit.enable = true; instead, which is broken. Neither of them install libnvidia-container, which contains nvidia-container-cli.

After further debugging it seems that NixOS bundles a very old Nvidia container toolkit version
└> sudo nvidia-container-cli -V
cli-version: 1.9.0
lib-version: 1.9.0
build date: 1980-01-01T00:00+00:00
build revision: v1.9.0
build compiler: gcc 13.3.0
build platform: x86_64
build flags: -D_GNU_SOURCE -D_FORTIFY_SOURCE=2 -DNDEBUG -DWITH_TIRPC -Wl,-zrelro -Wl,-znow -Wl,-zdefs -Wl,--gc-sections

1.9.0 has been released in Mar 2022 not even close to 1.16.0 which contains the fixes required to run Wolf.

I'm currently using the second way of running wolf documented in the guide (the volume with all the nvidia files) and that works fine

I'm glad that works, it seems that this should be reported upstream to NixOS!


Version of homepoint in configuration webpage?

Was thinking if it would be possible to write the version of the homepoint firmware into a file on the spiffs (for example version.txt) so when you open the webpage that it can use that file to list the version on the configuration webpage somewhere?

SPIFFS will not be updated during/after a firmware update, therefore thats not possible.
Showing the version is a good idea though, will do some point in the future.

but from your running code on bootup it should be possible to write a file in the spiffs, no?
And I am not familiar with the ESP-IDF development environment you used to develop this... I mostly just work with arduino IDE...
Or maybe I shouldn't be so lazy and setup a full dev env to start hacking at your code ;)


Better Method of Hiding Volume HUD

Hide SBVolumeHUDViewController without abusing viewDidLoad
Added SBVolumeHUDViewController interface to keep compiler from crying

Thanks!