S3 + HTTP/2: "duplicate" header

Describe the bug
The bug occurs when S3 signatures are used in combination with HTTP/2. This (IIRC) is currently not possible with AWS S3, but some other vendors or custom implementation may run into this.
The combination produces the special :authority: HTTP/2 pseudo-header as well as the Host header. Some server or middleware implementation don't like that, e.g. Nginx will return a "bad request" and emit the log (here the host was localhost:9999:
client sent duplicate host header: "host: localhost:9999", previous value: "host: localhost:9999" while reading client request headers, client: <IP_ADDRESS>, server: , host: "localhost:9999"

Note that the header is not really duplicate. It's likely that Nginx internally renames :authority to Host and then trips over it. Also see https://trac.nginx.org/nginx/ticket/2268 .
To Reproduce
use object_store::{
    aws::AmazonS3Builder,
    ClientOptions,
};

let store = AmazonS3Builder::new()
    .with_client_options(
        ClientOptions::new()
        .with_http2_only()
     )
    .with_region(...)
    .with_access_key_id(...)
    .with_secret_access_key(...)
    .build()
    .unwrap();

store.get(...).await.unwrap();

Expected behavior

Additional context
I think the culprit is this bit here:
https://github.com/apache/arrow-rs/blob/97ae9d778b5f1d1fcc0c7beb91b2b1a6ed741194/object_store/src/aws/credential.rs#L157-L159
Of course one could argue that reqwest or h2 should de-duplicate the headers properly.

Maybe related to https://github.com/seanmonstar/reqwest/issues/1809

Of course one could argue that reqwest or h2 should de-duplicate the headers properly.

There was a PR to automatically remove the host header on a library level, but it was rejected because it is legal to send both the Host and :authority headers, and could because of a proxy forwarding a HTTP/1.1 request.
The spec just says they may not differ.
However, it is unnecessary for a client to send both headers.
It looks like it would be trivial for arrow-rs to fix this issue. 😄

So I would summarize this like this:
object_store operates within the spec, but the behavior is somewhat uncommon. Nginx rejects that behavior, even though it is explicitly allowed by the spec. Nginx also provides some evidence that object_store is somewhat weird, because many people use nginx w/ HTTP/2 and the bug on their side is still open, so this doesn't seem to be a super pressing issue for them.
We COULD make object_store more friendly (move it from uncommon to common behavior within the spec), but ultimately it's nginx that has to fix their stuff.

There was a https://github.com/hyperium/h2/pull/679, but it was rejected because it is legal to send both the Host and :authority headers, and could because of a proxy forwarding a HTTP/1.1 request.

So if a HTTP/2 proxy has a HTTP/1.1 upstream does it not convert the pseudo header (:authority:) into its HTTP/1.1 counterpart (Host)? That seems like an oversight in the spec.

Hi, I submitted this issue to reqwest and finally chose to implement a workaround in https://github.com/apache/opendal/pull/2956. Perhaps this will be helpful for object_store to adopt as well.


Posts didn't show up after changing PDS domain

Describe the bug

