Conditioned diffusion model training demo results in noise

Hi, thank you so much for open-sourcing this amazing repo!!
I was trying to run a simple training on the conditioned diffusion model with 1710 of 3-minute audio tracks, but I noticed that even after 100 epochs the demo output is still full of noise. I have tried tweaking some of the parameters in the training configs. Based on your provided information, I have created a pre-transformed autoencoder before training and provided the ckpt during training. But nothing helps. Could you kindly take a look at the config I used and let me know missed miss anything or where could go wrong?
Thank you so much for your time and help!!

unwrap_autoencoder:
{
    "model_type": "autoencoder",
    "sample_rate": 44100,
    "audio_channels": 1,
    "model": {
        "encoder": {
            "type": "dac",
            "config": {
                "in_channels": 1,
                "latent_dim": 256,
                "d_model": 128,
                "strides": [4, 8, 8, 8]
            }
        },
        "decoder": {
            "type": "dac",
            "config": {
                "out_channels": 1,
                "latent_dim": 128,
                "channels": 1536,
                "rates": [8, 8, 8, 4]
            }
        },
        "bottleneck": {
            "type": "vae"

        },
        "latent_dim": 128,
        "downsampling_ratio": 2048,
        "io_channels": 1
    },
    "training": {
        "learning_rate": 1e-4,
        "warmup_steps": 0,
        "use_ema": false,
        "loss_configs": {
            "discriminator": {
                "type": "encodec",
                "config":{
                    "filters": 32,
                    "n_ffts": [2048, 1024, 512, 256, 128, 64, 32],
                    "hop_lengths": [512, 256, 128, 64, 32, 16, 8],
                    "win_lengths": [2048, 1024, 512, 256, 128, 64, 32]
                },
                "weights": {
                    "adversarial": 0.1,
                    "feature_matching": 5.0
                }
            },
            "spectral": {
                "type": "mrstft",
                "config": {
                    "fft_sizes": [2048, 1024, 512, 256, 128, 64, 32],
                    "hop_sizes": [512, 256, 128, 64, 32, 16, 8],
                    "win_lengths": [2048, 1024, 512, 256, 128, 64, 32],
                    "perceptual_weighting": true
                },
                "weights": {
                    "mrstft": 1.0
                }
            },
            "time": {
                "type": "l1",
                "weights": {
                    "l1": 0.0
                }
            }
        },
        "demo": {
            "demo_every": 2000
        }
}
}

training_config:
{
    "model_type": "diffusion_cond",
    "sample_size": 2097152,
    "sample_rate": 44100,
    "audio_channels": 1,
    "model": {
        "io_channels": 128,
        "diffusion":{
            "type": "adp_cfg_1d",
            "config": {
                "channels": 128,
                "context_embedding_max_length": 100,
                "context_embedding_features": 768,
                "in_channels": 128,
                "multipliers": [1, 2, 4, 8, 16],
                "factors": [1, 2, 2, 2],
                "num_blocks": [1, 2, 2, 2],
                "attentions": [0, 1, 1, 1, 1],
                "attention_heads": 8,
                "attention_multiplier": 2
        }},
        "pretransform": {
            "type": "autoencoder",
            "config": {
                "encoder": {
                    "type": "dac",
                    "config": {
                        "in_channels": 1,
                        "latent_dim": 256,
                        "d_model": 128,
                        "strides": [4, 8, 8, 8]
                    }
                },
                "decoder": {
                    "type": "dac",
                    "config": {
                        "out_channels": 1,
                        "latent_dim": 128,
                        "channels": 1536,
                        "rates": [8, 8, 8, 4]
                    }
                },
                "bottleneck": {
                    "type": "vae"

                },
                "latent_dim": 128,
                "downsampling_ratio": 2048,
                "io_channels": 1
            }
        },
        "conditioning": {
            "configs": [
                {
                    "id": "prompt",
                    "output_dim":768,
                    "type": "t5",
                    "config": {
                        "t5_model_name": "t5-base",
                        "max_length": 100,
                        "project_out": true
                    }
                },
                {
                    "id": "seconds_start",
                    "type": "int",
                    "config": {
                        "min_val": 0,
                        "max_val": 512
                    }
                },
                {
                    "id": "seconds_total",
                    "type": "number",
                    "config": {
                        "min_val": 0,
                        "max_val": 512
                    }
                }

            ],
            "cond_dim": 768
        }
    },
    "training": {
        "learning_rate": 1e-4,
        "demo": {
            "demo_every": 2000,
            "demo_steps": 250,
            "num_demos": 1,
            "demo_cfg_scales": [1.0],
            "demo_cond":
                [{"prompt":"Mix of guitar, piano, bass, drums",
                  "seconds_start": 1,
                  "seconds_total": 600.0}]

        }
    }
}

Custom metadata function:
def get_custom_metadata(info, audio):
    metadata_file = info['path'].replace("mix.flac", "metadata.yaml")
    # print(f"metadata path exist? : {os.path.exists(metadata_file)}")
    with open(metadata_file) as f:
        metadata = yaml.safe_load(f)
    # print("Metadata function called!")
    instruments = [stem['inst_class'] for stem in metadata['stems'].values()]
    # print(f'getting instrument metadata: {instruments}')
    custom_metadata = {
        # 'instruments': [stem['inst_class'] for stem in metadata['stems'].values()],
        "prompt": 'Mix of ' + ', '.join(set(instruments))
    }
    # print(f"custom_metadata: {custom_metadata}")
    return custom_metadata

That looks like the output from an uninitialized autoencoder. Did you pass in the unwrapped autoencoder to train.py with --pretransform-ckpt-path?

Thank you so much for your prompt response!
Yes, I did pass the unwrapped .ckpt to train.py. The ckpt I used for unwrapping the model is converted from .pth weights which I downloaded from DAC's repo. During the converting process, I loaded the model with .pth and saved it in .ckpt with the state_dict. And I used .flac audio tracks for training.
Could any of my processes potentially go wrong here?

Thank you so much for your prompt response!
Yes, I did pass the unwrapped .ckpt to train.py. The ckpt I used for unwrapping the model is converted from .pth weights which I downloaded from DAC's repo. During the converting process, I loaded the model with .pth and saved it in .ckpt with the state_dict. And I used .flac audio tracks for training.
Could any of my processes potentially go wrong here?

Did you sucessfully unwrap the the .pth file? I have been trying with the supplied code, but it fails looking for a lightning version key.

Thank you so much for your prompt response!
Yes, I did pass the unwrapped .ckpt to train.py. The ckpt I used for unwrapping the model is converted from .pth weights which I downloaded from DAC's repo. During the converting process, I loaded the model with .pth and saved it in .ckpt with the state_dict. And I used .flac audio tracks for training.
Could any of my processes potentially go wrong here?

Did you sucessfully unwrap the the .pth file? I have been trying with the supplied code, but it fails looking for a lightning version key.

I fixed it by directly passing below in the config, the pre-trained autoencoder was handled in models/factory.py. I hope that's helpful
"pretransform": {
            "type": "dac_pretrained",
            "config": {
            }
        },

Did you have to do anything special to unwrap the weights.pth file from descript? Or did the supplied unwrap script work as is.

No, you don't actually need the weights.pth for training the diffusion model. In my case, passing the config as above without passing the pre-transform ckpt works

Thanks, that worked for me too, much appreciated.
Did you manage to generated audio from a checkpoint? I had good results from the wandb logging, but the gradio gives me noise every time.

Great to hear it worked for you! I had similar issue with deepspeed strategy. It works well in wandb demo but result in noise or complete silence in gradio. The default strategy works fine.
Did you have any issues with seconds_start and seconds_total during audio generation? Even though I included them in my training, they didn't seem to affect the output. Is there anything else I should pay attention to, such as the sample_size ?

Thank you so much for your prompt response!
Yes, I did pass the unwrapped .ckpt to train.py. The ckpt I used for unwrapping the model is converted from .pth weights which I downloaded from DAC's repo. During the converting process, I loaded the model with .pth and saved it in .ckpt with the state_dict. And I used .flac audio tracks for training.
Could any of my processes potentially go wrong here?

Did you sucessfully unwrap the the .pth file? I have been trying with the supplied code, but it fails looking for a lightning version key.

I fixed it by directly passing below in the config, the pre-trained autoencoder was handled in models/factory.py. I hope that's helpful
"pretransform": {
            "type": "dac_pretrained",
            "config": {
            }
        },

@zxxwxyyy you mentioned you used a model from "DAC's" website. Can you pinpoint me to that site. I need also a model. I tried to train mine (200k passes) but when using it to train a model I only get noise. Also if you can let me know how you transformed it to ckpt that would also be nice. Thank you!

