About the downstream tasks

Hello, congratulations on completing the exciting work! Regarding pre training weights, I would like to know if it is possible to provide weights for downstream tasks related to the CC-CCII dataset classification task?

Hi, many thanks for your attention to our work!
No problem about sharing the pre-trained checkpoints, I will release it after double-checking. By the way, have you downloaded the CC-CCII dataset? Do I need to share it?

Thank you very much, I have downloaded the CC-CCII dataset. Looking forward to your sharing of pre-trained weights.

Dear kare, recently we found that the simplest 3d-unet is better than swin-unetr in the cc-ccii dataset. If you are only interested in this dataset instead of pre-training, I suggest that 3d-unet is a better choice for cc-ccii. I provide the pre-trained checkpoints and logs here (https://www.dropbox.com/scl/fo/okgg7unv4iazhi13wj1lp/AG8FVkQmnN9svvIaZUVvA9I?rlkey=angfy2wh3q8wtscgbf8pmmhp9&st=aq94torh&dl=0).
If you prefer swin-unetr, I will soon release it too.

Dear kare, recently we found that the simplest 3d-unet is better than swin-unetr in the cc-ccii dataset. If you are only interested in this dataset instead of pre-training, I suggest that 3d-unet is a better choice for cc-ccii. I provide the pre-trained checkpoints and logs here (https://www.dropbox.com/scl/fo/okgg7unv4iazhi13wj1lp/AG8FVkQmnN9svvIaZUVvA9I?rlkey=angfy2wh3q8wtscgbf8pmmhp9&st=aq94torh&dl=0). If you prefer swin-unetr, I will soon release it too.

Wow, your response speed is surprising. Thank you for your valuable advice. I am not actually interested in CC-CCII, but I want to pre train a model on a publicly available large-scale dataset and then fine tune it on my own classification task dataset. If using 3d-unet, do we need to train additional linear layers during fine-tuning?

Dear kare, recently we found that the simplest 3d-unet is better than swin-unetr in the cc-ccii dataset. If you are only interested in this dataset instead of pre-training, I suggest that 3d-unet is a better choice for cc-ccii. I provide the pre-trained checkpoints and logs here (https://www.dropbox.com/scl/fo/okgg7unv4iazhi13wj1lp/AG8FVkQmnN9svvIaZUVvA9I?rlkey=angfy2wh3q8wtscgbf8pmmhp9&st=aq94torh&dl=0). If you prefer swin-unetr, I will soon release it too.

Wow, your response speed is surprising. Thank you for your valuable advice. I am not actually interested in CC-CCII, but I want to pre train a model on a publicly available large-scale dataset and then fine tune it on my own classification task dataset. I will try the weights and models you provided first. Thank you again for your reply.

Dear kare, recently we found that the simplest 3d-unet is better than swin-unetr in the cc-ccii dataset. If you are only interested in this dataset instead of pre-training, I suggest that 3d-unet is a better choice for cc-ccii. I provide the pre-trained checkpoints and logs here (https://www.dropbox.com/scl/fo/okgg7unv4iazhi13wj1lp/AG8FVkQmnN9svvIaZUVvA9I?rlkey=angfy2wh3q8wtscgbf8pmmhp9&st=aq94torh&dl=0). If you prefer swin-unetr, I will soon release it too.

Wow, your response speed is impressive! Thank you for your valuable advice. I plan to pre-train a model on a large-scale public pneumonia dataset, such as CC-CCII, and then fine-tune it on my own pneumonia classification task dataset. I will first try the weights and models you provided. Thank you again for your prompt reply.

Hi, the training logs and swinunetr checkpoints of CC-CCII (with pre-training) are updated in https://www.dropbox.com/scl/fo/svqaxxdpb75fo297ulljt/AMoWwRFKzTtxd4kVS2ZK03Q?rlkey=f1juzrxenx1qmq1sqq7nwaywg&st=39oqhkls&dl=0. And I have revised the CC-CCII training codes https://github.com/Luffy03/VoCo/tree/main/Finetune.

The former is right. For all finetuning tasks, we don't need the base crop operation, it is designed for pre-training.

The former is right. For all finetuning tasks, we don't need the base crop operation, it is designed for pre-training.

Thank you for your answer, but if we follow the former approach, wouldn't it only focus on local image features, which can represent the entire CT image? Especially in downstream segmentation tasks, how is it operated?

Hi please read our codes first.
base crops for pretrain random crops for finetune

Dear researchers, our work is now available at Large-Scale-Medical, if you are still interested in this topic. Thank you very much for your attention to our work, it does encourage me a lot!


Added new logs to volume creation

Description
This PR improves and adds new logs to volume creation to facilitate future troubleshooting.
Types of changes

[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ ] New feature (non-breaking change which adds functionality)
[ ] Bug fix (non-breaking change which fixes an issue)
[X] Enhancement (improves an existing feature and functionality)
[ ] Cleanup (Code refactoring and cleanup, that may add test cases)

Feature/Enhancement Scale or Bug Severity
Feature/Enhancement Scale

[ ] Major
[X] Minor

Bug Severity

[ ] BLOCKER
[ ] Critical
[ ] Major
[ ] Minor
[ ] Trivial

Screenshots (if appropriate):
How Has This Been Tested?
This was tested in a local lab, by creating volumes and checking if the logs were all correct.

@blueorangutan package

@DaanHoogland a Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result: :heavy_check_mark: el7 :heavy_check_mark: el8 :heavy_check_mark: debian :heavy_check_mark: suse15. SL-JID 4171

@blueorangutan test

@DaanHoogland a Trillian-Jenkins test job (centos7 mgmt + kvm-centos7) has been kicked to run smoke tests

Trillian test result (tid-4873)
Environment: kvm-centos7 (x2), Advanced Networking with Mgmt server 7
Total time taken: 42542 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr6689-t4873-kvm-centos7.zip
Smoke tests completed. 101 look OK, 0 have errors
Only failed tests results shown below:

Test
Result
Time (s)
Test File

Merging this one based in the approvals and test results.


Make it useable

This is a nice project, but it currently has problems that prevent it from being useable imho. These have been present for a while too:
https://github.com/nsarrazin/serge/issues/219
https://github.com/nsarrazin/serge/issues/133
I can see how issue 219 should be fixed using the langchain tokenizer, but no one really did that yet as far as I can tell.
Instead of trying to come up with the proper solution, I just spend a sunday afternoon to hack something together that works well enough so I can have a conversation with a LLM inside serge. This is what this PR contains. I just needed to do this the dirty way to get an understanding what is actually going on.
You can of course merge this if you want, or maybe take it as inspiration, I just wanted to share it with anyone who might be interested.
Warning: this adds a new field to Chat.params, which are serialized and stored (in redis? in some browser local storage?). This change can potentially break your existing chats.

Works nicely now, takes the history into account and doesn't run over the token limit all the time.

Thanks for contributing, I'll have a look!

@rakete How did you get Wizard-Vicuna-13B to work as shown in the previous image you attached? Was it added by you or does Serge support that model now?? Please help.

You can just put the Wizard-Vicuna model by TheBloke into the models directory and then select it. You can get it here: https://huggingface.co/TheBloke/Wizard-Vicuna-13B-Uncensored-GGML/tree/main
Also for everyone else still looking at this, I actually noticed I made some mistakes in this PR, for example I didn't realize that these "### System" etc. guys actually have a point. I thought I could just remove them, so I did (at least the ### System one). It does work fine without it as far as I can tell and it saves a bit of context size, but it should still be added back.

If you don't know how to "put the model into the directory": you can mount any directory when you launch serge, it is this parameters: -v weights:/usr/src/app/weights, change that to something like -v /some/local/directory:/usr/src/app/weights and then put your models into /some/local/directory.
You can also edit the docker-compose.yml file and change the volume section to mount a local dir:
volumes:
      - datadb:/data/db
      - /some/local/directory:/usr/src/app/weights/
      - /etc/localtime:/etc/localtime:ro

like so ^

@rakete it would need to point to TheBloke models right?

@gaby that's what I used, also see my edit cause you need to get the ggml files until you updated llama to the latest version, which then needs ggmlv3

I was about to give up on serge but adding these changes did as stated: made it useable! Thanks for your efforts.

@rakete Main branch now uses ggmlv3

@rakete Can you fix the merge conflicts so we can merge this :-)

@gaby just saw this message, I'll fix them

@gaby I had to fiddle with it and figure out how to run serge again since I had not touched it in a while, but everything merged and testing locally worked fine. So should be good to go.
If you want I can make a followup PR where I add back the System prompt thing.

@rakete The format/lint checks are failing. These are done using black and ruff.


Don't run routing in SabreLayout with split components

Summary
This commit fixes an issue in the SabreLayout pass when run on backends with a disjoint connectivity graph. The SabreLayout pass internally runs routing as part of its operation and as a performance efficiency we use that routing output by default. However, in the case of a disjoint coupling map we are splitting the circuit up into different subcircuits to map that to the connected components on the backend. Doing final routing as part of that split context is no sound because depsite the quantum operations being isolated to each component, other operations could have a dependency between the components. This was previously discovered during the development of #9802 to be the case with classical data/bits, but since merging that it also has come up with barriers. To prevent any issues in the future this commit changes the SabreLayout pass to never use the routing output during the layout search when there is >1 connected component because we need to rerun routing on the full circuit after applying the layout.
Details and comments
Fixes #9995

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

1 of 1 (100.0%)  changed or added relevant line in 1 file are covered.
6 unchanged lines in 2 files lost coverage.
Overall coverage increased (+0.04%) to 85.941%

Files with Coverage Reduction
New Missed Lines
%

crates/qasm2/src/lex.rs
2
91.14%

crates/accelerate/src/sabre_swap/layer.rs
4
97.32%

Totals

Change from base Build<PHONE_NUMBER>:
0.04%

Covered Lines:
71096

Relevant Lines:
82727

💛  - Coveralls


Update wait-for-it.sh

Refactor TCP host/port availability script

Enhanced variable naming for better readability
Simplified and improved argument parsing logic
Improved error handling, especially around timeout logic
Refactored functions for simplicity and maintainability
Consistently used nc -z for port checking
Enhanced signal handling for better script termination
Updated usage instructions for clarity

These changes make the script more readable, maintainable, and robust.

@archit15singh looks good.

@vishnubob ?

LGTM?

@vishnubob LGTM?


Work in Progress: Enable compression ImageFileWriter calls

ImageFileWriter offers a SetUseCompression option which turns on compression:
http://www.itk.org/Doxygen/html/classitk_1_1ImageFileWriter.html#a8afafaf0d9fe64cfcbb5100d01509dd4
For writers that support compression this turns it on internally during writing, for those that don't support it, it appears to be a no-op.
This feature is particularly important for the MINC format, which has internal lossless compression. Right now ANTs produces huge MINC files because compression is disabled. It does not appear to have an impact on .nii and .nii.gz outputs from my testing.
Questions:

would you accept changes to all instances of ImageFileWriter in the ANTs codebase? Right now MINC displacement transforms are still uncompressed in this patch
should this be controllable via a command-line option or environment variable?

I'm fine with this but I'd wait for Brian to weigh in.  However, if you are going to go through the trouble and look at entire ANTs code base, I would prefer you change any direct image file writer call in the code to the WriteImage function in ReadWriteData which would simplify things particularly in circumstances such as this one.

Agree with nick
On Thursday, April 14, 2016, Nick Tustison<EMAIL_ADDRESS>wrote:

I'm fine with this but I'd wait for Brian to weigh in. However, if you are
going to go through the trouble and look at entire ANTs code base, I would
prefer you change any direct image file writer call in the code to the
WriteImage function in ReadWriteData which would simplify things
particularly in circumstances such as this one.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub
https://github.com/stnava/ANTs/pull/305#issuecomment-210193519

--
brian

Hrm indeed, I see that there's many instances of ImageFileWriter in the codebase.
Perhaps I should leave that to another PR.
Would you merge this now, and as I have time (tm) I will make an attempt to convert instances of ImageFileWriter to WriteImage?


Add files via upload

This Sorting algorithm is different than others, I think this will make a good contribution from my side during Hacktoberfest. Thankyou

It would be whole lot better if you include some comments and documentation in the code


Animationplayer does not update its graphics.

Godot version
v3.6.beta1.official [632a544c6]
System information
w10 64
Issue description
Animation player does not update its graphics until the mouse clicks on the time bar.
https://user-images.githubusercontent.com/19652075/235342781-fdd1a689-8b8c-45c9-a3c7-ccec3a3483af.mp4
Steps to reproduce
See the video
Minimal reproduction project
...

This is kind of expected, because editing the key in the inspector simply changes the animation. It only takes effect on scene when it's played/seeked.
I guess we could automatically seek if the currently edited key is at the time cursor 🤔


klayout deck location

Is this repo the right place for the DRC and LVS rules?
I find it hard to discover and feels more general than closely tied to the "primitive cells".
/cc @mithro @QuantamHD

@proppy I placed them initially. I am thinking to move them under ./tech .. see below example for magic and netgen
https://github.com/RTimothyEdwards/globalfoundries-pdk-libs-gf180mcu_fd_pr/tree/open_pdks/tech

I think @proppy was suggesting they might make more sense in the https://github.com/google/gf180mcu-pdk repo?

@mithro that actually seems a better fit if what you mean is -  https://github.com/google/gf180mcu-pdk/tech

Yeah, that seems reasonable?

@atorkmabrains This issue has been addressed in PV repo

@proppy and @mkkassem We have moved DRC and LVS to pv repo. Do you want to move everything related to klayout in one repo?


Discuss: Issue a warning if a Status' default timeout is None?

There is no universal good default value for timeout. If a timeout is too large, it delays notification of failure and leaves resources dangling. If a timeout is too short, it could needlessly kill a long task and force a costly restart.
I believe that we used to use default finite timeouts in some places, but after a couple incidents of long operations wrongly interrupted, we have (mostly?) stripped them out of the ophyd codebase, defaulting instead to timeout=None, which we take to mean "infinite". Pervasive use of infinite timeouts is not ideal. Perhaps we should discourage it by issuing a warning to the effect:
The Status {self!r} has been created with timeout=None.
This means that it will wait forever to finish.
It is better to set a specific maximum time that it is allowed to complete
so that it will fail with a clear error beyond that time.

If you really want to wait forever,
use math.inf instead of None to suppress this warning.

When can users choose a timeout?

Users can choose it in the class definition, as in

class EpicsMotor(Device):
    def set(self, ...):
        status = DeviceStatus(self, timeout=SOME_HARD_CODED_TIMEOUT)
        ...
        return status

For classes like EpicsMotor that can correspond to a wide range of actual hardware configured in various ways, this is too blunt an approach. Some actions with an EpicsMotor are much longer than others.

We can choose it at instantiation time, as in

class EpicsMotor(Device):
    def __init__(self, ..., timeout, ...):
        self.timeout = timeout

    def set(self, ...):
        status = DeviceStatus(self, timeout=self.timeout)
        ...
        return status

a_particular_motor = EpicsMotor('...', timeout=A_PARTICULAR_TIMEOUT)

That may be good enough if the motor in question performs movements with a well-defined maximum possible time to complete.

We can choose a timeout per a particular action. This is when we have the most information about how long we should expect it to take. For example, for a motor, we can take into account the current velocity setting, the current position, and the distance to the target position. We don't have to take this into account, but we could.

class ParticularEpicsMotor(EpicsMotor):
    def set(self, ...):
        timeout = decision_based_on_how_far_we_have_to_go(...)
        status = DeviceStatus(self, timeout=timeout)
        ...
        return status

Should we use a warning to nudge users toward (2) and (3)? For EpicsMotor, this means that if it is instantiated without a timeout, it will issue that warning when it is moved.
This reminds me of how the library trio does not allow infinite Queues, unlike Python queue.Queue which does. It's better to demand a specific upper bound from the user. We might even consider converting this warning to an error after a very long deprecation period.

I think a warning is appropriate here, as long as it has some identifying information about which Device is responsible for it when possible. I'm not sure if it will be successful in changing behavior though, it might just push people to learn how to filter warnings.

Haha, yeah. And along those lines I think providing the math.inf escape hatch could be an important part of this.

None warning + math.inf escape-hatch sounds like a good plan to me. I share @ZLLentz's concern but see no viable alternative.

OK. I'm inclined to let this one sit awhile, maybe until after the next NSLS rollout, just because I'm wary of a bombardment of deprecation warnings (thinking of that .value one as well). But I think this is worth doing within the next 6 months.

Definitely.  I'm concerned about the impact at beam lines with dozens of motors, most with defaults.  As I understand it now, a beam line would subclass EpicsMotor and specify the desired timeout parameter at that point, then use MyEpicsMotor instead?

I think subclassing would be uncommon. If a constant timeout is good enough then Approach (2) above is fine, i.e.
some_motor = EpicsMotor(PV, name=..., timeout=...)

It’s only if someone wants smarter “adaptive” timeouts that are more context-aware that they would resort to Approach (3), a subclass.

Might revisit this question since #926 has been merged.


Rasa2.0 training with GPU failed. Invalid argument

Rasa version:
2.8.1
Rasa SDK version (if used & relevant):
2.8.1
Rasa X version (if used & relevant):
Python version:
3.7.10
Operating system (windows, osx, ...):
Windows10 & CentOS
Issue:
tensorflow-gpu version: 2.3.0
CUDA version: 10.1.105
Training with GPU using "rasa train" comes with some strange error, but it works perfectly while using CPU.
Error (including full traceback):
>rasa train
2021-08-02 12:18:13 INFO     rasa.model  - Data (domain) for Core model section changed.
2021-08-02 12:18:13 INFO     rasa.model  - Data (messages) for NLU model section changed.
Training NLU model...
2021-08-02 12:18:15 INFO     transformers.file_utils  - PyTorch version 1.9.0+cpu available.
2021-08-02 12:18:15 INFO     transformers.file_utils  - TensorFlow version 2.3.3 available.
2021-08-02 12:18:15 INFO     transformers.tokenization_utils  - Model name 'hfl/chinese_roberta_wwm_ext' not found in model shortcut name list (bert-base-uncased, bert-large-uncased, bert-base-cased, bert-large-cased, bert-base-multilingual-uncased, bert-base-multilingual-cased, bert-base-chinese, bert-base-german-cased, bert-large-uncased-whole-word-masking, bert-large-cased-whole-word-masking, bert-large-uncased-whole-word-masking-finetuned-squad, bert-large-cased-whole-word-masking-finetuned-squad, bert-base-cased-finetuned-mrpc, bert-base-german-dbmdz-cased, bert-base-german-dbmdz-uncased, TurkuNLP/bert-base-finnish-cased-v1, TurkuNLP/bert-base-finnish-uncased-v1, wietsedv/bert-base-dutch-cased). Assuming 'hfl/chinese_roberta_wwm_ext' is a path, a model identifier, or url to a directory containing tokenizer files.
2021-08-02 12:18:15 INFO     transformers.tokenization_utils  - Didn't find file hfl/chinese_roberta_wwm_ext\added_tokens.json. We won't load it.
2021-08-02 12:18:15 INFO     transformers.tokenization_utils  - Didn't find file hfl/chinese_roberta_wwm_ext\special_tokens_map.json. We won't load it.
2021-08-02 12:18:15 INFO     transformers.tokenization_utils  - Didn't find file hfl/chinese_roberta_wwm_ext\tokenizer_config.json. We won't load it.2021-08-02 12:18:15 INFO     transformers.tokenization_utils  - loading file hfl/chinese_roberta_wwm_ext\vocab.txt
2021-08-02 12:18:15 INFO     transformers.tokenization_utils  - loading file None
2021-08-02 12:18:15 INFO     transformers.configuration_utils  - loading configuration file hfl/chinese_roberta_wwm_ext\config.json
2021-08-02 12:18:15 INFO     transformers.configuration_utils  - Model config BertConfig {
  "attention_probs_dropout_prob": 0.1,
  "directionality": "bidi",
  "hidden_act": "gelu",
  "hidden_dropout_prob": 0.1,
  "hidden_size": 768,
  "initializer_range": 0.02,
  "intermediate_size": 3072,
  "layer_norm_eps": 1e-12,
  "max_position_embeddings": 512,
  "model_type": "bert",
  "num_attention_heads": 12,
  "num_hidden_layers": 12,
  "pad_token_id": 0,
  "pooler_fc_size": 768,
  "pooler_num_attention_heads": 12,
  "pooler_num_fc_layers": 3,
  "pooler_size_per_head": 128,
  "pooler_type": "first_token_transform",
  "type_vocab_size": 2,
  "vocab_size": 21128
}

2021-08-02 12:18:15 INFO     transformers.modeling_tf_utils  - loading weights file hfl/chinese_roberta_wwm_ext\pytorch_model.bin
2021-08-02 12:18:22 INFO     transformers.modeling_tf_pytorch_utils  - Loading PyTorch weights from E:\Project\xxx\xxx-rasa2.0\hfl\chinese_roberta_wwm_ext\pytorch_model.bin
2021-08-02 12:18:22 INFO     transformers.modeling_tf_pytorch_utils  - PyTorch checkpoint contains 119,108,746 parameters
2021-08-02 12:18:23 INFO     transformers.modeling_tf_pytorch_utils  - Loaded 102,267,648 parameters in the TF 2.0 model.
2021-08-02 12:18:23 INFO     transformers.modeling_tf_pytorch_utils  - Weights or buffers not loaded from PyTorch model: {'cls.predictions.transform.LayerNorm.bias', 'cls.predictions.bias', 'cls.seq_relationship.weight', 'cls.predictions.transform.dense.weight', 'cls.seq_relationship.bias', 'cls.predictions.decoder.weight', 'cls.predictions.transform.LayerNorm.weight', 'cls.predictions.transform.dense.bias'}
2021-08-02 12:18:23 INFO     rasa.nlu.components  - Added 'LanguageModelFeaturizer' to component cache. Key 'LanguageModelFeaturizer-bert-0188383f103a0471163ca472b71b7ca9'.
c:\anaconda3\envs\rasa2\lib\site-packages\rasa\utils\train_utils.py:646: UserWarning: constrain_similarities is set to `False`. It is recommended to
set it to `True` when using cross-entropy loss. It will be set to `True` by default, Rasa Open Source 3.0.0 onwards.
  category=UserWarning,
2021-08-02 12:18:25 INFO     rasa.shared.nlu.training_data.training_data  - Training data stats:
2021-08-02 12:18:25 INFO     rasa.shared.nlu.training_data.training_data  - Number of intent examples: 1853 (24 distinct intents)

2021-08-02 12:18:25 INFO     rasa.shared.nlu.training_data.training_data  -   Found intents: '', '', '', '', '', '', 'exit', '', 'affirm', '', '', '', '', '', 'chitchat_goodbye', 'chitchat_who_are_you', '', 'chitchat_what_can_you_do', '', '', '', 'chitchat_greet', '', 'chitchat_thanks'
2021-08-02 12:18:25 INFO     rasa.shared.nlu.training_data.training_data  - Number of response examples: 0 (0 distinct responses)
2021-08-02 12:18:25 INFO     rasa.shared.nlu.training_data.training_data  - Number of entity examples: 1257 (6 distinct entities)
2021-08-02 12:18:25 INFO     rasa.shared.nlu.training_data.training_data  -   Found entity types: '', '', '', '', 'name', ''
2021-08-02 12:18:25 INFO     rasa.nlu.model  - Starting to train component JiebaTokenizer
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\~1\AppData\Local\Temp\jieba.cache
Loading model cost 0.760 seconds.
Prefix dict has been built successfully.
2021-08-02 12:18:26 INFO     rasa.nlu.model  - Finished training component.
2021-08-02 12:18:26 INFO     rasa.nlu.model  - Starting to train component LanguageModelFeaturizer
2021-08-02 12:18:31 INFO     rasa.nlu.model  - Finished training component.
2021-08-02 12:18:31 INFO     rasa.nlu.model  - Starting to train component RegexFeaturizer
2021-08-02 12:18:31 INFO     rasa.nlu.model  - Finished training component.
2021-08-02 12:18:31 INFO     rasa.nlu.model  - Starting to train component DIETClassifier
c:\anaconda3\envs\rasa2\lib\site-packages\rasa\shared\utils\io.py:97: UserWarning: Misaligned entity annotation in message '跟踪目标流程' with intent 'okr_follow'. Make sure the start and end values of entities ([(2, 4, '目标')]) in the training data match the token boundaries ([(0, 4, '跟踪目标'), (4, 6, '流程')]). Common causes:
  1) entities include trailing whitespaces or punctuation
  2) the tokenizer gives an unexpected result, due to languages such as Chinese that don't use whitespace for word separation
  More info at https://rasa.com/docs/rasa/training-data-format#nlu-training-data
Epochs:   0%|                                                                                | 0/100 [00:00<?, ?it/s]Traceback (most recent call last):
  File "c:\anaconda3\envs\rasa2\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\anaconda3\envs\rasa2\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "c:\Anaconda3\envs\rasa2\Scripts\rasa.exe\__main__.py", line 7, in <module>
  File "c:\anaconda3\envs\rasa2\lib\site-packages\rasa\__main__.py", line 117, in main
    cmdline_arguments.func(cmdline_arguments)
  File "c:\anaconda3\envs\rasa2\lib\site-packages\rasa\cli\train.py", line 59, in <lambda>
    train_parser.set_defaults(func=lambda args: run_training(args, can_exit=True))
  File "c:\anaconda3\envs\rasa2\lib\site-packages\rasa\cli\train.py", line 103, in run_training
    finetuning_epoch_fraction=args.epoch_fraction,
  File "c:\anaconda3\envs\rasa2\lib\site-packages\rasa\api.py", line 124, in train
    loop,
  File "c:\anaconda3\envs\rasa2\lib\site-packages\rasa\utils\common.py", line 296, in run_in_loop
    result = loop.run_until_complete(f)
  File "c:\anaconda3\envs\rasa2\lib\asyncio\base_events.py", line 587, in run_until_complete
    return future.result()
  File "c:\anaconda3\envs\rasa2\lib\site-packages\rasa\model_training.py", line 119, in train_async
    finetuning_epoch_fraction=finetuning_epoch_fraction,
  File "c:\anaconda3\envs\rasa2\lib\site-packages\rasa\model_training.py", line 299, in _train_async_internal
    finetuning_epoch_fraction=finetuning_epoch_fraction,
  File "c:\anaconda3\envs\rasa2\lib\site-packages\rasa\model_training.py", line 342, in _do_training
    finetuning_epoch_fraction=finetuning_epoch_fraction,
  File "c:\anaconda3\envs\rasa2\lib\site-packages\rasa\model_training.py", line 765, in _train_nlu_with_validated_data
    **additional_arguments,
  File "c:\anaconda3\envs\rasa2\lib\site-packages\rasa\nlu\train.py", line 116, in train
    interpreter = trainer.train(training_data, **kwargs)
  File "c:\anaconda3\envs\rasa2\lib\site-packages\rasa\nlu\model.py", line 221, in train
    component.train(working_data, self.config, **context)
  File "c:\anaconda3\envs\rasa2\lib\site-packages\rasa\nlu\classifiers\diet_classifier.py", line 887, in train
    shuffle=False,  # we use custom shuffle inside data generator
  File "c:\anaconda3\envs\rasa2\lib\site-packages\tensorflow\python\keras\engine\training.py", line 108, in _method_wrapper
    return method(self, *args, **kwargs)
  File "c:\anaconda3\envs\rasa2\lib\site-packages\rasa\utils\tensorflow\temp_keras_modules.py", line 191, in fit
    tmp_logs = train_function(iterator)
  File "c:\anaconda3\envs\rasa2\lib\site-packages\tensorflow\python\eager\def_function.py", line 780, in __call__
    result = self._call(*args, **kwds)
  File "c:\anaconda3\envs\rasa2\lib\site-packages\tensorflow\python\eager\def_function.py", line 807, in _call
    return self._stateless_fn(*args, **kwds)  # pylint: disable=not-callable
  File "c:\anaconda3\envs\rasa2\lib\site-packages\tensorflow\python\eager\function.py", line 2829, in __call__
    return graph_function._filtered_call(args, kwargs)  # pylint: disable=protected-access
  File "c:\anaconda3\envs\rasa2\lib\site-packages\tensorflow\python\eager\function.py", line 1848, in _filtered_call
    cancellation_manager=cancellation_manager)
  File "c:\anaconda3\envs\rasa2\lib\site-packages\tensorflow\python\eager\function.py", line 1924, in _call_flat
    ctx, args, cancellation_manager=cancellation_manager))
  File "c:\anaconda3\envs\rasa2\lib\site-packages\tensorflow\python\eager\function.py", line 550, in call
    ctx=ctx)
  File "c:\anaconda3\envs\rasa2\lib\site-packages\tensorflow\python\eager\execute.py", line 60, in quick_execute
    inputs, attrs, num_outputs)
