Error about plasma: Could not connect to socket

❓ Questions and Help
Before asking:

search the issues.
search the docs.

What is your question?
I am working on training a language model from scratch using Roberta-base. The training data is about 75G, and after loading data for 1 hour, it threw the error OSError: Could not connect to socket /tmp/tmpxs1wb0fr.
Code
Here is my experiment setup:
TOTAL_UPDATES=845000   # Total number of training steps
WARMUP_UPDATES=42500    # Warmup the learning rate over this many updates
PEAK_LR=0.0007          # Peak learning rate, adjust as needed
TOKENS_PER_SAMPLE=128  # Max sequence length
MAX_POSITIONS=128     # Num. positional embeddings (usually same as above)
MAX_SENTENCES=64      # Number of sequences per batch (batch size)
UPDATE_FREQ=16          # Increase the batch size 16x

DATA_DIR=data-bin/my-data

fairseq-train --fp16 $DATA_DIR \
    --task masked_lm --criterion masked_lm \
    --seed 42 \
    --arch roberta_base --tokens-per-sample $TOKENS_PER_SAMPLE \
    --optimizer adam --adam-betas '(0.9,0.98)' --adam-eps 1e-6 --clip-norm 0.0 \
    --lr-scheduler polynomial_decay --lr $PEAK_LR --warmup-updates $WARMUP_UPDATES --total-num-update $TOTAL_UPDATES \
    --dropout 0.1 --attention-dropout 0.1 --weight-decay 0.01 \
    --max-sentences $MAX_SENTENCES --update-freq $UPDATE_FREQ \
    --max-update $TOTAL_UPDATES --log-format simple --log-interval 1 \
    --skip-invalid-size-inputs-valid-test \
    --num-workers 60 \
    --sample-break-mode complete \
    --shorten-method truncate

What have you tried?
I tried the followings:

Used a smaller dataset about 630M, and reduced MAX_SENTENCES as 2.  It worked. But when I switched the data to the original one (75g), again the same error happened.

Changed the path that connected to plasma client, like self.path = '/my_abosulut_path/' + self._server_tmp.name, in the file fairseq/data/plasma_utils.py. It didn't work.

I also monitored the usage of CPU memory (by free -h)and GPU memory (by nvidia-smi). None of them was exceeded during the training.

I ran the command line instruction ipcs during training constantly, but I didn't see any IPC there.

I don't have much experience on IPC programming. I would appreciate it if anyone could suggest other things that I could check.
What's your environment?

fairseq Version (e.g., 1.0 or master): 0.9.0
PyTorch Version (e.g., 1.0)
OS (e.g., Linux): Linux
How you installed fairseq (pip, source): pip install --editable ./
Build command you used (if compiling from source):
Python version: 1.5.0+cu101
CUDA/cuDNN version: 10.1
GPU models and configuration: Tesla V100, 8x32G
Any other relevant information:

With Plasma we use shared memory to avoid pickling redundant copies of the dataset. I suspect you're running out of shared memory. Please try some of the suggestions discussed here, particularly the ulimit -c unlimited suggestion: https://github.com/ray-project/ray/issues/7932

With Plasma we use shared memory to avoid pickling redundant copies of the dataset. I suspect you're running out of shared memory. Please try some of the suggestions discussed here, particularly the ulimit -c unlimited suggestion: ray-project/ray#7932

@myleott  Thanks for your response. I tried what you suggested but it didn't work.
Besides, I added some logs in the code plasma_utils.py as the following:
    def start_server(self):
        if self.plasma is None or self._server is not None:
            return
        assert self.object_id is None
        assert self.path is None
        self._server_tmp = tempfile.NamedTemporaryFile()
        self.path = self._server_tmp.name
        **logger.info('start plasma sever at path [{}]'.format(self.path))**
        self._server = subprocess.Popen([
            'plasma_store',
            '-m', str(int(1.05 * self.array.nbytes)),
            '-s', self.path,
        ])

    @property
    def client(self):
        if self._client is None:
            assert self.path is not None
            self._client = self.plasma.connect(self.path)
            **logger.info('connect plasma client at path [{}]'.format(self.path))**
        return self._client

And when training the model, the log is as below:
2020-07-14 17:03:03 | INFO | fairseq.optim.adam | using FusedAdam
2020-07-14 17:03:05 | INFO | fairseq.data.plasma_utils | start plasma sever at path [/tmp/tmpaxdhww7j]
2020-07-14 17:03:09 | INFO | fairseq.data.plasma_utils | connect plasma client at path [/tmp/tmpaxdhww7j]
2020-07-14 17:03:10 | INFO | fairseq.data.plasma_utils | start plasma sever at path [/tmp/tmpuo8vzg9g]
2020-07-14 17:03:14 | INFO | fairseq.data.plasma_utils | connect plasma client at path [/tmp/tmpuo8vzg9g]
2020-07-14 17:03:16 | INFO | fairseq.data.plasma_utils | start plasma sever at path [/tmp/tmpmtgzfses]
2020-07-14 17:03:19 | INFO | fairseq.data.plasma_utils | connect plasma client at path [/tmp/tmpmtgzfses]

It seems that it got stuck after connecting to three clients. Do you have any idea about what configuration might be related?

Hmm, I'm not sure what's happening. One solution to unblock you is that $DATA_DIR can be a colon-separated list of data directories. Each directory will be iterated over as an "epoch", so you can shard you data into 5 data directories and then do:
fairseq-train --fp16 data-bin/my-data1:data-bin/my-data2:data-bin/my-data3:...

This should be more robust.

Hmm, I'm not sure what's happening. One solution to unblock you is that $DATA_DIR can be a colon-separated list of data directories. Each directory will be iterated over as an "epoch", so you can shard you data into 5 data directories and then do:
fairseq-train --fp16 data-bin/my-data1:data-bin/my-data2:data-bin/my-data3:...

This should be more robust.

Sounds good! I will have a try. Since this is not related to the plasma issue anymore, I am gonna close this issue. Thanks for your help!


Side Tree Error

when assigning category item with long name the tree view get broken in view
InvenTree Version | 0.1.7 pre

Thanks for reporting @Tabarane
Looks like this also applies for the Part Category tree display.


fix: clean up agenda personalization links

Fixes #3786 and #3787

This update restores the webcal / .ics buttons to the agenda tab. It relabels them as "filtered agenda" instead of "personal agenda." It also suppresses the duplicate set of buttons at the very end of the agenda tab. On the personalize tab, these are meant to be useful to someone who has gone through the whole page to select individual sessions, but there's little need for them on the agenda tab.


Fixing bucket name

This is actually unrelated to the failing test.
It fails due to the url signature not matching properly as it is a time based signature.
Sometimes the test takes a bit too long and the actual signature will not match the expected one.


fixed aria-hidden for centered mode

In centered mode, the active slide wasn't focusable on keyboard (and probably not read by SRs) because the centered slide only gets slick-center class and not slick-active, which was only targeted in updateSlideVisibility function.

Some more context here : https://github.com/Accessible360/accessible-slick/discussions/31

Per discussion over in #31, it turns out that this is a logic bug in the original Slick Slider library that causes Slick to miscalculate which slides are visible when the options centerMode: true and infinite: false are used. Every "visible" slide normally gets the class .slick-active when Slick Slider, which accessible-slick then uses to add or remove the necessary ARIA attributes. When these two options are used, though, Slick Slider never adds .slick-active to any slides, meaning it doesn't think any slides are visible.
This behavior can be replicated using the original Slick Slider, which means that this is not something that has been introduced by accessible-slick. Since accessible-slick is a downstream fork of Slick Slider, this issue would need to be fixed in the original repository. Once it's fixed there, the changes can be integrated into this fork.


Fix docs building

A new version of sphinx-autodoc-typehints was released yesterday that drops support for sphinx < 3.0. However, we currently version pin sphinx to 2.2.2.
This new release hence caused the documentation to stop building, and a quick fix is to version pin sphinx-autodoc-typehints to 1.10.3 as is done in this PR.
Current RTD builds are breaking:

Thanks @thisac!
I tried with sphinx==3.0.4 and sphinx==3.1.1 and got this error when building:
TypeError: add_source_parser() takes 2 positional arguments but 3 were given
Not sure what the problem is :thinking:


Zuul not passing all headers