I suspect there's a bug in the Bluesky app when a custom PDS changes its domain name.
I was running a custom PDS on bsky.juanlu.space, everything was working well.
At some point I decided to change the domain name, so I added a DSN A record pds.juanlu.space pointing to the same IP, changed the Caddyfile and pds.env, restarted the service. I was able to log in and browse the network, so for a few days I thought everything had worked fine.
However, at some point I found out that my posts weren't being shown. I would refresh my profile page and see nothing.
I started digging. The POST /xrpc/com.atproto.repo.createRecord was returning a valid record with "validationStatus":"valid". The /xrpc/com.atproto.sync.subscribeRepos WebSocket was showing my new posts. And yet, new posts weren't showing in the app.
I also noticed that the app wasn't able to retrieve my avatar. But the avatar for old posts was showing fine.
I am not a TypeScript coder nor ATProto expert so it would have taken me a while to debug this without assistance. So I decided to revert to the last working configuration hoping that I hadn't broken anything.
I changed the DNS back to bsky.juanlu.space, reverted the configs, restarted the service, and the app caught up with all the posts that I had written. So now everything is back to normal.
To Reproduce
(see above)
Expected behavior
Everything should continue as normal even after changing the domain name.
But maybe this is either (b) an improper expectation because $cryptography or whatever or (c) I did miss some config that I should have changed, so error was between chair and keyboard. Happy to dig a bit more with some assistance (I'm fine using my own account as guinea pig).
Screenshots

Details

Platform: Firefox on desktop Linux Mint
Platform version: 130.0
App version: Build version: 1.91.1; Bundle info: 49ab486 (prod); Bundle date: 24092017; Platform: web

Additional context

this migration guide

To clarify:
The "old pds" steps would need to be done with the config on the previous domain, and the "new pds" step is after changing the domain?? (Since technically, it's all the same PDS so there isn't an old and new in this use case...)

yeah old and new PDS refers to the same PDS in this case, since we just want to update the location of the PDS

All set, I did only the steps from your screenshot and it fixed my posting issue. Of course I had to login first 🥇 .

For anyone tuning in to this issue, there's now an easier way of doing it via https://boat.kelinci.net/plc-applicator
When you login, you want to make sure that it's pointing at the new PDS hostname, and then you can either edit it yourself or click on "Use PDS recommendation" to get the correct one.

This worked perfectly, first time ✔ Thanks @mary-ext! The devs can keep this issue open or close it as they wish


Error on yarn start: ERR_PACKAGE_PATH_NOT_EXPORTED

I checked out the code and tried to run it on the following revision and yarn version:
$ git rev-parse --short HEAD
5bcaa225
$ yarn --version
1.22.19
$ node --version
v17.9.0

I ran yarn to install the dependencies and everything worked fine. When I do yarn start I see the following error and the server fails to start:
$ yarn start
yarn run v1.22.19
$ react-scripts start
node:internal/modules/cjs/loader:488
      throw e;
      ^

Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './lib/tokenize' is not defined by "exports" in /home/alex/code/excalidraw/node_modules/postcss-safe-parser/node_modules/postcss/package.json
    at new NodeError (node:internal/errors:372:5)
    at throwExportsNotFound (node:internal/modules/esm/resolve:440:9)
    at packageExportsResolve (node:internal/modules/esm/resolve:719:3)
    at resolveExports (node:internal/modules/cjs/loader:482:36)
    at Function.Module._findPath (node:internal/modules/cjs/loader:522:31)
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:919:27)
    at Function.Module._load (node:internal/modules/cjs/loader:778:27)
    at Module.require (node:internal/modules/cjs/loader:999:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Object.<anonymous> (/home/alex/code/excalidraw/node_modules/postcss-safe-parser/lib/safe-parser.js:1:17) {
  code: 'ERR_PACKAGE_PATH_NOT_EXPORTED'
}

Node.js v17.9.0

How can I fix this and launch excalidraw locally?

@alexflint does this happen on master as well or just the specific commit ?

yarn --version 1.22.19
node --version v18.3.0
In the Master Branch，The same problem

I have a feeling it might be related to node version, can you try with node version 14 ?
I am hoping it should work fine using up to version 16 as well, need to check.

I have same error with you,  but after I run 'yarn upgrade',  then 'yarn start', it work fine.

Same here with Node.js v18.9.0.
Also after running yarn upgrade, then yarn start works.

In the latest version just released, the same problem also occurs (Nodejs 19.0.0), solved using yarn upgrade.


use CRD defaults

We should use CRD defaults to highlight what Non Admin objects default values are.
This would also fix problem around updating Non Admin object spec after velero object is created, so users can see the default values used (the fix for this is in Velero repository).
Similar issue with more details https://github.com/openshift/oadp-operator/issues/1557

Velero repository fix would need MutatingWebhookConfiguration, as default values are not static. But that would not give NAC the solution for free, as that would not be a marker in Velero object types
Example
User can change default TTL
https://github.com/vmware-tanzu/velero/blob/f02613d2f7a7cfbf687f84d1deac7414d679569e/pkg/cmd/server/config/config.go#L37
in CLI
https://github.com/vmware-tanzu/velero/blob/f02613d2f7a7cfbf687f84d1deac7414d679569e/pkg/cmd/server/config/config.go#L241
Possible fix
Try to automate the collecting of defaults applied by Velero
https://github.com/vmware-tanzu/velero/blob/f02613d2f7a7cfbf687f84d1deac7414d679569e/pkg/controller/backup_controller.go#L324
and apply them to NAC objects though our own MutatingWebhookConfiguration


State checking for ports

We recently had a power outage, which caused a lot of ports to reset on a dell switch.
To fix it, I ran node_detach_network then node_connect_network.
What happened was very disconcerting - HIL/the switch connected the native VLAN I had requested, but then added all other VLANs as tagged!
I'm thinking that to prevent this scenario and also to advertise to anyone manually managing the switch, we could add some integrity checking by having a string in the "description" field that says something like Managed by HIL <stamp>, where stamp would be something like a date stamp or other monotonically-increasing integer. When doing operations, the stamp would first be examined and compared to the last stamp recorded in the DB for that port. If they don't match, reset_port() (#683) could be called.
What do folks think?

Yeah, this is a serious problem.
We definitely need to persist the changes to the switch. This probably in concert with committing to the database.
The integrity checking you describe could be per-driver, but I don't know how I feel about it. We really ought to notify an administrator if we discover inconsistencies, since even if we're able to fix the problem, there's the possibility of "damage done," which should be responded to.

#688 is to have HIL write the config to flash.
One other thought that came up in our HIL discussion today was that if HIL detected an anomaly on one port, it could go ahead and revert() all of the ports on that switch. Revert() should be an inert operation in the usual case.

Good point on notifications!

Also, right now drivers are required to implement a function that fetches the running state on the switch, which we currently only use in the test suite. We could use that to do integrety checking of the whole switch on HIL startup.
Observation: while I think it's more likely in the event of an inconsistency for the switch to be "wrong," we should consider the possibility that something has gone wrong with the API server/database. Perhaps the right response to an inconsistency is to just shut off the port and notify an administrator; we should always favor failing-safe.

Notifying the admin would need to be a part of a monitoring infrastructure, which we currently don't have.
One thing I could foresee would be to have a check_port(), which validated that a port was in the configuration that HIL thought it should be. A script could call this on all ports periodically, and thus act as a sort of monitoring agent.


[WIP] Support training ppo with prm

This PR is trying to support PRM within the ppo training.
The main idea is

Reconstruct the Samples by spliting the response with prm_step_separator.
Convert the reward sent from remote prm into list[torch.Tensor] where the reward is added to the end of the step.
Change the reward (r) into 2 types, one for wandb upload (experience.info["reward"]), the other for actual training (experience.reward) and make the reward_fn return both of them.

Known issues:

Only support one remote PRM at the moment.
Only support when packing samples is on, but it shouldn't be hard to implement the padding version.

Thank you for your time on reviewing this PR:)

This design is too complex, especially with generate_stepped_samples and reward_fn. We shouldn't create a solution that forcefully incorporates PRM.


Ers cli commands

Description
Changes proposed in this pull request:

ERS cli command instance with file source

Related issue(s)

/test pre-main-control-plane-reconciler-e2e-latest-release


Julia Language Version

Add a Julia language version.

Implemented. Standard disclaimer: more optimization and testing may be necessary, but it does appear to work. Will close this ticket and open new tickets for any future improvements.


Fix example

Related — Placeholder behaviour only works as intended if you're using a schema, not if you're using a table name:
placeholders = %{blob: "a bunch of text"}

entries = [
  %{title: "v1", body: {:placeholder, :blob}},
  %{title: "v2", body: {:placeholder, :blob}}
]

# So this works ...
Repo.insert_all(Post, entries, placeholders: placeholders)

# But this doesn't.
Repo.insert_all("posts", entries, placeholders: placeholders)

In the latter case, it expects placeholders to be in the format {:placeholder, n} where n is an integer, and maps that field to $n in the query.  The placeholders: ... option appears to be completely ignored, so there doesn't seem to be an easy way to actually ensure that $n points to the value you want.
Is this intended behaviour?  If so, we should probably mention this in the docs.

:green_heart: :blue_heart: :purple_heart: :yellow_heart: :heart:

@wisq good call, it has been fixed in master!


[Bug] Inaccurate transfer progress if stage contains over 10k files

If I want to push the data related to specific stage, and the amount of files is large (300k in my case), then the transfer progress information for this push action is completely inaccurate.
<snip>
Transferring:
 * aa/e4fa778a8ea6034ae3d…b82b5a70abfe5039840882:100% /1.118Ki, 0/s, -
 * ab/f4b05fcb08267584853…680644bb53668c3b33e0cd:100% /6.201Ki, 0/s, -
 * b0/f97f9061ee33de721e2…fc1ebd94cb0dd3c6524760:100% /59.624Ki, 0/s, -
 * 80/f76e715c125a9a3b55f…8ed83437119d4c0466d17b:100% /894, 0/s, -
 * d0/0e98564e078a7d9c659…d1bafbecd91ff6352bc654:100% /752, 0/s, -
 * 7e/ff372b4414cb15e31d0…345d3d0ef1b37205d7aacc:100% /1.873Ki, 0/s, -
 * 97/f8f1369e6a983073bc4…b7e3a7e4b3b6ce0ab64307:100% /3.560Ki, 0/s, -
 * 90/f5513a9d6084a1314db…d86d80e33a6bf0f0a00b8e:100% /3.381Ki, 0/s, -
 * a0/f55bc8ea261a9b049d1…07b088d763a69b0fc7eddb:100% /702, 0/s, -
Transferred:   	  832.843 MiB / 862.690 MiB, 97%, 3.586 MiB/s, ETA 8s
Transferred:       247662 / 257810, 96%
Elapsed time:      3m36.3s
<snip>
Transferring:
 * a3/ff63ff4bf6b485f5551…cc2e1666dc2129158d07e6:100% /8.901Ki, 0/s, -
 * d8/1a990cfcb35f2bff419…a6eaffb9d5ed08e50b7eb9:100% /1.095Ki, 0/s, -
 * c6/f32e35d7eeb66513438…6acee49bb83ba3ed923535:100% /11.438Ki, 0/s, -
 * ee/149da6970692cb68771…08f67a369271c0d5634cca:100% /3.667Ki, 0/s, -
 * b8/f9544e4f7c311eb9132…bcf1db9da99b4ae327cf2f:100% /4.257Ki, 0/s, -
 * f0/0f9e72be846edc351a6…e51642ee0b6154e5b03fcd:100% /1.117Ki, 0/s, -
 * f1/0ef6bb3baf3642eea25…ba25ccc20b2e1fb1e28262:100% /931, 0/s, -
 * cf/20edb90b93c881c1359…93fd88b7333d495bfb7e6f:100% /15.273Ki, 0/s, -
 * a3/ff79e8e9c7562f52379…310cbc374760ae9afd5242:100% /12.558Ki, 0/s, -
Transferred:   	  853.257 MiB / 885.016 MiB, 96%, 3.542 MiB/s, ETA 8s
Transferred:       254577 / 264725, 96%
Elapsed time:      3m42.3s
<snip>
Transferred:   	  864.101 MiB / 895.826 MiB, 96%, 3.524 MiB/s, ETA 9s
Transferred:       258052 / 268200, 96%
Elapsed time:      3m45.3s
Transferring:
 * f1/1fd9a805cf4689b57f6…82620f61c9e4965d31af42:100% /813, 0/s, -
 * fc/1fa145540991044aaf1…434eeaa3e1dccb6534de93:100% /41.541Ki, 0/s, -
 * e1/2bd8e7896d4d4b016dd…92238cd2ccbcefebd8f83c:100% /8.086Ki, 0/s, -
 * f8/1ea580e6d30b923d2c3…ee0fd6df8e649cec99d9e9:100% /2.988Ki, 0/s, -
 * ef/20f52658199c53b09c8…750cf946f974fdda3374c2:100% /11.309Ki, 0/s, -
 * d7/2cdd81143aa1bd21b48…07f9548488e524c9f32d5c:100% /1.049Ki, 0/s, -
 * f3/20f967eb8a49aa19893…e29608138968994402ac19:100% /3.308Ki, 0/s, -
 * ec/2643f3b49eb0581f71c…c2bd90828650f78b6737c5:100% /5.374Ki, 0/s, -
 * e0/2626f3c57c58f2fd2b6…d239b2791dd8a57cd2129e:100% /8.854Ki, 0/s, -
Transferred:   	  865.789 MiB / 897.596 MiB, 96%, 3.548 MiB/s, ETA 8s
Transferred:       258651 / 268799, 96%
Elapsed time:      3m45.8s
Transferring:
 * d7/2f287499dd65ef93887…fd665d43cd8cac9c36b2a6:100% /707, 0/s, -
 * e5/2cf4112b969e22ecd0c…2b1d3c5efd45aacc8edfe4:100% /3.327Ki, 0/s, -
 * d6/2c89121671c1a23e430…9dbb75dd79b9f00e876b56:100% /766, 0/s, -
 * f9/23dea56f958b4eb8be6…3d25e82ca54ae6e582179d:100% /745, 0/s, -
 * df/2a34d16300932ff0172…7d32d4729c2d3d0f365e27:100% /1.936Ki, 0/s, -
 * fb/244876bafb23705ccd1…38ff5d583b8cc77dbac813:100% /1.283Ki, 0/s, -
 * d4/31a342d2b66c1c3ed7b…e79562e7d5b1e358d9becc:100% /9.561Ki, 0/s, -
 * f2/212ecc9dceaec6d19f7…32210a7154b777ca28e83f:100% /1.438Ki, 0/s, -
 * fc/217dbc44fa9154f7c14…2f97e0f8276933aacac99e:100% /1.386Ki, 0/s, -
Transferred:   	  867.746 MiB / 899.325 MiB, 96%, 3.548 MiB/s, ETA 8s
Transferred:       259245 / 269393, 96%
Elapsed time:      3m46.3s
Transferring:
 * f2/249cac050ec27ba49cb…d3b32d21a304764cdf3d21:100% /1.358Ki, 0/s, -
 * d9/309cf1c1342065db362…4cb8beaf1de7ba9112d5e8:100% /1.282Ki, 0/s, -
 * db/3352be2f73bda2968ef…8a8ef9bd47140196ce7186:100% /795, 0/s, -
 * d7/31b21e668783d2fe99c…bb484c8e70810ebfacc9b7:100% /941, 0/s, -
 * d2/30d50fac5c9b428301d…6e9af5046e9f8d89071951:100% /830, 0/s, -
 * e2/2f07357c3049d65bcc8…9e8a0f913134a3e4344a16:100% /1.578Ki, 0/s, -
 * f3/263cd490adc507988b1…cbb5abd0002c287c59f4f3:100% /3.791Ki, 0/s, -
 * e7/28f08d76749fe11f3d7…9be4e11b9a1b9622ea35d4:100% /962, 0/s, -
 * f1/25d846051fa18f96b9e…6b3c29a952fd25a36a60f1:100% /1.076Ki, 0/s, -
Transferred:   	 1012.506 MiB / 1012.506 MiB, 100%, 3.579 MiB/s, ETA 0s
Transferred:       305901 / 305901, 100%
Elapsed time:      4m26.6s
Fixing permissions   305901 / 305901

Dud constantly reports an ETA of some amount of sec, but you can clearly see the elapsed time is way longer than the ETA. Some investigation leads me to believe this is an issue with the transfer progress in rclone, which by default only checks 10k files ahead at any give time: https://forum.rclone.org/t/progress-shows-incorrect-total-size-to-be-transferred/8686/3
setting RCLONE_MAX_BACKLOG=400000 dud push fixes the progress to text to be reasonably accurate. As now the progress will look ahead 400k files and thus know exactly which files need to be synched and how long this is probably going to take.
Considering dud knows exactly how many files are related to a stage, maybe it makes sense to set the max-backlog rclone parameter to this value by default?

Thanks for opening the issue, @veriditin!
You are correct that this behavior is entirely from rclone. As the creator of rclone mentions in that forum post, the default is set to conserve memory. Apart from that, I cannot be precisely sure what the ramifications are when overriding rclone's max backlog. In general I want to avoid attempts at choosing optimal rclone settings for Dud, as Nick and the rclone community have spent countless hours picking a sensible default configuration. For this reason, I will closing this issue as "not planned" for now.
That said: In my opinion, the best way to handle this would be #170. It appears there was some movement on this in rclone earlier in the year, so here's hoping we get a solution that Dud can work with soon.


Preview gets stuck on loading screen

When using the @next version of the CLI, running a preview w `dcl start, it never gets past the loading screen:

This is now done by 6.4.7


FigureWidget() update

Hi, very useful project, all my career I dream about such thing. It seems that it can make plotly usable in real life, not only in the iris dataset.
Is there a way to dynamic update the resampled FigureWidget instance? For example, in the Jupyter lab:

The last cell causes an update of the data in the chart if fig is an FigureWidget instance, but does not update if the instance is a FigureResampler(go.FigureWidget())
Test case:
import numpy as np
from plotly_resampler import FigureResampler

x = np.arange(1_000_000)
noisy_sin = (3 + np.sin(x / 15000) + np.random.randn(len(x)) / 10) * x / 1_000

fig = FigureResampler(go.FigureWidget())
fig.add_scattergl(name='noisy sine', showlegend=True, x=x, y=noisy_sin)

fig.update_layout(autosize=True, height=300, template=None, legend=dict(x=0.1, y=1, orientation="h"),
                  margin=dict(l=45, r=15, b=20, t=30, pad=3))
fig.show()

# does not update chart if fig is FigureResampler instance
with fig.batch_update():
    fig.data[0].y = -fig.data[0].y

PS: It seems that resampling only works in dash, but not in jupyterlab?

Hi @zxweed
Thank your for the nice words!
I see you are asking two things here;
a) How to have dynamic resampling with plotly-resampler
b) How to update the graph data
a) How to have dynamic resampling with plotly-resampler
To use plotly-resampler, one should perform 2 steps; https://predict-idlab.github.io/plotly-resampler/getting_started.html#how-to-use

wrap the plotly Figure with FigureResampler
call .show_dash() on the Figure

You did step 1 correctly, but called .show instead of .show_dash. If you do not perform step 2, no dynamic resampling will happen (as no underlying dahs app will get started)
PS: plotly-resampler works in jupyterlab as well. You should then call .show_dash(mode="inline") :blush:
import numpy as np; import plotly.graph_objects as go
from plotly_resampler import FigureResampler

x = np.arange(1_000_000)
noisy_sin = (3 + np.sin(x / 15000) + np.random.randn(len(x)) / 10) * x / 1_000

# Step 1
fig = FigureResampler(go.FigureWidget())
fig.add_scattergl(name='noisy sine', showlegend=True, x=x, y=noisy_sin)

fig.update_layout(autosize=True, height=300, template=None, legend=dict(x=0.1, y=1, orientation="h"),
                  margin=dict(l=45, r=15, b=20, t=30, pad=3))
# Step 2
fig.show_dash(mode='inline')  # visualizes the chart inline in your notebook

b) How to update the graph data
As for now, the large high-frequency sequence data is stored in a private variable hf_data. Just had a discussion with @jonasvdd  about this, and we could support such an update by exposing the hf_data via a property. A future PR will tackle this issue.
Hope this answer already helps you!
Cheers,
Jeroen

Question b) is tackled in PR #46

Is it really necessary to use dash server in Jupyter-only environment? For example, I can't open additional port 8050 on the server, only 8888 is available. After all, the FigureWidget has its own event handlers, on which you can hook your fast resamplers:

internal.resample.ipynb.zip
How hard is it to implement?

Oh, I think I get what you mean! That is a very interesting suggestion :smiley:
I'll look into it and will keep you posted in this thread, @jonasvdd also sees the potential of supporting FigureWidget as such no port forwarding is required for the end-users (in Jupyter)
Thanks for your input!

@zxweed, very good issue!!
I think it is feasible to implement and has a high-relevance!
However, I will need to break my head about how to implement this without losing too backward compatibility & still having clean code. Will further look into it next week!
(fyi: at the end of this week, we will release a new version #46  which makes our aggregators faster and memory efficient 2x speedup) 🔥

see #47 🙏🏼

Thanks, I checked in jupyter lab and notebook - works as it should, you make plotly great again :)
The parameters hf_x and hf_y are not yet available through fig.data? They cannot be changed dynamically?

Hi @zxweed, to adjust these data properties use the hf_data property!
see: https://predict-idlab.github.io/plotly-resampler/getting_started.html#dynamically-adjusting-the-scatter-data

Yes, thank you, but my chart doesn't update after I change the data - I need to explicitly press some button to do that:

plotly.resampler.test.zip

@jonasvdd, should I call some method to update the graph explicitly after changing the hf_data property?

Hi @zxweed, we have a solution for your issue! will create a new release for this!

You will indeed have to call an additional method, i.e. reset_axes on your FigureWidgetResampler

@zxweed  version 0.6.1 has the desired functionality i.e., FigureWidgetResampler.reset_axes and/or FigureWidgetResampler.reload_data

Hi @zxweed
@jonasvdd created the v0.6.2 release, I suspect that he created this release from the #52 branch (which is most likely not branched from the latest version of the main branch).
We will look into it, to avoid such behavior in the next release!
Jeroen

Hi @jvdd,
Thank you for your fast answer.
I am working in pycharm and I use FigureWidgetResampler since I wanna avoid dash involvement.
In my current implementation I produce plots dynamically from a list.
Everytime I click on an option in the list, the frond-end makes an ajax call to the back-end. Then, until today with plotly I was giving the plot back as an ajax response, adding it in a div. Now, I use your method that way. I receive the resampled plot. But when I zoom it doesn't resamples.
Example:
Frond-end -> ajax call to the back-end. In a view:
...
fig = FigureWidgetResampler(go.Figure())
fig.add_trace(go.Scattergl(name='noisy sine', showlegend=True), hf_x=x, hf_y=noisy_sin)
plot_div = plot(fig, output_type='div')
...
Backe-end -> sends the plot_div as a response to the ajax call and I add it in a div.

@zxweed, again, good catch, thanks for telling us! Just deployed 0.6.3 should be fixed now! 😃

Hi @thanosam
I believe I discovered why no resampling occurs.
I think you use the plotly.offline.plot() function, which creates a standalone HTML. Therefore, (I think) there is no connection with the IPython environment that is required for your FigureWidgetResampler or your back-end dash application when using FigureResampler.
If possible, I would advise to check whether you can ingest the figure without using plotly.offline.plot so that the figure is not a standalone html but still connected to either your IPython environment (when using FigureWidgetResampler) or a dash backend (when using FigureResampler).
Hope this helps!

Hi jvdd,
Thank you for your response. Indeed I need to use the offline version. I need to have it as an html in my response in order to change it dynamically. With this implementation there isn't something I could do?
Thanks

Hi @thanosam,
I do not think there is a way to add callbacks to plotly.offline plots.
If you want adaptive resampling in your application I would suggest to use dash (as such you can have callbacks, and define your figure using plotly dash-html-componets).
More info on how you can integrate plotly-resampler in a dash application;

our dash-app examples
the docs about dash-app integration

Cheers

Hi @jvdd ,
I am developing my app in Django and I use django-plotly-dash library for the plots. I was wondering is the plotly-resampler compatible with the django-plotly-dash library? If yes, how?


fix typo

one of he work horses of Data Mining --> one of the work horses of Data Mining

Thanks!


Remove paket.restore.cached

Description
For us, the paket.restore.cached file mostly caused trouble so far. As it was silently introduced, it was accidentally added to git by a few developers. Recently, we had a problem where Paket updated the cache file, but the packages folder contained an outdated file. Sometimes, Visual Studio moves files from the packages folder and they are not restored, as the cache file says everything is ok.
paket restore --force downloads all files again, which is not what we want either, but in favor of stable builds, we prefer to have the dependencies extracted at each build instead of chasing bugs due to a failed cache invalidation.
Suggestion

Add a parameter to skip the paket.restore.cached file

Remove the file completely

I assume it is just the performance benefit that is expected from this, right? Or does the file help to prevent other problems as well?
Known workarounds
Our workaround is to delete the paket.restore.cached file on every build

it wasn't silently introduced, we tried to explain it on all channels ;-)
yes it's a performance optimization and so far it works very well. To my knowledge there are no open bug reports. The biggest issue we see is that people commit the file instead of gitignoring it.
I don't think removing the file is a good idea because then new SDK/.NET Core restores will take forever.
@matthid The question is: should "manual paket restore" use the file or not. I believe it only makes sense to use it from "dotnet restore" context!?

yes, I know it was not completely silent, from the devs perspective it was suddenly there and then committed due to lack of better knowledge. So I am sorry I sounded so accusational, that was not my intention :)
The argument of .Net Core is a good one, as the number of dependencies horribly grows and it sounds like that's the reason why it was introduced. I can't offer any reproduction, but we have been chasing a bug this whole morning where to packages folder was not properly restored, but the cache and lock files were in sync.
For us, a parameter that would allow to skip the log file would be sufficient.

that was the first problem, but right now it was not committed, but locally for one dev the packages folder was not restored, but the paket.restore.cached file and the paket.lock were in sync, leaving us with strange and hard to trace build errors

have it in paket-files is not enough? that dir should be .gitignored anyway

@enricosada: that's two different things... before the file was introduced, there was no paket-files folder. After it was introduced, we added it to .gitignore. The main problem though is, that the paket.restore.cached file seems to have been writen when the restore was not successful, i.e. Visual Studio was not letting go some assemblies. The latter problem is why I started this discussion, as it results in sítuations that are hard to analyze.

@forki I don't see anything in the documentation about the paket-files folder or paket.restore.cached. Should that entire folder be included in .gitignore? Or just paket.restore.cached? Either way, documentation about what they do and how they are handled would be great.

the whole paket-files folder belongs into gitignore. I'd love to see a PR
to the FAQ which explains that
Am Do., 7. Juni 2018 um 21:03 Uhr schrieb rabrahamOpti <
<EMAIL_ADDRESS>
@forki https://github.com/forki I don't see anything in the
documentation https://fsprojects.github.io/Paket/ about the paket-files
folder or paket.restore.cached. Should that entire folder be included in
.gitignore? Or just paket.restore.cached? Either way, documentation about
what they do and how they are handled would be great.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/fsprojects/Paket/issues/3060#issuecomment-395530299,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AADgNFfij9Gbh82SYFZZ7-pEhsGT0fisks5t6Xj-gaJpZM4SL2IH
.

wen now automatically exclude paket.restore.cached


WIP: remove React's FC type from codebase

Hey, I just made a Pull Request!
Still WIP. This PR removes usage of React's FC type from codebase. More details can be found here #3440
Regarding the cases, when component has children, I decided to go with PropsWithChildren, since it is already used in multiple place in the codebase
I decided to go folder by folder, to have some kind of progress status.

[x] contrib
[x] docs
[x] packages - currently being worked on
[x] plugins

:heavy_check_mark: Checklist

[ ] A changeset describing the change and affected packages. (more info)
[ ] Added or updated documentation
[ ] Tests for new functionality and regression tests for bug fixes
[ ] Screenshots attached (for UI changes)

Thanks for doing this! Let us know when it is ready for review. I think it may make sense fix these in multiple PRs, otherwise I think we will risk a lot of merge conflicts.

Hey @stefanalund, sorry it took so long. I actually finished changing the code, but was procrastinating merging the master branch (expecting a lot of conflicts), and decided to finish it after I saw your comment. Surprisingly, there were no conflicts. I will add the change set and fix the failing tests later today, but I think PR is already good to be reviewed

I'm quite lost, not sure what is failing this time. Maybe somebody can point to why some of the tests are failing?

  Missing a type dependency: @types/prop-types
  Move from dependencies to devDependencies: @types/react

For these, you mostly have to just do what it says - it's a test that makes sure that your imports are what they need to be. The first one tells you to add a dependency to a specific package.json. The second one tells you to move something from dependencies to devDependencies in a specific package.json.
export const DenseTable = ({ users: DenseTableProps }) => {

This is just a syntax error to TypeScript. A common little mistake, you put the type in the destructuring. You need to make it
export const DenseTable = ({ users }: { users: DenseTableProps }) => {

The left side is "the javascript part", and the right side is "the type declaration explaining the types in the javascript part".

Hey @freben, thanks for clarifying. I was confused by the first error, missing dependency etc, since I didn't add any new dependencies, and just changed import of FC to import of PropsWithChildren, so it's strange that it is failing here, but not in the master branch for example. Or am I missing something?
For the second error, I just missed it, and will fix it quickly

I didn't look into exactly why that particular one changed, but it happens. When a type no longer is "visible" to somebody that imports any part of your package, it no longer needs to be in the regular dependencies.


Feature(icons): search + broken chain

Add search
Add broken chain

@Netnix You should update the README.md to add your new icons in it.


Fix docs of PUPPETDB_JAVA_ARGS

https://github.com/voxpupuli/container-puppetdb/blob/ed9df5e104ab7db175d746b51cc27634021ff7af/puppetdb/Dockerfile#L33

CI failed because of github not handing out ci secrets to fork-PRs. will merge this anyways.


Advanced DevTools Guide

Low Priority, but there may be some useful stuff here, for both CSS and JS.

Can you write something concrete, not just advanced X guide? Please do that every time, or I’ll be just closing the issues.

‘normal’ breakpoints & stepping
DOM & event listener breakpoints

Yeah, sorry


Implement some unit test, which have to run on any merge to dev.

These test have to ensure, that the dev branch is always green and working. Failed test should result in further commit stops, until the branch is back on green.

I had hoped to make a kind of test that would run the slideshow with a standard size and save a portion of the screen (using pi3d.masked_screenshot()) For comparison with a standard array of pixels. Unfortunately, in order for masked_screenshot() to work, for some reason, I have to call it within the ViewerDisplay.slideshow_is_running() method. So that involves a whole lot of code inserted to trigger the capture (i.e. either an additional method argument or a class property to trigger the capture with something in Controller to set that and something in start to set that, also to stop Controller a short time afterwards.) All a bit messy.
But what I have done is make three versions of AlleExif.JPG one 960x600 and two 480x600 which total 300k then a configuration_test.yaml also in the test folder. In the parent folder to ./test I made a little file run_test.py
import os
from picframe import start
os.system("rm ./test/pictureframe.db3")
start.main()

i.e. just do a visual check that it seems to be running OK, so I'm not sure it's much better than running on whatever setup we already have.

Helge, I've pushed some changes up to the wiki: changed the instructions for Pi 4 for the time being.

If you're done, I will release PictureFrame


"You cannot chain the constructor"...

... is possible since PHP 5.4+
(new Foo())->xyz();

This is true. Closing because it's not an issue :)

But an issue in your documentation :)
Nothing really important though

Updated the readme.


add webhook interceptors [GH-5]

In ngbalk's issue, dynamically adding a date or an id to the webhook body would be great. This gets trickiers because the id I may want to post back is the same id the initial request came with. This means I'd want to have access to the ServeEvent object for more context. Thinking ahead, we may also want to add an Authorization header. So to handle all of these varying use cases, I think it's easiest to expose an interceptor for folks to have a more dynamic webhook.

I've pushed a release now (v1.0.0) so that should be on Maven Central in a few hours.


background noise removal using CellBender

review why important: https://genomebiology.biomedcentral.com/articles/10.1186/s13059-023-02978-x
published in Nature Methods: https://www.nature.com/articles/s41592-023-01943-7
e.g., CellBender https://cellbender.readthedocs.io/en/latest/

alternative SoupX

https://cran.r-project.org/web/packages/SoupX/vignettes/pbmcTutorial.html
https://github.com/constantAmateur/SoupX


Test/issue 104

tests #104
Description
Adds new integration tests in regards to PR #104 by adding a new Env to test against in CI
Checklist

[x] I have signed the CLA
[x] I have run this code in development and it appears to resolve the stated issue
[x] This PR includes tests, or tests are not required/relevant for this PR
[x] I have updated the CHANGELOG.md and added information about my change to the "dbt-bigquery next" section.

Can this be closed, now that https://github.com/dbt-labs/dbt-bigquery/pull/108 has been merged?


maintain(test): Email handler

Q
A

Bug fix?
yes

New feature?
no

BC breaks?
no

Deprecations?
no

Fixed tickets
no

Message config form and subject now have a default value, because code expects string

Test coverage 81%


SASS-2302 - Create How much tax did your pension provider pay? page

Description
Pensions annual allowance - Create 'How much tax did your pension provider pay? 'page
SASS-2302
Checklist PR Reviewer
Before Reviewing

[ ]  Have you pulled the branch down?
[x]  Have you assigned yourself to the PR?
[x]  Have you moved the task to “in review” on JIRA?
[ ]  Have you checked to ensure all dependencies are up to date?
[ ]  Have you checked to ensure its been rebased against the current version of main?

Whilst Reviewing

[ ]  Have you run the tests?
[ ]  Have you run the journey tests?
[ ]  Have you looked at the JIRA story to make sure all Acceptance Criteria has been met?

After Reviewing

[ ]  Have you checked for merge conflicts or any changes in the current main that may affect the current pull request? i.e. does it need another rebase?
[ ]  Have you checked to make sure there are no builds in the pipeline before you merge?
[ ]  Have you moved the task to “in pipeline” on Jira?

[x]  Have you rebased against the current version of main?
[x]  Have you checked code coverage isn’t lower than previously?

After PRs been raised

[ ]  Have you checked the PR Builder passes?

uk.gov.hmrc: bootstrap-frontend-play-28 could be bumped to 5.21.0
uk.gov.hmrc: bootstrap-test-play-28 could be bumped to 5.21.0 also.
There are some other dependencies that could be bumped but they might have breaking changes


feat(taiko-client): new URL pattern support for endpoints

For endpoints like:

https://sub.domain.tld/apikey//eth
https://sub.domain.tld/apikey//eth_beacon

The use of outdated version(taiko-client-v0.23.0) causes problems.
It works fine in latest version.


Fix : The "Installation" field.

Fix the required node version in the "Installation" field.
The current Commando should require node v12.0.0 or higher, but it was v8.0.0, so we added a fix.

As Commando will not support v13 and v12 is becoming deprecated, it will be closed as an unneeded PR.


analytics: optionally duplicate to InfluxDB

[x] Have you followed the guidelines in our Contributing document?
[ ] Have you checked to ensure there aren't other open Pull Requests for the same change?
[x] Have you added an explanation of what your changes do and why you'd like us to include them?
[ ] Have you written new tests for your changes? Here's an example.
[ ] Have you successfully run brew style with your changes locally?
[ ] Have you successfully run brew typecheck with your changes locally?
[ ] Have you successfully run brew tests with your changes locally?

Starting the work that was open for GSoC but is not part of GSoC
Closes https://github.com/Homebrew/gsoc/issues/46
TODO:

[ ] Reading analytics
[x] Guard with Environment variable
[ ] Send metrics to InfluxData for review
[x] Merge install and install_on_request metrics
[x] Check hosting with https://console.cloud.google.com/marketplace/details/influxdata-public/cloud2-gcp-marketplace-prod

Review period will end on 2022-06-01 at 16:05:13 UTC.

Review period ended.

The brew domain didn't work for me, we'll have to see if the paid version allows custom domains but otherwise I think we're stuck on the current one.

The brew domain didn't work for me, we'll have to see if the paid version allows custom domains but otherwise I think we're stuck on the current one.

@SMillerDev This would be a hard blocker on full adoption from me, I'm afraid 😭. I can help when this PR is a bit further along, though.
A suggestion here would be to gate this functionality behind HOMEBREW_NEW_ANALYTICS_TESTING=1 (or something) and then this could be merged and tested before it's ready to be fully rolled out.

This would be a hard blocker on full adoption from me, I'm afraid 😭.

Why would using an external domain for analytics be a blocker for you? Isn't the same situation we have now?

A suggestion here would be to gate this functionality behind HOMEBREW_NEW_ANALYTICS_TESTING=1 (or something) and then this could be merged and tested before it's ready to be fully rolled out.

That's fine by me

Why would using an external domain for analytics be a blocker for you?

This is not just an external domain but one specific to a particular cloud provider and region.

Isn't the same situation we have now?

We're self-hosting afterwards which means I want to set a higher standard for any future migrations.

We're self-hosting afterwards which means I want to set a higher standard for any future migrations.

The current implementation isn't actually self-hosted. It's using InfluxDB Cloud (DBaaS).

The current implementation isn't actually self-hosted. It's using InfluxDB Cloud (DBaaS).

Cool. Let's get in touch with them and see what they can do for custom domains. What's the pricing like there?

The pricing is here: https://www.influxdata.com/influxdb-cloud-pricing/

@SMillerDev Thanks! May want to see if the "annual plan" is better and will need to watch our cardinality.

Still awaiting a conversation with @MikeMcQuaid  and influxdb

@MikeMcQuaid actually forgot to update here. But we also can't do a vanity domain if we setup through Google Cloud. That would only be available if we self-host which I'd like to avoid. Most of the other TODO items are now done.

Should analytics report being Linuxbrew on Linux? I thought it was all Homebrew now?

Should analytics report being Linuxbrew on Linux? I thought it was all Homebrew now?

Yes, all Homebrew and a single analytics "bucket" with differing OS would be ideal.

@MikeMcQuaid any suggestions what I can do about the timeouts?

@SMillerDev For now: ignore them. Are you ready to merge as-is? If so: I can do it manually.


Update Pages “pestinspectionsPage”

Automatically generated by Netlify CMS

👷 Deploy Preview for chic-shortbread-66a66b processing.

Name
Link

🔨 Latest commit
f7c1222a2c997534eb98e068448e6b57b041dc51

🔍 Latest deploy log
https://app.netlify.com/sites/chic-shortbread-66a66b/deploys/6551548cc373e1000844588f


Rework contact solver and collision detection, implement speculative collision

Objective
Note: This is for the avian branch, which will later be pushed to main.
Bevy XPBD currently uses Extended Position-Based Dynamics for its solver. While it has worked quite well, it does have several issues:

Solving deep overlap is very energetic and explosive.
Position-based constraints often have high-frequency oscillation where bodies are always slightly moving back-and-forth. XPBD rarely (if ever) reaches a truly stable and relaxed state without sleeping.
A ton of substeps are needed for minimizing jitter and making systems of bodies stable.
Friction is typically not quite as robust as it is with impulse-based methods. There are several ways of handling it, some better than others, but it can still have some issues.
Many features can be more challenging to implement and expose APIs for, and there are fewer learning resources and references for the usage of XPBD in game physics.

Additionally, XPBD even has some potential legal ambiguities, see #346.
Aside from XPBD itself, there are also several other issues with the current collisions and rigid body dynamics:

Narrow phase collision detection is run at every substep instead of just once per frame like most physics engines. This can be very bad for performance.
There is no support for any kind of Continuous Collision Detection, so tunneling can be a big issue.
It is not possible to configure the behavior of collisions aside from the number of substeps.
#224
Sleeping in 0.4 just doesn't work.

These are big issues, and I don't currently see XPBD as the best option for the contact solver going forward. Extensive rewrites and fixes are needed.
Solution
This PR consists of three major parts:

Rewrite the contact solver to use an impulse-based TGS Soft solver instead of XPBD.
Rework the narrow phase and other collision detection logic.
Implement speculative collision, a form of Continuous Collision Detection.

They all relate to each other, and are covered in detail below.
Substepped Impulse-Based Solver With Soft Constraints
The contact solver has been rewritten to use TGS Soft, a substepped impulse-based solver using soft constraints. The choice was largely motivated by the wonderful Erin Catto's Solver2D experiments, where TGS Soft was deemed as quite a clear winner.
Box2D V3 was used as the primary inspiration for the core implementation of the new solver. Engines such as Rapier and Bepu also use a very similar approach.
Terminology

Projected Gauss-Seidel (PGS): The classic iterative approach to solving constraints (contacts and joints) using the Gauss-Seidel numerical method. Reframed by Erin Catto as Sequential Impulses.
Temporal Gauss-Seidel (TGS): Same as PGS, but prefers substepping over iteration, running more simulation steps with smaller time steps rather than simply iteratively solving constraints. Substeps tend to be more effective than iterations, as shown in the Small Steps in Physics Simulation paper by Macklin et al.
Baumgarte stabilization: When solving contact constraints using impulses, boost the impulses using a bias to account for overlap and actually push the bodies apart.
Soft constraints: Similar to Baumgarte stabilization, but more stable and controlled. Based on the harmonic oscillator, soft constraints dampen constraint responses, and can be tuned intuitively with a frequency and damping ratio.
Warm starting: Store the constraint impulses from the previous frame and initialize the solver by applying them at the start of the current frame. This helps the solver converge on the solution faster, and is especially helpful when objects are coming to rest.
Relaxation: Baumgarte stabilization and soft constraints can add unwanted energy. Relaxation helps remove it by solving constraints a second time, but without a bias.

Please refer to the Solver2D post for a more complete overview of what TGS and soft constraints are, how they work, and how they relate to other approaches.
Solver Overview
As stated earlier, contacts use TGS Soft. However, joints still currently use XPBD, so the new solver is actually a kind of hybrid solver. I do plan on transitioning joints away from XPBD in the future though.
Below is a high-level overview of the new structure of the solver.

Broad phase collision detection collects potential collision pairs into BroadCollisionPairs.
Narrow phase collision detection computes contacts for the pairs and adds them to Collisions.
A ContactConstraint is generated for each contact manifold, and added to ContactConstraints.
Substepping loop, running SubstepCount times.

Integrate velocities, applying gravity and external forces.
Warm start the solver.
Solve velocity constraints with bias (soft constraints).
Integrate positions, moving bodies based on their velocities.
Relax velocities by solving constraints again, but without bias.
Solve XPBD constraints (joints) and perform XPBD velocity projection.

Apply restitution as a post-phase.
Finalize positions by applying AccumulatedTranslation.
Store contact impulses for next frame's warm starting.

Refer to the code for implementation details. The contact logic and constraints are quite heavily commented and should hopefully be relatively easy to follow.
New Solver Results
Collisions have significantly less drift than before, and performance is much better. Below is a pyramid with a base of 64 boxes, simulated with 4 substeps, with sleeping disabled.
Old: XPBD has substantial drift, and the pyramid quickly collapses in on itself. This even happens with a much larger number of substeps, although to a slightly lesser degree. Performance is very poor, even with just 4 substeps.
https://github.com/Jondolf/bevy_xpbd/assets/57632562/ca0ff2f5-dfad-4395-a662-be41cdd7bfcf
New: With TGS Soft, the pyramid stays stable. There is a very small amount of drift over a long period of time, but even that can be mitigated by configuring the contact behavior through the SolverConfig and/or by adding more substeps.
https://github.com/Jondolf/bevy_xpbd/assets/57632562/a4a48e95-d8e9-459e-bfbb-26d0d12bb8ac
Impulses even out and stabilize much better with TGS Soft, even with deep overlap. In overlapping cases, the old XPBD implementation was significantly more explosive. Below is an example where colliders are dynamically enlarged to fill up a container.
Old: With XPBD, overlap causes explosions even before the shapes fill the container. Once they do fill the container, they jitter very strongly and explode through the walls. This is typically very undesirable for games.
https://github.com/Jondolf/bevy_xpbd/assets/57632562/e2d47c7e-b03a-45a7-93f9-8c5909564af0
New: Overlap is solved perfectly smoothly with no explosions. The contact impulses even out without jitter. With no space to go, the shapes prioritize stability over perfectly hard contacts that would cause explosiveness.
https://github.com/Jondolf/bevy_xpbd/assets/57632562/78f3d158-42a1-4841-b68d-3a6e3e06e451
An important thing to note is that the new solver uses several tolerances and thresholds that are length-based. The old solver also had some tolerances, but now they are much more important for stability.
Without any tuning, a 2D game using pixels as length units might have collision issues, because the tolerances would be wrong for that application.  To fix this, there is a new PhysicsLengthUnit resource, which can be thought of as a kind of pixels-per-meter conversion factor. It is only for scaling the internal tolerances (and debug rendering gizmos!) however, and doesn't scale objects or velocities in any way.
PhysicsLengthUnit can be easily set when adding PhysicsPlugins for an app:
fn main() {
    App::new()
        .add_plugins((
            DefaultPlugins,
            // A 2D game with 20 pixels per meter
            PhysicsPlugins::default().with_length_unit(20.0),
        ))
        .run();
}

And with that, we get the stability and behavior we expect:

Collision Detection Refactor
The narrow phase and the PostProcessCollisions schedule are now run in the PhysicsSchedule instead of the SubstepSchedule. This greatly improves performance, and also makes collision events and reacting to collisions less awkward and footgunny: previously, the contact data was always from the last substep, but at that point, the contact is often already mostly resolved.
Moving narrow phase collision detection out of the substepping loop is possible by simply storing contact data in local space and computing the updated separation distance at each substep using the current poses of the bodies. This way, the contact data is (approximately) accurate even with the bodies moving relative to each other within substeps.
A few other improvements have been made as well:

The narrow phase logic has been extracted into a NarrowPhase system parameter.
The broad phase now outputs intersection pairs with the entities in ascending order instead of based on the minimum X extent. This fixes issues where bodies moving past each other on the X axis counts as a separate collision, causing problems with collision events.
#224 is fixed.
The warnings logged for overlapping bodies have less false alarms.

Speculative Collision
Tunneling is a phenomenon where fast-moving small objects can pass through thin geometry such as walls due to collision detection being run at discrete time steps:

Moving the narrow phase out of the substepping loop has the unfortunate consequence that it increases the risk of tunneling as collisions are not computed as frequently. A solution for this is needed before we commit to the narrow phase change.
One of the primary solutions to tunneling is Continuous Collision Detection. There are two common forms:

Sweep-based CCD: Each collider with CCD enabled is swept from the current position to the predicted one (or from the previous position to the current one). If a hit is detected, the bodies are moved to the time of impact. Contact resolution can be left to the next frame, or to avoid "time loss", performed immediately with a substepping scheme that can also consider secondary collisions.
Speculative CCD: Contact points are predicted by the narrow phase for fast-moving objects before they actually touch. Speculative collision response is handled by pushing back the part of velocity that would cause penetration.

Sweep-based CCD can be much more expensive and more complex, especially with substepping and non-linear sweeps. Speculative collision on the other hand is very cheap while still being quite robust, although in rare cases it can miss collisions or cause ghost collisions.
The new solver implements speculative collision, which is enabled for all bodies by default. In my experiments, this is efficient, improves stability, and eliminates almost all tunneling except when caused by contact softness. This approach seems to also be taken by both Bepu and Box2D.
Below is a high-level overview of how speculative collision is currently implemented.

The speculative margin is the maximum distance at which a collision pair generates speculative contacts. This is unbounded for every rigid body by default, which eliminates almost all tunneling.
Each AABB is expanded in the movement direction based on the body's velocity, clamped by the speculative margin if it is bounded. (Box2D might have a way to avoid this expansion, but I haven't looked into it yet)
The effective speculative margin is the actual margin used for contact computation, and it is clamped based on the velocities. This is used as the maximum separation distance for contact / closest point computation.
When actually solving the contact (normal part, no friction), use the softness parameters only if the contact is penetrating. Otherwise it is speculative, and we bias the impulse to cancel out the velocity that would cause penetration.
Apply restitution in a separate phase after the substepping loop.

From a user's point of view, this happens completely in the background. However, if desired, the speculative margin can be configured for an entity using the SpeculativeMargin component, or even globally using default_speculative_margin in NarrowPhaseConfig.
Below is an example of balls being shot at high speeds at thin walls and spinning objects, with just a single substep to eliminate the effect of substepping. The simulation is paused and stepped manually a few times to closer see the behavior.
Old: Almost all of the balls simply pass through the thin geometry. With more substeps, this tunneling could been reduced, but never removed completely. Increasing the substep count would also hurt performance.
https://github.com/Jondolf/bevy_xpbd/assets/57632562/03f9f623-0c5f-4228-a913-29bfaad23dc4
New: The balls never tunnel straight through the walls, and often even hit the spinning objects. You can still see many balls phasing through the walls, but this is mostly due to contact softness, in cases where a body hits another body hard enough to force it through the wall.
https://github.com/Jondolf/bevy_xpbd/assets/57632562/70526783-762a-452c-87fd-fe23789560f9
Of course, bodies getting pushed through the ground by other bodies is still an issue. This could be reduced in the future by solving contacts against static objects after dynamic-dynamic contacts, giving them higher priority and stiffness. This is follow-up material however, and cases where this is an issue should be quite rare in games.
Sweep-based CCD will also be added as an option in a follow-up. I already have an implementation ready locally.
Other Changes
This is such a big rework that it is unfortunately almost impossible to cover every change. Below are some noteworthy changes however.
Sleeping Rework

Sleeping in 0.4 was broken, and bodies never fell asleep properly. This has been fixed.
Bodies now store a PhysicsChangeTicks component. This is used to detect what component changes are made by the user outside of physics schedules, and what changes are made by the physics engine. This way, we can ignore changes made by the physics engine and have more control over when bodies are woken up.
For now, bodies can only sleep when they are not in contact with other dynamic bodies. This is because the current per-body sleeping approach is quite buggy and has stability issues. In the future, I plan on implementing simulation islands and doing per-island sleeping like most other physics engines.

Integrator Rework

Velocity integration and position integration now run in separate systems and in different parts of the schedule: IntegrationSet::Velocity and IntegrationSet::Position. This is needed for the new solver.
The semi-implicit Euler integration scheme now has its own module with proper docs and tests.
Integration uses par_iter_mut.

Scheduling Changes

PhysicsStepSet now has First and Last variants, so users can easily schedule systems before or after physics in the PhysicsSchedule.
The narrow phase and the PostProcessCollisions schedule are now run in PhysicsStepSet::NarrowPhase instead of SubstepSet::NarrowPhase.
Integration is now run in IntegrationSet::Velocity and IntegrationSet::Position instead of SubstepSet::Integrate.
SubstepSet has been removed.

The solver runs in PhysicsStepSet::Solver.
The solver's system sets are in SolverSet.
Substepping is performed in SolverSet::Substep.
The substepping loop's system sets are in SubstepSolverSet.

New Configuration Options

NarrowPhaseConfig has new default_speculative_margin and contact_tolerance properties.
The new SolverConfig resource can be used for tuning collisions.
The new PhysicsLengthUnit resource can be used as a scaling factor for internal length-based tolrances.

Existing length-based tolerances and thresholds are now scaled by this, like the linear property of SleepThreshold.
Debug rendering is also scaled by the length unit.

Examples

XpbdExamplePlugin has been renamed to ExampleCommonPlugin, and it no longer adds PhysicsPlugins automatically.
2D examples have PhysicsLengthUnit configured.
The one_way_platform example's logic has been modified to account for PostProcessCollisions no longer running in the SubstepSchedule.
The collision logic for the kinematic character controller examples has been rewritten to run in the PhysicsSchedule without jitter or stability issues.

Miscallaneous

ColliderAabb now has the grow and shrink methods.
ContactData now stores feature IDs for contact matching, which is needed for warm starting.
ContactData property index has been removed.
3D tangent impulses are now 2D vectors instead of scalar values.

Migration Guide
New Contact Solver
The contact solver has been rewritten. In practice, this has the following effects:

Collisions should be much more stable.
Resolving overlap is no longer nearly as explosive.
Less substeps are generally needed for stability.
Tunneling is much more rare.
Performance is better.

However:

Contacts may even be too soft by default for some applications. This can be tuned with the SolverConfig.
Static friction is currently not considered separately from dynamic friction. This may be fixed in the future.
Restitution might not be quite as perfect in some instances (this is a tradeoff for speculative collision to avoid tunneling).
2D applications may need to configure the PhysicsLengthUnit to get the best stability and behavior.

The PhysicsLengthUnit can be thought of a pixels-per-meter scaling factor for the engine's internal length-based tolerances and thresholds, such as the maximum speed at which overlap is resolved, or the speed threshold for allowing bodies to sleep. It does not scale actual physics objects or their velocities.
To configure the PhysicsLengthUnit, you can insert it as a resource, or simply set it while adding PhysicsPlugins:
fn main() {
    App::new()
        .add_plugins((
            DefaultPlugins,
            // A 2D game with 20 pixels per meter
            PhysicsPlugins::default().with_length_unit(20.0),
        ))
        .run();
}

Custom Constraints
Custom constraints using XPBD are currently still possible. However, the traits and systems are now located in the dynamics::solver::xpbd module, and users should run solve_constraints in SubstepSolverSet::SolveUserConstraints instead of SubstepSet::SolveUserConstraints.
Scheduling Changes
Several scheduling internals have been changed. For example:

The narrow phase and PostProcessCollisions schedule are now run in PhysicsStepSet::NarrowPhase instead of SubstepSet::NarrowPhase.
Integration is now run in IntegrationSet::Velocity and IntegrationSet::Position instead of SubstepSet::Integrate.
SubstepSet has been removed.

The solver runs in PhysicsStepSet::Solver.
The solver's system sets are in SolverSet.
Substepping is performed in SolverSet::Substep.
The substepping loop's system sets are in SubstepSolverSet.

Systems running in PostProcessCollisions may need to be modified to account for it being moved outside of the substepping loop.

It would be nice to have a benchmark for this rework. It looks like things are faster, but having actual numbers would be cool.

Addressed most of the comments. A few other changes:

IntegratorPlugin initializes its system sets in the schedule given to it instead of only configuring them in SolverPlugin. This way, it would work on its own even without the solver.
Added a match_contacts property to NarrowPhaseConfig. Previously it was decided by SolverConfig::warm_start_coefficient, but that's a solver implementation detail.
NarrowPhasePlugin has a generate_constraints property. It's unnecessary to generate constraints if you only use the narrow phase for collision detection without the solver.
NarrowPhasePlugin can be initialized with any schedule, not just PhysicsSchedule.


traffic_light_unprotected_right_turn_scenario.pic.d (No such file or directory)

Run this command: bash apollo.sh build no GPU
ERROR: /apollo/modules/planning/scenarios/traffic_light/unprotected_right_turn/BUILD:7:11: error while parsing .d file: /apollo/.cache/bazel/540135163923dd7d5820f3ee4b306b32/execroot/apollo/bazel-out/k8-fastbuild/bin/modules/planning/scenarios/traffic_light/unprotected_right_turn/_objs/traffic_light_unprotected_right_turn_scenario/traffic_light_unprotected_right_turn_scenario.pic.d (No such file or directory)

Anybody can help me?
Thanks!

.d file
Many build systems add automatically detected make dependencies into the .d file. In particular, for C/C++ source files they determine what #include files are required and automatically generate that information into the .d file.
The .d files are then included by the makefile so make is aware of that information. If you look at the contents of those files they'll be make prerequisite statements, like:
foo.o : foo.h bar.h biz.h

ref
suggestion
It may be related to the software version, so it is recommended to clear the cache and try again
./apollo.sh clean

.d file
Many build systems add automatically detected make dependencies into the .d file. In particular, for C/C++ source files they determine what #include files are required and automatically generate that information into the .d file.
The .d files are then included by the makefile so make is aware of that information. If you look at the contents of those files they'll be make prerequisite statements, like:
foo.o : foo.h bar.h biz.h

ref
suggestion
It may be related to the software version, so it is recommended to clear the cache and try again
./apollo.sh clean

Run this command: bash apollo.sh build no GPU
ERROR: /apollo/modules/planning/scenarios/traffic_light/unprotected_right_turn/BUILD:7:11: error while parsing .d file: /apollo/.cache/bazel/540135163923dd7d5820f3ee4b306b32/execroot/apollo/bazel-out/k8-fastbuild/bin/modules/planning/scenarios/traffic_light/unprotected_right_turn/_objs/traffic_light_unprotected_right_turn_scenario/traffic_light_unprotected_right_turn_scenario.pic.d (No such file or directory)

Anybody can help me?
Thanks!

Please paste the result of ./apollo.sh config -n first. Thank you.

Run this command: bash apollo.sh build no GPU
ERROR: /apollo/modules/planning/scenarios/traffic_light/unprotected_right_turn/BUILD:7:11: error while parsing .d file: /apollo/.cache/bazel/540135163923dd7d5820f3ee4b306b32/execroot/apollo/bazel-out/k8-fastbuild/bin/modules/planning/scenarios/traffic_light/unprotected_right_turn/_objs/traffic_light_unprotected_right_turn_scenario/traffic_light_unprotected_right_turn_scenario.pic.d (No such file or directory)

Anybody can help me?
Thanks!

Please paste the result of ./apollo.sh config -n first. Thank you.

@storypku  @daohu527   thanks!
./apollo.sh clean  is helpful.

@storypku  @daohu527   thanks!
./apollo.sh clean  is helpful.

Hi @zjiek327, it seems that the this issue was resolved. Thus I am going to close this issue now. Please feel free to create another issue if you have other questions. Our engineering team is willing to help.

Hi @zjiek327, it seems that the this issue was resolved. Thus I am going to close this issue now. Please feel free to create another issue if you have other questions. Our engineering team is willing to help.


fix: show only a single column for the feature list on small screens

Not much to explain here. Just fixes the feature list to show single columns on mobile.

thanks for the fixed...
merged.


documentation for spec.functionName

It took me a while to find https://github.com/babel/babel/issues/1087 which talks about spec.functionName - but I can't find any documentation on the website about why the transform happens and what parts of the es6 spec it relates to... Am I missing something somewhere?

Yeah it is missing: https://github.com/babel/babel.github.io/tree/master/docs/usage/transformers/spec

Moving to https://github.com/babel/babel.github.io/issues/780


Android - BNP - Initially at first place where cursor displayed unable to enter number

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Version Number: 9.0.25
Reproducible in staging?: Y
Reproducible in production?: Y
If this was caught during regression testing, add the test name, ID and link from TestRail: https://expensify.testrail.io/index.php?/tests/view/4895545
Issue reported by: Applause - Internal Team
Action Performed:

Launch app
Tap on 1:1 DM
Create a Submit expense
Open the expense
Tap amount
Try to enter a number where cursor is shown
Note user cannot enter number
Move the cursor to other digit
Now note user can enter number at all places

Expected Result:
Initially at first place where cursor displayed must be able to enter number
Actual Result:
Initially at first place where cursor displayed unable to enter number
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[x] Android: Native
[ ] Android: mWeb Chrome
[ ] iOS: Native
[ ] iOS: mWeb Safari
[ ] MacOS: Chrome / Safari
[ ] MacOS: Desktop

Screenshots/Videos
Add any screenshot/video evidence

https://github.com/user-attachments/assets/c73ef027-992e-40ae-9bb1-9ea53aa4e702
View all open jobs on GitHub

@lanitochka17 I am not able to recreate this.  Can you verify if any steps are missing?
https://github.com/user-attachments/assets/46227a79-e10c-490b-b518-7e400088c5cd

@slafortune You have completed only 3 steps
Please check all steps specified in the issue

Ah, sorry @lanitochka17 - I missed that this was when editing an amount.  The curser is at the end of the amount, where you are not able to enter a number in the third decimal place ever.  Since you are going back to the expense to edit it, I assume it would be the standard to select the number you want to edit or at the end so you are in the position to delete and reenter.  Do you think the curser should be set in a different position?

Feel free to reopen if I've missed something, but the position on the cursor seems to be in the intended place for the action of editing.


ios app sim building error

when trying to run a ios app, on ^0.31.2-dev.1
the build fails with
Launching lib/main.dart on iPhone 15 Pro Max in debug mode...
Running pod install...
Running Xcode build...
Xcode build done.                                            6.6s
Failed to build iOS app
Error (Xcode): Multiple commands produce '/Users/joaolobo/code/project/satsails/build/ios/Debug-iphonesimulator/bdk_flutter/libbdk_flutter.a'

Could not build the application for the simulator.
Error launching application on iPhone 15 Pro Max.

@JoaoLobo94 Do you mean you are facing this issue only with v0.31.2-dev.1?
I will try and take a look tomorrow or on Monday.
I believe I have used it in a brand-new Flutter app and it worked fine.

Yes it only happens on this version. I downgraded to 0.30 and it compiled fine.
I tried to flutter clean and that did not seem to make the trick.

Hello, is there any update on this bug? had a look and i am still experiencing it :)

Hello, is there any update on this bug? had a look and i am still experiencing it :)

Hi @JoaoLobo94 , I tried it out on an iPhone 15 Pro Max simulator too and it worked. I tried for iOS version 17.0 and 17.5, both worked. So could you try out following things from your side, please:

Try with bdk_flutter v0.31.2-dev.2, this is the latest version.
Check if you have the latest version of Xcode and iOS for your simulators. If not, please share the versions you were using so I can test with those.
Try the answers here: https://stackoverflow.com/questions/52398521/flutter-ios-build-failure-error-with-multiple-commands-after-the-xcode-upgrade

Also feel free to join the Let there be Lightning's Discord server here to ask any questions or support: https://discord.gg/6BhQm6UH .


Voice commands not recognized on Android Wear

Seems to work flawlessly on my Nexus 5 but when I try to give voice commands through android wear (moto 360) it just does a google search for it? Going through the app and tapping the command works though.

I have the same issue. Wear 5.1.1
Running Lollipop 5.1.1 rooted with Xposed
"Take a note" work (but don't close to watchface properly)


Support ES2015 Symbols

Prevents a crash when working with symbols

Coverage remained the same at 100.0% when pulling c8201a519c1d8cb7f11f9c0820ba40058cf3fe0f on codeheroics:support-symbols into be1eebef596d2f94d8cb3632aa6355bb3c6a68df on blakeembrey:master.

Awesome, thanks :+1:

Published with https://github.com/blakeembrey/javascript-stringify/tree/v1.1.0.

Thanks for the quick merge & release :)


HowTo: Migrate a Xamarin.Android or Xamarin.iOS to .NET Maui

Hi,
I inherited 2 legacy projects and wonder if there are any plans to migrate such projects to .NET MAUI?
Best Regards,
Eric

@ericbrunner You keep the native UI the same and only need to update the .Net Project to .NET 6.  Xamarin.Android and Xamarin.iOS are now additional platform targets you can reach with .NET, so refer to them as .NET for Android and .NET for iOS. Those SDKs themselves are .NET bindings to the native SDKs from Google and Apple respectively, and thus no renaming takes place in their API surface.

@HobDev you reflect to Xamarin.Forms to .NET MAU
I ment if there are any plans to migrate Xamarin Native Projects like Xamarin.Android and Xamarin.iOS with it's native Views (e.g. active_main.xml for android or Main.storyboard ) to a common MainPage.xaml or Coded UI View in .NET MAUI or if you have to convert them yourself for each View on each platform to a common MainPage.xaml?

Yes, Native UI needs to be converted manually by the developer.


Wrong aa_ref for insertion of stop codon

Submitted by João Eiras via email:
# PrematureStop Insertion
chr1 99772782 . A ATGA 5000 . . .
# Annotated as
PrematureStop (OK)
* aa_mutation_start_offset  = 6 (OK)
* aa_mutation_end_offset = 6 (OK)
* aa_ref = "L" (FAIL, just insertion, ref should be empty)
* aa_alt = ""

I'm not actually sure if the right behavior here is to describe the stop-gain as "p.6ins*".

Fixed by https://github.com/hammerlab/varcode/pull/173


How to add python modules to the filesystem-dask2 kernel

I'm interested in using the filesystem-dask2 kernel but it's lacking s3fs, a module I need, for calling data from AWS.  I tried out spinning up a dask cluster on qhub, but I wasn't sure how I go about adding modules, or if I'm allowed to at all. I'm pretty new to working in jupyter, so it's possible I'm just misunderstanding how kernels are intended to be used.  Can I install additional modules, or is there a better approach?

@sformel-usgs , conda-store is a killer feature of ESIP qhub, IMHO.   It allows anyone to make changes in environments shared with the groups they belong to.    You can't change any environments in the filesystem group, but you can change environments in the users group.     Check out: https://jupyter.qhub.esipfed.org/hub/user-redirect/lab/tree/shared/users/Welcome.ipynb
But also note that the users-pangeo environment already has s3fs and a lot of other packages commonly required for cloud-native geospatial workflows.   Try that out first and see if has what you need!

Thank you!  I couldn't find that notebook and I started to think it was a figment of my imagination. Sorry for overlooking it, I guess I didn't scroll down far enough.  I was trying to figure things out from this other notebook in the examples folder.  IMO the welcome notebook would be more logical in the shared folder (or a new directory like shared/intro) to keep it from being buried at the bottom of the users.  That being said, I think my chagrin will make sure I won't forget it going forward.


Add a link to the Mapbox terms of service on the add basemap modal"

@josecruz Could you please add the above message to the website?
Cc @saleiva @miguelginer

Please, could we take this into account for the new designs? Also, we should provide any feedback to users when they try to "import" a new Mapbox map, because we can't use their current webgl techonlogy.


adding couple profiles

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

advocates/marcelo-bellinaso.yml
:white_check_mark:Succeeded
View

advocates/media/profiles/marcelo-bellinaso.png
:white_check_mark:Succeeded
View

advocates/media/profiles/michael-bender.png
:white_check_mark:Succeeded
View

advocates/media/profiles/yoshio-terada.png
:white_check_mark:Succeeded
View

advocates/michael-bender.yml
:white_check_mark:Succeeded
View

advocates/yoshio-terada.yaml
:white_check_mark:Succeeded

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


ALIAS in ReplicatedMergeTree table

Create a table:
CREATE TABLE events ( id UInt64,  campaign_id UInt64, user_id UInt64, type UInt8, contact_id UInt64, domain_name String,  created_at DateTime,  event_date Date,  domain String ALIAS domain_name) ENGINE = ReplicatedMergeTree(\'path\', \'node\', event_date, campaign_id, (campaign_id, type, contact_id, created_at), 8192)
run a query:
SELECT domain FROM events    WHERE event_date >= '2017-08-01' AND event_date <= '2017-08-31'  AND user_id = 1
result:
Received exception from server (version 1.1.54362): Code: 9. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Size of filter doesn't match size of column..
the same is for selecting domain_name and using it in query params.
Using other columns in select is OK.
domain_name is empty for that date range, the column has been added later. Sometimes I get the result set together with exception (it depends on various query params and selection combination):
`Received exception from server (version 1.1.54362):
Code: 9. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Size of filter doesn't match size of column..
120 rows in set. Elapsed: 0.147 sec.`

May relate to #1550

The problem may be not in ALIAS column. Dropping it did not help:
`SELECT domain_name
FROM events
WHERE (event_date >= '2017-08-01') AND (event_date <= '2017-08-31') AND (user_id = 1) AND (domain_name = 'gmail.com')
Received exception from server (version 1.1.54362):
Code: 9. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Size of filter doesn't match size of column..`
This query should return empty set. Removing user_id condition will do that:
`SELECT domain_name
FROM events
WHERE (event_date >= '2017-08-01') AND (event_date <= '2017-08-31')  AND (domain_name = 'gmail.com')
0 rows in set. Elapsed: 0.337 sec. Processed 220.53 million rows, 441.06 MB (655.02 million rows/s., 1.31 GB/s.)`

We have fixed similar issues in past releases.
Does the issue reproduce in the latest stable?

Looks like it is fixed in 19.1.6


update bower injection #38

as mentioned in #38

Hey there,
so sorry that it's been so long for me to respond to this.
I have to say, I am a little confused though. Currently I don't support out of the box bower baking. Am I missing something. If you think that is a feature you would like to see in bake, can you give me a little more detail.
Am I missing something?

No Problem, gave me the opportunity to work more with it and realise its unimportant now. I was thinking that you'll need the bower packages already in the bake.html.


A clarification on SEAL’s underlying GNN engine

Hi Dr. Zhang,
I had the pleasure of reading the labeling trick paper. I was quite curious upon reading it as to what can be regarded as the SEAL model. Can we call GCN + DRNL labelled subgraphs + SortPooling aggregation as SEAL?

Or can we only call the model as SEAL if it uses DGCNN as the underlying backbone, thus making the model DGCNN + DRNL labelled subgraphs + SortPooling aggregation as last step?

I guess I am just confused if GCN + DRNL becomes SEAL only if you use SortPooling at the end. Sorry if the question is a bit difficult to understand. I can clarify further as needed.
- Paul

Hi Paul! Thanks for the question. Firstly, I would like to clarify that DGCNN is indeed GCN + SortPooling.
In general, I would classify any model using a GNN + DRNL labeling trick as SEAL. Although the original SEAL framework adopts the DGCNN (i.e., GCN + SortPooling) as the GNN, it essentially does not restrict the GNN to be specifically DGCNN but allows using any GNN with a pooling layer. So even a GCN + sum-pooling + DRNL can still be called a SEAL model.

Hi Dr. Zhang,
Thank you for the detailed explanations. Your replies help a lot.
I had a follow up question. Referring to the image attached(Taken from labelling tricks table 1), won't GCN+DRNL become SEAL?

-Paul

Right. Depending on the context, I specifically use SEAL there to denote the exact SEAL (DGCNN + DRNL), in order to compare with GCN + DRNL. Apart from that, SEAL (in general) uses a subgraph-level pooling layer to pool all node representations in the subgraph as the link representation, while GCN + DRNL only pools the source and target nodes' representations.

That makes sense. Thank you for the clarification.
So I am guessing in this context(and from what I have seen in the code), GCN + DRNL uses centre pooling. However, if I make it such that it is GCN + DRNL + Subgraph Pooling(eg; sum pooling/max pooling/sort pooling), it becomes SEAL?

Yes, I would classify GCN + DRNL + Subgraph Pooling as a SEAL method.

Thank you so much for the detailed clarifications.
I am closing the issue as Dr. Zhang has explained the query in detail.


Adds GetFollowedTags

Creates call to see what Tags the user is following
Updates documentation with Token-based workflow

Thank you


Better compatibility with non-44.1 kHz tracks

Now, I assume either PyMusicLooper or msupcm++ (or both) implicitly convert tracks to 44.1 kHz.
Assuming this is indeed some issue internal to the dependencies that you can't work around with a parameter or flag of some kind, would it be possible to show a warning for non-44.1 kHz tracks and automatically convert any entered samples? Obviously, this might result in some inaccuracies which is why I'd argue for a warning message of some kind, even when you do automatically convert it.

Discussed in Discord, this is an issue with Audacity 3.3 and up actually implicitly converting to 44.1 kHz. A warning about this might be good, though. Maybe in the Trim End / Loop Start tooltips or something? Or just the readme, idk.

My current thought is to put a little thing in the top right after selecting a non-44100Hz file or if you add multiple files due to what Phiggle said:


RAISERROR is not received as an error

I would like to understand how we should handle the RAISERROR from SQL Store Procedure.
Currently it ends up in the the .success with a value of { returnValue : 0 }.

Added support for receiving informational messages in 3.3.0. Example:
var request = new sql.Request();
request.on('info', function(info) {
    console.dir(info);
});
request.query('print \'Hello world.\';', function(err, recordset) {
    // ...
});

More info in docs.
Informational messages are generated by PRINT or RAISERROR with severity equal or lower than 10. To raise an error, set severity higher than 10.

Thanks

Hello,
I have tried your error message but it does not work for me either on PRINT or RAISERROR. The .on('info') is never invoked, but if I specify an error severity > than 10 the catch callback is invoked. The problem is that the catch callback parameter does not contain the information of the RAISERROR.
Here is the mssql code:
new sql.Request()
.on('info', function(info) {
    console.log(info);
})
.input('accountId', sql.Int, 1)
.input('userId', sql.Int, 1)
.execute('dbo.UserGet').then(function(data) {
    console.log(data);
}).catch(function (err) {
    console.log('error = ' + err)
});

Here is the SQL:
CREATE PROCEDURE [dbo].[UserGet]
	@userId INT = NULL,
	@accountId INT = NULL
AS

PRINT('salut');
RAISERROR ('A user identifier must be provided.', 5, 1);
RETURN 1;

Thank you for this library. It has been helping a lot :)