tensorflow.python.framework.errors_impl.InvalidArgumentError: 2 root error(s) found.
  (0) Invalid argument:  Incompatible shapes: [64,27] vs. [64,26]
         [[{{node cond/else/_13/cond/add_1}}]]
         [[crf/cond/else/_1/crf/cond/Cast/_272]]
  (1) Invalid argument:  Incompatible shapes: [64,27] vs. [64,26]
         [[{{node cond/else/_13/cond/add_1}}]]
0 successful operations.
0 derived errors ignored. [Op:__inference_train_function_60261]

Function call stack:
train_function -> train_function

Epochs:   0%|                                                                                | 0/100 [00:10<?, ?it/s]

Command or request that led to error:

Content of configuration file (config.yml) (if relevant):

Content of domain file (domain.yml) (if relevant):

Definition of Done

[ ] Reproduce problem
[ ] Scope possible solutions
[ ] @koernerfelicia assigned reviewer

Thanks for the issue, @alopez will get back to you about it soon!
You may find help in the docs and the forum, too 🤗

Hi @jk123vip, can you please share your config.yml file? We need it to reproduce the problem.

@jk123vip we are going to mark this as closed for now but if you are able to share the config we can reopen it.

language: zh
pipeline:

name: HFTransformersNLP
model_name: bert
model_weights: bert-base-chinese
cache_dir: data/bert-base-chinese
name: rasa_chinese.nlu.tokenizers.lm_tokenizer.LanguageModelTokenizer
tokenizer_url: 'http://<IP_ADDRESS>:8000/'
name: LanguageModelFeaturizer
name: DIETClassifier
epochs: 50
name: EntitySynonymMapper
name: ResponseSelector
epochs: 50
policies:
name: TEDPolicy
epochs: 200
max_history: 8