If your config is correct for training the model (not the autoencoder), and you have this in the config to tell the system you want to use a pre-trained autoencoder:
"model": {
    "pretransform": {
      "type": "dac_pretrained",
      "config": {
        "model_bitrate": "16kbps",
        "quantize_on_decode": true,
        "scale": 5.3
      }
    },

It will automatically download and use the pretrained DAC model - you don't need to do anything. You can start with an example config in this repo as a guide (stable_audio_tools/configs/model_configs/txt2audio/stable_audio_1_0.json) and swap the pretransform section for the above it should be a good start.

If your config is correct for training the model (not the autoencoder), and you have this in the config to tell the system you want to use a pre-trained autoencoder:
"model": {
    "pretransform": {
      "type": "dac_pretrained",
      "config": {
        "model_bitrate": "16kbps",
        "quantize_on_decode": true,
        "scale": 5.3
      }
    },

It will automatically download and use the pretrained DAC model - you don't need to do anything. You can start with an example config in this repo as a guide (stable_audio_tools/configs/model_configs/txt2audio/stable_audio_1_0.json) and swap the pretransform section for the above it should be a good start.

Thank you. I'll try it later :D

I am doing something wrong when trying to use the dac_pretrained. When I do that, with empty config, as @zxxwxyyy mentioned, I get and error
Expected weight to be a vector of size equal to the number of channels in input, but got weight of shape [128] and input of shape [1,1024,4096]
Any ideas?

I am also having the issue sorinserban is, and I'm not sure how to proceed with it.
The issue occurs with both the blank config for dac_pretrained and one the one that @fred-dev pasted which specifies the model_bitrate, etc.
I have attached my json config.
My run command is:
python3 ./train.py --dataset-config stable_audio_tools/configs/dataset_configs/toho_dataset.json --model-config stable_audio_tools/configs/model_configs/txt2audio/toho_audio_1_0.json --name stable_toho --num-gpus 3 --strategy deepspeed --from-pretrained-checkpoint
Any guidance would be appreciated.
failed_config.json

I got it working by setting the config of the pretransform to empty as mentioned by @zxxwxyyy and then using 1024 as value for diffusion's in_channels and the model's io_channels
Still the dac does not seem to work well for me. I feel like it's trained on voices not melody. Maybe I missed this.

The pretrained one output noisy result for me. Try use this config to train the autoencoder with your dataset first then train the diffusion model. It will give good result

The pretrained one output noisy result for me. Try use this config to train the autoencoder with your dataset first then train the diffusion model. It will give good result

I am kind of surprised, using the pretrained dac model on arbitrary audio seems pretty good to me, I am curious about your experiences. I understood that the DAC weights had been generated by a massive training run I could not practically reproduce - converting back and forth with the released weights seemed to make pretty good audio.  How many iterations did you train your own DAC on? How much better are the results your get from a diffisuion model with your own DAC. vs the pretrained?

Sorry I didn't make it clear. For me it's like I'm on limited computing resources😂. The output from the pre-trained DAC (batch, 1024, ...) was overwhelming, and I couldn’t get decent training results—it was just too noisy.
However, starting from scratch and training the DAC for 240,000 steps with my collection of only 2000 hours of audio data really helped solve the issue. The DAC config they provided outputs (batch, 64, ...) works way better for me. It saves my computing resources and allows me train with longer window size. I can't say how much the results have improved, but they're definitely a lot better in my case.

I am kind of surprised, using the pretrained dac model on arbitrary audio seems pretty good to me, I am curious about your experiences. I understood that the DAC weights had been generated by a massive training run I could not practically reproduce - converting back and forth with the released weights seemed to make pretty good audio. How many iterations did you train your own DAC on? How much better are the results your get from a diffisuion model with your own DAC. vs the pretrained?

Sorry I didn't make it clear. For me it's like I'm on limited computing resources😂. The output from the pre-trained DAC (batch, 1024, ...) was overwhelming, and I couldn’t get decent training results—it was just too noisy.
However, starting from scratch and training the DAC for 240,000 steps with my collection of only 2000 hours of audio data really helped solve the issue. The DAC config they provided outputs (batch, 64, ...) works way better for me. It saves my computing resources and allows me train with longer window size. I can't say how much the results have improved, but they're definitely a lot better in my case.

Hmm I am curious to try. I have a smaller data set  ~1000 hours, I get OK results after 120k iterations of a DIT, but not really good enough to use. With manually training the DAC how many iterations before you get good results from diffusion training? How much longer a window do you use?

I am kind of surprised, using the pretrained dac model on arbitrary audio seems pretty good to me, I am curious about your experiences. I understood that the DAC weights had been generated by a massive training run I could not practically reproduce - converting back and forth with the released weights seemed to make pretty good audio. How many iterations did you train your own DAC on? How much better are the results your get from a diffisuion model with your own DAC. vs the pretrained?

Sorry I didn't make it clear. For me it's like I'm on limited computing resources😂. The output from the pre-trained DAC (batch, 1024, ...) was overwhelming, and I couldn’t get decent training results—it was just too noisy.
However, starting from scratch and training the DAC for 240,000 steps with my collection of only 2000 hours of audio data really helped solve the issue. The DAC config they provided outputs (batch, 64, ...) works way better for me. It saves my computing resources and allows me train with longer window size. I can't say how much the results have improved, but they're definitely a lot better in my case.

Hmm I am curious to try. I have a smaller data set ~1000 hours, I get OK results after 120k iterations of a DIT, but not really good enough to use. With manually training the DAC how many iterations before you get good results from diffusion training? How much longer a window do you use?

I get good results after 140k steps for the diffusion model training. I used 1048576 (23 secs) of sample size since most of my data were not too long. I think you should definitely try tailor the DAC with your own data it should improve the output quality.

I am kind of surprised, using the pretrained dac model on arbitrary audio seems pretty good to me, I am curious about your experiences. I understood that the DAC weights had been generated by a massive training run I could not practically reproduce - converting back and forth with the released weights seemed to make pretty good audio. How many iterations did you train your own DAC on? How much better are the results your get from a diffisuion model with your own DAC. vs the pretrained?

Sorry I didn't make it clear. For me it's like I'm on limited computing resources😂. The output from the pre-trained DAC (batch, 1024, ...) was overwhelming, and I couldn’t get decent training results—it was just too noisy.
However, starting from scratch and training the DAC for 240,000 steps with my collection of only 2000 hours of audio data really helped solve the issue. The DAC config they provided outputs (batch, 64, ...) works way better for me. It saves my computing resources and allows me train with longer window size. I can't say how much the results have improved, but they're definitely a lot better in my case.

Hmm I am curious to try. I have a smaller data set ~1000 hours, I get OK results after 120k iterations of a DIT, but not really good enough to use. With manually training the DAC how many iterations before you get good results from diffusion training? How much longer a window do you use?

I get good results after 140k steps for the diffusion model training. I used 1048576 (23 secs) of sample size since most of my data were not too long. I think you should definitely try tailor the DAC with your own data it should improve the output quality.

Thanks, I am doing this at the moment. Out of curiosity how did you know when to stop training the DAC? What metric? How did you decide to stop at 240, 000 steps (this is taking a good amount of GPU hours for me 44,000 took 8 hours on 16 GPUs)?

I am kind of surprised, using the pretrained dac model on arbitrary audio seems pretty good to me, I am curious about your experiences. I understood that the DAC weights had been generated by a massive training run I could not practically reproduce - converting back and forth with the released weights seemed to make pretty good audio. How many iterations did you train your own DAC on? How much better are the results your get from a diffisuion model with your own DAC. vs the pretrained?

Sorry I didn't make it clear. For me it's like I'm on limited computing resources😂. The output from the pre-trained DAC (batch, 1024, ...) was overwhelming, and I couldn’t get decent training results—it was just too noisy.
However, starting from scratch and training the DAC for 240,000 steps with my collection of only 2000 hours of audio data really helped solve the issue. The DAC config they provided outputs (batch, 64, ...) works way better for me. It saves my computing resources and allows me train with longer window size. I can't say how much the results have improved, but they're definitely a lot better in my case.

Hmm I am curious to try. I have a smaller data set ~1000 hours, I get OK results after 120k iterations of a DIT, but not really good enough to use. With manually training the DAC how many iterations before you get good results from diffusion training? How much longer a window do you use?

I get good results after 140k steps for the diffusion model training. I used 1048576 (23 secs) of sample size since most of my data were not too long. I think you should definitely try tailor the DAC with your own data it should improve the output quality.

Thanks, I am doing this at the moment. Out of curiosity how did you know when to stop training the DAC? What metric? How did you decide to stop at 240, 000 steps (this is taking a good amount of GPU hours for me 44,000 took 8 hours on 16 GPUs)?

Hi, may I ask what GPU you are using? I'm trying to train DAC with 8 * A100 80G GPU.

I am kind of surprised, using the pretrained dac model on arbitrary audio seems pretty good to me, I am curious about your experiences. I understood that the DAC weights had been generated by a massive training run I could not practically reproduce - converting back and forth with the released weights seemed to make pretty good audio. How many iterations did you train your own DAC on? How much better are the results your get from a diffisuion model with your own DAC. vs the pretrained?

Sorry I didn't make it clear. For me it's like I'm on limited computing resources😂. The output from the pre-trained DAC (batch, 1024, ...) was overwhelming, and I couldn’t get decent training results—it was just too noisy.
However, starting from scratch and training the DAC for 240,000 steps with my collection of only 2000 hours of audio data really helped solve the issue. The DAC config they provided outputs (batch, 64, ...) works way better for me. It saves my computing resources and allows me train with longer window size. I can't say how much the results have improved, but they're definitely a lot better in my case.

Hmm I am curious to try. I have a smaller data set ~1000 hours, I get OK results after 120k iterations of a DIT, but not really good enough to use. With manually training the DAC how many iterations before you get good results from diffusion training? How much longer a window do you use?

I get good results after 140k steps for the diffusion model training. I used 1048576 (23 secs) of sample size since most of my data were not too long. I think you should definitely try tailor the DAC with your own data it should improve the output quality.

Thanks, I am doing this at the moment. Out of curiosity how did you know when to stop training the DAC? What metric? How did you decide to stop at 240, 000 steps (this is taking a good amount of GPU hours for me 44,000 took 8 hours on 16 GPUs)?

I decided by listening to the demos. Training the DAC was actually pretty quick because it was trained with a sample size of 65536 (~1 seconds). Were you training with the configs they provided?

I am kind of surprised, using the pretrained dac model on arbitrary audio seems pretty good to me, I am curious about your experiences. I understood that the DAC weights had been generated by a massive training run I could not practically reproduce - converting back and forth with the released weights seemed to make pretty good audio. How many iterations did you train your own DAC on? How much better are the results your get from a diffisuion model with your own DAC. vs the pretrained?

Sorry I didn't make it clear. For me it's like I'm on limited computing resources😂. The output from the pre-trained DAC (batch, 1024, ...) was overwhelming, and I couldn’t get decent training results—it was just too noisy.
However, starting from scratch and training the DAC for 240,000 steps with my collection of only 2000 hours of audio data really helped solve the issue. The DAC config they provided outputs (batch, 64, ...) works way better for me. It saves my computing resources and allows me train with longer window size. I can't say how much the results have improved, but they're definitely a lot better in my case.

Hmm I am curious to try. I have a smaller data set ~1000 hours, I get OK results after 120k iterations of a DIT, but not really good enough to use. With manually training the DAC how many iterations before you get good results from diffusion training? How much longer a window do you use?

I get good results after 140k steps for the diffusion model training. I used 1048576 (23 secs) of sample size since most of my data were not too long. I think you should definitely try tailor the DAC with your own data it should improve the output quality.

Thanks, I am doing this at the moment. Out of curiosity how did you know when to stop training the DAC? What metric? How did you decide to stop at 240, 000 steps (this is taking a good amount of GPU hours for me 44,000 took 8 hours on 16 GPUs)?

I decided by listening to the demos. Training the DAC was actually pretty quick because it was trained with a sample size of 65536 (~1 seconds). Were you training with the configs they provided?

Yes, I am currently training with that config (65536 samples and mono)- I am doing runs bit by bit to minimise resources, currently at 87600 steps on my DAC training - it sounds pretty good, but needs some more improvement so I will keep going. I am getting the same efficiency as before - about 5500 steps per hour on 16 V100's across 4 nodes - I cannot push a batch size higher than 6 as the GPUs are all at max. I see some lucky folks with A100 80G units. @zxxwxyyy what GPU's are you running to do this?

I am kind of surprised, using the pretrained dac model on arbitrary audio seems pretty good to me, I am curious about your experiences. I understood that the DAC weights had been generated by a massive training run I could not practically reproduce - converting back and forth with the released weights seemed to make pretty good audio. How many iterations did you train your own DAC on? How much better are the results your get from a diffisuion model with your own DAC. vs the pretrained?

Sorry I didn't make it clear. For me it's like I'm on limited computing resources😂. The output from the pre-trained DAC (batch, 1024, ...) was overwhelming, and I couldn’t get decent training results—it was just too noisy.
However, starting from scratch and training the DAC for 240,000 steps with my collection of only 2000 hours of audio data really helped solve the issue. The DAC config they provided outputs (batch, 64, ...) works way better for me. It saves my computing resources and allows me train with longer window size. I can't say how much the results have improved, but they're definitely a lot better in my case.

Hmm I am curious to try. I have a smaller data set ~1000 hours, I get OK results after 120k iterations of a DIT, but not really good enough to use. With manually training the DAC how many iterations before you get good results from diffusion training? How much longer a window do you use?

I get good results after 140k steps for the diffusion model training. I used 1048576 (23 secs) of sample size since most of my data were not too long. I think you should definitely try tailor the DAC with your own data it should improve the output quality.

Thanks, I am doing this at the moment. Out of curiosity how did you know when to stop training the DAC? What metric? How did you decide to stop at 240, 000 steps (this is taking a good amount of GPU hours for me 44,000 took 8 hours on 16 GPUs)?

I decided by listening to the demos. Training the DAC was actually pretty quick because it was trained with a sample size of 65536 (~1 seconds). Were you training with the configs they provided?

Yes, I am currently training with that config (65536 samples and mono)- I am doing runs bit by bit to minimise resources, currently at 87600 steps on my DAC training - it sounds pretty good, but needs some more improvement so I will keep going. I am getting the same efficiency as before - about 5500 steps per hour on 16 V100's across 4 nodes - I cannot push a batch size higher than 6 as the GPUs are all at max. I see some lucky folks with A100 80G units. @zxxwxyyy what GPU's are you running to do this?

I was using 2 x A100 80G while training the autoencoder and it allowed me to push the batch size to 16. Maybe you could try deepspeed strategy and see if it allows you to push the batch size higher

I'm training stable-audio-2 VAE with 8 * A100 80G on VGGSound dataset for testing, batch size 16 * 8, will update when I'm done.

Are there any other high quality 44.1 kHz stereo audio/video dataset? I would like to train the model on a combination of datasets, if the results are satisfactory, I will release the checkpoint.

@BingliangLi you can give jamendo a try :) lmk how it goes

@BingliangLi you can give jamendo a try :) lmk how it goes