We discovered this yesterday quite by accident.  A customer sent to Authorization headers (one with Basic xxx and one with a Bearer xxx.  The Basic auth one was intended for another destination.  They had been doing this for months and the system worked (funny that).
However, we put in a zuul proxy server to replace a lot for he HAProxy manipulations that were happening and as well to hold some custom filters we were writing.
So suddenly none of the OAuth2 authorization worked for them any more.
We tracked the problem down to the zuul proxy removing the second Authorization header (the one with the bearer token).
I managed to follow the processing into the RibbonRouting filter and saw the source of the issue
In run() it calls MultiValueMap<String, String> headers = this.helper.buildZuulRequestHeaders(request); which copies the headers into a multi map
Inside the buildZuulRequestHeaders the logo is such that even though it is a multi map (key followed by a sequence of values), it only gets the first value of each header.
Since this was a high priority item I checkout out a local copy and made the change so that it adds all the values into the multi-map for each key.
While the example I had was odd, there are certainly other more valid instances where multiple header with the same name can occur.  This code is the same in both 1.0.0 RC3 and the 1.0.0 release.

@larry13767 thanks for the report!


Link of the localhost port not updated if we choose another port which is not 8888

if we want to expose the (docker) aiidalab to the localhost port which is different from 8888 (the default), the link to which is printed in the log is not updated, and this may create confusion. If we run the container with, for example, -p 8887:8888, the link still tries to go to the local 8888 port

Which log exactly do you mean? Which link? How exactly are you running the container?

We can also just update the documentation to explain this step. However, it is a corner-case as usually the user will use the 8888 port also for localhost

Yeah, but this is printed by the Jupyter from within the container, and it only knows the port that is connected inside, it can't know the exposed port on the outside. So that's not something that can be fixed.
By the way: Why would you run docker directly instead of aiidalab-launch, which handles this correctly? (it prints the proper URL).

I usually do this if I want to change the exposed port to something different to 8888. I didn't know it was possible via aiidalab-launch.
Also in the docs, we offer the possibility to use docker directly.
Actually, the user used aiidalab-launch via docker desktop (Mac) and I think that after a first attempt he started a new container by putting the 8887 port in the optional settings via the docker desktop GUI.

You can change the port via profile configuration with aiidalab-launch profile edit. I'd really recommend using aiidalab-launch where possible, maybe we should make that point stronger.

I agree


Added Director's Message

Fixes #

Description:  The title should be short and relevant.
Checklist

[x] I've followed the Contributing guidelines provided in the repository.
[x] I've made the changes which were demanded in the linked issue.
[x] I've tested my code on a Chromium based browser.
[x] I've tested my code on Mozilla Firefox.
[x] My code gave a clean console on debugging. (no warnings/errors)

Testimonial

@utkarsh0908 you have commited your changes in the main branch, which is not the cutting edge branch of any fork as of now.

working on it

closing since branch change is required. but thanks for committing :whale:


feat: supporting postgres timestamps for mp_ds2inserts and mp_lib2inserts

Closes #68

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


The CMake does not support multi-file kernel builds.

The CMake CUDA build -DHIPSYCL_PLATFORM=cuda does not support building kernels using multiple translation units. For example, if I have a main.cpp with extras.cpp and extras.h containing a complex number class I get the following error:
ptxas fatal   : Unresolved extern function '_ZNK6extras7complex4realEv'
The build works directly from the command line:
/opt/hipSYCL/bin/syclcc --hipsycl-platform=cpu -O0 -g  -DHIPSYCL_PLATFORM=cuda -DHIPSYCL_GPU_ARCH=sm_70 -DHIPSYCL_CUDA_PATH=/opt/hipSYCL/cuda main.cpp extras.cpp

This has nothing to do with cmake.
If you look closely at your command line, you see that you are actually compiling for CPU since you pass --hipsycl-platform=cpu. The -DHIPSYCL_XYZ=... is only for cmake.
If you compile for CPU, you can do anything that's possible in C++. If you compile for GPU however, restrictions apply for the code that's allowed inside kernels as outlined in the SYCL specification (note that restrictions in kernel code is something all heterogeneous programming models have in common, SYCL, CUDA, OpenCL etc).
If you compile for GPU, the SYCL specification requires that the definition of all functions used inside a kernel (i.e. the entire call tree) be visible at the site of kernel invocation. This means that dividing code in header and cpp file is not allowed for kernel code.
The reason for this is that in SYCL you do not mark functions explicitly to be compiled for device. Therefore, the only way the SYCL compiler has to determine whether a function has to be compiled for device is by going through all function calls inside a kernel to build the complete call tree, and check which functions are are required by a kernel. If parts of that call tree are defined in an external cpp file, the SYCL compiler cannot build see the full call tree, so parts of required code will not be compiled for device because the SYCL compiler cannot know that they are needed.
This then of course leads to linker errors as you have seen.
The SYCL specification mentions as optional feature the solution that in such cases a programmer can mark functions at the interface of compilation units explicitly with the SYCL_EXTERNAL attribute. However, this is an optional in the SYCL specification and we cannot support that in hipSYCL because of limitations in HIP/CUDA clang.
In summary, not a bug and hipSYCL behaves as defined by the specification :)

Thanks. I was not aware of this limitation. Would it be possible for cmake to merge all the sources into one file before compiling?

I'm not a cmake expert, but I have never heard of any such feature.. I think you can probably execute arbitrary commands from cmake, so you could hack this into your cmake file I suppose. In any case I don't think this is such a good idea. Merging cpp files into one in an automated process is probably going to break things at some point. After all, you are merging code that was never intended to be compiled as one compilation unit, so you might run into name collisions etc. This is clearly not how to C++...
You can ask in some cmake support forum, but for these reasons I'm skeptical that the cmake people would see much value in this feature.


Eliminate multiple copies of protobuf definitions

Problem
Multiple copies of the protobufs
Solution
consolidate to one source of truth
Alternatives
No response

Stale.  Please reopen if still needed.


cannot import name 'sphere_synt' from partially initialized module 'ref'

When I run det/yolov4/train_yolov4.sh configs/yolov4/bop_pbr/yolov4x_640_augCosyAAEGray_ranger_lm_pbr_lm_test.py 0, It produces an error. I found that there are no “sphere_synt.py” files under the “def” directory.How can I fix it?

It is not needed for this repo. You can just comment it out.

Checkpoint pretrained_models/yolov4/yolov4x-mish.pth not found!Now I have this problem.Please how can I solve it?

https://github.com/WongKinYiu/PyTorch_YOLOv4

How do I use it？I click on the "weights" of the pre-trained model inside, but it shows that the file does not exist.

Prior to this,when I run sh scripts/compile_ When using the all. sh command, it displays the following content.

May I ask if this has any impact?

Looks like the egl renderer could not be successfully built in your env. You need to fix the problem.

Yes, how can I fix this problem？

Maybe you can refer to: https://github.com/shanice-l/gdrnpp_bop2022/issues/35 and some other related issues online.