this is the config of nlu


Typo causing compile error

https://github.com/ben-marshall/verilog-parser/blob/ebb2126c0e365ea0c1e170532e1c328ebb56c0c1/src/verilog_preprocessor.h#L82
void verilog_preprocessor_nounconnected_drive(
    ast_primitive_strength direction;
);

The semicolon seems to be a typo.

Right you are, thank you for the spot!


Options to initiate rescheduling on another node if agent dies

Hey,
do you have any suggestions how it can be added that a pod gets rescheduled on another agent if an agent dies? I think thats the idea behind HA, but I didnt figure out yet how to achieve it on K3S with Hetzner.
 Do you have any ideas for this, maybe to add it into this project?
Thanks.

@timowevel1 Just FYI, don't hesitate to use discussions for these kind of questions!
About your question above, it's best to take a peek at the ingress-nginx helm values file, especially this part:
https://github.com/kubernetes/ingress-nginx/blob/0f5bf530ae677a2f389d6f06de27b6a5cf910621/charts/ingress-nginx/values.yaml#L194
So by default, Nginx launches with a Deployment and not a DaemonSet, but for your described ideal behavior, a DaemonSet would suit you best. Please note that this param comes under the controller section, and you change the current config via a HelmChartConfig definition yaml file you just applied; please check the readme for more details.
If you want to keep using a Deployment, you instead need to change the replica count, search for replicaCount in the values file, and you can also set the minUnavailable, value which is 1, which would explain why it did not re-deploy when you killed it. Remember, all of the above values come under controller.