Currently I'm using FMA (fma_large) for music data, but jamendo do looks better, I'll give it a try, thanks :)

I have trained the VAE on VGGSound for a few days, the results is alright, but I notice the human voice is not perfect, I will add more human voice data, general audio data, music data to train another VAE model. BTW here is the sample from my VGGSound model.
https://github.com/Stability-AI/stable-audio-tools/assets/49446651/084d40f3-7a7f-4c97-9a3f-54f793c974f5

I have trained the VAE on VGGSound for a few days, the results is alright, but I notice the human voice is not perfect, I will add more human voice data, general audio data, music data to train another VAE model. BTW here is the sample from my VGGSound model.
recon_00264001.mp4

Sounds really good already what config did you use to train the vae?

See also:

https://github.com/Stability-AI/stable-audio-tools/issues/19
https://github.com/Stability-AI/stable-audio-tools/issues/50

I trained the DiT model on BBCSoundEffect for about 100000 stpes, the mse loss is around 0.65~0.7, but the results aren't very satisfactory, how about you guys?


Ratings issue buttons and interactive type

Currently we've opted for <button> elements to support interactive mode. However this has an issue when not using interaction in that a pointer cursor will still appear - as if the icons are clickable.
To resolve this we should modify either the template, or the styles, to remove the pointer styling.
We should add a new interactive prop so that we know when interactive mode is activated. Then:

Option 1: use <svelte:element> to modify the element - but then we have to juggle the type="button"
Option 2: use CSS to disable the pointer events

Option 1 would use more semantically correct HTML, while Option 2 is simpler.

@Mahmoud-zino let me know if you would be interested in handling this. No pressure, whoever can get to it first!

@endigo9740 I mentioned this in the PR, but I think you missed it. I will create a PR immediately 👍 .

Yep, completely missed that. That's my bad. Focus styles should remain, but should only occur when using the interactive mode. Thanks Mahmoud!


feat: support new vendorfield length

Proposed changes

Closes #37.
Types of changes

[ ] Bugfix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Refactoring (improve a current implementation without adding a new feature or fixing a bug)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] Build (changes that affect the build system)
[ ] Docs (documentation only changes)
[ ] Test (adding missing tests or fixing existing tests)
[ ] Other... Please describe:

Checklist

[x] I have read the CONTRIBUTING documentation
[x] Lint and unit tests pass locally with my changes
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] I have added necessary documentation (if appropriate)

Thanks for submitting this pull request! A maintainer will review this in the next few days and explicitly select labels so you know what's going on.
If no reviewer appears after a week, a reminder will be sent out.

Codecov Report

Merging #41 into master will decrease coverage by 0.16%.
The diff coverage is 0%.

@@            Coverage Diff             @@
##           master      #41      +/-   ##
==========================================
- Coverage   79.31%   79.14%   -0.17%
==========================================
  Files          35       35
  Lines         493      494       +1
==========================================
  Hits          391      391
- Misses        102      103       +1

Impacted Files
Coverage Δ

...ib/arkecosystem/crypto/transactions/transaction.ex
89.04% <0%> (-1.24%)
:arrow_down:

Continue to review full report at Codecov.

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

A contributor has approved this PR. A maintainer will merge this PR shortly. If it shouldn't be merged yet, please leave a comment saying so and we'll wait.
Thank you for your contribution!

Your pull request has been merged and marked as tier 4. It will earn you $10 USD.


Create GIF-Maker

Thank you for your contribution. I have a few requests:

please follow the template used in other ideas (use checkboxes, layout it nicer, etc)
add it on the main README.md page in the corresponding table

I've closed it for now. Please make a PR and put both the file and update the table in README.md


CLI:Namespace added

Closes: #48
Signed-off-by: Mohamed Ashiq Liyazudeen<EMAIL_ADDRESS>

Perfect, LGTM.


update patch instructions for data-feed-service

Signed-off-by: Martin Scott<EMAIL_ADDRESS>Patching instructions were incorrect.
:nut_and_bolt: Description: What code changed, and why?
Docs updated

:chains: Related Resources
:+1: Definition of Done
:athletic_shoe: How to Build and Test the Change
:white_check_mark: Checklist

[x] I have read the CONTRIBUTING document.
[ ] Tests added/updated? NA
[x] Docs added/updated?
[x] All commits have been signed-off for the Developer Certification of Origin.

:camera: Screenshots, if applicable

LGTM


refactor: services function signatures improvements

This PR is based on #226 .
Small improvements to the services module function signatures aiming to make it easier for native consumers to use the library.
Main goal was to get rid of TryInto<T, Error = ValidationError> like arguments because that prevented consumers from passing T as an argument (because TryFrom<T> for T has an Infallible error type).
There still are arguments like &HashMap<&SchemaId, &Schema> which aren't really straight-forward to fix due to the implications this has in the FFI layer (maps are constructed at runtime from FFI objects references).
Worth looking into would also be issuer::update_revocation_status_list() as it's fairly painful to deal with, but I believe that's really more due to the RevocationRegistryDelta - RevocationStatusList data structures being different and anoncreds-clsignatures-rs using the former.

Thanks!!  Good stuff.  I’ve asked a few people to review this.
@bobozaur — can you checking the errors in the lint and tests?
I see you made the changes in the wrappers — thanks.  Are there changes in the interface into the wrappers?  E.g. is downstream code going to have to be updated for the change?  I want to be sure what has to be documented.

I think this could use a rebase against main to make the diff easier to read

Thanks!! Good stuff. I’ve asked a few people to review this.
@bobozaur — can you checking the errors in the lint and tests?
I see you made the changes in the wrappers — thanks. Are there changes in the interface into the wrappers? E.g. is downstream code going to have to be updated for the change? I want to be sure what has to be documented.

Errors are fixed now. Regarding the wrappers, no downstream changes should have to be made. I removed the issuer ID in some of the lower level function signatures as it was compared to the one in, say, credential definition, and an error would be thrown if they weren't equal.
I figured that we might as well just take it from there than rely on the user to provide the exact same value. The FFI still accepts the issuer_id but doesn't use it, so it might be wise to remove it in the future as it might lead to confusion.

Could you squash some of the commits? We can merge it afterwards.

Thanks, I think this looks reasonable. It's good to remove the generic parameters from the issuer methods so that they don't get duplicated when used with different input types.
The issue with the HashMap inputs could probably be resolved similarly with a wrapper type containing something like a HashMap<Id, Cow<'a, T>> but I think that's for later.

Thanks, I think this looks reasonable. It's good to remove the generic parameters from the issuer methods so that they don't get duplicated when used with different input types.
The issue with the HashMap inputs could probably be resolved similarly with a wrapper type containing something like a HashMap<Id, Cow<'a, T>> but I think that's for later.