Thank you very much for your help! I have resolved the egl renderer issue, but this(https://github.com/THU-DA-6D-Pose-Group/self6dpp/issues/16#issuecomment-1510791611) still exists.

I entered this(https://github.com/WongKinYiu/PyTorch_YOLOv4), but its weights file no longer exists

Are these different profiles different datasets? What is the difference between config inside the base folder and the four outside?

Yolov4's processing on LM I see only test.py. So is the reason for my error(https://github.com/THU-DA-6D-Pose-Group/self6dpp/issues/16#issuecomment-1510791611) being because I run det/yolov4/train_yolov4.sh and let configs set the yolov4x_640_augCosyAAEGray_ranger_lm_pbr_lm_test?

Please find the answer in the code https://github.com/THU-DA-6D-Pose-Group/self6dpp/blob/main/det/yolov4/main_yolov4.py

This looks like the following code is causing problems, but I don't know how to properly modify it to make it correct
https://github.com/THU-DA-6D-Pose-Group/self6dpp/blob/d94eaf7045ff3f2d992f23735e7dc3011338a3fd/det/yolov4/main_yolov4.py#L181

Can you provide a pretrained_ models of yolov4x-mish.pth? Because I found that its download link has expired in its Yolov4 GitHub.

I don't have the yolov4 models now. Please contact the original authors.

Thanks to your help, I am now able to train The Detector.
Can I adjust the TOTAL_EPOCHS=4 here to make it less training? Because I find that training the detector takes too long, I use a piece of 2080ti, will this have an impact beyond accuracy?

You can try it and see how much it impacts the accuracy.


I want to delete these from automation

I want to delete these from automation

tccutil reset AppleEvents

This seems resolved. The above answer is correct here.
If you want to avoid duplicate entries, start codesigning the binary.


Question: How can I add custom record types from my own extension?

Extension description suggest it is possible to add custom record types to extension, but there is no example in the documentation for this.

I found this out myself


DEPENDABOT_EXTRA_CREDENTIALS for Private Terraform Registries

Is there any available documentation for the simple auth JSON syntax to pass private terraform registry creds as 'DEPENDABOT_EXTRA_CREDENTIALS' to the task, or any other way to authenticate against private terraform registries hosted at Terraform cloud.

Same question asked in https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#terraform-registry
I haven't used terraform, but according to the official docs, the json would likely be:
"[{\"type\": "terraform-registry", \"url\": "you know what goes here\", \"token\": "planet of apes\"}]"

Of course remember to change the actual values.

hey @mburumaxwell , I did try that but that doesn't seem to work, also I don't think there's a one to one matching with dependabot-core registry configuration and the EXTRA_CREDENTIALS as , for npm the dependabot doc says: registries:   npm-github:     type: npm-registry     url: https://npm.pkg.github.com     token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}
But the json is, {         "type": "npm_registry",         "registry": "pkgs.dev.azure.com/<organization>/_packaging/<feed>/npm/registry/",         "token": "<feed>:<raw-pat-value>"     }

@apaarshrm39
According to the official code I would use:
"[{\"type\": \"terraform_registry\", \"host\": \"registry.example.org\", \"token\": \"planet of apes\"}]"


WIP Implement recovery actions after unexpected Winpanda interruption during upgrade

High-level description
Implement recovery actions after unexpected Winpanda interruption during upgrade.

Divide winpanda upgrade flow on logical steps (provide procedure atomicity).
Create winpanda upgrade procedure state management.
Create Winpanda upgrade exception handler during unsuccessful execution.

Corresponding DC/OS tickets (required)

D2IQ-66677 Implement recovery actions after unexpected Winpanda interruption during upgrade.

Related tickets (optional)

D2IQ-ID JIRA title / short description.

Checklist for component/package updates:
If you are changing components or packages in DC/OS (e.g. you are bumping the sha or ref of anything underneath packages), then in addition to the above please also include:

[ ] Change log from the last version integrated (this should be a link to commits for easy verification and review): example
[ ] Included a test which will fail if code is reverted but test is not. If there is no test please explain.
[ ] Test Results: [link to CI job test results for component]
[ ] Code Coverage (if available): [link to code coverage report]

@mesosphere-mergebot request-review @jongiddy

@mesosphere-mergebot label WIP

@mesosphere-mergebot label Work In Progress


Add "runtime" loop checking to symbolic analysis

We need a symbolic equivalent to the runtime check added in https://github.com/kadena-io/pact/pull/417

This is actually unnecessary until analysis is able to go into user guards. Right now they are treated as black boxes that can both fail and succeed.
The implementation of user guard analysis is challenging:

we need to symbolically encode user guards that can read from the database
we can put a monadic action for the analysis of the user guard in our environment and sequence it when needed
things get tricky when we need to put such a guard in the db -- whenever the db changes, we would need to recompute this stored interpretation for the user guard in the db
need to re-store this recomputed value in the table's array

And then, I think: all writes to a table after the initial guard write have to be "re-layered" on top of an updated guard write (necessitated by a db change that affected the guard). and then this is closely related to how recursion/looping can come into play

Due to #489 on the horizon, we will not need such loop checking! Instead we will implement #490


cargo-make: 0.37.14 -> 0.37.15

Automatic update generated by nixpkgs-update tools. This update was made based on information from https://repology.org/project/cargo-make/versions.
meta.description for cargo-make is: Rust task runner and build tool
meta.homepage for cargo-make is: https://github.com/sagiegurari/cargo-make
meta.changelog for cargo-make is: https://github.com/sagiegurari/cargo-make/blob/0.37.15/CHANGELOG.md
Updates performed

Rust version update

To inspect upstream changes

Release on GitHub

Compare changes on GitHub

Impact
Checks done

built on NixOS
The tests defined in passthru.tests, if any, passed
found 0.37.15 with grep in /nix/store/zbdkrgff6373i4akmgwj981rz3sy2j2h-cargo-make-0.37.15
found 0.37.15 in filename of file in /nix/store/zbdkrgff6373i4akmgwj981rz3sy2j2h-cargo-make-0.37.15

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

3 total rebuild path(s)

3 package rebuild(s)

First fifty rebuilds by attrpath

cargo-make
open-scq30

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/zbdkrgff6373i4akmgwj981rz3sy2j2h-cargo-make-0.37.15 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

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

Or:
nix build github:r-ryantm/nixpkgs/c08a99bd1a483c7da188f464b6aa9f7aec37e074#cargo-make

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/zbdkrgff6373i4akmgwj981rz3sy2j2h-cargo-make-0.37.15
ls -la /nix/store/zbdkrgff6373i4akmgwj981rz3sy2j2h-cargo-make-0.37.15/bin

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

2 packages built:

cargo-make
open-scq30

Maintainer pings
cc @figsoda @xrelkd for testing.

@NixOS/nixpkgs-merge-bot merge


Patches to mruby.go to implement module lookup

Hi folks, I hope this helps. Here's a more complete example than the tests needed based on the initial example in the README:
package main

import (
  "fmt"

  mruby "github.com/mitchellh/go-mruby"
)

func main() {
  mrb := mruby.NewMrb()
  defer mrb.Close()

  // Our custom function we'll expose to Ruby. The first return
  // value is what to return from the func and the second is an
  // exception to raise (if any).
  addFunc := func(m *mruby.Mrb, self *mruby.MrbValue) (mruby.Value, mruby.Value) {
    args := m.GetArgs()
    return mruby.Int(args[0].Fixnum() + args[1].Fixnum()), nil
  }

  // Lets add a method to Kernel
  class := mrb.Module("Kernel")
  class.DefineClassMethod("add", addFunc, mruby.ArgsReq(2))

  // Let's call it and inspect the result
  result, err := mrb.LoadString(`Kernel.add(10, 15)`)
  if err != nil {
    panic(err.Error())
  }

  // This will output "Result: 42"
  fmt.Printf("Result: %s\n", result.String())
}

Looks great, one request and we can move forward.

Ah sure, sorry about that!

Ah, hah. Well that is a frightening API. o.O For now let's just leave it as is.


Team 18 HA Review: Missing introduction/explanation to FMEA

The section “5 Failure Mode and Effect Analysis” is missing an introduction or explanation to the hazard analysis method of choice. What is FMEA? What contents are included in a FMEA? This is especially needed when your FMEA Table is broken down into two separate tables. A sentence like “Table 2 and Table 3 in combination present the FMEA for the Mac AR application” or “Table 2 is continued in Table 3” would make this section more readable.
Nit picks

The caption should be unique for each table. Table 2 and Table 3 should not share the same caption: "FMEA Table"
It would be better if you use longtable to properly format tables spanning multiple pages. That way you don't need to worry about the captions.
Issue \raggedright in the table column specification to achieve the left align instead of the default justify horizontal alignment. That way there won't be lots of white spaces between words if the column is narrow.

Team 18 TA: @CSchank

Closed with commit id: 905f3151621f611e4db16ad451e172fd86e7037d


docs/remove specific changes

@rbarbey do we still need this line?
https://github.com/acrolinx/platform-api/blob/c4243a5f01b7f4261e22183ad17e0cbf9692675c/.gitlab-ci.yml#L16-L17

@george-haddad Yes, this should be set to develop instead of user-api. I'm pretty sure I changed that but apparently I did not. Good catch!


Add span for guards in pattern matchings

#814 introduces guards in pattern matchings but no span is associated to them (only the arm span), it would be better to have a type guard' with a span in it.

Implemented in #821


 or eos needed for other base models?

Compliments for great work. I'm experimenting with reproducing using "small" base model (TinyLlama) with custom low-resource language pairs and results after stage 1 and 2 are promissing.
However I see model to continue generation after translation. repetition_penalty doesn't seem to solve the issue.
I assume that eos should be added to samples at SFT stage or am I missing something else? Any advice is welcome and will be much appreciated.

Thank you for your interest!
Yes, the special eos token should be added during the SFT stage, as we did here: https://github.com/fe1ixxu/ALMA/blob/b7faf6cfcecd0aa4321e27eaa12eeb30bbf0daeb/utils/utils.py#L241.
Otherwise, the model wouldn't know where to end.

Thank you for qick and exact response. I'll have to debug why get_preprocessed_data failed to do so (as it seems).


Hi, can we run integration test and performance test without using docker compose file ? As I can see in the document, for integration test, its mentioned to use docker compose file. Please let me know for your suggestions. Thanks in advance.

@lenny-intel @cloudxxx8  @weichou1229 please let me know for your suggestions. Thanks in advance.

no, integration test and performance metrics test only support docker environment right now


[CP] Made the clear optimization handle backdrop filters.

Issue Link
https://github.com/flutter/flutter/issues/131576
Commit Hash
b3df4d767c9d92d969032fead7ff992392832bd4
Target
beta
PR Link
https://github.com/flutter/engine/pull/44222
Changelog Description
Fixes missing solid fills that happen after backdrop filters.
Impacted Users
iOS users
Impact Description
This would result in the wrong rendering in some cases when a backdrop filter was used.
Workaround
None.
Risk
low
Test Coverage
yes
Validation Steps
Tested on wonderous app.

@jason-simmons can you review this CP request? If it looks good to you, add the "cp: approved" label.


Instruction Needed(with more informations!)

I have a Yeelock Cabinet Lock(Orange striped one) that might be compatible with your project.
But I cannot specify the meaning of the blanks.

Also I cannot get specific information of the lock except for SN because iOS yeelock app does not show any information of that, even in the phone settings. I tried to use Android yeelock app but it requires phone number.
Anyway, I had to follow your instructions with no evidence and actually, I don't even know what am I doing with this stuff, due to the difficulties that I mentioned above.
So I want you to provide more specific instruction including screenshots.
That would help people trying to integrate their lock with HA.
Thank you for making this Integration, and I hope more people can use it!

Apologies for the delay. This is the MAC Address and BLE Signing Key respectively. The MAC should be populated automatically by auto-detection from BLE; however, the BLE Signing Key needs to be obtaining by MITM the app for now.

Resolved in v2.0.0


python3Packages.reorder-python-imports: init at 3.0.1

depends on #165653 to build.
Signed-off-by: florian on nixos (Florian Brandes<EMAIL_ADDRESS>Description of changes

Things done

Built on platform(s)

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

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

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

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

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[x] Fits CONTRIBUTING.md.

This is a semi-automatic executed nixpkgs-review with nixpkgs-review-checks extension. It is checked by a human on a best effort basis and does not build all packages (e.g. lumo, tensorflow or pytorch).
Result of nixpkgs-review pr 165655 run on x86_64-linux 1

2 packages built:

python310Packages.reorder-python-imports
python39Packages.reorder-python-imports


Update for revision 4 HLI?

Hi, would it be possible to update this page and diagram for revision 4 of HANA large instances?

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

ID: 297fe58b-8232-9b2a-c92e-9f7f94ec3e4e
Version Independent ID: 3da45f17-e475-f23e-c77f-465933ed02f4
Content: Run SAP HANA on Azure Large Instances - Azure Reference Architectures
Content Source: docs/reference-architectures/sap/hana-large-instances.md
Service: architecture-center
Sub-service: reference-architecture
GitHub Login: @lbrader
Microsoft Alias: pnp

@dohughes-msft Thanks for the feedback! We have assigned this issue to the content author to review and update accordingly.

AB#160220 - Thanks for reporting - this issue is under review

Thank you for this-  we've added this to our backlog for updates in the next few weeks. Closing for now.

Update is staging for this. Thanks again!

@dohughes-msft , Hi Donovan, the article already mentions the revision 4 in the "Architecture" section. It is generally not advisable to add revisions/version information in the architecture diagram.


MiniCPM-V 2.6: Batch Inference for Videos

Can I have the code for batch inferencing for videos please

Can I have the code for batch inferencing for videos please

I want to ask if you want the python version of code or another framework?


ENH: reading from file-like objects

Copying from https://github.com/geopandas/pyogrio/issues/22#issuecomment-965134925
It should be possible to connect a python file-like object with a VSIVirtualHandle (https://gdal.org/api/cpl_cpp.html#classVSIVirtualHandle), so you could avoid reading the full file-like object into memory as bytes, but forwarding the C "read"/"seek" calls into python read/seek calls.
And this is exactly what @djhoese contributed to rasterio in https://github.com/rasterio/rasterio/pull/2141
I don't know if many OGR file formats would benefit from this, though (they would need to support reading/parsing only part of the file, if asking for a subset of columns/features)

It looks like GDAL's VSI plugin architecture should work work, but (if I follow correctly), it looks like there are some potential issues for us lurking here.
If the input is a single entity, such as a single GPKG or zipped shapefile (if opened via ZipFile(path) or possibly chained with /vsizip/), then we should be able to read it using a file-based interface.  However, I think if we open a multi-file dataset (e.g., shapefile with sidecar files) via fsspec, we don't have a handle on the filesystem except perhaps through attributes specific to fsspec (e.g., an open file has an .fs attribute).  I think we need to provide some of the filesystem methods in order for GDAL to read the sidecar files (and create them when we enable write functionality for this).
Rasterio approached this by adding the concept of openers to the API, where you pass in an path as a string and an opener that provides an interface for opening the file / filesystem.  It then detects the type of opener passed in and wraps it in appropriate wrapper classes to interface with the underlying VSI filesystem plugin API calls.
I'm not particularly keen adding opener as a keyword here.  Are we OK with instead implementing this more narrowly for specific filesystems, namely fsspec and ZipFile (sidestepping GDAL's built-in /vsizip/) where we can check the instance type of an open handle and provide specific wrappers for these?
I think this would give us the following options for read (and hopefully write):

path string
open local file in binary mode
bytes (we'd probably want to wrap in BytesIO)
BytesIO instance containing dataset bytes
open ZipFile with opened specific file where we can use something to get at filesystem (not sure what yet)

from zipfile import ZipFile

z = ZipFile("my.zip"):
handle = z.open("my.shp")
df = read_dataframe(handle, ...)

open fsspec file where we can use the .fs attribute to get filesystem

import fsspec

fs = fsspec.filesystem("http")
handle = fs.open("https://.../my.shp")
df = read_dataframe(handle, ...)

(note: examples are speculative, not sure if this will work)


Set cerebro default refresh internal

Hello!
How can I increase default cerebro refresh interval? (Right now is 5 sec and this causes a lot of load on our cluster).
Thank you.

I saw where is this default interval set and in this moment is hardcoded (https://github.com/lmenezes/cerebro/blob/3b0730ceaa3f42ce536bcfc67bef624dd28aeb1c/public/js/app.js#L2922).

@orinciog the new default interval is now 15s. is this good enough for you?

Thank you for your response. It will be great if you will export this setting in a config file, just like  "refresh_rate" from kopf_external_settings.json.
Actually, right now we are using kopf with 30s refresh time and it is ok for our cluster load.

We have to use 30 seconds as a default too, if we don't, Cerebro is unusable.  It really would be nice to be able to specify a default, for our smaller clusters 5 seconds is perfect but our larger clusters, 30 seconds seems to be necessary.
Another thought, do the requests wait to send a follow up request until after a response has been received from the server?  If not, maybe that would prevent lower refresh intervals from being a problem on large clusters.


[main] Upgrade to latest dependencies

Cron -knative-prow-robot
/cc knative-sandbox/channel-wg-leads
/assign knative-sandbox/channel-wg-leads
Produced by: knative-sandbox/knobots/actions/update-deps
Details:
bumping knative.dev/pkg 7764284...dbcf4cf:
  > dbcf4cf removing default for KUBECONFIG to enable in cluster tests (# 2191)

/lgtm
/approve


Python auto-instrumentation example does not work

As described in the auto-instrumentation section of the Python OpenTelemetry docs, running:
opentelemetry-instrument --traces_exporter console --metrics_exporter none python auto.py

should produce telemetry output in the console. Unfortunately, it only produces 'None'.
https://github.com/open-telemetry/opentelemetry.io/assets/123695626/be44d63a-20e7-4f3d-b322-728b4ca97c4c
Please note that the docs, linked above, do not have the flask<3 version constraint, but in my environment I've installed both 3 and <3 versions, each yielding the same error in the video above.

this is fixed now


Revert "- fixes typo in conditional access page"

Reverts MicrosoftDocs/microsoft-365-docs#1771

I have removed this topic from the TOC etc. - because the baseline policies are no longer recommended and will de deprecated/


Remove gogoanime

Gogoanime provides the same sources as vidstream, gogoanime works, but to ease maintenance I'm removing duplicate providers.

Uhhh, I don't mind it being removed. It's basically normie handling for people who only know websites and not servers


[Bug] assert loss failed

Describe the bug
Deatials:
https://github.com/InternLM/InternEvo/actions/runs/8395156088
Environment
python3.10
Other information
No response

others:
https://github.com/InternLM/InternEvo/actions/runs/8430382349

最新代码可通

The weekly test still faild: https://github.com/InternLM/InternEvo/actions/runs/8574468442


Convert ValueTask to a Task before blocking

Fixes https://github.com/Azure/azure-sdk-for-net/issues/10904

@AlexanderSher ping :)

EnsureCompleted shouldn't be called on non-completed ValueTask at all, that's what we check in VerifyTaskCompleted. We're using EnsureCompleted in the policies that may be executed in any TaskScheduler/SynContext combination and sync waiting on incomplete task can easily hang user code.
If debug-only exception isn't enough and throwing InvalidOperationException for release build isn't an option, we need to discuss it further. Is there any real repro behind #10904?

I understand that we should never be calling EnsureCompleted() on non-completed tasks but if the case we accidentally do I'd like to make a best effort and keep customers apps working. Even if sync-over-async is suboptimal and might cause other issues in 90% of the cases it will work just fine.

Then we need additional check to ensure that we're trying to wait incomplete task synchronously only on threadpool, something like:
(SynchronizationContext.Current == null || SynchronizationContext.Current.GetType() == typeof(SynchronizationContext)) && TaskScheduler.Current == TaskScheduler.Default

I'd prefer to throw exception rather than introduce possible deadlock.

Do you think it's required considering we are using ConfigureAwait(false) everywhere?

In a sync code path ConfigureAwait(false) doesn't change anything even if used. In async code path, user can add custom policy that interacts with UI (progress bar or abort/retry message) that may bring execution of the following policy into sync context or task scheduler.

This situation would only happen when sync code accidentally runs an async code path.
I'm not saying there is no way to deadlock at all but considering we use ConfigureAwait(false) in all our async code the probability that one of our calls would need to be scheduled on sync context we also don't often call back into customers code this solution would work in 90% on the unlikely cases we miss with analyzers.

we also don't often call back into customers code

I would say it is an expected scenario when user adds UI interaction as per retry policy. How else can I update UI to provide notification that request has failed and is going to retry?

What are you proposing? Throwing an exception in the case where customers code would've had a high chance of working? There is also no workaround customer can do if we throw an exception, they can always workaround blocking sync-over async and get their code working.

Yes, I think user must be aware that we have a bug in our code that can potentially hang an application. If we throw an exception, user will know where the bug is and apply workaround. If we hang, it would be much harder to figure out why.
The workaround is simple: explicitly call failing API method using Task.Run so that sync context isn't captured.

Hm, good point, let me try the changes.


Carousel / Gallery

Describe the requested icon
My specific use case is a UI toggle split button for changing between different views of an image gallery. One of my modes is a "filmstrip", which you already have, but there isn't a good "gallery" treatment that I was able to find.
Screenshots
One idea would be a combination of the caret-left and caret-right icons already existing with an image, something skin to:

This is what I went with, implemented using Tailwind
const Carousel: FC = () => (
  <div className="flex items-center">
    <CaretLeft size={10} className="-mr-1" />
    <ImageSquare />
    <CaretRight size={10} className="-ml-1" />
  </div>
);

An alternative approach would be to do something similar to the iOS Finder icon for its gallery view:

Additional context
I love phosphor icons, thank you in particular for having really clean SVG markup :)

Added slideshow in v2.0.0


[enh] [broker] EntryFilter (PIP-105) - support per-Consumer filtering (#15391)

This PR is only to run CI against branch-2.10 before committing the patch.
The patch applied cleanly
(cherry picked from commit 0975cdc2489739b7518ee7acc78bbc6e8c8e2e4d)

as the patch applies cleanly to branch-2.10 I am not going to merge this PR but to push the patch directly to branch-2.10 as soon as CI passes


Should detect transaction reversals in blocks

We should be able to detect true doublespends:

If a transaction is included in a block, and it gets reversed, we need to detect if it's doublespent and reject the invoice, or simply update the current state.
If we've accepted an invoice with 0-conf, but a block with a conflicting transaction arrives, we need to detect and handle this.

Flowee should have block reversal support, and we need tests for these cases.

This should be well supported by doing a Transactions.update call, which is done by Monero.


wrong type convert in send method

not matter i set a struct or string into send method,inside it auto convert {"DealerId":2004410,"IPAddress":"<IP_ADDRESS>"} to {"DealerId":2.00441e+06,"IPAddress":"<IP_ADDRESS>"},finally i find the json lib auto convert it( http://stackoverflow.com/questions/22343083/json-marshaling-with-long-numbers-in-golang-gives-floating-point-number ),so everyone have a struct with int should care about this ,haven't find any solution for this, i think in the SendString method should not Unmarshal again

Thanks for pointing this out.
The fix will be released in next version.

well done,3ks


Update gem spec minimum versions

Hi guys,
I'm currently upgrading my Gemfile and I have conflicts with rake minimum version which involve Sinatra for this case.
I've fork the latest version of Mailcatcher and update the mailcatcher.gemspec
I have change those:
s.add_dependency "rack", "~> 2.1"
s.add_dependency "sinatra", "~> 2"

Does anybody know if there are possible side effects. If there is none, I can open the PR. 🙂

There are potential side effects.
Please don't include mailcatcher in your Gemfile:
https://github.com/sj26/mailcatcher#bundler

Thanks @sj26 !
I've never read this note before. I'll extract if from my Gemfile. 👌🏻

Thanks @benebrice :pray:


react examples do not work

getting a
Unhandled Runtime Error TypeError: Failed to set the 'adoptedStyleSheets' property on 'ShadowRoot': Failed to convert value to 'CSSStyleSheet'.

We'll need more details on this i.e. how did you set up the example, did you change anything etc. Also did you follow https://github.com/WalletConnect/web3modal/blob/V2/.github/docs/development.md

Just pulled fresh repo for V2 branch and had no issues. Did you run yarn dev and yarn dev:react in separate terminal tabs?

I also got the same error.

@leoanhvig I noticed you are cd'ing into examples folder to execute commands, ensure you do this

Pull repo
Run yarn install; yarn build; yarn dev from the root of the monorepo
Run yarn dev:react in a separate terminal window from the root of the monorepo

i pulled back the repo again, followed the steps you instructed but when i run yarn build it still has the error, run yarn dev:react it keeps giving the css error as above

i pulled back the repo again, followed the steps you instructed but when i run yarn build it still has the error, run yarn dev:react it keeps giving the css error as above

Really strange, will look into this once we release 2.1, but this same setup is ran by our devs locally and on our CI's. Did you by any chance modify the examples somehow, or all of this is fresh from the github repo?

I just added the .env.local file like the following and didn't modify any of the repo's files

I also followed the steps you mentioned without making any changes in the code and I got the same error

@0xAsimetriq Standalone worked for me. I'm using node v18.12.1 and yarn 1.22.19. Anyway, I have tried to import it into a project as it comes in the documentation but I also get errors. I am using the following versions @web3modal/ethereum: 2.0.0, @web3modal/react: 2.0.0, Wagmi I have tried from 0.10.11 to 0.11.2 as you mention here #839 but it doesn't work. If I comment out the lines that give typing error as you mention, it lets me compile it but I also get an error with the wagmi client. I have tried to do what it says here #764 but it still doesn't work.

A very related issue here with examples.
I tested examples/react and examples/react-standalone.
Steps to reproduce:

Navigate to examples/react or examples/react-standalone
Install npm dependencies by running: yarn install
Up and running the app by running: yarn dev
Visiting the app in the browser.

Specs:

@0xAsimetriq

i have just run react-standalone and got the same error

@0xAsimetriq Yeah, it's supported by all modern browsers: https://caniuse.com/?search=web components
This issue is not related to browser compatibility.

I got the same error

i have just run react-standalone and got the same error too

@SeongHo-Won DO you mean nextjs-standalone?
Also could you please outline which steps you performed before getting that error (the more details the better 🙏 )

Hello,
Get the same error to.
My step is:
Pull the github, navigate in examples/nextJS folder then

Updated the .env with my project ID
yarn innstall
yarn dev

Then got this error :

same error

After several attempts of trying to recreate the issue, we were not able to, so will be closing this.
However, I recorded a video of me getting our lab example going from the scratch, I hope it can help (basically same flow for any other example).
In the video I

Clone / Download the project (un-zip it if needed)
Install dependencies
While dependencies are installing I grab my projectID
Once installed, I add .env.local file with my project id to example
I then build the monorepo
I run yarn dev in first terminal window to build all packages in watch mode
I then run yarn dev:lab to run laboratory example in a separate terminal window

Remember, all of these commands are ran from a monorepo root. In your own apps you can just reference the examples, you don't need to compile monorepo since in your case dependencies will be installed from npm not local.
https://user-images.githubusercontent.com/3154053/225848425-8b999662-c169-4e42-8329-8820a7e40d70.mov


fix(remix-dev): allow defining multiple routes for the same route module file

Closes: #1898

[ ] Docs
[x] Tests

Testing Strategy:
I copied a failing test to show that multiple routes pointing at a single route module get overwritten from here https://github.com/remix-run/remix/pull/3684 and works in some files to get this works for real.
Basically I've changed the remix-dev/config/routes.ts to allow receive some optional custom ID for routes because in a normal way two or more routes to the same route module will receive internally the same ID, so if somebody could pass a new unique ID we will resolve this this "route overwritten" situation.
Also to get the this idea completely working I've had too changed remix-dev/compiler/assets.ts to allow the compiler groups more then one route per route module file.

Hi @AndrewLeedham
I made a small change in the last commit in variable id (to fileId) name to clarify more what kind of id the automated. And also made more one adjust in id option comment instruction/detail in the way u suggest.
What is the next step to me?

Hi @AndrewLeedham
I made a small change in the last commit in variable id (to fileId) name to clarify more what kind of id the automated. And also made more one adjust in id option comment instruction/detail in the way u suggest.
What is the next step to me?

The changes looks good to me. Unfortunately I'm not a maintainer, just an interested party, so the PR getting the attention and subsequent review of a maintainer would be the next step I would have thought.

Nice work! I think it would be good if the docs are also updated, but maybe this can come later once the idea has been given the OK

Nice work! I think it would be good if the docs are also updated, but maybe this can come later once the idea has been given the OK

I agree with the future docs update and if someone need some light code sample to test this PR:
module.exports = {
  appDirectory: "app",
  assetsBuildDirectory: "public/build",
  devServerPort: 8002,
  publicPath: "/build/",
  serverBuildDirectory: "build",
  ignoredRouteFiles: [".*"],
  routes(defineRoutes) {
    return defineRoutes(route => {
      route("/user/:id", "routes/index.tsx", { id: "user-by-id" });
      route("/user", "routes/index.tsx");
    });
  }
};

@lucasferreira what's the easiest way to test this logic in my own app?

@lucasferreira what's the easiest way to test this logic in my own app?

I know thats weird but when I started develop this changes I worked directly inside de node_modules/@remix-run of my current working project. If you need to test in a exists project you could do the same looking to my PR files:
https://github.com/remix-run/remix/pull/3970/files
Basically you need to change 2 files<EMAIL_ADDRESS>and<EMAIL_ADDRESS>But if you need to test isolated some code and sample project you could checkout my modified branch (https://github.com/lucasferreira/remix/tree/dev) and create some playground app: https://github.com/remix-run/remix/blob/main/docs/pages/contributing.md#playground

Just played around with this locally, and it works a treat! Would be great to get this merged in :)
@runmoore I got this working by making a patch-package patch, I'll include it below.

@remix-run+dev+1.7.0.patch
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index e633d32..2ac6024 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index a2bf15e..7ad0d81 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>old mode 100755
new mode 100644
index b610bda..598d7a0
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,6 +1,6 @@
 #!/usr/bin/env node
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 73aadc1..974a250 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
@@ -25,9 +25,7 @@ const checkGitStatus = (projectDir, {
     clean = isGitClean(projectDir);
     errorMessage = "Git directory is not clean";
   } catch (err) {
-    var _err$stderr;
-
-    if ((err === null || err === void 0 ? void 0 : (_err$stderr = err.stderr) === null || _err$stderr === void 0 ? void 0 : _err$stderr.indexOf("Not a git repository")) >= 0) {
+    if ((err === null || err === void 0 ? void 0 : err.stderr.indexOf("Not a git repository")) >= 0) {
       clean = true;
     }
   }
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 31e6d43..93e642f 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 2863b8e..395f1a8 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 37645f6..fdc78bd 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 3283c64..521d741 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 14b2d7e..c63080c 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 83f1360..e7529bd 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 12a77dd..83bcb3e 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 9b67636..89ce36b 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 17755db..b3d0d78 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 4bb4d57..1d0da47 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index b15839e..e5543d2 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index c213e78..bcc262e 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 1f2897e..979f387 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index bf4cfbc..b032157 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 81f188b..2f4429c 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 8c17762..52cfa3d 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index fa98724..e610274 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index e4210bb..93308d7 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 7ffe47b..e68830c 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 7d4afb9..efbd58a 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 88cc39a..1f9920d 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index c21d7be..d0336f1 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 63333ee..0a500a3 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 069d25f..7a1fec8 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 11d2715..a966870 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 7f6954d..c087697 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 1fb0077..4a332bf 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index d1d6231..924f3eb 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 23b6d96..b7f317c 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index cc1ddb7..02bcc10 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 1972125..6aa340e 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index d8d202b..83f5fe1 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 9f6edb6..0bbc772 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
@@ -63,7 +63,6 @@ ${colors.logoBlue("R")} ${colors.logoGreen("E")} ${colors.logoYellow("M")} ${col
     $ remix build [${colors.arg("projectDir")}]
     $ remix dev [${colors.arg("projectDir")}]
     $ remix routes [${colors.arg("projectDir")}]
-    $ remix watch [${colors.arg("projectDir")}]
     $ remix setup [${colors.arg("remixPlatform")}]
     $ remix migrate [-m ${colors.arg("migration")}] [${colors.arg("projectDir")}]

@@ -139,14 +138,6 @@ ${colors.logoBlue("R")} ${colors.logoGreen("E")} ${colors.logoYellow("M")} ${col
     $ remix dev my-app
     $ remix dev --debug

-  ${colors.heading("Start your server separately and watch for changes")}:
-
-    # custom server start command, for example:
-    $ remix watch
-
-    # in a separate tab:
-    $ node --inspect --require ./node_modules/dotenv/config --require ./mocks ./build/server.js
-
   ${colors.heading("Show all routes in your app")}:

     $ remix routes
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index d0711e6..7da47fb 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 2b32f07..12845e4 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 9ce96d5..c37d916 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
@@ -62,6 +62,11 @@ var fse__namespace = /*#__PURE__*/_interopNamespace(fse);
 var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce);
 var chokidar__default = /*#__PURE__*/_interopDefaultLegacy(chokidar);

+// directory in the same place relative to this file. It is eventually injected
+// as a source file when building the app.
+
+const reactShim = path__namespace.resolve(__dirname, "compiler/shims/react.ts");
+
 function defaultWarningHandler(message, key) {
   warnings.warnOnce(message, key);
 }
@@ -316,6 +321,7 @@ async function createBrowserBuild(config, options) {
     platform: "browser",
     format: "esm",
     external: externals,
+    inject: config.serverBuildTarget === "deno" ? [] : [reactShim],
     loader: loaders.loaders,
     bundle: true,
     logLevel: "silent",
@@ -334,8 +340,6 @@ async function createBrowserBuild(config, options) {
       "process.env.NODE_ENV": JSON.stringify(options.mode),
       "process.env.REMIX_DEV_SERVER_WS_PORT": JSON.stringify(config.devServerPort)
     },
-    jsx: "automatic",
-    jsxDev: options.mode !== build$1.BuildMode.Production,
     plugins
   });
 }
@@ -383,6 +387,7 @@ function createServerBuild(config, options, assetsManifestPromiseRef) {
     minify: options.mode === build$1.BuildMode.Production && isCloudflareRuntime,
     mainFields: isCloudflareRuntime ? ["browser", "module", "main"] : config.serverModuleFormat === "esm" ? ["module", "main"] : ["main", "module"],
     target: options.target,
+    inject: config.serverBuildTarget === "deno" ? [] : [reactShim],
     loader: loaders.loaders,
     bundle: true,
     logLevel: "silent",
@@ -397,8 +402,6 @@ function createServerBuild(config, options, assetsManifestPromiseRef) {
       "process.env.NODE_ENV": JSON.stringify(options.mode),
       "process.env.REMIX_DEV_SERVER_WS_PORT": JSON.stringify(config.devServerPort)
     },
-    jsx: "automatic",
-    jsxDev: options.mode !== build$1.BuildMode.Production,
     plugins
   }).then(async build => {
     await writeServerBuildResult(config, build.outputFiles);
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 37c3817..cd062bd 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
@@ -50,7 +50,7 @@ async function createAssetsManifest(config, metafile) {
   let entryClientFile = path__namespace.resolve(config.appDirectory, config.entryClientFile);
   let routesByFile = Object.keys(config.routes).reduce((map, key) => {
     let route = config.routes[key];
-    map.set(route.file, route);
+    map.set(route.file, map.has(route.file) ? [...map.get(route.file), route] : [route]);
     return map;
   }, new Map());
   let entry;
@@ -69,22 +69,27 @@ async function createAssetsManifest(config, metafile) {
       }; // Only parse routes otherwise dynamic imports can fall into here and fail the build
     } else if (entryPointFile.startsWith("browser-route-module:")) {
       entryPointFile = entryPointFile.replace(/(^browser-route-module:|\?browser$)/g, "");
-      let route = routesByFile.get(entryPointFile);
-      invariant["default"](route, `Cannot get route for entry point ${output.entryPoint}`);
-      let sourceExports = await routes.getRouteModuleExportsCached(config, route.id);
-      routes$1[route.id] = {
-        id: route.id,
-        parentId: route.parentId,
-        path: route.path,
-        index: route.index,
-        caseSensitive: route.caseSensitive,
-        module: resolveUrl(key),
-        imports: resolveImports(output.imports),
-        hasAction: sourceExports.includes("action"),
-        hasLoader: sourceExports.includes("loader"),
-        hasCatchBoundary: sourceExports.includes("CatchBoundary"),
-        hasErrorBoundary: sourceExports.includes("ErrorBoundary")
-      };
+      let groupedRoute = routesByFile.get(entryPointFile);
+      invariant["default"](groupedRoute, `Cannot get route(s) for entry point ${output.entryPoint}`);
+
+      if (groupedRoute) {
+        for (let route of groupedRoute) {
+          let sourceExports = await routes.getRouteModuleExportsCached(config, route.id);
+          routes$1[route.id] = {
+            id: route.id,
+            parentId: route.parentId,
+            path: route.path,
+            index: route.index,
+            caseSensitive: route.caseSensitive,
+            module: resolveUrl(key),
+            imports: resolveImports(output.imports),
+            hasAction: sourceExports.includes("action"),
+            hasLoader: sourceExports.includes("loader"),
+            hasCatchBoundary: sourceExports.includes("CatchBoundary"),
+            hasErrorBoundary: sourceExports.includes("ErrorBoundary")
+          };
+        }
+      }
     }
   }

diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index d9637fb..3a52f08 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 267db7e..c9f7861 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
@@ -36,13 +36,10 @@ var path__namespace = /*#__PURE__*/_interopNamespace(path);

 const loaders = {
   ".aac": "file",
-  ".avif": "file",
   ".css": "file",
   ".eot": "file",
   ".flac": "file",
   ".gif": "file",
-  ".gql": "text",
-  ".graphql": "text",
   ".ico": "file",
   ".jpeg": "file",
   ".jpg": "file",
@@ -68,8 +65,7 @@ const loaders = {
   ".webmanifest": "file",
   ".webp": "file",
   ".woff": "file",
-  ".woff2": "file",
-  ".zip": "file"
+  ".woff2": "file"
 };
 function getLoaderForFile(file) {
   let ext = path__namespace.extname(file);
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index e73e834..85a0cc3 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index de2be25..24061de 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index ed4befe..26fdbb7 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 5aa58bd..bfbacbb 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 07b03f2..e17905b 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 73194c8..b5fbd7d 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index ecd2ad8..e2456b3 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index bc13acf..431fab6 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index f10aa30..0d3d4de 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>new file mode 100644
index 0000000..44af7fb
--- /dev/null
+++<EMAIL_ADDRESS>@@ -0,0 +1,3 @@
+// eslint-disable-next-line import/no-extraneous-dependencies
+import * as React from "react";
+export { React };
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 3361cd9..8efc4ea 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 71bfc95..ddb3b51 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 3443787..8a4c2ca 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 74903dc..5f82e4b 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index c2c6f97..270e588 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 73e3760..6ad2f54 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 050af27..c80ac49 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 4924d80..58392b5 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
@@ -13,7 +13,6 @@
 Object.defineProperty(exports, '__esModule', { value: true });

 var path = require('path');
-var url = require('url');
 var fse = require('fs-extra');
 var getPort = require('get-port');
 var routes = require('./config/routes.js');
@@ -63,23 +62,9 @@ async function readConfig(remixRoot, serverMode = serverModes.ServerMode.Product
   let appConfig = {};

   if (configFile) {
-    let appConfigModule;
-
     try {
-      var _appConfigModule;
-
-      // shout out to next
-      // https://github.com/vercel/next.js/blob/b15a976e11bf1dc867c241a4c1734757427d609c/packages/next/server/config.ts#L748-L765
-      if (process.env.NODE_ENV === "test") {
-        // dynamic import does not currently work inside of vm which
-        // jest relies on so we fall back to require for this case
-        // https://github.com/nodejs/node/issues/35889
-        appConfigModule = require(configFile);
-      } else {
-        appConfigModule = await import(url.pathToFileURL(configFile).href);
-      }
-
-      appConfig = ((_appConfigModule = appConfigModule) === null || _appConfigModule === void 0 ? void 0 : _appConfigModule.default) || appConfigModule;
+      let appConfigModule = await import(configFile);
+      appConfig = (appConfigModule === null || appConfigModule === void 0 ? void 0 : appConfigModule.default) || appConfig;
     } catch (error) {
       throw new Error(`Error loading Remix config at ${configFile}\n${String(error)}`);
     }
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index e1ebeeb..b0b3ccd 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index f87306e..b375c5d 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -44,6 +44,12 @@ export interface DefineRouteOptions {
      * Should be `true` if this is an index route that does not allow child routes.
      */
     index?: boolean;
+    /**
+     * An optional unique id string for this route, that will be appended to the file
+     * name e.g: `<file-name>--<id>`. Use this if you need to aggregate two or more
+     * routes with the same route file.
+     */
+    id?: string;
 }
 interface DefineRouteChildren {
     (): void;
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 5bf6165..6efd7e9 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
@@ -65,11 +65,12 @@ function defineRoutes(callback) {
       options = optionsOrChildren || {};
     }

+    let fileId = createRouteId(file);
     let route = {
       path: path ? path : undefined,
       index: options.index ? true : undefined,
       caseSensitive: options.caseSensitive ? true : undefined,
-      id: createRouteId(file),
+      id: options.id ? `${fileId}--${options.id}` : fileId,
       parentId: parentRoutes.length > 0 ? parentRoutes[parentRoutes.length - 1].id : undefined,
       file
     };
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 53b70c2..9f72532 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 0148352..fc7fc5c 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 94604b6..28ddc5f 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index ee5da6d..1417091 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index edf22a0..03dd14b 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 74628e0..2261c3f 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,5 +1,5 @@
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 87516fe..4bc9a62 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -3,10 +3,6 @@ declare module "*.aac" {
     let asset: string;
     export default asset;
 }
-declare module "*.avif" {
-    let asset: string;
-    export default asset;
-}
 declare module "*.css" {
     let asset: string;
     export default asset;
@@ -23,14 +19,6 @@ declare module "*.gif" {
     let asset: string;
     export default asset;
 }
-declare module "*.gql" {
-    let asset: string;
-    export default asset;
-}
-declare module "*.graphql" {
-    let asset: string;
-    export default asset;
-}
 declare module "*.jpeg" {
     let asset: string;
     export default asset;
@@ -73,10 +61,6 @@ declare module "*.png" {
     let asset: string;
     export default asset;
 }
-declare module "*.sql" {
-    let asset: string;
-    export default asset;
-}
 declare module "*.svg" {
     let asset: string;
     export default asset;
@@ -109,7 +93,3 @@ declare module "*.webmanifest" {
     let asset: string;
     export default asset;
 }
-declare module "*.zip" {
-    let asset: string;
-    export default asset;
-}
diff --git<EMAIL_ADDRESS><EMAIL_ADDRESS>index 062a341..8c5c44d 100644
---<EMAIL_ADDRESS>+++<EMAIL_ADDRESS>@@ -1,6 +1,6 @@
 #!/usr/bin/env node
 /**
- * @remix-run/dev v1.7.0
+ * @remix-run/dev v1.6.7
  *
  * Copyright (c) Remix Software Inc.
  *

@runmoore The third parameter to the route function is a callback where you can define your child routes. Looks like if you're using the { id } options, then the callback is the fourth parameter.
routes(defineRoutes) {
    return defineRoutes((route) => {
      route('/vols', 'routes/flights.tsx', { id: 'flights-fr-fr' }, () => {... child routes }});
    });
  },

@kiliman like this? I've tested it locally, and it works, but the nested routing is really confusing me.
routes(defineRoutes) {
    return defineRoutes((route) => {
      route(
        '/vols', 'routes/flights.tsx', { id: 'flights-root-fr-fr' },
        () => {
          route('/vols', 'routes/flights/index.tsx', { id: 'flights-fr-fr' });
          route('/vols/a-propos', 'routes/flights/about/index.tsx', { id: 'flights-about-fr-fr' },
          );
        },
      );
    });
  },

Thanks @kiliman, this is very useful, especially about the undocumented index: true. I have more questions, and to avoid derailling this PR, i've started a discussion on discord https://discord.com/channels/770287896669978684/1025080466488954914/1025080466488954914

Perhaps docs is the blocker here? Maybe a commented example as part of https://remix.run/docs/en/v1/api/conventions#routes would help?

Hi @AndrewLeedham I really don't know whey this new feature/fix didn't got the "appeal" that deserves (IMHO).
I was thinking to write some docs update, but I don't even know if "core teams" likes my changes and if they think that is the right way to apply multiple routes solution, so I will wait a little more before work on this again.

Hey folks - sorry we are busy with some other things at the moment, but I think we were waiting on the change to remove the ${fileId}--${options.id} logic based on this discussion? Can we get that updated to use the id verbatim, and then start throwing an error if a user manually specifies duplicate ids? And some tests to assert that behavior would be great too!

Hi @brophdawg11 🤘
Changing the id logic it's really easy to do here, but I was wait for you and @jacob-ebey to indicates me what's the better place to put this Error throwing/duplicate check, maybe in packages/remix-dev/config/routes.ts or in packages/remix-dev/compiler/assets.ts?
throw new Error(...) or invariant call when found some dupe?

Hey folks - sorry we are busy with some other things at the moment, but I think we were waiting on the change to remove the ${fileId}--${options.id} logic based on this discussion? Can we get that updated to use the id verbatim, and then start throwing an error if a user manually specifies duplicate ids? And some tests to assert that behavior would be great too!

Hi @brophdawg11 🤘
Changing the id logic it's really easy to do here, but I was wait for you and @jacob-ebey to indicates me what's the better place to put this Error throwing/duplicate check, maybe in packages/remix-dev/config/routes.ts or in packages/remix-dev/compiler/assets.ts?
throw new Error(...) or invariant call when found some dupe?

I would have thought something like:
    if (options.id && options.id in routes) {
      throw new Error(
        `You tried to define a route with id "${options.id}" but one already exists. ` +
          "Custom route ids must be unique"
      );
    }

in packages/remix-dev/config/routes.ts would make sense, as from what I can tell that is run before assets, so would always throw at runtime.

@lucasferreira I'd say error as early as possible, which should be in defineRoutes.  That's where we'd inadvertently overwrite previous routes via routes[route.id] = route 👍

@lucasferreira I'd say error as early as possible, which should be in defineRoutes. That's where we'd inadvertently overwrite previous routes via routes[route.id] = route 👍

Hi @brophdawg11 and @AndrewLeedham ,
I followed the indicated instructions here in my last commit, now the custom ID it's 100% customizable and we are checking for dupes inside routes.ts. I have also written some tests to check this error catch in case that some duplicate route are set.
But now we have some conflict in assets.ts file, as I could see something changed in this file in the last commits, something about the getRouteModuleExportsCached, but I couldn't solve this conflict cause we don't have automatic merge available.
@brophdawg11 could you help us in that?

@lucasferreira I'd say error as early as possible, which should be in defineRoutes. That's where we'd inadvertently overwrite previous routes via routes[route.id] = route 👍

Hi @brophdawg11 and @AndrewLeedham ,
I followed the indicated instructions here in my last commit, now the custom ID it's 100% customizable and we are checking for dupes inside routes.ts. I have also written some tests to check this error catch in case that some duplicate route are set.
But now we have some conflict in assets.ts file, as I could see something changed in this file in the last commits, something about the getRouteModuleExportsCached, but I couldn't solve this conflict cause we don't have automatic merge available.
@brophdawg11 could you help us in that?

Could you add remix as an upstream remote locally and do a git merge or rebase?

Could you add remix as an upstream remote locally and do a git merge or rebase?

Hi @AndrewLeedham I really don't know how to do that 😫
I'm working only in my fork in dev branch, is it easy to find how to do this rebase thing? I'm not git expert =/

Hi @lucasferreira. I would usually do this from the command-line, if you are using a GUI tool there may be a way to do it there. The command-line way is as follows:

Add remix as a remote, you can call it what you want "upstream" is a convention:git remote add upstream https://github.com/remix-run/remix

Then pull the git information for the remote:git fetch upstream

Finally either merge or rebase the remote dev branch into your branch:

Mergegit merge upstream/dev

Rebasegit rebase upstream/dev

Hope that helps :)

That's was more easy than expected! Thank you very much @AndrewLeedham!

Hi @brophdawg11 anything left for me to do here and help this PR?

@lucasferreira Do you mind adding a changeset?  There are instructions in https://github.com/remix-run/remix/pull/3970#issuecomment-1209910225 but the gist of it is run yarn changeset, choose your changed packages (@remix-run/dev), and then choose a minor bump since this is new functionality.  Then commit and push the added changeset file.  Thanks!

@lucasferreira Do you mind adding a changeset? There are instructions in #3970 (comment) but the gist of it is run yarn changeset, choose your changed packages (@remix-run/dev), and then choose a minor bump since this is new functionality. Then commit and push the added changeset file. Thanks!

Done!

Thanks @lucasferreira!

Thanks for your work on this @lucasferreira!
Is there an ETA for when this'll be released?

@constantincerdan Probably next week, or the one after it.
patch-package is your friend until then!


unable to create linked service through Azure CLI

This is autogenerated. Please review and update as needed.
Describe the bug
Command Name
az synapse linked-service create
Errors:
The command failed with an unexpected error. Here is the traceback:
string indices must be integers
Traceback (most recent call last):
  File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\knack/cli.py", line 231, in invoke
  File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 658, in execute
  File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 721, in _run_jobs_serially
  File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 692, in _run_job
  File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/__init__.py", line 328, in __call__
  File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/core/commands/command_operation.py", line 121, in handler
  File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure/cli/command_modules/synapse/manual/operations/artifacts.py", line 36, in create_or_update_linked_service
TypeError: string indices must be integers

To Reproduce:
Steps to reproduce the behavior. Note that argument values have been redacted, as they may contain sensitive information.

Put any pre-requisite steps here...
az synapse linked-service create --name LS_dakeyvault --file "'C:\Project\SynGitTest0\linkedService\LS_dakeyvault.json'" --workspace-name edap-d-syn

The file contained a simple key vault linked service:
{
"name": "LS_dakeyvault",
"properties": {
"annotations": [],
"type": "AzureKeyVault",
"typeProperties": {
"baseUrl": "https://edap-d-kv.vault.azure.net/"
}
}
}
Note: I placed both single and double quote around the file name.
I was trying to fix quoting issue:

az synapse linked-service create --name LS_dakeyvault --file "C:\Project\SynGitTest0\linkedService\LS_dakeyvault.json" --workspace-name %synName%
Failed to parse JSON: C:\Project\SynGitTest0\linkedService\LS_dakeyvault.json
Error detail: Expecting value: line 1 column 1 (char 0)
The JSON may have been parsed by the shell. See https://docs.microsoft.com/cli/azure/use-cli-effectively#quoting-issues

Expected Behavior
Environment Summary
Dev/Test subscription
Windows-10-10.0.18362-SP0
Python 3.8.9
Installer: MSI
azure-cli 2.31.0
Extensions:
arcdata 1.1.2
databricks 0.7.3
interactive 0.4.5
## Additional Context

<!--Please don't remove this:-->
<!--auto-generated-->

Adding service team to help.

Hi @dejan-shuki , could you please add "@" at the front of the path?
for example: --file @"C:\Project\SynGitTest0\linkedService\LS_dakeyvault.json"
Here is the related doc: https://github.com/Azure/azure-cli/blob/dev/doc/quoting-issues-with-powershell.md#best-practice-use-file-input-for-json
cc: @kevinzz6

That worked. Thank you.


[INFRA] ensure build_docs_pdf CircleCI job runs last

follow up #433, which was apparently not sufficient. :disappointed:
With this PR we ensure that build_docs_pdf runs only when all other jobs have successfully finished AND the current branch is master.
@franklin-feingold can we get this in despite your opening of #435 ?

This will make it hard to check PRs intended to improve the PDF.

Thanks for the catch. The filter for master branch only is actually not necessary.
The branch to get the artifact from can be specified in the link as an appendix (see the ?branch=master):
https://circleci.com/api/v1.1/project/github/bids-standard/bids-specification/1957/artifacts/0/bids-spec.pdf?branch=master

Isn't the 1957 specifying the build number?

Isn't the 1957 specifying the build number?

exactly. And with this PR I want to ensure that build_docs_pdf is always the last job run on circleCI ... so that we can replace 1957 with latest.
Then the link will be stable / work everytime (except for the times that circleCI is actively running on master, which it is rarely doing)

Got it. Thanks for putting up with my slowness. Can you add a comment to the config to explain why it depends on all other jobs? Otherwise we'll have to dig through the git-blame and find this discussion.

The link is working as expected now :-)
https://circleci.com/api/v1.1/project/github/bids-standard/bids-specification/latest/artifacts/0/bids-spec.pdf?branch=master


TextGrid file isn't according to spec

Could you check if .textgrid file produced is according to spec?
i'm using this https://github.com/nltk/nltk_contrib/blob/95d1806e2f4e89e960b76a685b1fba2eaa7d5142/nltk_contrib/textgrid.py to test generated textgrid files.

Hi we use praatio to save the textgrid. In most cases it should not give any problems.
I have tested the textgrid files using Praat. They can be opened and shows up normally.
What are the error messages?

Yes, you're correct. I initially used Textgrid(file) method which results in error. After using .load(file) method everything is fine. Though I wonder why lab files (created using KALDI) are showing timestamps in ms, and praat in seconds?

I think the time stamp by Kaldi might not be in ms. It looks like the number of samples to me. Maybe you can verify this by dividing it by the sampling rate to see if it's the case. If this is ms, the sounds are way too long.

Cheers, I'll check your suggestion.


Enhancement - Command Options in greeting message

Cc: @adamcogan @ravidhaduk

Hi @jimmidier
Pain
When I am using SophieBot I want to be able to see popular queries I can run from within SophieBot
Suggested Solution
When I say "help" and SophieBot gives me a welcome message, it should have an option to see popular questions.
Tasks

[ ] Implement "See popular questions"

More Information

N/A
Screenshots

Figure: Add "See popular questions" here
Thanks!

Updated this issue to better detail the problem and focus on see popular. There is another issue for see all #429


Enable interactionSource functionality

In the snippet below, mousing over the button alters the border of the row, but mousing over the RichTextEditor does not.
fun App() {
    var text by remember { mutableStateOf("Hello, World!") }
    val state = rememberRichTextState()
    val interactionSource = remember { MutableInteractionSource() }
    val isHover = interactionSource.collectIsHoveredAsState()
    val modifier =
        if (isHover.value) Modifier.border(2.dp, Color.Red) else Modifier.border(1.dp, Color.Black)
    Row(
        modifier = modifier.padding(20.dp)
    ) {
        Button(interactionSource = interactionSource, onClick = { }) {
            Text("Here.")
        }
        RichTextEditor(state, interactionSource = interactionSource)
    }
}

My actual use case is more complex than that just changing the border, but that's the stand-in. The point is, I can't figure out a way to tell if the pointer has entered the RichTextEditor. I also trying using the opt-in onPointerEvent, and that did not work, either.
Any ideas on how to get this behavior?
Thanks, Mohamed, it's a great control, and for a Compose noob it's quite handy. Cheers -- GeePawHill

In fact, it's the noob who couldn't get onPointerEvent doing the right thing.  Got it all working, and then realized I needed it on the Row not the editor in any case.
Apologies for wasting everybody's time. -- GeePawHill


Color tag in RichTextLabel doesn't color the first character if not at the beginning of a line.

Godot version:
4.0 master branch https://github.com/godotengine/godot/commit/dc038bd7c30e50a94f844a485e7f89f0bab0d4cf
OS/device including version:
Windows 10
Issue description:
Color tag in RichTextLabel doesn't color the first character unless if the word is is at the beginning of a new line.

As you can see, Y is the only first character which is well colored in 4.0.
It's a regression cause everything is OK in 3.2.4 RC5
If we add a carriage return before color tags, the first word of each line is well colored.
Steps to reproduce:

Setup a RichtextLabel with bbcode enable and set text as :
[color=yellow]Yellow[/color][color=red]Red[/color][color=green]Green[/color][color=blue]Blue[/color]

Minimal reproduction project:
bbcode_color.zip

This can be seen in the editor help too.

Yes, RichTextLabel is used in the HelpBit tooltip. That's the way I found this bug.

Regression from #45899, if (offset > p_position) ⇒ if (offset >= p_position) change.


Binary & Library Data Sharing

The library here will be a simple .so file using redhook (https://crates.io/crates/redhook) with LD_PRELOAD like we saw done with https://github.com/mmanciop/opentelemetry-injector but now the question is how do we know when the extension's SSM parameter fetch is done so we can share the response data for the replacement ENV variables?
Initial research shows this is promising. https://github.com/servo/ipc-channel

https://docs.rs/inotify/latest/inotify/

Other options:

https://crates.io/crates/inotify
https://crates.io/crates/notify
https://crates.io/crates/ipmpsc
https://crates.io/crates/interprocess
https://crates.io/crates/shared_memory

https://crates.io/crates/signal-hook
https://crates.io/crates/futures-signals
https://crates.io/crates/signalbool

https://crates.io/crates/nix


A strange potential memory leak

I use this lib with protobuf. Then I found a sharp memory usage increase. Hence I traced stack and saw some strange huge string instances which I never used explicitly in mscorlib.dll
I'm trying to figure out how to upload screenshot

My browser f**ks.
This is my stack trace results

After debuging, I found that if I commented out the crc32 line, memory usage would be normal.
Byte array that passed to that function was about 60MB.

The function only does one simple thing: to put crc32 at the end of byte[].

I tried to write a smallest case, but failed, the case worked fine (there was a sharpe increase, but GC quickly released the memory). That's pretty strange.

Can you post here the body of the ComputeCRC32CAndWriteToEnd(byte[]) method?

public void ComputeCRC32CAndWriteToEnd(byte[] src)
{
if (src.Length <= 4)
{
return;
}
uint a = Crc32C.Crc32CAlgorithm.Compute(src, 0, src.Length - 4);
byte[] b = BitConverter.GetBytes(a);
src[src.Length - 4] = b[0];
src[src.Length - 3] = b[1];
src[src.Length - 2] = b[2];
src[src.Length - 1] = b[3];
return;
}

The native C++ code doesn't do any memory allocation. The only possible source of the leak is the P/Invoke code, but I fail to see how can this code leak memory. Per fixed statement docs, the memory is pinned only during execution of the fixed statement. Once the fixed statement completes, it is eligible for garbage collection.
Are you sure this memory leak is not just an artefact of garbage collector? Did you try to run GC.Collect(), perhaps even setting LargeObjectHeapCompactionMode to CompactOnce beforehand?

I did use multi threads in my code for netowrk io, the crc32 method was called just before socket.send method. And the byte[] was kept in a message object ( which was hold in a syncd queue) and released by another thread after server replied.
When I wrote the smallest case. I first used single thread and found no memory leak. Then I copied the multi threads case, there seemed to be memory leak, the memory increased and quickly collected by GC.
I am confused now.

I used system.threading, is that the problem?

Threading is not a problem for Crc32C library. It can be safely called from multiple threads.
Since you say the memory is later reclaimed by GC, I believe this is either a GC artefact or a buffering somewhere in your program, likely in the networking layer. I am closing the issue.

Thank you.
But I am wondering if it is a normal case that the memory usage for a 60M byte[] pushed to 1G+? If I use it for a 1G byte[] ( which is very likely in the future), dose it mean that I will encounter out of memory problem?

Crc32C.NET itself isn't causing the problem. It might be heap fragmentation, artefact of pinning (which Crc32C has to do), artefact of special handling of large objects in .NET's GC, buffering at several levels (app, .NET Framework, OS), or some GC peculiarity.
One last thing you could try is to use SafeProxy (copy it to your sources), which is a managed-only implementation of CRC32-C.

OK, I will try you suggestions.
At first, I was confused by the 4 large string objects(300M+). I could not find them anywhere in my code. GC.collect() didn't kill them. So I was very concerned about my memory usage. Perhaps I should use somthing to walk around.


Fix type error in doc comment

Found this minor error while reading the docs.

@evancz Can you please check? This error is still present on master..

Thanks for the fix! I was not keeping track of issues on unreleased packages for the sake of focus, but now seems like a better time!


Device enumeration

Hi,
I know it's stated in the readme that this isn't supported, but I wonder if it may be possible to implement it under a feature level (such as device_enumeration) to still keep the library small for those who don't need it.  Being able to switch between devices is something that is quite common.

That should relatively easy to add, I'm currently don't have time for this though.