@timowevel1 Just FYI, don't hesitate to use discussions for these kind of questions!
About your question above, it's best to take a peek at the ingress-nginx helm values file, especially this part:
https://github.com/kubernetes/ingress-nginx/blob/0f5bf530ae677a2f389d6f06de27b6a5cf910621/charts/ingress-nginx/values.yaml#L194
So by default, Nginx launches with a Deployment and not a DaemonSet, but for your described ideal behavior, a DaemonSet would suit you best. Please note that this param comes under the controller section, and you change the current config via a HelmChartConfig definition yaml file you just applied; please check the readme for more details.
If you want to keep using a Deployment, you instead need to change the replica count, search for replicaCount in the values file, and you can also set the minUnavailable, value which is 1, which would explain why it did not re-deploy when you killed it. Remember, all of the above values come under controller.

Thank you for this clarification. How is Traefik deployed usually? Also as a deployment? If yes, how is it guaranteed that http request always reach the cluster as there could be nodes with no traefik running then

That's a good question about Traefik. We rely on the default setup that k3s does, so the best way to answer this question would be to introspect, the helmchart and helmchartconfig with kubectl get and than kubectl describe for those belonging to Treafik. And same for the describe on its pods.
When you find the answer, please let me know.

@timowevel1 The defaults have now been improved and made HA if possible. Good catch! Just released in v1.5.3.

That's a good question about Traefik. We rely on the default setup that k3s does, so the best way to answer this question would be to introspect the helmchart and helmchartconfig with kubectl get and then kubectl describe for those belonging to Treafik. And same for the describe on its pods.
When you find the answer, please let me know.

The reason I use nginx is that I am more familiar with it and didnt get http to https redirects work with traefik. Normally the controller should get scheduled on every node

That's a good question about Traefik. We rely on the default setup that k3s does, so the best way to answer this question would be to introspect the helmchart and helmchartconfig with kubectl get and then kubectl describe for those belonging to Treafik. And same for the describe on its pods.
When you find the answer, please let me know.

The reason I use nginx is that I am more familiar with it and didnt get http to https redirects work with traefik. Normally the controller should get scheduled on every node

@timowevel1 No not at all, the controller gets scheduled on every node only when you choose kind=DaemonSet in the helm chart values. See the explanations above. At least in the new release, it will be HA by default if you have enough nodes. But YOU CAN set kind=DaemonSet for yourself. If you want to redeploy, you can create a custom nginx values file at the root of your module. See the kube.tf.example for more info. Good luck!


Remove authorisation from file picker or use an iframe