Honestly, the most annoying thing is that accepting a generic like impl TryInto<SchemaId, Error = ValidationError is that you can't even pass in an already constructed SchemaId.
The standard library already provides impl From<T> for T which just returns self, and there's impl TryFrom<T> for T where Error = Infallible, but that does not match the signature and is just awkward to work with.
The Cow idea still comes with the same problem, I think. If I have a HashMap<T, U> I'd like to be able to pass in a reference to that (&HashMap<T, U>) and not construct a new map made of references (HashMap<&T, &U>). Using a Cow I still have to do conversions and allocate a new map.
There could be a wrapper to accommodate both hash map types above, but I don't think that's ideal either.
Perhaps a sealed trait would be more elegant? I believe the point of using the HashMap was to allow some look-ups. So if the look-ups would be made part of the trait and the trait would be implemented for both map types then it should all work seamlessly while also avoiding the Into::into() or From::from() calls in consumer code which would be needed if a wrapper type would be used.
I'd argue that monomorphization makes the trait approach even better since, if the argument is passed as a generic with a trait bound, the FFI wouldn't be bothered with the &HashMap<T,U> type and it wouldn't get compiled while native consumers like aries-vcx wouldn't have to compile the HashMap<&T, &U> function signature.

Yep that makes sense. I don't think it even needs to be a sealed trait, really. Something like:
pub trait IterMap<'a, K: 'a, V: 'a> {
    type Iter: Iterator<Item = (&'a K, &'a V)>;
    fn iter_map(&'a self) -> Self::Iter;
}

impl<'a, K: 'a, V: 'a> IterMap<'a, K, V> for HashMap<K, V> {
    type Iter = std::collections::hash_map::Iter<'a, K, V>;
    fn iter_map(&'a self) -> Self::Iter {
        self.iter()
    }
}

It looks like HashMap<&K, &V> would require a custom iterator type. It would also be possible to add a lifetime to the Item associated type, but that's a newer feature and I think it might make it more complicated.

Yep that makes sense. I don't think it even needs to be a sealed trait, really. Something like:
pub trait IterMap<'a, K: 'a, V: 'a> {
    type Iter: Iterator<Item = (&'a K, &'a V)>;
    fn iter_map(&'a self) -> Self::Iter;
}

impl<'a, K: 'a, V: 'a> IterMap<'a, K, V> for HashMap<K, V> {
    type Iter = std::collections::hash_map::Iter<'a, K, V>;
    fn iter_map(&'a self) -> Self::Iter {
        self.iter()
    }
}

It looks like HashMap<&K, &V> would require a custom iterator type. It would also be possible to add a lifetime to the Iter associated type, but that's a newer feature and I think it might make it more complicated.

GAT's might be an overkill for this, especially since from what I've seen the idea is to lookup through the map and not neccesarily iterate through it.
I was thinking more of something like:
use std::{borrow::Borrow, collections::HashMap, hash::Hash};

pub trait CustomMap<K, V>
where
    K: Hash + Eq,
{
    fn custom_get<Q>(&self, key: &Q) -> Option<&V>
    where
        for<'a> &'a K: Borrow<Q>,
        K: Borrow<Q>,
        Q: Hash + Eq;
}

impl<K, V> CustomMap<K, V> for HashMap<K, V>
where
    K: Hash + Eq,
{
    fn custom_get<Q>(&self, key: &Q) -> Option<&V>
    where
        for<'a> &'a K: Borrow<Q>,
        K: Borrow<Q>,
        Q: Hash + Eq,
    {
        self.get(key)
    }
}

impl<K, V> CustomMap<K, V> for HashMap<&K, &V>
where
    K: Hash + Eq,
{
    fn custom_get<Q>(&self, key: &Q) -> Option<&V>
    where
        for<'a> &'a K: Borrow<Q>,
        K: Borrow<Q>,
        Q: Hash + Eq,
    {
        self.get(key).copied()
    }
}

fn main() {
    let x = HashMap::from([
        (1, "a".to_owned()),
        (2, "b".to_owned()),
        (3, "c".to_owned()),
    ]);
    let y = x.iter().collect::<HashMap<_, _>>();

    let v = x.get(&3);
    let w = y.get(&3);
}

The trait bounds are mostly copy pasted from the HashMap impl, with the addition of the HKTB, explicitly saying that both T and &T should be borrowable as Q, the lookup key, allowing the trait to be implemented for both map types.
While it wouldn't be required for the trait to be sealed, it might make the idea that the API was designed to only work with these types more explicit.
Other operations could be added to this as needed, even iteration. But that would indeed require GATs, and it gets waaaaay more convoluted:
use std::{borrow::Borrow, collections::HashMap, hash::Hash};

pub trait CustomMap<K, V>
where
    K: std::hash::Hash + Eq,
{
    type Iter<'a>: IntoIterator<Item = (&'a K, &'a V)>
    where
        K: 'a,
        V: 'a,
        Self: 'a;

    fn custom_get<Q>(&self, key: &Q) -> Option<&V>
    where
        for<'a> &'a K: Borrow<Q>,
        K: Borrow<Q>,
        Q: Hash + Eq;

    fn custom_iter(&self) -> Self::Iter<'_>;
}

impl<K, V> CustomMap<K, V> for HashMap<K, V>
where
    K: std::hash::Hash + Eq,
{
    type Iter<'a> = std::collections::hash_map::Iter<'a, K, V>
    where
        K: 'a,
        V: 'a,
        Self: 'a;

    fn custom_get<Q>(&self, key: &Q) -> Option<&V>
    where
        for<'a> &'a K: Borrow<Q>,
        K: Borrow<Q>,
        Q: Hash + Eq,
    {
        self.get(key)
    }

    fn custom_iter(&self) -> Self::Iter<'_> {
        self.iter()
    }
}

type MapFn<'a, K, V> = fn((&'a &'a K, &'a &'a V)) -> (&'a K, &'a V);
type MapRefIter<'a, K, V> = std::collections::hash_map::Iter<'a, &'a K, &'a V>;

impl<K, V> CustomMap<K, V> for HashMap<&K, &V>
where
    K: std::hash::Hash + Eq,
{
    type Iter<'a> = std::iter::Map<MapRefIter<'a, K, V>, MapFn<'a, K, V>>
    where
        K: 'a,
        V: 'a,
        Self: 'a;

    fn custom_get<Q>(&self, key: &Q) -> Option<&V>
    where
        for<'a> &'a K: Borrow<Q>,
        K: Borrow<Q>,
        Q: Hash + Eq {
        self.get(key).copied()
    }

    fn custom_iter(&self) -> Self::Iter<'_> {
        self.iter().map(|(k, v)| (*k, *v))
    }
}

fn main() {
    let x = HashMap::from([
        (1, "a".to_owned()),
        (2, "b".to_owned()),
        (3, "c".to_owned()),
    ]);
    let y = x.iter().collect::<HashMap<_, _>>();

    let v = x.custom_get(&3);
    let w = y.custom_get(&3);

    for (k, v) in x.custom_iter() {}

    for (k, v) in CustomMap::<i32, String>::custom_iter(&y) {}
}

I think there would need to be a way to iterate the keys of the map, at least, although maybe the implementation only needs to look up values by key.

Thanks.  I’m assuming the discussion above is more about ideas for future adjustments rather than impacting this PR. And since it is now merged — it has to be...


New Widget: Audio

Description
This PR adds a new ui-audio widget to the palette, which can be used to play dynamically audio files in the dashboard D2.  Similar like the audio-out node of dashboard 1.
I marked this PR as draft, because it is not fully completed.  I need some feedback to complete it.  Until then I won't be working on this PR, so would be nice if somebody could assist me so I can finalize this PR.  Thanks!
This is how it looks in my Chrome browser:

Example flow to demonstrate that all the properties can be dynamically overwritten via inpute messages:
[{"id":"3c290f1ea6cf8b36","type":"inject","z":"4aad778b57d4f47b","name":"Pause","props":[{"p":"playback","v":"pause","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1890,"y":3540,"wires":[["b6d975ba7cfabfcd"]]},{"id":"436efb1217534529","type":"inject","z":"4aad778b57d4f47b","name":"Stop","props":[{"p":"playback","v":"stop","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1890,"y":3500,"wires":[["b6d975ba7cfabfcd"]]},{"id":"bfc886482dbdb38c","type":"debug","z":"4aad778b57d4f47b","name":"Audio output","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":2250,"y":3140,"wires":[]},{"id":"b6d975ba7cfabfcd","type":"ui-audio","z":"4aad778b57d4f47b","group":"1e2acdd1dfa22bf9","name":"","order":0,"width":"6","height":"1","src":"","autoplay":"off","controls":"show","loop":"off","muted":"off","x":2080,"y":3140,"wires":[["bfc886482dbdb38c"]]},{"id":"f878114e50dace0a","type":"inject","z":"4aad778b57d4f47b","name":"Enable","props":[{"p":"enabled","v":"true","vt":"bool"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1890,"y":2920,"wires":[["b6d975ba7cfabfcd"]]},{"id":"e5b91f1f4fb4fd55","type":"inject","z":"4aad778b57d4f47b","name":"Muted off","props":[{"p":"ui_update.muted","v":"off","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1880,"y":3180,"wires":[["b6d975ba7cfabfcd"]]},{"id":"59303ca2418166c2","type":"inject","z":"4aad778b57d4f47b","name":"Muted on","props":[{"p":"ui_update.muted","v":"on","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1880,"y":3140,"wires":[["b6d975ba7cfabfcd"]]},{"id":"03afd1a13fc70794","type":"inject","z":"4aad778b57d4f47b","name":"Loop off","props":[{"p":"ui_update.loop","v":"off","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1890,"y":3260,"wires":[["b6d975ba7cfabfcd"]]},{"id":"c340c61db669fc1f","type":"inject","z":"4aad778b57d4f47b","name":"Loop on","props":[{"p":"ui_update.loop","v":"on","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1880,"y":3220,"wires":[["b6d975ba7cfabfcd"]]},{"id":"900f167dee26d78b","type":"inject","z":"4aad778b57d4f47b","name":"Autoplay on","props":[{"p":"ui_update.autoplay","v":"on","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1870,"y":3300,"wires":[["b6d975ba7cfabfcd"]]},{"id":"f4c14f571d72b9e6","type":"inject","z":"4aad778b57d4f47b","name":"Autoplay off","props":[{"p":"ui_update.autoplay","v":"off","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1870,"y":3340,"wires":[["b6d975ba7cfabfcd"]]},{"id":"a516fd15f0df3401","type":"inject","z":"4aad778b57d4f47b","name":"Src Friends","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"http://www.sitcomsonline.com/sounds/friends1996.wav","payloadType":"str","x":1870,"y":3380,"wires":[["b6d975ba7cfabfcd"]]},{"id":"b89a1933c291bc6b","type":"inject","z":"4aad778b57d4f47b","name":"Src StarWars","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"https://www2.cs.uic.edu/~i101/SoundFiles/ImperialMarch60.wav","payloadType":"str","x":1870,"y":3420,"wires":[["b6d975ba7cfabfcd"]]},{"id":"4fbc55f25609fb08","type":"inject","z":"4aad778b57d4f47b","name":"Play","props":[{"p":"playback","v":"play","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1890,"y":3460,"wires":[["b6d975ba7cfabfcd"]]},{"id":"b737027f04ea228f","type":"inject","z":"4aad778b57d4f47b","name":"Disable","props":[{"p":"enabled","v":"false","vt":"bool"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1890,"y":2960,"wires":[["b6d975ba7cfabfcd"]]},{"id":"80bc186add2ddefc","type":"inject","z":"4aad778b57d4f47b","name":"Visible","props":[{"p":"visible","v":"true","vt":"bool"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1890,"y":3000,"wires":[["b6d975ba7cfabfcd"]]},{"id":"73a1c76f72ec86f2","type":"inject","z":"4aad778b57d4f47b","name":"Invisible","props":[{"p":"visible","v":"false","vt":"bool"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1880,"y":3040,"wires":[["b6d975ba7cfabfcd"]]},{"id":"1e2acdd1dfa22bf9","type":"ui-group","name":"Experiments","page":"e06eacf47a88bb87","width":"6","height":"1","order":1,"showTitle":true,"className":"","visible":"true","disabled":"false"},{"id":"e06eacf47a88bb87","type":"ui-page","name":"Alarm","ui":"be29745a6e568f30","path":"/alarm","icon":"lock","layout":"grid","theme":"092547d34959327c","breakpoints":[{"name":"Default","px":0,"cols":3},{"name":"Tablet","px":576,"cols":6},{"name":"Small Desktop","px":768,"cols":9},{"name":"Desktop","px":1024,"cols":12}],"order":7,"className":"","visible":true,"disabled":false},{"id":"be29745a6e568f30","type":"ui-base","name":"Node-RED","path":"/dashboard","appIcon":"","includeClientData":true,"acceptsClientConfig":["ui-notification","ui-control","ui-chart","ui-text-input","ui-dropdown"],"showPathInSidebar":false,"showPageTitle":true,"navigationStyle":"icon","titleBarStyle":"default"},{"id":"092547d34959327c","type":"ui-theme","name":"Theme Name","colors":{"surface":"#ffffff","primary":"#0094ce","bgPage":"#eeeeee","groupBg":"#ffffff","groupOutline":"#cccccc"}}]

Open issues:

When e.g. a "play" command is send to this node, it could fail.  For example when there is no src url set, or when the user hasn't executed any manual actions yet on the page (because browsers don't like sites to start playing audio automatically).  Which is normal, but you only see a message in the browser console.  Which might be confusing for users to understand why it doesn't play.  Should I send those errors as output messages?  If yes, which format should those messages have?
Currently the audio element is displayed on a specified group.  As a result the audio will stop playing if you navigate to another tab in the dashboard.  Not sure if that is wanted behaviour, or how I could fix that (if not wanted).
A html audio element has a controls property which you can use to show or hide the controls (i.e. play button, and so on...).  I first had supported that, but if you don't show the controls you simply get an empty area which is quite useless.  So I thought it would better if you could enable or hide the ui-audio widget via the dashboard build-in features msg.visible and msg.enabled.  But those don't work (see example flow above).  No idea whether I need to do something special for that.
I have not added a unit test.  Although I know that is important, I have to be honest that my limited free time doesn't allow me to start reading about how to do that.  So would be nice if anybody else could add that.
The documentation md file is near complete but there should be also a nice image of element and a demo flow.  Again I would appreciate if somebody else could add those.

Related Issue(s)
52
Checklist

[X] I have read the contribution guidelines
[ ] Suitable unit/system level tests have been added and they pass
[X] Documentation has been updated

[ ] Upgrade instructions
[ ] Configuration details
[ ] Concepts

[ ] Changes flowforge.yml?

[ ] Issue/PR raised on FlowFuse/helm to update ConfigMap Template
[ ] Issue/PR raised on FlowFuse/CloudProject to update values for Staging/Production

Labels

[ ] Includes a DB migration? -> add the area:migration label

I think in the case of a missing src, that's something we can check server-side and report into the Node-RED debug panel?

@joepavitt  Yes but I was wondering if there is perhaps a standard way already available for nodes to report client-side errors to the server-side?  Something like:
this.$socket.emit('widget-action', this.id, msg)

I don't think it exist yet, but it would be kind of silly if I create a workaround specific for this single one node?

I don't think it exist yet, but it would be kind of silly if I create a workaround specific for this single one node?

There isn't, but client-side errors should report client-side and server-side errors should report server-side. A missing src is something we can detect in the server-side as we'll see it missing in the configuration.

Ok yes, I think that makes sense.  Will have a look at it

@joepavitt,
I have now added a server-side validation.  If you inject a request to play - while no source has been specified (in config screen or dynamically injected) - a warning will occur:

Client-side errors are catched and written to the console log.
For me this is ready for review, whenever you find time...


Uncaught (in promise) Error: Action with payload was not invoked

I get this error when I try to call

fixed with Flex 1.8 but this is not working for previous versions


added missing publication_short tags

👷 Deploy Preview for gladia processing.

Name
Link

🔨 Latest commit
440bf3c90e7ce58873ebaba14efb6f70a7ce48e9

🔍 Latest deploy log
https://app.netlify.com/sites/gladia/deploys/668a9ae6cff8af000831fda0


tests: counter api: Failed when MPU enabled

Describe the bug
in https://github.com/zephyrproject-rtos/zephyr/pull/11729,
tests/drivers/counter/counter_basic_api throws a MPU Fault when MPU is enabled.
To Reproduce
Steps to reproduce the behavior:

CONFIG_ARM_MPU=y
mkdir build; cd build
cmake -DBOARD=nucleo_f746zg
ninja flash
See error

Expected behavior
Test runs as when MPU is disabled
Impact
Can't test counter api when MPU is enabled.
 ****
Current thread ID = 0x2000120c
Faulting instruction address = 0x800ab22
Fatal fault in essential thread! Spinning...

Environment (please complete the following information):

OS: Linux
Toolchain: Zephyr SDK
Commit SHA : https://github.com/zephyrproject-rtos/zephyr/pull/11729

Additional context
Same issue on nucleo_f401re, disco_l475_iot1

Coming from stack guard misconfiguration (or at least conflict with application):
0 rasr=8000000 rbar=7020025 P_RO_U_RO(8000000 8080000 , subreg 0)
1 rasr=20000001 rbar=110b001f X P_RW_U_NA(20000000 20010000 , subreg 0)
2 rasr=20010002 rbar=110b001d X P_RW_U_NA(20010000 20018000 , subreg 0)
3 rasr=20000003 rbar=130b0017 X P_RW_U_RW(20000000 20001000 , subreg 0)
4 rasr=20002804 rbar=150b0009 X P_RO_U_NA(20002800 20002820 , subreg 0)
We're attempting to write into 2000280c

Issue is solved by increasing CONFIG_MAIN_STACK_SIZE from 512 to 1024.
It appears this is default value and it is reduced down to 512 if ZTEST.
This has been introduced with bd9a1548ace9e717d5103e21f7a7e02776b246f1

@galak , @nashif .
I'm questioning bd9a1548ace9e717d5103e21f7a7e02776b246f1 which prevents some tests to run on STM32 targets. I've tried changing to 768, but overflow still happens (bit later).
As commit message says, I've tried to increase (doubled) CONFIG_ZTEST_STACKSIZE, but issue still present.
What would the impacts of reverting fully the change?

What's special about this test that only it is failing?
If it's using ztest, is it somehow doing a lot of processing in the main thread?

Is this still the case w/new counter API & driver?

No, I've been able to run tests w/o. Closing. Will reopen if needed


update version to 1.1.4 and also fix issues

Docs Build status updates of commit 141a144:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

BingMaps/sdk-native/getting-started-android/index.md
:white_check_mark:Succeeded
View

BingMaps/sdk-native/getting-started-android/media/new-project3.png
:white_check_mark:Succeeded
View

BingMaps/sdk-native/getting-started-ios/index.md
:white_check_mark:Succeeded
View

BingMaps/sdk-native/map-control-api/mapelement-class.md
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


Wrong code in one of odin project exercises

Describe the Issue
The code in the question has twice let counter, that is a syntax error.
The responses talk of alert, but the snippet of code uses console.log
Affected Page
https://www.freecodecamp.org/learn/the-odin-project/top-learn-variables-and-operators/learn-variables-and-operators-lesson-i
Your code
NA
Expected behavior
I would expect correct code and terminology.
Screenshots

System
NA
Additional context
I would suggest dividing in two the snippet of code, or having the second let counter transformed into counter (reassignment without redeclaration), or changing the name of the variable for the second pair of lines.
Also the first response should mention console.log instead of alert.

Hi @ilenia-magoni 1st thing is understandable  to change because let uses twice but 2nd one need to changes 1st response text alert to console.log
I am right to understand  this issues need clarity on this issue before resolve?

@PKBAJPAI12 the issue need to be triaged, that means confirming that it is an issue and agreeing on a fix. Then it will be marked as 'help wanted'and people can contribute

I would suggest dividing in two the snippet of code

That sounds good to me. I recommend simplifying the question slightly, too. From "What is the difference in the result of the two console log statements in the JavaScript code below?" to "What are the outputs of the two console log statements in the JavaScript code below?"

Also the first response should mention console.log instead of alert.

:+1:


[DO NOT MERGE] CCD in prevention mode

added excluded rules based on analysis of ccd prod in detection mode (1 week detection data)
https://tools.hmcts.net/jira/browse/RDM-3807

I approve the changes but this should not be merged to master it should go on a different branch of the module which CCD should then seek to obtain sign off from SecOps before rolling out the change

I seems clear to me that CCD needs to run with custom exclusion rules. I think it'll make sense for the cnp-module-waf module on master branch support allowing setting custom exclusion rules. Until we have that, we'll always need to be on the ccd-waf branch.

I approve the changes but this should not be merged to master it should go on a different branch of the module which CCD should then seek to obtain sign off from SecOps before rolling out the change

I seems clear to me that CCD needs to run with custom exclusion rules. I think it'll make sense for the cnp-module-waf module on master branch support allowing setting custom exclusion rules. Until we have that, we'll always need to be on the ccd-waf branch, which is not that good.

correct we haven't invested in this though as we plan to move away from application gateway and use front door instead which supports application waf profiles in a much better way


chore: add more tests

Codecov Report

Merging #14 (a0c32b0) into main (02d7ca1) will not change coverage.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##             main      #14   +/-   ##
=======================================
  Coverage   80.70%   80.70%
=======================================
  Files           2        2
  Lines          57       57
  Branches        9        9
=======================================
  Hits           46       46
  Misses          6        6
  Partials        5        5

Impacted Files
Coverage Δ

src/inkbird_ble/__init__.py
100.00% <100.00%> (ø)

Continue to review full report at Codecov.

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


Use copier instead of cookiecutter

This PR swaps copier for cookiecutter.
It is a fully working implementation that people can try out (as suggested by @jni, see context below)
https://github.com/napari/napari/issues/6122 by @jni

Consider using copier instead of cookiecutter #6122
Some folks from the scientific Python ecosystem seem to like it.
One thing I like is that it has built-in support for updating projects when the template is updated: https://copier.readthedocs.io/en/stable/updating
Apparently cruft does this for cookiecutter templates but that seems like a more complex tool chain since it's not built into cookiecutter.
I don't have a strong opinion here, just want to share something I came across that could be interesting to implement, since updating downstream projects is something we have needed a lot of.

Some first thoughts:

It's way easier to exclude files, as well as create some files and not others depending on the user input. No more post-cookiecutter removal script necessary!
The possibility for easier updates is attractive, although I haven't played around with this part much

I pulled this down and played with it a bit. In general I do like it - I like how much more flexibility there is over the prompts. It looks like the copier.yml file also supports when clauses which should allow us to provide more branching options to the user e.g. we could have a barebones plugin vs. a fully templated plugin with more ease than in the cookiecutter.
I don't like that basically every file in the template ends with .jinja because it means VsCode doesn't automatically lint/syntax highlight it (you have to manually select python, yaml etc. but then it does work!), but it's not a dealbreaker for me.
I don't know if this is something we can configure on our end but right now you have to use --trust at the command line otherwise you get an error:
Template uses potentially unsafe features: jinja_extensions, tasks.
If you trust this template, consider adding the `--trust` option when running `copier copy/update`.

Also, I needed to manually install Jinja2-time and it would be great if we could avoid that for users - but we might just have to provide that in our instructions.
Finally, I think currently the install_precommit choice is ignored, because I chose no and it still installed pre-commit.

jinja2-time

Also, I needed to manually install Jinja2-time and it would be great if we could avoid that for users - but we might just have to provide that in our instructions.

I added a line about installing copier and jinja2-time to the README, and added both to the requirements.txt. I think your suggestion has already been implemented.
Also, we only use the jinja2-time plugin to produce whatever today's date is in the LICENSE files for repositories created with this template. If adding a specific date to the license isn't necessary, we could remove it altogether.
--trust

I don't know if this is something we can configure on our end but right now you have to use --trust at the command line otherwise you get an error

This is unavoidable if you want to use jinja extensions, tasks, or migrations, since all three copier features allow the execution of arbitrary (and thus potentially unsafe) code. We can't configure this in the copier.yml, the user is required to add either --trust (or --unsafe) to their command line call. Here is the section of the docs with more information: https://copier.readthedocs.io/en/stable/configuring/#unsafe

Tasks: we currently use tasks to run the _tasks.py script (validates the manifest, checks module name is PEP8 compliant, no hyphens in plugin name, optionally ). Previously these were cookiecutter hooks named pre_gen_project.py and post_gen_project.py
jinja extensions: we currently only use jinja2-time, as described above
Migrations: we do not use migrations right now.

It's my understanding that the tasks are important to run, but if there's a way to rework that perhaps you can avoid the --trust command line argument.

Finally, I think currently the install_precommit choice is ignored, because I chose no and it still installed pre-commit.

Hmm, that's not great 😦

Discussed at the PR party with @GenevieveBuckley, @jni and @psobolewskiPhD. We want to move forward with copier but don't want to overwrite this repo, as a lot of people might still be using it. We'll eventually fully deprecate this, but in the meantime we should continue with the copier template over at napari/napari-plugin-template

Closing in favour of https://github.com/napari/napari-plugin-template/pull/1


Pin wopiserver version

Description
Pin the cs3org/wopiserver to version 8.3.0
Related Issue

Related to #3986

Motivation and Context

How Has This Been Tested?

test environment:
test case 1:
test case 2:
...

Screenshots (if appropriate):
Types of changes

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ ] Technical debt
[ ] Tests only (no source changes)

Checklist:

[ ] Code changes
[ ] Unit tests added
[ ] Acceptance tests added
[ ] Documentation ticket raised:

@micbar I'd love to enable renovate bot on the owncloud/ocis repo. Then we can get automatic updates of images, too. Dependabot can't do that :-( (https://github.com/dependabot/dependabot-core/issues/390)
Until now, I though sticking with latest is the better alternative to sticking with a most likely outdated version (since there are no automatic updates)


Setup continuous running test runs

Description
Currently tests are run on commits, we want to in addition to that add daily runs

cc @hkjellander

Having daily runs would make it possible for us to catch regressions using Chrome Canary. It's necessary since it can sometimes take weeks between updates to AppRTC (during which time a breaking change in Canary could have sneaked in).

The question is if we can get a hold of canary builds, they are not readily available for download.

Travis now supports cron jobs: https://docs.travis-ci.com/user/cron-jobs/

and travis just shipped cron jobs. @hkjellander is there a public url where linux canaries can be downloaded? The dev channel is typically behind

@fippo AFAIK there are no official Chrome canary releases available for Linux, but there are Chromium builds that are served from https://download-chromium.appspot.com (will auto-detect your current platform, so use https://download-chromium.appspot.com/?platform=Linux_x64&type=snapshots if you're not browsing from Linux).

ah...  one of the disadvantages of that version is that it doesn't have H264 :-/


Why is ID required on the element?

Awesome directive! It was exactly what I was looking for.
I noticed that it won't work properly unless you assign an id to the element. Is there a reason you made this a requirement? Any way to remove this restriction.
Cheers

The id is used in the checking for exceptions, which is done on an ID basis, so you want the element to be included in that check. Please feel free to issue a suggested fix though, more than happy to see it improve.


The term 'Test-ProcessAdminRights' is not recognized as the name of a cmdlet, function, script file, or operable program.

 choco install gimp
Chocolatey v2.3.0
Installing the following packages:
gimp
By installing, you accept licenses for the packages.
Downloading package from source 'https://community.chocolatey.org/api/v2/'
Progress: Downloading gimp 2.10.38... 100%

gimp v2.10.38 [Approved]
gimp package files install completed. Performing other installation steps.
The package gimp wants to run 'chocolateyInstall.ps1'.
Note: If you don't run this script, the installation will fail.
Note: To confirm automatically next time, use '-y' or consider:
choco feature enable -n allowGlobalConfirmation
Do you want to run the script?([Y]es/[A]ll - yes to all/[N]o/[P]rint): y

System.Collections.Hashtable
File appears to be downloaded already. Verifying with package checksum to determine if it needs to be redownloaded.
Error - hashes do not match. Actual value was '7F183FC0FBE18D31E7402E802CA98C713D095DB83BE6A49840C8842E698AC603'.
Downloading gimp
  from 'https://download.gimp.org/gimp/v2.10/windows/gimp-2.10.38-setup.exe'
Progress: 100% - Completed download of C:\Users\kerwin\AppData\Local\Temp\chocolatey\gimp\2.10.38\gimp-2.10.38-setup.exe (328.51 MB).
Download of gimp-2.10.38-setup.exe (328.51 MB) completed.
Hashes match.
Installing gimp...
ERROR: The term 'Test-ProcessAdminRights' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
The install of gimp was NOT successful.
Error while running 'D:\Chocolatey\lib\gimp\tools\chocolateyInstall.ps1'.
 See log for details.

Chocolatey installed 0/1 packages. 1 packages failed.
 See the log for details (D:\Chocolatey\logs\chocolatey.log).

Failures
 - gimp (exited -1) - Error while running 'D:\Chocolatey\lib\gimp\tools\chocolateyInstall.ps1'.
 See log for details.

Enjoy using Chocolatey? Explore more amazing features to take your
experience to the next level at
 https://chocolatey.org/compare
PS C:\WINDOWS\system32> Test-ProcessAdminRights
Test-ProcessAdminRights : 无法将“Test-ProcessAdminRights”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名
称的拼写，如果包括路径，请确保路径正确，然后再试一次。
所在位置 行:1 字符: 1
+ Test-ProcessAdminRights
+ ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Test-ProcessAdminRights:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

reboot system , then work .


Docs to run with @iov/cli don't work out of the box

Roman tried to install from npm and that didn't work, he had to install a few more packages manually.
Let's reproduce this on a clean vm (not dev machine) and verify what commands are needed and update documentation to make this process smoother for those not cloning the repo and building it.
Please assign to Ethan when there is a clear way to reproduce problem.

Let me take over this one (reproduce and fix) as lehajam asked me to support him with a similar or equal issue

@webmaster128 hey Simon, sure.
I think the issue was that I installed iov-cli from npm, but didn't yarn install in this repo, which led to cli not loading some libs.
I don't remember exact steps to reproduce, but you can start there, making sure you have a clean env that does not have these deps already installed.
There were some errors about typescript not compiling when running cli, but I assume it was happening because it was missing deps.

When installing @iov/cli globally (which I think was never tested during development), the iov-cli binary is installed at /usr/local/lib/node_modules/@iov/cli/bin/iov-cli and __dirname is /usr/local/lib/node_modules/@iov/cli/bin. All the dependencies are in /usr/local/lib/node_modules/@iov/cli/node_modules.
Now
$ cd /usr/local/lib/node_modules/@iov/cli && node -p "module.paths"
[ '/usr/local/lib/node_modules/@iov/cli/node_modules',
  '/usr/local/lib/node_modules/@iov/node_modules',
  '/usr/local/lib/node_modules',
  '/usr/local/node_modules',
  '/usr/node_modules',
  '/node_modules' ]

includes /usr/local/lib/node_modules/@iov/cli/node_modules. However,
$ cd ~ && iov-cli
>> module.paths
[ '/home/simon/repl/node_modules',
  '/home/simon/node_modules',
  '/home/node_modules',
  '/node_modules',
  '/home/simon/.node_modules',
  '/home/simon/.node_libraries',
  '/usr/lib/nodejs' ]

does not include /usr/local/lib/node_modules/@iov/cli/node_modules. So one would need to inject the correct path into module.paths for both JS execution and TypeScript compiler.

Setting baseUrl for compile time and module.paths for run time module resolution should do the trick (https://github.com/iov-one/iov-core/pull/340). Will do further testing tomorrow

I can reproduce the issue in the CI: https://github.com/iov-one/iov-core/pull/341 However, the fix from #340 is not yet working


increase coverage

Pull Request Test Coverage Report for Build 96

31 of 35 (88.57%)  changed or added relevant lines in 7 files are covered.
5 unchanged lines in 2 files lost coverage.
Overall coverage increased (+2.8%) to 97.273%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

openprocurement/auctions/geb/validation.py
9
13
69.23%

Files with Coverage Reduction
New Missed Lines
%

openprocurement/auctions/geb/managers/checkers.py
1
100.0%

openprocurement/auctions/geb/managers/awarding.py
4
100.0%

Totals

Change from base Build 95:
2.8%

Covered Lines:
1605

Relevant Lines:
1650

💛  - Coveralls

Pull Request Test Coverage Report for Build 97

31 of 35 (88.57%)  changed or added relevant lines in 7 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+3.1%) to 97.576%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

openprocurement/auctions/geb/validation.py
9
13
69.23%

Totals

Change from base Build 95:
3.1%

Covered Lines:
1610

Relevant Lines:
1650

💛  - Coveralls


/csi-node-driver-registrar: no such file or directory

Details
On the csi-node-driver-registrar, I can't start the container, on the event log it shows:
"RunContainerError: failed to create containerd task: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: "/csi-node-driver-registrar": stat /csi-node-driver-registrar: no such file or directory": unknown"
What steps did you take and what happened:
I have deployed the image inside a DaemonSet, on a amd64 machine (I also tried on a arm64 with the same error), if I use the quay.io image it work perfectly but I need it for a arm64 on which the quay doesn't work.
What did you expect to happen:
Anything else you would like to add:
This is part of the daemonset:
  - name: driver-registrar
    image: raspbernetes/csi-node-driver-registrar
    args:
    - --v=5
    - --csi-address=/csi-data/csi.sock
    - --kubelet-registration-path=/var/lib/kubelet/plugins/{{ .Values.csiDriver.name }}/csi.sock
    env:
    - name: KUBE_NODE_NAME
      valueFrom:
        fieldRef:
          apiVersion: v1
          fieldPath: spec.nodeName
    volumeMounts:
    - mountPath: /csi-data
      name: socket-dir
    - name: registration-dir
      mountPath: /registration

Additional Information:
I'm using K3S with Rancher, on a virtualized Ubuntu Server 20.4 machine (amd64) and Ubuntu Server 20.4 on a Raspberry Pi 4, I'm deploying the pod with Helm
P.S. sorry for my bad English

Hi @UMB8998, there was a change approx. 6days ago that might have caused this to occur, are you only experiencing it with this particular CSI image?
Could you possibly try using the following image variation and letting me know if it works for you.
raspbernetes/csi-node-driver-registrar:e4a67bc9c0f9aabf1d5614e6ac7afe34b5190db6

Thank you for getting back to me, I was also experiencing that issue with:
csi-external-provisioner
csi-external-resizer
csi-external-snapshotter
using the image variation deployed without any issue, thanks

I found the issue and pushing a fix for it now, sorry about the inconvenience.

@UMB8998 before I merge this PR which should hopefully solve the issue can you try this image tag for me to validate it works. a18dfca18a962d6c3b8a5ba4b0cb30820b00a5f2

Of course, thank you for your help

Of course, thank you for your help

I'll await your test 👍

Yes, it deployed without any issue, thank you

Once master has built the images you should be able to once again resume with the initial image tags

@xUnholy I have been trying the deployment, but I'm running into an issue, while the container deployed without any error, when I try to mount a volume in a pod it gives me a error that the CSI driver is not registered on the system, and in the logs, it shows: "Still connecting to unix:///csi-data/csi.sock"
When I look in the host in the registration path for the .sock file is not there, it seems like is there no connection back to the host.
Trying on a amd64 system, with the quay.io image it works, but when I change to the multi-arch image the logs in the container show the same error, but i could mount the image because the driver file is still on the host.

That might be related to a user group issue that we merged this morning, can you try repull the images and set your image pull policy to always and try again to see if it works with the recently built images?

You are right, pulling the latest image solved the issue, thank you very much


zstd compressed debug sections are not parsed

Version and Platform (required):

Binary Ninja Version: 4.2.6168-dev Personal, cb0f14d8
OS: arch
OS Version: unknown
CPU Architecture: x86_64

Bug Description:
Binary Ninja does not read/parse debug sections compressed with zstd.
Steps To Reproduce:
#include <iostream>
#include <ostream>
#include <string>

struct Test {
  std::string msg;
};

int main() {
  Test t{.msg = "Hello, World!"};
  std::cout << t.msg << std::endl;
  return 0;
}

g++ hello.cpp -g -fuse-ld=mold -Wl,--compress-debug-sections=zstd -o hello

Open hello in Binary Ninja and observe there is no struct named Test defined. Change the compression type to zlib or remove entirely and it will appear.
hello.zip
Additional Information:
I ran into this with my own tools using the object crate, perhaps related: https://github.com/gimli-rs/object/pull/730

Fixed in 4.2.6172-dev


Create Homebrew Cask formula

It would be nice to be able to install this without logging in to Apple Store or building using XCode. Homebrew Cask formula seems like a good solution.

yeah that would be cool. curious, would it be better to just have a signed release on freechat.run you could download?

both options solve the problem. Personally I prefer using homebrew, but compiled binary is good enough


Termination errors out with async client

Describe the bug
Exiting the async context manager async with aconnect_ws(uri) errors out.
To Reproduce
# echo server

import asyncio
from websockets import serve

async def echo(websocket):
    async for message in websocket:
        await websocket.send(message)

async def main():
    async with serve(echo, "localhost", 8765):
        await asyncio.Future()

asyncio.run(main())

# async client

import asyncio
from httpx_ws import aconnect_ws

async def hello(uri):
    async with aconnect_ws(uri) as ws:
        message = "Hello world!"
        await ws.send_text(message)
        print(f"sent: {message}")
        message = await ws.receive_text()
        print(f"received: {message}")

asyncio.run(hello("ws://localhost:8765"))

Shows the following error:
sent: Hello world!
received: Hello world!
Task exception was never retrieved
future: <Task finished name='Task-10' coro=<AsyncIOStream.read() done, defined at /home/david/.local/share/hatch/env/virtual/jpterm/-V8cnvgI/dev/lib/python3.11/site-packages/httpcore/backends/asyncio.py:23> exception=ReadError(ClosedResourceError())>
Traceback (most recent call last):
  File "/home/david/.local/share/hatch/env/virtual/jpterm/-V8cnvgI/dev/lib/python3.11/site-packages/httpcore/_exceptions.py", line 10, in map_exceptions
    yield
  File "/home/david/.local/share/hatch/env/virtual/jpterm/-V8cnvgI/dev/lib/python3.11/site-packages/httpcore/backends/asyncio.py", line 34, in read
    return await self._stream.receive(max_bytes=max_bytes)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/david/.local/share/hatch/env/virtual/jpterm/-V8cnvgI/dev/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 1272, in receive
    raise ClosedResourceError from None
anyio.ClosedResourceError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/david/.local/share/hatch/env/virtual/jpterm/-V8cnvgI/dev/lib/python3.11/site-packages/httpcore/backends/asyncio.py", line 31, in read
    with map_exceptions(exc_map):
  File "/home/david/micromamba/envs/jpterm/lib/python3.11/contextlib.py", line 155, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/home/david/.local/share/hatch/env/virtual/jpterm/-V8cnvgI/dev/lib/python3.11/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions
    raise to_exc(exc)
httpcore.ReadError

While it works fine with the non-async version:
# client

from httpx_ws import connect_ws

with connect_ws("ws://localhost:8765") as ws:
    message = "Hello world!"
    ws.send_text(message)
    print(f"sent: {message}")
    message = ws.receive_text()
    print(f"received: {message}")

Thank you for the report, @davidbrochart! Indeed, it seems that we were falling in a case where the underlying stream and the client close happened at the exact same time. I've pushed a fix to avoid the error!

Awesome, thanks François!
BTW, I've noticed that every once in a while the synchronous client errors out with:
sent: Hello world!
received: Hello world!
Exception in thread Thread-1 (_background_receive):
Traceback (most recent call last):
  File "/home/david/micromamba/envs/jpterm/lib/python3.11/threading.py", line 1038, in _bootstrap_inner
    self.run()
  File "/home/david/micromamba/envs/jpterm/lib/python3.11/threading.py", line 975, in run
    self._target(*self._args, **self._kwargs)
  File "/home/david/github/davidbrochart/httpx-ws/httpx_ws/_api.py", line 470, in _background_receive
    data = self._wait_until_closed(self.stream.read, max_bytes)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/david/github/davidbrochart/httpx-ws/httpx_ws/_api.py", line 514, in _wait_until_closed
    wait_close_task = executor.submit(self._should_close.wait)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/david/micromamba/envs/jpterm/lib/python3.11/concurrent/futures/thread.py", line 169, in submit
    raise RuntimeError('cannot schedule new futures after '
RuntimeError: cannot schedule new futures after interpreter shutdown

Yes, I think it's related to the same problem. I think the fix should avoid this as well.

Actually no, the fix works only for the async client.

Well, I guess it's another issue, then 🙃

@davidbrochart Have you the possibility to try commit https://github.com/frankie567/httpx-ws/commit/126013926d12e067afebe9d78fe05a50619c9fbf? I think this should do the trick :)

Yes, it doesn't seem to happen anymore. Thanks!


Added travis ci support for modern node versions

@gnandretta remember to enable tests at travis-ci.org


Pharmgkb Conversion files

These files contain the external ids to chembl ids conversions for the drugs/chemicals in the PharmGKB import.

@googlebot I fixed it.

@googlebot I fixed it.

/gcbrun

/gcbrun

Christie, it looks like the python style checks fail.  Could you fix them please?
https://pantheon.corp.google.com/cloud-build/builds/a711a983-ec2d-4785-8ccc-195c8b46e44f;step=4?project=datcom-ci

Sorry about that! Files now pass the style checks

/gcbrun


Is there a way to sort groups by the amount of children?

Title..
If not, let this be a feature request.

provide your own compactor on the group column def.
see how to do this at bottom of this page:
https://www.ag-grid.com/javascript-grid-sorting/index.php
the third and fourth parameters to the function are the nodes. you can access the details of the nodes to find out child counts etc.


How to connect the SQL database.

Hello,
I'm a noob and I really want to install your cms on my server.
I have install Visual Studio 2015 and SQL server express 2019 and try to connect the database but I don't know how to do it (and obviously when I try even different possibility it fail...).
Have you a tutorial ?
I know how to do that on linux with mariadb and wordpress for exemple but on windows I am completely lost.
Thank you very much.
Sorry for the inconvenience.
Ertuit.

If you're running on local host and the SQL server is on your locals host as well then you should simply be able to compile and run the Visual Studio project (press F5)

Oh, thank you. It work now !
I'm so happy. :)


Add ability to remove (empty) partner groups

Summary
Add ability to remove empty partner groups
Why?
As a bank's business evolves, they may end up using different partner groups, and want to remove the old ones for adminstrative simplicity.
Details
Where this needs to be put
Login as<EMAIL_ADDRESS> Select Partner Agencies, then All Partners, and the Partner Groups tab.
Iff the partner group has no members, add a "Delete" button under actions.
 to appear.  On selecting yes, the partner group will be deleted.
Criteria for completion

[ ] behaviour as above
[ ] automated tests to support that behaviour

@cielf Please Assign this

You've got it.

Done @cielf


Provide local regulations information

Feature description
Providing local corona regulations or status available in app.
Due to the fact, that special/different regulations may get applied to certain regions in one country (e.g. Germany), it would be helpfull getting to know what's allowed. So by having the localization information available, a kind of look-up in order to pull the corona status information would proposed.
Problem and motivation
As  said before, folks in Germany getting confused about what is allowed and what is not allowed wrt. the current location. Since the mobile phone has the GPS position available, a link to the local regulations should be obtainable. So at the end, you would have clear indication what's going on at your current location, rather than guessing, asking others, googling, etc.
Is this something you're interested in working on
<!--- Yes or No ---!>

Duplicate of #151
(Or very similar)

yes, #151 would so far cover, what I've in mind. Having such a feature, would be probably beneficial for surviving the current chaos when the questioncomes up of how to deal w/ the many different regulations.

Hey @raue
I will close this issue as a duplicate then, so that it's easier to track the discussion. Thanks again for the feedback.
Regards,
CH

Corona-Warn-App Open Source Team

Duplicate of #151


Store app PID in sidecar metadata.

Description
Adds the application's command's process ID to the Dapr sidecar metadata (alongside the sidecar and CLI process IDs).
Issue reference
We strive to have all PR being opened based on an issue, where the problem or feature have been discussed prior to implementation.
Please reference the issue this PR will close: #1191
Checklist
Please make sure you've completed the relevant tasks for this PR, out of the following list:

[x] Code compiles correctly
[ ] Created/updated tests
[ ] Extended the documentation

@philliphoff please add E2E for the addition of appPID

@mukundansundar I'll see what I can do.  It didn't look like there were any existing tests related to the PIDs added to the metadata.  Having trouble getting the E2E tests running/debugging locally.  Do you know any tricks?

@mukundansundar I'll see what I can do. It didn't look like there were any existing tests related to the PIDs added to the metadata. Having trouble getting the E2E tests running/debugging locally. Do you know any tricks?
@philliphoff
A few env var needs to be set for E2E, DAPR_RUNTIME_PINNED_VERSION and DAPR_DASHBOARD_PINNED_VERSION.
You can use the make e2e-build-run-sh to build CLI and run self-hosted E2E against it. Be aware that it will modify local CLI installation of dapr ... will uninstall and reinstall the pinned version and run tests.


Restore "Allow wildcards for java class lookup transform providers."

The shadow jar has been moved to its own project. I have not changed the original expansion service library to ensure backwards compatibility.

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Choose reviewer(s) and mention them in a comment (R: @username).
[ ] Format the pull request title like [BEAM-XXX] Fixes bug in ApproximateQuantiles, where you replace BEAM-XXX with the appropriate JIRA issue, if applicable. This will automatically link the pull request to the issue.
[ ] Update CHANGES.md with noteworthy changes.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

See the Contributor Guide for more tips on how to make review process smoother.

GitHub Actions Tests Status (on master branch)

See CI.md for more information about GitHub Actions CI.

Run Java PreCommit

Run Java_Examples_Dataflow PreCommit

Ping.


envVars support in fluentbit helm template

What this PR does / why we need it:
Added possibility to set envVars for the fluent-bit template.
Useful for when you would want to set and use a environment variable in your filters and you don't want to configure your own FluentBit and instead use the templated one from the helm chart.
Does this PR introduced a user-facing change?

Added possibility to set envVars for the fluent-bit template.

Additional documentation, usage docs, etc.:

@felfa01 Thank you!


None should not render an arg. closes #522

Pretty simple. Before, a None argument passed to a command was being passed in as a string. Now, it omits the argument altogether.

Can we just check if the value is falsy? I assume we can also safely ignore '' in args.

I think there are cases where an empty string should be allowed in an argument, for example some program where you're replacing all occurrences of a string with empty string.

Good point.
What do you think about validating args to be strings after filtrering away None and False?


Navigation to choose a solution should be different or disappear if start from "sue my landlord" branch

BUG - Went from section “Answer Questions - Sue my landlord” and navigated to “Choose a solution” (to check problems from question above) and was brought to “Deciding next steps page” even tho issue was non-repairs focused

I think this is also an issue if user clicks on nav and backtracks to another part of interview and proceeds down different path. Have seen before as well

"Deciding next steps page”
continue button field: main_triage_screen
id: triage

`elif initial_action_selection == "help_in_court":
position = 2 # ################ Current, hardcoded position in the list
position_label = 'Choose a solution'
old_nav1 = nav.get_sections()
for index, item in enumerate(old_nav1):
  position = index
  position_label = next(iter(item.values()))
  if item == 'main_triage_screen':
    old_nav1.remove(item)
old_nav1[index] = {position_label: 'Answer questions'}
nav.set_sections(old_nav1)`

Currently these both get me the same result where it skips but does not delete the section title “Choose a solution” on navigation and then proceeds directly to “download”. Only on 2 the “Download" section title appears as “Answer questions”
---
### 1
  elif initial_action_selection == "help_in_court":

    position = 2 # ################ Current, hardcoded position in the list
    position_label = 'Choose a solution'

    old_nav1 = nav.get_sections()
    new_nav = [item for item in old_nav1 if not next(iter(item.values())) == 'main_triage_screen']

    for index, item in enumerate(new_nav):
      position = index
      position_label = next(iter(item.values()))
    new_nav[position] = {position_label: 'Answer questions'}

    nav.set_sections(new_nav)
---
### 2
  elif initial_action_selection == "help_in_court":

    old_nav1 = nav.get_sections()
    new_nav = [item for item in old_nav1 if not next(iter(item.values())) == 'main_triage_screen']

    nav.set_sections(new_nav)

https://github.com/nonprofittechy/docassemble-HousingCodeChecklist/tree/70d4d573600da45c995e51b4b37cfca49dc27f88

See https://github.com/SuffolkLITLab/docassemble-AssemblyLine/pull/731 - will refactor the menu items to use this new method instead of trying to fix the current one. I think the new method will be more readable and easier to maintain


Added Models package with four classes (Client,Gig,MyData,Order)

@Paulmburu Thanks for the enhancements made.


Speed up MemPostings.addFor()

MemPosting.Add() can be very slow because of the requirement to ensure ordering of SeriesRef values.
Speed it up by sort on insert instead of appending and the sorting - this way we scan the slice for the correct place in the slice to insert into.
I've used the code from https://stackoverflow.com/questions/42746972/insert-to-a-sorted-slice to insert into a sorted slice.
The problem with this code being slow is that all time series must be added to MemPostings when they are first scraped.
If MemPostings.Add() is slow then this will block first scrape of each time series because there is a single mutex that guards writes.
This can cause missing scraped data for a lot of time series when you restart Prometheus and all time series are initially added.
What saves us is that if you restart Prometheus it will replay WAL, which will have most of the scraped time series in it,
so while WAL is being replayed MemPostings is being populated and the slowness only makes WAL replay slow, it doesn't affect scrapes.
This makes this problem invisible to most users unless they nuke the data directory and then restart Prometheus.
Another trigger is having a lot of common labels on time series, if theres'a label/value pair set on all time series then all these
time series references will have to be added to a single slice on MemPostings, which will trigger a lot of re-sortings on each Add().
Benchmark results:
goos: linux
goarch: amd64
pkg: github.com/prometheus/prometheus/tsdb/index
cpu: Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz
                  │  main.txt   │               new.txt               │
                  │   sec/op    │   sec/op     vs base                │
MemPostings_Add-8   91.49m ± 2%   15.41m ± 0%  -83.15% (p=0.000 n=20)

                  │   main.txt   │            new.txt             │
                  │     B/op     │     B/op      vs base          │
MemPostings_Add-8   288.1Ki ± 0%   288.1Ki ± 0%  ~ (p=0.560 n=20)

                  │  main.txt  │            new.txt             │
                  │ allocs/op  │ allocs/op   vs base            │
MemPostings_Add-8   98.00 ± 0%   98.00 ± 0%  ~ (p=1.000 n=20) ¹
¹ all samples are equal

My suggestion would be to check once before calling BinarySearch whether the value inserts at the end, because it is comparatively expensive to set up the search mechanism and it should be very rare in normal operation.


docs: update assets

:white_check_mark: Build TheIdServer 1.0.0-user-ole1-0127 completed (commit https://github.com/Aguafrommars/TheIdServer/commit/b972699d60 by @aguacongas)