I would like to reopen the issue.
console.log('running tests');

var request = new sql.Request();
    request.on('info', function (info) {
        console.log('event received');
        console.dir(info);
    });
request.query('print \'Hello world.\';', function (err, recordset) {
        console.log('callback');
});

Is not actually invoking into the request.on event.
The console is :
running tests
callback


(#119) Overhaul package moderation docs

Description Of Changes
Overhauling the package moderation docs to make them easier to follow for both moderators and maintainers going through the process.
Motivation and Context
Many reasons. #119 has the best explanation.
Testing

[ ] I have previewed these changes using the Docker Container or another method before submitting this pull request.

Change Types Made

[ ] Minor documentation fix (typos etc.).
[ ] Major documentation change (refactoring, reformatting or adding documentation to existing page).
[ ] New documentation page added.
[ ] The change I have made should have a video added, and I have raised an issue for this.

Issue #

Change Checklist

[ ] Requires a change to menu structure (top or left hand side)/
[ ] Menu structure has been updated

Related Issue
#119

@pauby are you planning on taking another go at this, or is the issue available for someone else to be assigned to it?

@TheCakeIsNaOH was an overzealous branch cleanup. I've raised #1002 to cover it.

or is the issue available for someone else to be assigned to it

You are welcome, as is anybody else, to contribute to this. Just a heads-up though, my goal is to completely rewrite the moderation docs rather than updating them.