Current state
As of now, we're including the whole authorisation flow in the file picker. Devs integrating the file picker can set up the config with oauth2 or OIDC or pass a bearer token and skip this flow. No matter what approach is chosen, the bundle always contains all authorization parts.
Problems
Since it's part of the bundle it results in a much bigger size. Since we're using the web component, the user always has to pull the full bundle. So with authorisation, we're pulling a lot of mostly unnecessary code. This results in slower loading time and of course bigger data consumption... And of course, there is the needed maintenance of the code.
Possible solutions
I know that we already discussed dropping the authorisation from the file picker and depend only on the already provided bearer token and in the end it was decided to keep it. I'd like to revisit this though and try to think about dropping it again. So far no use case (AFAIK we had only 3 integrations so far which is not that much) for authorisation has been made... We could still provide even a separate bundle for the authorisation only if the need for it would arise at any time.
If we would still have to keep the authorisation though, I'd like to propose switching to iframe from web component... with that, we could have a real Vue app from it and reuse all the awesome things like code splitting, etc. This is e.g. how dropbox does it.
As you decided to keep the authorisation (https://github.com/owncloud/file-picker/issues/17#issuecomment-730290225) @pmaier1 I'd love to hear your thoughts about this.

TBH I am more for the iframe solution 🙈 😁

IMO we should drop the authentication as it's not part of any use case so far. When a use case arises where the file picker needs built in authentication we can come up with a solution then. All in for keeping the bundle size small and the code lean and maintainable.

Already two use cases arose. Unless we decide that also the iframe is a no-go I would close this ticket...


Remove support for older RR test double framework versions

This is due to this rearrangement: https://github.com/rr/rr/commit/65a29643515575bbde9686c5ccade87f7b2a73df#diff-6aad5729c760c1d242cb39250fe9c9e57a15753e3a347a8413520b3415454e42R56
fixes #2882
see https://github.com/rr/rr/issues/65

cc @voxik


any working Conf for OS 18362.239 ?

Hi,
is there any working conf 4 OS 18362.239 ?
thx

Yes:
https://github.com/stascorp/rdpwrap/pull/816


[Basic/Result] Add mapping methods

@swift-ci please test

looks like macOS CI got stuck, tested macOS locally


Add support for SensorTile Box- STM32MKSBOX1V1

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Describe the solution you'd like
A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.

this is a lot of work. we don't have immediate plans for it. but lets keep it open to measure traction and maybe we put it on our roadmap.

We didn't get much traction for this platform and hence closing for now.


regfile inside addrmap does not compile

I am trying to compile an RDL file that has a regfile inside an addrmap, and I am getting the error defined here.
error: Address map 'top' must contain at least one reg, regfile, mem, or addrmap.

I have tried several permutations of this, all with the same error. I also tried to compile an example from the SystemRDL book (<IP_ADDRESS> : Example 1):
addrmap top {
  regfile example {
    reg some_reg { field {} a; };
    some_reg a @0x0;
    some_reg b @0x4;
    some_reg c; // Implies address of 8
    // Address 0xC is not implemented or specified
    some_reg d @0x10;
  };
};

I have noticed that if I add a reg at the top level, I can get past this error:
addrmap top {
  regfile example {
    reg some_reg { field {} a; };
    some_reg a @0x0;
    some_reg b @0x4;
    some_reg c; // Implies address of 8
    // Address 0xC is not implemented or specified
    some_reg d @0x10;
  };
  reg { field {} a; } reg1 @ 0x04; // adding this removes the error
};

This is actually a typo in the SystemRDL spec. Their examples have a lot of issues: https://systemrdl-compiler.readthedocs.io/en/stable/dev_notes/rdl_spec_errata.html#compilation-issues-in-examples
The issue is that although they create a declaration of the regfile example, they fail to actually instantiate it in their example.
<IP_ADDRESS> : Example 1 should have been:
addrmap top {
  regfile example {
    reg some_reg { field {} a; };
    some_reg a @0x0;
    some_reg b @0x4;
    some_reg c; // Implies address of 8
    // Address 0xC is not implemented or specified
    some_reg d @0x10;
  } example_inst @ 0x00; // <-------- Add missing instance
};


Calls to /v3 count on rate_limiter.unauthenticated_limit

Issue
Calls to /v3 count on rate_limiter.unauthenticated_limit in contrast to calls to "/" and "/v2/info".
Context
cf-deployment 1.38.0
capi-release  1.59.0
We saw sporadic 429 responses from cloud controller in our pipelines after we upgraded from cf cli 6.36.1 to 6.37.0.
It turned out that they are related to /v3 calls that were introduced by cf cli 6.37.0 (at least we did not see these calls for our cf cli usage with cf cli 6.36.1).
Steps to Reproduce
curl -v https://api.cf.stagingsc7.hanavlab.ondemand.com/v3
*   Trying <IP_ADDRESS>...
* Connected to api.cf.stagingsc7.hanavlab.ondemand.com (<IP_ADDRESS>) port 443 (#0)
...
> GET /v3 HTTP/1.1
> Host: api.cf.stagingsc7.hanavlab.ondemand.com
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 429 Too Many Requests
< Content-Length: 89
< Content-Type: text/plain; charset=utf-8
< Date: Mon, 11 Jun 2018 15:55:49 GMT
< Retry-After:<PHONE_NUMBER>
< Server: nginx
< X-Ratelimit-Limit: 500
< X-Ratelimit-Remaining: 0
< X-Ratelimit-Reset:<PHONE_NUMBER>
< X-Vcap-Request-Id: 1837f05c-04fa-4830-43fe-bcd0a1030029::1cfd82cd-6266-4ee4-8927-65373f4e2caf
<
* Connection #0 to host api.cf.stagingsc7.hanavlab.ondemand.com left intact
{"errors":[{"detail":"Rate Limit Exceeded","title":"CF-RateLimitExceeded","code":10013}]}

A similar call to / doesn't return X-Ratelimit headers:
curl -v https://api.cf.stagingsc7.hanavlab.ondemand.com
* Rebuilt URL to: https://api.cf.stagingsc7.hanavlab.ondemand.com/
*   Trying <IP_ADDRESS>...
* Connected to api.cf.stagingsc7.hanavlab.ondemand.com (<IP_ADDRESS>) port 443 (#0)
...
> GET / HTTP/1.1
> Host: api.cf.stagingsc7.hanavlab.ondemand.com
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Length: 1108
< Content-Type: application/json;charset=utf-8
< Date: Mon, 11 Jun 2018 15:55:41 GMT
< Server: nginx
< X-Content-Type-Options: nosniff
< X-Vcap-Request-Id: f85c3a95-4d46-4f71-7b5a-c4458c80b252::97fb3fee-09e9-475b-8881-b9a172d056fe
<
{
  "links": {
    "self": {
      "href": "https://api.cf.stagingsc7.hanavlab.ondemand.com"
    },
    "cloud_controller_v2": {
      "href": "https://api.cf.stagingsc7.hanavlab.ondemand.com/v2",
      "meta": {
        "version": "2.113.0"
      }
    },
    "cloud_controller_v3": {
      "href": "https://api.cf.stagingsc7.hanavlab.ondemand.com/v3",
      "meta": {
        "version": "3.48.0"
      }
    },
  ...
  }

Expected result
Calls to /v3 don't count against the unauthenticated_limit, there are no X-Ratelimit headers and no 429 response code. Similar to a call to /.
Current result
429 and X-Ratelimit headers. See above.

Hi @stephanme
From what I can tell this is working as designed. There is a config value that triggers rate-limiting : https://github.com/cloudfoundry/capi-release/blob/6f0c125f60b8586e9afba08d952334b41d9921a9/jobs/cloud_controller_ng/spec#L810 and I'm wondering if this was set to true when your deployment moved from 1.37.0 to 1.38.0
An unauthenticated requester has unlimited calls to / and /v2/info, and logged in users have unlimited calls to all the endpoints. The / and /v2/info endpoints return useful information, while /v3 returns a set of links that need to be queried for more information on cloud controller resources, and all of those links require authentication. The rate-limiting actually applies to a small number of endpoints that can be used by unauthenticated users.
I'm curious—what's the need for making unlimited unauthenticated calls to /v3?
Regards
@ericpromislow - CAPI community support

cf cli 6.37 runs two additional requests at the beginning of a cf-push compared to cf cli 6.36:

GET /
GET /v3

According to CF_TRACE, 'GET /' doesn't count against cc.rate_limiter.unauthenticated_limit (there are no X-Ratelimit headers in the response) while 'GET /v3' does count. This fits to your explanation above.
I don't know why cf cli 6.37 calls 'GET /v3' but if it is required, then it should be either unlimited or it should count against cc.rate_limiter.general_limit. Otherwise cf push is effectively limited by the unauthenticated limit.

Thanks for the information. I'll talk to the CLI team about this. Could make a good case for excluding the /v3 endpoint from rate-limiting

Done in commit 671c0fb23


StaticInjectorError(s)[e -> r]:

Augury: 1.18.0
Date: Fri, 01 Jun 2018 12:28:16 GMT
OS: Win32
Demo test application:
-- Git repository for demo app showing the issue (optional but very helpful for difficult issues).
-- If a code snippet will completely show the issue, please include it.
Description of issue:
-- Include (clipped) screenshot images if possible.
Angular version (required): ???
Steps to reproduce:

Additional details:

Please provide a description


remove non-supported methods from Image

As referenced in #446
I think these were implemented in watir-classic, and shouldn't need to stay in the project with exceptions. Goes along with: https://github.com/watir/watirspec/pull/89

:+1

merged - e510617887e0934629219c94773c00b0f2da7be4


[question]: Proper backup and restore mechanism

Describe your question
What is the proper backup and restore mechanism ?
I know I can copy the /data while LinDB (standalone mode for now) is running, but is that good ? Would it be better to shut down LinDB, copy the /data and then restart the service ?
For the restore, am I right to assume that I simply have to stop the LinDB service, restore /data from a backup and restart the service ?
Thanks.

Need to shutdown LinDB, before backup and restore data files.

Awesome. Thanks.
Closing.


Material UI Autocomplete - Grouped Label Styling does not seem to work

I am developing the GROUPED AutoComplete and somehow I am unable to change the BACKGROUND Colors for the Group by LABELS
Ref URL for the Component - https://material-ui.com/components/autocomplete/#grouped
I tried adding CSS using makeStyle / custom CSS on .MuiAutocomplete-groupLabel and
.MuiAutocomplete-groupUI - but nothing seem to take effect. It remains WHITE.
Can you look into this and guide me ?

I fixed it


QGC-Gov fixes - Add a timeout argument to TCPClient

I'll be PR'ing a few changes that we've made in a branch for use with QGC-Gov. We've been using these successfully for several months and had successful flight test events on this code, so I think we're good to get these merged in.
Add a timeout argument to TCPClient
Background -- In QGC-Gov, one of our programs has a use case for libmav which involves setting up and tearing down connections to vehicles on-demand. Most of the time, vehicle control is handled by an external autonomy engine, but if the user requests manual control of the vehicle, the autonomy engine opens up direct link to the vehicle and we can send messages. Due to the fact that this can happen repeatedly, plus a number of edge cases such as the autonomy engine re-taking control, or either side unexpected breaking the link or rebooting, it is feasible that the link doesn't get properly torn down and we were ending up with instances where the operating system was still holding the old socket open and not allowing a new connection to be made (socket in use error). Some cursory research shows that socket seem to be able to be held for several minutes by default.
So here, we simply add a option to specify a specific timeout when setting up the link. This has solved our problems.

Hmmm you make a good point. I played around with our implementation briefly just now and I'm having trouble replicating this original issue. We haven't touched our implementation code in months, so its possible I'm misremembering things, or this simply isn't needed any more. I know we were going back and forth because some vehicles were acting a client and some as a server (something RAS-A really needs to mandate), so its possible we have this as a TCPServer when we first observed the issue.
I'll play around with it some more when I can and either close this issue or update with any findings.

We've done some testing and can't replicate the root issue any more. We suspect this is a holdover from when we first implemented things and perhaps used a TCPServer instead of a TCPClient, like you said. Perhaps if someday another implementation uses the server classes, a similar change may be needed, but we'll leave that bridge to be crossed if/when someone gets there.
Closing PR.


Unclear instructions in step 64 of building a cat photo app

Describe the Issue
It might be just me being a bit confused with the instruction, but someone from the forum had this issue and it also took me a bit of time to get the instruction right as well
So it says, "Make the text freeCodeCamp.org into a link by enclosing it in an anchor (a) element. The href attribute should be set to https://www.freecodecamp.org." I think it would be better if it read something more along the lines of "Replace the text freeCodeCamp.org in the p tag with a link, by enclosing it in an anchor (a) element. The href attribute should be set to https://www.freecodecamp.org."
I was tempted to think that I needed an extra anchor tag outside the p tag with the text freeCodeCamp.org, and the hint given to me when the test failed only made me more confused because it said "Your anchor (a) element should be nested within the footer element. Make sure to add an opening tag and closing tag for the anchor (a) element.". Even though I was wrong to create the anchor tag outside of the p tag, it was enclosed within the footer element.
Affected Page
https://www.freecodecamp.org/learn/2022/responsive-web-design/learn-html-by-building-a-cat-photo-app/step-64
Your code

 No Copyright - freeCodeCamp.org

      freeCodeCamp.org

This is what I did, and it failed.
Expected behavior
I expected the instruction to be a little bit more precise, or maybe a little more improvement on the hint.
Screenshots
No response
System

Device: Laptop
OS: Windows 11
Browser: Chrome

Additional context
No response

@Njong392 Sorry for the trouble. It seems like you misinterpreted the text, I'll write it clearly.
Instead of this code:

 No Copyright - freeCodeCamp.org

      freeCodeCamp.org

It Should be in this way

No Copyright -  freeCodeCamp.org

@ceejayoz Please assign this issue to me so that I can improve the text's wording to prevent any misunderstandings in the future.

I know how it's supposed to be. just noting that it confused me for a bit before i got it right. Let's see what others think.

I don't think it's too bad how it is, but it could always be better. What about:
"Turn the existing freeCodeCamp.org text into a link by enclosing it in an anchor (a) element. The href attribute should be set to https://www.freecodecamp.org."

@Njong392

I know how it's supposed to be. just noting that it confused me for a bit before i got it right. Let's see what others think.

Glad to hear it. How does this wording sound to you:
Update the code below and make the text `freeCodeCamp.org` into a clickable link that redirects to `https://www.freecodecamp.org`, you need to enclose it within an anchor (`a`) element and set the `href` attribute accordingly.

No copyright - freeCodeCamp.org

I think it will be helpful if we can see the type of output which is expected by us.  (first one is the correct one)

vs


Make tolerating solecisms specific to DTDL version

Includes synced changes from DTDL repo, copied from #102.


rigid registration not working

Hi all,
rigid registration is failing for the attached example, i.e., the HE stain is not aligned with the H-DAB stains. This worked for all other animals, but fails here. I can share the slides tomorrow.
rat_NOR-25.zip
processed

rigid registration

The masks look strange for some of the images.
Also the HE arrangement of the tissues is very different then the H-DAB. Are there any setting to register the images with Valis?
Best Matthias

Hi @matthiaskoenig,
Glad to hear valis worked with most of the images, but I think the reason the image J-12-00356_NOR-025_Lewis_HE_Run 06_ML, Sb, rk_MAA_003 (2) isn't aligning is because it looks like the triangular tissue got moved to the opposite side of the circular tissue (when compared to all of the other images). The "overlap" images that valis creates are cropped to where the images overlap, so they don't show where the triangular shaped piece would be after alignment, which I think helps visualize why this image isn't working. However, the uncropped overlap image would look something like this:

So you can see that in that image it looks like the triangular shaped tissue looks like it moved to the opposite side of the circular piece. Since valis aligns the image as whole, and not necessarily individual pieces, I don't think valis will be able to  to move that triangular tissue back to the other side of circular piece. Having said that, with some custom code (using an ImageProcesser), it might be possible to mask out each region, and then align those individually, i.e. having one registration for the circular region, and one for the triangular region. Do you think something like that would work?
Best,
-Chandler

Thanks. This is perfect.
I assumed valis is figuring out the main pieces (e.g. Othsu filtering) and tries to align all pieces as good as possible. We will do preprocessing and align the individual tissue sections.
Best Matthias


doesn't upload

Thank you for the package.
i follow carefully all the instructions.
Started tus server, but absolutely no upload occurs.
I am testing it on MAMP / OSX / NGINX properly pointed the endpoint. But no upload at all happened. I tried to proxy_pass the nginx server with no success.
What am I doing wrong?
Thank you for your help

Hi, for OSX we currently have limited support. To use the integration you need to copy the linux hooks (under the hook/linux directory) to the macos folder hooks/macos. At that point the tusd executable should communicate with php.

thanks for your quick reply.
You mean renaming the folder from linux to macos ... or creating a new folder somewhere else ?
Maybe I did't set up properly nginx. do I need to set up a proxy ? and if yes how?
Thanks

You mean renaming the folder from linux to macos ... or creating a new folder somewhere else

Sorry, I checked and I forgot that macos is considered linux, so the Linux hooks should work. One important thing is that you must check if those shell scripts are executable. If not a chmod +x on each file should do the job.

Maybe I did't set up properly nginx. do I need to set up a proxy ? and if yes how?

If you are using NGINX to proxy the requests to the tusd server, you need to do two things

configure NGINX to proxy the requests (copied from https://github.com/k-box/k-box/blob/master/docker/nginx-default.conf#L59-L77)

    location ~* /tus-uploads {

	# Disable request and response buffering
        proxy_request_buffering  off;
        proxy_buffering          off;
        proxy_http_version       1.1;

        # Add X-Forwarded-* headers
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;

        proxy_set_header         Upgrade $http_upgrade;
        proxy_set_header         Connection "upgrade";

        client_max_body_size     0;

        proxy_pass http://<IP_ADDRESS>:1080;
       # I'm assuming tusd will listen on port 1080
    }

Configure the Laravel integration to know that requests are proxies. This can be done via environment variables, as in the code block below, or by publishing the configuration file php artisan vendor:publish --tag=tusupload-config

TUSUPLOAD_USE_PROXY=true
TUSUPLOAD_HOST=<IP_ADDRESS>
TUSUPLOAD_HTTP_PATH=/tus-uploads/
TUSUPLOAD_URL=${APP_URL}tus-uploads/

where ${APP_URL} is the domain on which the Laravel application listen, e.g. http://localhost:8000/. Here I'm assuming that from the outside you want tus to be available on /tus-uploads/` path. One quick point: slash at the end of the path are important

Ok thanks again for this very quick and detailed answer.
Still confused :

What is the difference between TUSUPLOAD_HTTP_PATH and TUSUPLOAD_URL ?

on the client side does the endpoint has to be exactly the same than the TUSUPLOAD_HTTP_PATH or is the endpoint only for authorization check (in this case how the js script knows where to send the file?) ? :

var endpoint = '/tus-uploads/'
var uploader = new window.TusUploader({autoUpload: true, endpoint: endpoint});

if tus server is listening to another port how to make the js client tusUpload know about it?

Thanks!

What is the difference between TUSUPLOAD_HTTP_PATH and TUSUPLOAD_URL ?

TUSUPLOAD_HTTP_PATH is the path to which the tusd server listen on. It matches 1 to 1 to the --base-path tusd argument. This is also the path you want NGINX to proxy to the tusd server.
TUSUPLOAD_URL is the absolute url that the Laravel integration will use if running behind a proxy

on the client side does the endpoint has to be exactly the same than the TUSUPLOAD_HTTP_PATH or is the endpoint only for authorization check (in this case how the js script knows where to send the file?) ?

The javascript client wants the endpoint that OneOffTech\TusUpload\Tus::routes() is creating. In particular it is /uploadjobs (not configurable at the moment). Probably this step is not well documented in the readme, sorry.
That endpoint will authorize the upload based on the defined Gate upload-via-tus and, if authorized, will return to the library the necessary information to contact the tusd server for starting the upload.

if tus server is listening to another port how to make the js client tusUpload know about it?

There is an environment variable that let you configure so, it is called TUSUPLOAD_PORT. If you did publish the configuration file set the port key.

Ok i got all this.
But when the js client get first the response of the endpoint "/uploadjobs" (where the authorization takes place via the Gate and TusUploadQueueController, and add it to the database), the response location is always : 'uploadjobs'.
Or i think this location variable is the one use to send the file to the tusd server :
in tsupload.js, line 215:
this.transport.options.endpoint = response.data.location;
So my guess is that is the reason why no upload occurs in my tests as tusd server is listening to (let say) 'tus-uploads' but the js client is sending it to '/uploadjobs' (this is the json response location of the first call to '/uploadjobs' where the autorization takes place).
If i am right the location response should be the one set in the .env file (TUSUPLOAD_HTTP_PATH) not '/uploadjobs'
My guess is the file is sent by the client with :
`this.uploadToken = response.data.upload_token;
this.transport.options.metadata.token = this.uploadToken;
this.transport.options.endpoint = response.data.location;
// set the upload token in the metadata of the transport
this.status = UploadStatus.UPLOADING;
this.transport.start();`
but how to set the endpoint to 'tus-uploads' ( == TUSUPLOAD_HTTP_PATH) ??

The general workflow can be summarized like so

the js calls the /uploadjobs endpoint to verify that the authenticated user has the rights to perform the upload (this is handled within Laravel, no tusd involvement here)
if authorized it returns the url to the tusd service (if behind proxy it returns the TUSUPLOAD_URL)
the library now uses the tus protocol and communicate to the obtained endpoint
tusd runs the hook to confirm that the upload was authorized and to report the status of the upload

Ok thanks.
I understand now properly the workflow and set up everything properly, but no upload occurs!
in my .env :
TUSUPLOAD_USE_PROXY=true
TUSUPLOAD_HOST=<IP_ADDRESS>
TUSUPLOAD_PORT=1084
TUSUPLOAD_HTTP_PATH=/tus-uploads/
TUSUPLOAD_URL=${APP_URL}tus-uploads/
after i started tusd server :
[tusd] Using '/Applications/MAMP/_BLOG/hooks/linux' for hooks
[tusd] Using '/Applications/MAMP/_BLOG/storage/app/uploads' as directory storage.
[tusd] Using 0.00MB as maximum size.
[tusd] Using <IP_ADDRESS>:1084 as address to listen.
[tusd] Using /tus-uploads/ as the base path.
my nginx set-up:
location /blog/tus-uploads {
proxy_set_header Host $http_host;
#all the other headers ....
proxy_pass http://<IP_ADDRESS>:1084;
}
and the json response of /uploadjobs:
filename: "file"
location: "http://localhost:8888/tus-uploads/"
request_id: "cjunywzlu00003h5lkvorsudb"
size: 20
upload_token: "GJU0ClMyBsQVgImfpnbobywrbkAXDt7TAF1cjunywzlu00003h5lkvorsudb"
(it properly inserted the upload in the database)
But then nothing happens !
Thank you so much for you time and help by the way...

based on your information I guess it is related to the hooks or to NGINX not passing the requests to the tusd executable.
I would check first the tusd log. It should be printed on stderr and, after an upload request is received, should look like (I tried it on our K-Box instance, which is using this package)
[tusd] event="UploadCreated" id="3e771b511796b0d2e8db62e005ed71e2" size="15632" url="http://localhost:8000/tus-uploads/3e771b511796b0d2e8db62e005ed71e2"
[tusd] event="ResponseOutgoing" status="201" method="POST" path=""
[tusd] event="HookInvocationStart" type="pre-create" id=""
[tusd] event="HookInvocationFinish" type="pre-create" id=""
[tusd] event="HookInvocationStart" type="post-create" id="3e771b511796b0d2e8db62e005ed71e2"
[tusd] event="HookInvocationFinish" type="post-create" id="3e771b511796b0d2e8db62e005ed71e2"
[tusd] event="RequestIncoming" method="PATCH" path="3e771b511796b0d2e8db62e005ed71e2"

[tusd] event="ChunkWriteStart" id="3e771b511796b0d2e8db62e005ed71e2" maxSize="15632" offset="0"

[tusd] event="ChunkWriteComplete" id="3e771b511796b0d2e8db62e005ed71e2" bytesWritten="15632"
[tusd] event="ResponseOutgoing" status="204" method="PATCH" path="3e771b511796b0d2e8db62e005ed71e2"

[tusd] event="HookInvocationStart" type="post-receive" id="3e771b511796b0d2e8db62e005ed71e2"
[tusd] event="UploadFinished" id="3e771b511796b0d2e8db62e005ed71e2" size="15632"

[tusd] event="HookInvocationStart" type="post-finish" id="3e771b511796b0d2e8db62e005ed71e2"

if the pre-create hook fails the upload is denied.
In any case you can also disable the hooks to see if the upload then succeed (at least from the tusd perspective).
php artisan tus:start --no-hooks

Laravel will not know about the upload, but at least you can see if the tus storage will contain two files, one of them should be ending with .bin extension and contain the file you uploaded.
If nothing is reported in the tusd log and running tusd without hook works, then the problem is between javascript and NGINX.
On the NGINX side, I thought your application was immediately under localhost, but apparently you are also hosting it under a folder. I have to admin I never tried with this kind of setup.
This is the configuration you shared in the comment
location /blog/tus-uploads {
proxy_set_header Host $http_host;
#all the other headers ....
proxy_pass http://<IP_ADDRESS>:1084;
}

And I think a possible problem could reside in the proxy_pass directive because you have a folder path before /tus-uploads, which is the default path for tusd. In that configuration tusd expects http calls to
http://<IP_ADDRESS>:1084/tus-uploads/
```

but you have another parent folder in the path, which is `/blog`. If I remember correctly NGINX passes the full path, so `tusd` receives this kind of requests

```
http://<IP_ADDRESS>:1084/blog/tus-uploads/
```

I'm not sure that tusd accepts `/blog/tus-uploads/` as the base path, but you can try to set it up in that way using `TUSUPLOAD_HTTP_PATH=/blog/tus-uploads/`. If that work we have discovered an interesting option, otherwise the possible solution could be rewrite in NGINX the path received, or make the Laravel application directly under localhost, without an additional folder.

ok, I am trying to narrow down the issue (with my folder 'blog') :
in Nginx:
location /blog/tus-uploads {
proxy_pass http://<IP_ADDRESS>:1201;
}
(PS: each time i restart the tusd server i need to change the port otherwise it says its already in use).
to make a ultra basic test i have on my webpage :
axios.patch('\tus-uploads');
if i don't start tus server, i have a 502 gateway error from nginx (normal proxying to nothing)
if I start tus server (with no hooks!), I can see that nginx redirect properly to tusd server:
on my console i can see (again with no hooks):
[tusd] event="RequestIncoming" method="PATCH" path=""
[tusd] event="ResponseOutgoing" status="412" method="PATCH" path="" error="unsupported version"
and on chrome debug:
Tus-Resumable: 1.0.0
Access-Control-Expose-Headers: Upload-Offset, Location, Upload-Length, Tus-Version, Tus-Resumable, Tus-Max-Size, Tus-Extension, Upload-Metadata
but that work only if i set :
TUSUPLOAD_HTTP_PATH=/blog/tus-uploads/
so the folder 'blog' is not an issue.
The only thing I can think of causing the problem is the hooks (not Nginx).
in the pre-create hook i can see:
php ../../../../../artisan tus:hook -vvv pre-create "${payload}"
I tried to modify this to :
php ../../artisan tus:hook -vvv pre-create "${payload}"
as the relative path to artisan should be only 2 folders up, but with no success.
Thanks you

each time i restart the tusd server i need to change the port otherwise it says its already in use

Probably you have lot of spare tusd processes running, maybe they are not getting killed properly

The only thing I can think of causing the problem is the hooks

Following your test seems indeed a problem in the hooks. Unfortunately I don't have access to a mac book with MacOS, so I need to figure out how to try to replicate your problem. Maybe just try to create a shell script to replace a default hook to see if it is called

as the relative path to artisan should be only 2 folders up, but with no success.

tusd set the current working directory to the path where the hooks reside. During normal execution ./vendor/oneofftech/laravel-tus-upload/hooks/linux/, that's why artisan is 5 folders up

if I start tus server (with no hooks!),

I think is time to start tusd with another hooks directory or with changed hooks. I'd suggest to change the pre-create hook file to just output what it receives on standard input.
#!/bin/bash

pwd
payload=$(</dev/stdin)
if [ -z "$payload" ]; then
  echo "Error: no payload provided"
  exit 1
fi
echo "${payload}"

I believe that it should highlight the fact that hooks are not executed on macos. Maybe you should also try to download the latest tusd from https://github.com/tus/tusd/releases/tag/0.11.0 to verify if the same problem happens on newer version of the tusd server.
I'm experiencing the same scenario on Windows tus/tusd#267, so maybe there is a common problem.

Thanks for your answers and your care!
Updates:
I finally discover what was the problem!

I thought it was the hooks because there were no errors output in the console.
I discover it only when i changed tusuploader.js in assets\js (before compiling) line 158:
onError: handleUploadError.bind(this),
to
onError: function(error) {console.log("Failed because: " + error)},
only then i could see the error from the tus-client that i was not sending the file properly.
For some reason your own implementation of handleUploadError doesn't propagate the inner error of tus-client-js.
Now the pre-create hook work !!
But I had to change :
php ../../../../../artisan tus:hook -vvv pre-create "${payload}"
to
php ../../artisan tus:hook -vvv pre-create "${payload}"
as when i start the tusd server it output :
[tusd] Using '/Applications/MAMP/_BLOG/hooks/linux' for hooks
(and not : ./vendor/oneofftech/laravel-tus-upload/hooks/linux/)
Now the file do upload (testing with .jpg image) so the hooks work.
The error i have now:
The uploaded file lost his extension becoming a .bin file (instead of a .jpg)
and in the console a lot of this errors:

ERROR output -----------------
[tusd] event="HookInvocationStart" type="post-receive" id="b576607c4d4123c4468b6b7762e1c553"

or

ERROR output -----------------
[tusd] event="HookInvocationFinish" type="post-receive" id="b576607c4d4123c4468b6b7762e1c553"

I finally discover what was the problem!
It was on the javascript client:

Great, I didn't consider it as a probable location of the problem.

only then i could see the error from the tus-client that i was not sending the file properly.
For some reason your own implementation of handleUploadError doesn't propagate the inner error of tus-client-js.

It emits an upload.failed event, as the error handler is the same for all uploads and an upload can fail in an async way. You could listen to those events by calling the on method on a Tusuploader instance.
var uploader = new window.TusUploader(options: { /*...*/ });

uploader.on("upload.failed", function(data){
  // data is an Object with the following keys { upload: {}, type: 'upload.failed', error: {} }
});

Probably I should document it more.

But I had to change : php ../../../../../artisan tus:hook -vvv pre-create "${payload}" to php ../../artisan tus:hook -vvv pre-create "${payload}" as ... [tusd] Using '/Applications/MAMP/_BLOG/hooks/linux' for hooks

I was considering the hooks to not be changed, but you're right the path can change. Probably on this side make sense to enable a certain level of customization.

The uploaded file lost his extension becoming a .bin file (instead of a .jpg)

That is actually not an error, but this is how tus works. The file is transferred without the original extension and the mime type is only stored in the metadata. Please keep in mind that the mime type is added by the browser and therefore is better to check it twice once the upload is completed.
For example renaming the file and moving to a different folder could be done in the TusUploadCompleted event. To do so generate an event listener in your Laravel application for the OneOffTech\TusUpload\Events\TusUploadCompleted event. In the handle event you then have access to a OneOffTech\TusUpload\TusUpload instance
public function handle(TusUploadCompleted$event)
{
        // Access the TusUpload using $event->upload...
}

You could get the mime type sent by the client on a TusUpload instance by using the mimetype property. In addition you get all information you sent additionally as part of the metadata and also the path on disk, by using the path() method.
Consider tus as a way to upload files and not a storage location. Like in a form based upload you move the file from the temporary directory, also in case of tus uploads you should move them to the storage you want to use and name them accordingly to your naming convention.

and in the console a lot of this errors:
ERROR output -----------------
[tusd] event="HookInvocationStart" type="post-receive" id="b576607c4d4123c4468b6b7762e1c553"
or

That's not an error. Tusd version 0.8 (which is the current bundled within the package) output all information on standard error. The latest version (0.11) correctly prints them on standard output.

ok got it! thanks a lot.
Last (hopefully) questions:

to update tus to 0.11, i just have to copy and replace the binary exe to the bin folder ?
(i guess for mac osx it should be the tusd_linux_amd64.tar.gz or tusd_linux_arm.tar.gz ?)

to implement a progress bar,  i need to use the tusUploaderProgress event ? and somehow return a json response of the offset ?

Is there a better way to restart the tusd server ?
at the moment, I need to use ctrl-Z, then find all the processes (ps -ax | grep tusd-mac), then : kill -9 <PROCESS_ID>

will Uppy library (https://uppy.io/) will work with this package ?

to update tus to 0.11, i just have to copy and replace the binary exe to the bin folder ?
(i guess for mac osx it should be the tusd_linux_amd64.tar.gz or tusd_linux_arm.tar.gz ?)

I'm working on that in the pull request #13, but in general the rule is all amd64 and for Mac the Darwin version.

Is there a better way to restart the tusd server ?
at the moment, I need to use ctrl-Z, then find all the processes (ps -ax | grep tusd-mac), then : kill -9 <PROCESS_ID>

If I remember correctly Ctrl+Z pauses the execution of a command. I normally use Ctrl+C to kill it. Otherwise you need to enable the pcntl PHP extension which handles better the unix signals.
As part of #13 I made a small change to the shutdown workflow to reduce a timeout before which Symfony Process will send a kill event to the controlled process.
Not sure if it solves the problem, but would be very helpful if you can test that branch on OSX.

to implement a progress bar, i need to use the tusUploaderProgress event ? and somehow return a json response of the offset ?

You can listen on the upload.progress event of the TusUploader JS object. In the payload passed as first argument to the callback function you will get all the details
var uploader = new window.TusUploader(options: { /*...*/ });

uploader.on("upload.progress", function(data){
  // data is an Object with the following keys { upload: {}, type: 'upload.failed', percentage: float, total: int, transferred: int }
});

The event is raised only after the server confirm that the chunk is transferred.

will Uppy library (https://uppy.io/) will work with this package ?

Well, I guess it will not work without changes, because in this package the upload is processed directly by the tus-client only after checking that the logged-in user has the rights to do so. If I remember correctly Uppy connects directly to the tusd server after the file is selected. I didn't check the changes to Uppy recently, so my conclusion is just a guess.

ok perfect thanks.
I will test the new branch as soon as I have a bit of time.


Allow a global operation option to be set via a url parameter

In the UI operations and seeds can be set via a URL parameter. It would also be useful to be able to set an operation option via a url parameter. Specifically, so that a graphId option could be set when used with the federated store. The option that needs setting is the one on the settings page. After setting the option, it needs to trigger the update schema mechanism.

I'll have a go at this

So are there two issues here?

You want to be able to automatically fill the options for operations on the query page through the URL.
And also to be able to fill the graphID options on the settings page through the URL and then reload the schema.

I think the latter option. However I think for this to be an effective feature, it should not require the user to go to the settings page for this to take effect.
The URL should also be updated if the options are changed by the user

I'm no longer working on this, If someone else wants to take over they are free to do so.

The UI fails to meet our Accessibility policy. It is unmaintainable and will be removed shortly.


Set self-adjusting deadline for connection writing

In #16055 it appears that the simple 5s deadline doesn't work for large
file writes. Now we can't - or at least shouldn't just set no deadline
as go will happily let these connections block indefinitely. However,
what seems reasonable is to set some minimum rate we expect for writing.
This PR suggests the following algorithm:

Every write has a minimum timeout of 5s (adjustable at compile time.)
If there has been a previous write - then consider its previous
deadline, add half of the minimum timeout + 2s per kb about to written.
If that new deadline is after the minimum timeout use that.

Fix #16055
Signed-off-by: Andrew Thornton<EMAIL_ADDRESS>

Codecov Report

Merging #16068 (da16cab) into main (7979c36) will increase coverage by 0.02%.
The diff coverage is 100.00%.

:exclamation: Current head da16cab differs from pull request most recent head 139c46f. Consider uploading reports for the commit 139c46f to get more accurate results

@@            Coverage Diff             @@
##             main   #16068      +/-   ##
==========================================
+ Coverage   44.06%   44.08%   +0.02%
==========================================
  Files         682      682
  Lines       82460    82464       +4
==========================================
+ Hits        36338    36358      +20
+ Misses      40205    40190      -15
+ Partials     5917     5916       -1

Impacted Files
Coverage Δ

modules/graceful/server.go
50.40% <100.00%> (+1.63%)
:arrow_up:

modules/git/command.go
87.96% <0.00%> (-1.86%)
:arrow_down:

modules/queue/unique_queue_disk_channel.go
47.26% <0.00%> (-1.37%)
:arrow_down:

services/pull/pull.go
43.83% <0.00%> (+0.45%)
:arrow_up:

services/gitdiff/gitdiff.go
73.76% <0.00%> (+1.41%)
:arrow_up:

modules/log/file.go
75.39% <0.00%> (+1.58%)
:arrow_up:

modules/log/event.go
61.79% <0.00%> (+1.88%)
:arrow_up:

modules/charset/charset.go
73.73% <0.00%> (+2.02%)
:arrow_up:

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 7979c36...139c46f. Read the comment docs.

It would also help if it actually compiled!

Please send backport


NO   DbQuery

public class DbSet : DbQuery, IDbSet, IInternalSetAdapter
DbContext().Database.SqlQuery(sql, parameters).AsQueryable()
IS Rong!

@cnmediar If you are asking why there is no DbQuery class, it's because EF Core is a new code base and has an entirely different implementation from EF6 or earlier versions--think of it as a new framework rather than an update to the old framework. It is not intended that code written for EF6 will work without changes on EF Core.

Thank you very much!
How to do now ,I need stat Order by date, the result have two column,date and num?


[EasyCodingStandard] How can I set indenting?

How can I set indenting? Related to this example in https://github.com/FriendsOfPHP/PHP-CS-Fixer
return PhpCsFixer\Config::create()
    ->setIndent("\t")
    ->setLineEnding("\r\n");

This is not possible yet.
Where exactly this fails now? We can make test case and this feature.

It is required by whitespace fixers like PhpCsFixer\Fixer\Whitespace\IndentationTypeFixer etc, probably by PhpCsFixer\Fixer\Basic\BracesFixer.
It is possible to change it somehow directly in fork, for example?

I see.
I think parameter would be better, as CodeSniffer requires similar settings in few sniffs.
parameters:
    indentation: "\t"

Can I somehow hardfix it without fixing fixers? :-)

Not that I'm aware of :)
Only 1: you could patch it locally

Yes, I'd like to patch it locally. But where?

This only works in main repository, so probably nette/appliaction, if you're using it.
I'd rather comment out checker now and wait for the feature. I'll get that over weekend.
Failing test case - with running only this Space fixer on file with tab indentation -  would speed it up.

I'm on it


C1 continuity is critical for variable fonts.

To provide correct interpolation (preventing kinks) we need some sort of C continuity at smooth knots, even if we specified the tangent direction.

This is a very good question. I believe it should be possible to convert from a parametrized curve in spline representation to one in piecewise Bézier. It feels like strict C1 continuity is a sufficient but perhaps not necessary condition - for example, when joining to a straight line, the velocity of the line isn't relevant. That said, it should be possible to produce C1 continuity by doing the spline to Bézier conversion in a velocity sensitive manner.

For kink-less interpolation in VF, the generated Bezier curve should satisfy this: at each smooth joining (c' — a — b), proportion |c'-a| / |a - b| should be identical for all masters.
It would be greater if this property preserves: linear combination of control knots being identical to linear combination of result Bezier curve (this is true for B spline, which is C2).

Can you explain why the parametrization matters? Interpolation probably shouldn’t just be simple lerping of positions along the curve.

@jrus
In OTVar spec it simply blends Bezier control points, so a simple G2 continuity would result in "kinks" during interpolation

If the angles are different in the masters, and secondly, if the proportions between the points are different, G1 continuity would be broken after OTVar interpolation 😢 .

C1 continuity is a sufficient but not a necessary condition, thus I think the statement of this issue is incorrect, and I'm inclined to close the issue because of it.
That said, the higher-level goal is valid and interesting. If you're drawing masters using this spline, what is the best way to convert to a variable font? There are several ways of thinking about this problem. One is creation of piecewise Bézier curves that are compatible in the sense that they retain G1 continuity after the control points are interpolated. Within this branch of inquiry, there are further choices. We could work in cubic Béziers, in which the above discussion is relevant. But then that potentially affects the shapes of the curves (certainly the "dekink masters" tool referenced in the Glyphs tutorial will do that).
Why not instead convert to quadratic Béziers? In particular, if the conversion generates only off-curve points (not counting of course horizontal and vertical extrema, which are G1 continuous without any additional work), then the resulting curves are G1 continuous by construction, and this is also likely to be a concise representation in an OpenType font encoding.
But generating interpolation-compatible masters may not be the most interesting goal. An explicit and long-term goal of this line of work is to make a spline that behaves nicely when the spline control points are interpolated (or otherwise parametrized). The results may be better in this case than linearly interpolating the resulting Béziers; they're G2 continuous by construction. However, conversion to an OpenType variable font may be challenging. Since the spline is not linear, interpolants may not be accurately derived from a linear interpolation of the Bézier representation. A sophisticated conversion tool would gauge the nonlinearity and produce intermediate masters as needed.
And for certain applications, including producing instances of a variable font in spline-space parametrization, or animation, doing such complicated conversion math may not be needed at all. It's basically the specific goal of replicating the existing workflow of font tools to produce OVF files that motivates the original request.
So I think there is interesting additional research to do, but I'm not convinced the specific direction stated in the issue is worthwhile.

An explicit and long-term goal of this line of work is to make a spline that behaves nicely when the spline control points are interpolated (or otherwise parametrized).

Yes, this is more what I was thinking of.
I would be curious to see what the effect is of straight interpolation of points followed by re-solving, for this spline. Also if there is more than one keyframe, interpolation need not be strictly linear, but could be e.g. a cubic spline (in weight space) fit through the keyframe positions.
I don’t have good intuition for where that would break down.
One thing that might be necessary is some kind of interpolation of spline tangent angles and then using a 4-parameter curve instead of just interpolating spline points and re-solving for the angles at every intermediate step.

For kink-less interpolation in VF, the generated Bezier curve should satisfy this: at each smooth joining (c' — a — b), proportion |c'-a| / |a - b| should be identical for all masters.

This is sufficient but not necessary.  The correct condition is what you said, or the angles are the same.

@behdad
So perhaps "the new spline" could keep either angle or proportion depending on whether you specified a tangent angle.
Looks promising ...