Release version 1.0.1

Dependencies
Issues of this new version should be done before resolving this issue.
Checklist

[x] Upgrade the application's version.
[x] Add a new version in changelog.
[x] Update version in readme.
[x] Create a release on the repository.

Done.


Fix: xgb_decision_tree shouldGoLeftAtSplit -- massive-speed-up

I noticed that for my xgboost model dtreeviz.interpretation.explain_prediction_plain_english is meticulously slow. After some investigation I figured out that shadow_tree.predict_path is taking the main chunk of compute time. Eventually it all boils down to one line
def _get_column_value(self, column_name):
    return self._get_tree_dataframe()[column_name].to_numpy()

which extracts the full tree dataset on every call. I am not sure if this is necessary, as it's already being done once on __init__ and then stored in self.tree_to_dataframe. But even if that dataframe is being mutated down the line, maybe we could keep a copy just for _get_column_value. As changing self._get_tree_dataframe() to self.tree_to_dataframe leads to an insane speedup.
On my use-case the runtime is reduced is from minutes to seconds -- I generate multiple explanations for the same model.

Hi @Demetrio92, thanks a lot, it makes totally sense.
I checked your PR and indeed it helps a lot with speed. The _get_column_value() method is used in many parts of the code, so it should have a speed improvement in many visualisations.
@parrt please take a look and make a new release with this PR if everything is ok on your side also. Thanks

btw, @Demetrio92 happy to see that people are using other visualisations, like explain_prediction_plain_english, other than the main one dtreeviz() !

Thanks @Demetrio92 !

Pushed out 1.3.6!

Glad to hear that, thanks for a great library!


⚠ Lychee has degraded performance

In e13b6c4, Lychee ($SERVER_BASE/lychee/) experienced degraded performance:

HTTP code: 200
Response time: 7346 ms

Resolved: Lychee performance has improved in 051f0f2 after 8 minutes.


Types of Helper are wrong??

I Started using the Helpers module and noticed for 64-Bit they are defined as such:
add64_i :: Reg -> Imm32 -> Instruction
add64_i dst imm = Binary B64 Add dst (Right $ fromIntegral imm)

should it not be:
add64_i :: Reg -> Imm64 -> Instruction

Or have i misunderstood something?

You have misunderstood something 😉
Due to the way that instructions are encoded, it is not possible to have imm larger than 32-bit. Except for the LoadImm instruction which has a 128 bit encoding, for this very reason.

Ah my bad!


Security fix: Upgrade to electron-packager 7.0.0

See https://github.com/electron-userland/electron-packager/issues/333

thanks @antoinepairet


Thoughts on e-mail signatures

Make sure you use "alt" text for your images
Don't include your e-mail address in the signature.
Don't automatically add your employees' LinkedIn information to the signature
..better yet, don't add any LinkedIn information to the signature.
Try not to advertise. Sending an advertisement is like sending a little bit of spam with every e-mail that the recipient can't opt out of. It will be ignored at best and produce a negative reacti

Also should mention not to include gigantic legal disclaimers.

Also add something about the "please do not print this e-mail" text.


No JWKS_URL environment variable

PDA version
0.4.1
Feature type
App Setting Addition
Proposed functionality
Add OIDC_OAUTH_JWKS_URL as a valid environment variable
Use case
Input all OIDC settings via environment variables and not saved in DB due to different SSO for reach region.
In addition to be in line with other OIDC settings which allow this behaviour.
Database changes
No response
External dependencies
No response

@benshalev849 as of the release of 0.4.1, all current application settings can be defined through environment variables.

@Azorian

@benshalev849 as of the release of 0.4.1, all current application settings can be defined through environment variables.
It's worth noting that the setting you're referring to should have never existed. It was not a valid setting that was actually doing anything from what I can tell. It has since been removed.

Since it's mandatory waht can i do?
When i put the env variable
OIDC_OAUTH_JWKS_URL it does not get changed in the setting like other OIDC_OAUTH env variables.

@benshalev849 give me a bit to review this as I've made a mistake somewhere. I've either not properly included a remaining setting or forgot to remove it where it shouldn't be.


Running dual GPUs. Only one is used.

Processor	13th Gen Intel(R) Core(TM) i9-13900KF   3.00 GHz
Installed RAM	64.0 GB (63.8 GB usable)
System type	64-bit operating system, x64-based processor
GPU : Dual Nvidia Geforce 3090

PS C:\Users\rainm> docker run -it --gpus=all --rm nvidia/cuda:11.4.2-base-ubuntu20.04 nvidia-smi
Thu Feb  9 07:10:31 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.05    Driver Version: 528.24       CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  On   | 00000000:01:00.0  On |                  N/A |
|  0%   48C    P8    43W / 420W |  11306MiB / 24576MiB |     15%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   1  NVIDIA GeForce ...  On   | 00000000:02:00.0 Off |                  N/A |
|  0%   48C    P8    38W / 420W |  11306MiB / 24576MiB |      4%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A         7      C   /python3.10                     N/A      |
|    1   N/A  N/A         7      C   /python3.10                     N/A      |
+-----------------------------------------------------------------------------+```

2023-02-08 16:13:49 [2023-02-09 00:13:49 +0000] [1] [INFO] Starting gunicorn 20.1.0
2023-02-08 16:13:49 [2023-02-09 00:13:49 +0000] [1] [INFO] Listening at: http://<IP_ADDRESS>:9000 (1)
2023-02-08 16:13:49 [2023-02-09 00:13:49 +0000] [1] [INFO] Using worker: uvicorn.workers.UvicornWorker
2023-02-08 16:13:49 [2023-02-09 00:13:49 +0000] [7] [INFO] Booting worker with pid: 7
14%|��2023-02-09T00:14:09.555821584Z �████▍                                | 41 27%|██████████▏                         2023-02-09T00:14:09.555821584Z   | 789M 39%|██████████████▎                      | 1.11G2023-02-09T00:14:09.555821584Z  49%|��2023-02-09T00:14:09.555821584Z �█████████████████▎                  | 1.4 60%|████████��2023-02-09T00:14:09.555821584Z �█████████████               | 1.7 69%|█████████████████████████▋          2023-02-09T00:14:09.555821584Z  | 2.00G 79%|█████████████████████████████        |2023-02-09T00:14:09.555821584Z  2.26G 87%|███��2023-02-09T00:14:09.555821584Z �████████████████████████████▎    | 2.5 96%|████████████████████████████████2023-02-09T00:14:09.555821584Z ███▍ | 2.75G100%|█████████████████████████████████████| 2.87G/2.87G [02:13<00:00, 23.1MiB/s]
2023-02-08 16:16:18 [2023-02-09 00:16:18 +0000] [7] [INFO] Started server process [7]
2023-02-08 16:16:18 [2023-02-09 00:16:18 +0000] [7] [INFO] Waiting for application startup.
2023-02-08 16:16:18 [2023-02-09 00:16:18 +0000] [7] [INFO] Application startup complete.
2023-02-08 16:17:21 [2023-02-09 00:17:21 +0000] [7] [ERROR] Exception in ASGI application
2023-02-08 16:17:21 Traceback (most recent call last):
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/uvicorn/protocols/http/httptools_impl.py", line 404, in run_asgi
2023-02-08 16:17:21     result = await app(  # type: ignore[func-returns-value]
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in call
2023-02-08 16:17:21     return await self.app(scope, receive, send)
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/fastapi/applications.py", line 270, in call
2023-02-08 16:17:21     await super().call(scope, receive, send)
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/starlette/applications.py", line 124, in call
2023-02-08 16:17:21     await self.middleware_stack(scope, receive, send)
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 184, in call
2023-02-08 16:17:21     raise exc
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 162, in call
2023-02-08 16:17:21     await self.app(scope, receive, _send)
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 75, in call
2023-02-08 16:17:21     raise exc
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 64, in call
2023-02-08 16:17:21     await self.app(scope, receive, sender)
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in call
2023-02-08 16:17:21     raise e
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call
2023-02-08 16:17:21     await self.app(scope, receive, send)
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 680, in call
2023-02-08 16:17:21     await route.handle(scope, receive, send)
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 275, in handle
2023-02-08 16:17:21     await self.app(scope, receive, send)
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 65, in app
2023-02-08 16:17:21     response = await func(request)
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/fastapi/routing.py", line 231, in app
2023-02-08 16:17:21     raw_response = await run_endpoint_function(
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/fastapi/routing.py", line 162, in run_endpoint_function
2023-02-08 16:17:21     return await run_in_threadpool(dependant.call, **values)
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/starlette/concurrency.py", line 41, in run_in_threadpool
2023-02-08 16:17:21     return await anyio.to_thread.run_sync(func, *args)
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/anyio/to_thread.py", line 31, in run_sync
2023-02-08 16:17:21     return await get_asynclib().run_sync_in_worker_thread(
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 937, in run_sync_in_worker_thread
2023-02-08 16:17:21     return await future
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 867, in run
2023-02-08 16:17:21     result = context.run(func, *args)
2023-02-08 16:17:21   File "/app/app/webservice.py", line 71, in transcribe
2023-02-08 16:17:21     result = run_asr(audio_file.file, task, language, initial_prompt)
2023-02-08 16:17:21   File "/app/app/webservice.py", line 122, in run_asr
2023-02-08 16:17:21     result = model.transcribe(audio, **options_dict)
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/whisper/transcribe.py", line 84, in transcribe
2023-02-08 16:17:21     mel = log_mel_spectrogram(audio)
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/whisper/audio.py", line 115, in log_mel_spectrogram
2023-02-08 16:17:21     stft = torch.stft(audio, N_FFT, HOP_LENGTH, window=window, return_complex=True)
2023-02-08 16:17:21   File "/app/.venv/lib/python3.10/site-packages/torch/functional.py", line 630, in stft
2023-02-08 16:17:21     input = F.pad(input.view(extended_shape), [pad, pad], pad_mode)
2023-02-08 16:17:21 RuntimeError: 2D or 3D (batch mode) tensor expected for input, but got: [ torch.FloatTensor{1,1,0} ]
2023-02-08 16:18:29 [2023-02-09 00:18:29 +0000] [7] [ERROR] Exception in ASGI application
2023-02-08 16:18:29 Traceback (most recent call last):
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/uvicorn/protocols/http/httptools_impl.py", line 404, in run_asgi
2023-02-08 16:18:29     result = await app(  # type: ignore[func-returns-value]
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in call
2023-02-08 16:18:29     return await self.app(scope, receive, send)
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/fastapi/applications.py", line 270, in call
2023-02-08 16:18:29     await super().call(scope, receive, send)
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/starlette/applications.py", line 124, in call
2023-02-08 16:18:29     await self.middleware_stack(scope, receive, send)
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 184, in call
2023-02-08 16:18:29     raise exc
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 162, in call
2023-02-08 16:18:29     await self.app(scope, receive, _send)
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 75, in call
2023-02-08 16:18:29     raise exc
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 64, in call
2023-02-08 16:18:29     await self.app(scope, receive, sender)
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in call
2023-02-08 16:18:29     raise e
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call
2023-02-08 16:18:29     await self.app(scope, receive, send)
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 680, in call
2023-02-08 16:18:29     await route.handle(scope, receive, send)
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 275, in handle
2023-02-08 16:18:29     await self.app(scope, receive, send)
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 65, in app
2023-02-08 16:18:29     response = await func(request)
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/fastapi/routing.py", line 231, in app
2023-02-08 16:18:29     raw_response = await run_endpoint_function(
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/fastapi/routing.py", line 162, in run_endpoint_function
2023-02-08 16:18:29     return await run_in_threadpool(dependant.call, **values)
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/starlette/concurrency.py", line 41, in run_in_threadpool
2023-02-08 16:18:29     return await anyio.to_thread.run_sync(func, *args)
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/anyio/to_thread.py", line 31, in run_sync
2023-02-08 16:18:29     return await get_asynclib().run_sync_in_worker_thread(
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 937, in run_sync_in_worker_thread
2023-02-08 16:18:29     return await future
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 867, in run
2023-02-08 16:18:29     result = context.run(func, *args)
2023-02-08 16:18:29   File "/app/app/webservice.py", line 71, in transcribe
2023-02-08 16:18:29     result = run_asr(audio_file.file, task, language, initial_prompt)
2023-02-08 16:18:29   File "/app/app/webservice.py", line 122, in run_asr
2023-02-08 16:18:29     result = model.transcribe(audio, **options_dict)
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/whisper/transcribe.py", line 84, in transcribe
2023-02-08 16:18:29     mel = log_mel_spectrogram(audio)
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/whisper/audio.py", line 115, in log_mel_spectrogram
2023-02-08 16:18:29     stft = torch.stft(audio, N_FFT, HOP_LENGTH, window=window, return_complex=True)
2023-02-08 16:18:29   File "/app/.venv/lib/python3.10/site-packages/torch/functional.py", line 630, in stft
2023-02-08 16:18:29     input = F.pad(input.view(extended_shape), [pad, pad], pad_mode)
2023-02-08 16:18:29 RuntimeError: 2D or 3D (batch mode) tensor expected for input, but got: [ torch.FloatTensor{1,1,0} ]
2023-02-08 16:19:21 [2023-02-09 00:19:21 +0000] [7] [ERROR] Exception in ASGI application
2023-02-08 16:19:21 Traceback (most recent call last):
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/uvicorn/protocols/http/httptools_impl.py", line 404, in run_asgi
2023-02-08 16:19:21     result = await app(  # type: ignore[func-returns-value]
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in call
2023-02-08 16:19:21     return await self.app(scope, receive, send)
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/fastapi/applications.py", line 270, in call
2023-02-08 16:19:21     await super().call(scope, receive, send)
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/starlette/applications.py", line 124, in call
2023-02-08 16:19:21     await self.middleware_stack(scope, receive, send)
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 184, in call
2023-02-08 16:19:21     raise exc
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/errors.py", line 162, in call
2023-02-08 16:19:21     await self.app(scope, receive, _send)
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 75, in call
2023-02-08 16:19:21     raise exc
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 64, in call
2023-02-08 16:19:21     await self.app(scope, receive, sender)
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in call
2023-02-08 16:19:21     raise e
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call
2023-02-08 16:19:21     await self.app(scope, receive, send)
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 680, in call
2023-02-08 16:19:21     await route.handle(scope, receive, send)
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 275, in handle
2023-02-08 16:19:21     await self.app(scope, receive, send)
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/starlette/routing.py", line 65, in app
2023-02-08 16:19:21     response = await func(request)
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/fastapi/routing.py", line 231, in app
2023-02-08 16:19:21     raw_response = await run_endpoint_function(
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/fastapi/routing.py", line 162, in run_endpoint_function
2023-02-08 16:19:21     return await run_in_threadpool(dependant.call, **values)
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/starlette/concurrency.py", line 41, in run_in_threadpool
2023-02-08 16:19:21     return await anyio.to_thread.run_sync(func, *args)
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/anyio/to_thread.py", line 31, in run_sync
2023-02-08 16:19:21     return await get_asynclib().run_sync_in_worker_thread(
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 937, in run_sync_in_worker_thread
2023-02-08 16:19:21     return await future
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 867, in run
2023-02-08 16:19:21     result = context.run(func, *args)
2023-02-08 16:19:21   File "/app/app/webservice.py", line 71, in transcribe
2023-02-08 16:19:21     result = run_asr(audio_file.file, task, language, initial_prompt)
2023-02-08 16:19:21   File "/app/app/webservice.py", line 122, in run_asr
2023-02-08 16:19:21     result = model.transcribe(audio, **options_dict)
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/whisper/transcribe.py", line 84, in transcribe
2023-02-08 16:19:21     mel = log_mel_spectrogram(audio)
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/whisper/audio.py", line 115, in log_mel_spectrogram
2023-02-08 16:19:21     stft = torch.stft(audio, N_FFT, HOP_LENGTH, window=window, return_complex=True)
2023-02-08 16:19:21   File "/app/.venv/lib/python3.10/site-packages/torch/functional.py", line 630, in stft
2023-02-08 16:19:21     input = F.pad(input.view(extended_shape), [pad, pad], pad_mode)
2023-02-08 16:19:21 RuntimeError: 2D or 3D (batch mode) tensor expected for input, but got: [ torch.FloatTensor{1,1,0} ]
2023-02-08 23:06:56 [2023-02-09 07:06:56 +0000] [1] [INFO] Starting gunicorn 20.1.0
2023-02-08 23:06:56 [2023-02-09 07:06:56 +0000] [1] [INFO] Listening at: http://<IP_ADDRESS>:9000 (1)
2023-02-08 23:06:56 [2023-02-09 07:06:56 +0000] [1] [INFO] Using worker: uvicorn.workers.UvicornWorker
2023-02-08 23:06:56 [2023-02-09 07:06:56 +0000] [7] [INFO] Booting worker with pid: 7
2023-02-08 23:07:12 [2023-02-09 07:07:12 +0000] [7] [INFO] Started server process [7]
2023-02-08 23:07:12 [2023-02-09 07:07:12 +0000] [7] [INFO] Waiting for application startup.
2023-02-08 23:07:12 [2023-02-09 07:07:12 +0000] [7] [INFO] Application startup complete.

Is your docker configured to run both GPUs at the same time?


Close Window Implementation

Task Description

Implement a close functionality for each pop-up modal: "Buy Now", "Leave a Review", and "Subscribe".

Implementation Steps

Add a close button (e.g., an "X" icon) within each modal window.
Implement an event listener for the close button to hide the modal when clicked:

Use JavaScript to toggle the visibility of the modal.
Ensure that clicking outside the modal area and 'Esc' button also closes the modal.
Optionally, add a transition effect for a smoother user experience when the modal opens and closes.

Verification

Test each modal to ensure:

The close button effectively hides the modal.
Clicking outside the modal and 'Esc' button also closes it.
The close functionality works without errors in the console.

@Alexandrbig1 can you explain this issue

@sakshitawde check the description for this issue, please. This is a close button for all pop-up windows

Hi @Alexandrbig1 can you assign me this issue i would like to work on it

@blunterdecosta123 yes sure. Thank you

@DanielDunevant Daniel, do you want to check all X - buttons that must close the pop-ups windows in our project?

@Alexandrbig1  I'd be happy to!

@DanielDunevant great work Daniel!


Productionise dep0

Needs to be able to generate an executable from the source file, so taking care of linking too and rework all command line arguments as necessary (at least for an initial v0.1 version)

Done in #56


[JsonTracer] Deprecate JsonTracer

This commit deprecates JsonTracer and shows trace files with default text viewer.
ONE-vscode-DCO-1.0-Signed-off-by: Dayoung Lee<EMAIL_ADDRESS>

@shs-park

Is jsonTracer now deprecated?

Sure. We plan to introduce a new viewer porting from original catapult project. :-D


Is there any way to toggle unsafe mode via terminal??

I assume you are looking for a way to toggle unsafe mode via terminal using this extension?
If you need it, I could add a setting to this extension which directly enables/disables the unsafe mode. This could then be changed via terminal. Would this help?

New release v7: https://github.com/linushdot/unsafe-mode-menu/releases/tag/v7
This now allows to read and change unsafe mode using dconf:
dconf read /org/gnome/shell/extensions/unsafe-mode-menu/state
dconf write /org/gnome/shell/extensions/unsafe-mode-menu/state <true|false>

Thanks for implementing it. It works now.


Add better selection method for different lighting models

The fragment shader has multiple implementations of different parts of the lighting equation.
If someone wants to switch between different implementations, the only way is to edit the fragment shader and reload the page.
It would be great if there was a mechanism for choosing different implementations at runtime, or even editing the math within an implementation and seeing updates immediately.

You could go really far here... https://www.shadertoy.com/ ... ;-) but indeed, it would be nice to quickly compare the different approximations that are described in various papers.

As this is the sample implementation, there is no intention to use other BRDFs.


[CELEBORN-1107] Make the max default number of netty threads configurable

What changes were proposed in this pull request?
This change makes the maximum default number of Netty threads configurable. Previously, this value was hardcoded to 64, which could be small for certain environments. While it's possible to configure the number of Netty server and client threads individually for each module, providing an option to increase the default value offers greater convenience.
Why are the changes needed?
The change offers convenience.
Does this PR introduce any user-facing change?
No
How was this patch tested?
Added a UT

Hi @otterc , thanks for the PR! Please run UPDATE=1 build/mvn clean test -pl common -am -Pspark-3.3 -Dtest=none -DwildcardSuites=org.apache.celeborn.ConfigurationSuite to automatically update the md files.

@otterc, you could run UPDATE=1 build/mvn clean test -pl common -am -Dtest=none -DwildcardSuites=org.apache.celeborn.ConfigurationSuite command to generate configuration document of introduced config.

@otterc, you could refer to contributing guide: CONTRIBUTING.md#code-style.


Added equalToWithDiff for comparing strings with diff message

Fixed #209
Added a new Matcher equalToWithDiff for compare string. When mismatch happens, instead of output two strings, only lines that mismatch would be output. For words in those lines that mismatch would be surrounded by ~, the expected words would be surrounded by **.

To implement this, the external library io.github.java-diff-utils:java-diff-utils:4.5 is introduced.
test class IsEqualWithDiffTest is created

The library io.github.java-diff-utils:java-diff-utils:4.5  uses some jdk1.8 feature. That could be the reason why the compilation with jdk1.7 fails.

Going to try and kick start hamcrest, so if you want to get it merged, please rebase from the branch v2.3-candidates.
Still trying to understand how has permissions to perform a release.


Add checks for file existence

As a follow-up of #432, this adds minimal checks to the build.sh script to ensure at least one reference file from each submodule is in the build

failed checks

The check suite is now green using the merge commit built from this PR and origin/master with #432 included.
For comparison, the build from d7debcc alone (without #432) failed as expected due to the absence of the submodules - see https://github.com/sbesson/www.openmicroscopy.org/runs/1518467586?check_suite_focus=true


Slider control breaks/disappears when passing in a step value greater than 1

The Slider control supports passing in a step value, such that dragging the slider increments it by  at a time. This works as expected for values under or equal to 1, but fails on values greater than 1. For greater values, the slider disappears as soon as it receives a pointer down (it is clicked).
Looking at the code, it is hitting a divide-by-zero error in baseSlider.ts's _updateValueFromPointer call,specifically at
const mult = (1 / this._step) | 0;
this.value = this._step ? ((value * mult) | 0) / mult : value;
It seems like Javascript does not handle decimal values when performing bitwise operations, so the bitwise OR on the first line resolves to 0. Then the next line divides by that value.
Why are bitwise operations being used? Why is mult ever being set to 0, given the next line divides by it?
Repro

Bug repro on https://www.babylonjs-playground.com/#NGS9AU#343
Expected result: Step should increase by 2 at a time
Current result: Slider disappears (the editor shows the sphere's scaling is NaN)

Thank you. Going to look into it now! :)

Closing as fixed!


RNNs with transferable hidden state

Hidden state is not reset after every batch
Can transfer hidden state from one RNN to another

API:

Set the stateful argument to True
When the stateful argument is True, one of the following arguments should also be provided: hidden_state, batch_size, weights.
hidden_state:  Used to initialize with hidden state of another RNN.
batch_size: Used to initialize the hidden state with zeroes.
weights : The weights argument can be used to set the weights and hidden state together.
For example:  RNN1.set_weights(RNN2.get_weights()) will copy both weights and hidden states. If either RNN1 or RNN2` are stateless, only the weights will be copied.

Looks like Travis is failing again. We will probably have to update the Travis config to fix that. I'll look at it later today / tomorrow.

Shouldn't we have a special argument to Model.fit method to actually use statefullness in keras?
Without smart re-shuffling, the net will see row number i of the data, update its hidden state, and then proceed to use this hidden state at row i + batch_size, which is not what we want.

@elanmart that will still work if the user organized the batches before hand to account for that behavior. Which is actually too sensitive to choices of batch size and stuff. For sure this needs a careful implementation or high user awareness.

Which is actually too sensitive to choices of batch size and stuff. For sure this needs a careful implementation or high user awareness.

Agree, it's not clear to me, however, how this should be implemented: it's not only about reshuffling the data, it's also about reseting the hidden states: the last row of layer's hidden_state will reach the end of the data in one epoch, while the first row will take batch_size * nb_epoch to do it.

the number of epochs that it takes before resetting the hidden state is usually an open parameter for the user. I saw people a number like 4 in text modeling paper. It will also depend on the average length of your phrases. If they usually spread across 4 batches, that should be how long you wait before resetting.

Test are failing.
Rather than waiting for tests to fail on Travis, I recommend running them locally first. Install py.test, run py.test tests/ from the Keras folder.

Current code is functional. Now working on statefulness for sequences of variable lengths

nice @farizrahman4u! I PRed a suggestion of RNN reset state callback check it out in your patch-14

@EderSantana Thanks for the input, really helped me. I can not merge it as it is, because the code was intended for Seya's stateful GRUs, but my PR contains stateful LSTMs whose state is defined by two matrices. (h and c). Also I have to take into account multiple stateful RNNs in a single model.
Something like:
class ResetRNNState(Callback):
    """
    This is supposed to be used with stateful RNNs

    Parameters:
    ===========
    rnns: stateful RNNs
    func: a function that returns true when the states should be reset.
    states: initial state to which we reset the model when `func` is True.
    """
    def __init__(self, rnns, func, states=None):
        for rnn in rnns:
            if not hasattr(rnn, 'state'):
                raise Exception("Not stateful RNN")
        self.rnns = rnns
        self.states = None
        self.func = func

    def on_batch_end(self, batch, logs={}):
        if self.func(batch, logs):
            if self.states:
                for i in range(len(self.rnns)):
                    self.rnns[i].set_hidden_state(states[i])
            else:
                for rnn in self.rnns:
                    rnn.reset_hidden_state()

Can you resubmit a PR with the above code? (So that I dont take credit for your idea!)

@EderSantana Also i need some help on the step equations for making stateful RNNs work with variable length sequences.

@farizrahman4u all right I'll check it out and make the proper updates to the code


App crashes if debugging enabled and error is in the bundle

Current Behavior
Open the app, bundle loads, error flickers for a split second (if lucky) and then app crashes.
Expected Behavior
Open the app, bundle loads, error is shown and the app doesn't crash.
Notes:

Happens only when "Debug in JS" is turned on
The error in this specific case is undefined Variable. SOMETHING_DEFINED || 'default-value';
Erasing emulator content and settings and redeploying react-native run-ios makes it work.
If you enable debugging while seeing the error it will crash the app and you will have to repeat the step above

Haul Configuration (webpack.haul.js)
Almost as originally shipped with Haul with some extras:

It extends DefinePlugin definitions
Adds another folder as modules (so resolution of some specific modules work)
Adds JSX support by copying one of the module.rules and modifying the extensions

Your Environment

software
version

Haul
^1.0.0-beta.13

react-native
0.52.0

node
v9.8.0

npm or yarn
1.5.1

ps. CTRL+CMD+Z opens up devtools menu multiple times sometimes... is this haul issue or RN?

Closing due to inactivity.


fix IstioOperatorSpec wrong link

Hi @erdun. Thanks for your PR.
I'm waiting for a istio member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.
Once the patch is verified, the new status will be reflected by the ok-to-test label.
I understand the commands that are listed here.

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

/cherrypick release-1.6

@shamsher31: #23906 failed to apply on top of branch "release-1.6":
error: Failed to merge in the changes.
Using index info to reconstruct a base tree...
M	operator/cmd/mesh/root.go
Falling back to patching base and 3-way merge...
Auto-merging operator/cmd/mesh/root.go
CONFLICT (content): Merge conflict in operator/cmd/mesh/root.go
Patch failed at 0001 fix IstioOperatorSpec wrong link

In response to this:

/cherrypick release-1.6

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@shamsher31: new issue created for failed cherrypick: #24094

In response to this:

/cherrypick release-1.6

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.


Replacing Pistol & Syringe emojis with proper (old) versions

Hello,
I wanted to ask just incase, are the Pistol & Syringe emojis the proper ones in your modified Ripcord emoji Database?
For political reasons big tech giants & even Mozilla decided to violate the Unicode Consortium's specification for the Pistol emoji, which is supposed to render a firearm (handgun) and they replaced it with a water pistol.
This was an unilateral decision from them without prior side-effects research, and replacing the Pistol emoji with a water gun was such a stupid idea that it led innocent people into trouble when they used newer devices and used water gun emojis with people who saw them as firearms instead on older devices.
Then they did the same unilateral decision again of replacing another emoji, this time for health-agenda reasons instead of a valid technical reason to do so (the coronavirus pandemic, which has nothing to do with Unicode Consortium's Syringe emoji).
They changed the Syringe emoji which was supposed to depict a Syringe drawing blood to a more 'socially correct' version featuring an empty syringe, justifying their unilateral Consortium-breaking decision by claiming that the 'Syringe emoji was scaring people and made them hesitate to get the coronavirus vaccine'.

So just basically for the principle of it, I wanted to ask you if you would accept to correct them in your Ripcord emoji database to proper versions (as defined by Unicode)?
Links to these trivias:
The Syringe emoji: https://emojipedia.org/syringe
The Pistol emoji: https://emojipedia.org/pistol
The proper Pistol & Syringe emojis for Ripcord would be the Firefox OS 2.5 designs, which are the closest to Discord's emoji style.
Well, actually it's also for the purpose of letting you know that sometimes it's better to avoid using the latest emoji libraries.
Especially since you never know if some tech giants didn't sneakily replace them with unpredictably dubious & unrelated versions, which cause more trouble than it's worth.
So you could use the latest emoji revision first, then use older versions afterwards by overwriting any replacement conflict with the older version.
This ensures that both the latest new emojis are available while preventing the latest emoji revision from replacing the older ones with incorrect designs.
Thanks :)

I especially would add that it's much better to err on the side of caution and use the proper firearm design in all emoji-enabled programs for the Pistol emoji than use a weird water gun.
The firearm design will make people more cautious and think twice before using it while some weird water gun picture will likely get them in trouble for no reason just by innocently using it without being aware that other people might think it's a threat.
When an emoji might look violent or offensive, always use the offensive/violent version.
With the offensive version it's easy to think that we shouldn't use it rather than accidentally using it without bad intent.

Thanks for letting me know :)
I didn't know about that earlier. I researched this and came up with the conclusion that I will add these emojis according to the latest update of X (Twemoji-15.0.3) Pistol and Syringe Released on 14 August 2024.

@gdmeunier I just published a new version and changed those emojis. 😊


Fixes #16: Migrate to vitest

Transition from jest to vitest

Solving the problem with Husky when using Vitest

@Ilanaya Please check me. Everything seems to be working and there are no conflicts

I added the ability to view code coverage by tests

Yep, I didn't run tests but changes look good. BTW, did you like the feature of not importing 'describe', 'it' etc to the test files? If you do you can configure vitest to   do this for you

This is cool, I implemented it


[REMS-317] CQL to ELM follow up - fix preopulation

Describe your changes
Update the CDS Library FHIR Libraries to contain the CQL and ELM.
Update the TIRF Patient Enrollment Questionnaire to fix repopulation.
Issue ticket number and Jira link
REMS-317
Checklist before requesting a review

[x] I have performed a self-review of my code
[x] Ensure the target / base branch for any feature PR is set to dev not main (the only exception to this is releases from dev and hotfix branches)

Checklist for conducting a review

[ ] Review the code changes and make sure they all make sense and are necessary.
[ ] Pull the PR branch locally and test by running through workflow and making sure everything works as it is supposed to.

Workflow
Owner of the Pull Request will be responsible for merge after all requirements are met, including approval from at least one reviewer. Additional changes made after a review will dismiss any approvals and require re-review of the additional updates. Auto merging can be enabled below if additional changes are likely not to be needed. The bot will auto assign reviewers to your Pull Request for you.

I'm not sure why the linter is failing, it seems like a versioning issue


Centralize avatar generation/display logic

Maybe as simple as a custom Avatar component?

Default/placeholder status emoji should also be centralized somewhere.

Done, also this repo is outdated


Store individual SVD files in repo

The change set replaces the svd_data.zip file in the repo with a pyocd/debug/svd/data/ directory containing all the source SVD files, and setup.py auto-generates the zip file.
The original intent of storing svd_data.zip in the repo was to reduce the repo size (the zip is considerably smaller than the raw XML files), under the assumption that new targets and SVD files are added infrequently. But keeping only the zip in the repo caused two problems. First, it created merge conflicts and made it difficult to see what actually changed in the zip. Second, because the zip is a binary file, it is completely replaced each merge that touched it.
Storing the raw XML files is initially quite large. But each new SVD file adds only its additional size. And the merge/diff problem is fixed.
The data directory exists only in the repo. Both sdist and bdist_wheel releases include only the svd_data.zip file.  Thus, setup.py script will generate svd_data.zip if the data directory exists, and otherwise checks for the presence of a pre-built svd_data.zip (e.g. installing from sdist).

/morph test

/morph test


feat(@angular/cli): add option to enable parallel linting operations

Resolves #15482
Add --parallel option to ng lint command to run multiple lint operations in parallel

Closing since the TSLint builder is deprecated as part of the TSLint deprecation.
More info https://blog.angular.io/version-11-of-angular-now-available-74721b7952f7


Release v0.23.2

:book: CHANGELOG rendered

[ ] Referenced an issue explaining the need for the change
[ ] Updated all relevant documentation in docs
[ ] Updated all code comments where relevant
[ ] Wrote tests
[ ] Added entry in .changelog/

Blockers

[x] #1047

Codecov Report

Merging #1043 (22346de) into v0.23.x (49d3783) will increase coverage by 0.0%.
The diff coverage is n/a.

:exclamation: Current head 22346de differs from pull request most recent head 10e8734. Consider uploading reports for the commit 10e8734 to get more accurate results

@@           Coverage Diff           @@
##           v0.23.x   #1043   +/-   ##
=======================================
  Coverage     66.4%   66.4%
=======================================
  Files          209     209
  Lines        20949   20949
=======================================
+ Hits         13913   13915    +2
+ Misses        7036    7034    -2

Impacted Files
Coverage Δ

tendermint/src/block/commit_sig.rs
78.4% <0.0%> (-2.0%)
:arrow_down:

config/src/config.rs
55.2% <0.0%> (+0.1%)
:arrow_up:

light-client/src/types.rs
38.9% <0.0%> (+0.2%)
:arrow_up:

testgen/src/light_block.rs
76.6% <0.0%> (+0.5%)
:arrow_up:

testgen/src/vote.rs
84.8% <0.0%> (+0.8%)
:arrow_up:

Continue to review full report at Codecov.

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

Checked with a pending PR to ibc-rs, looks good!


Provide an initial manifest to dep init

It was suggested in slack that a dep init --ignore github.com/pkg/example would be helpful in cases where solve would otherwise fail. I can't find the link but someone also suggested that being able to set an alternate source during init for some packages would be helpful.
Rather than add a bunch of flags, I propose that that init should support reading in an initial/partial manifest. Init would do it's usual work, and merge that with the manifest (manifest wins) before solving.
To avoid questions of whether or not the manifest should be overwritten it would be a flag to init, dep init --initial-manifest /tmp/Gokg.toml and just like dep works today, require that Gopkg.toml doesn't exist at the root of the repository.

Dep was officially deprecated earlier this year, and the proposal to archive this repository was accepted. As such, I'm closing outstanding issues before archiving the repository. For any further comments, please use the proposal thread on the Go issue tracker. Thanks!


:boom: Merging GuildMember and User Class

Issue
In some places you can get either a GuildMember or User, this makes things function different in a DM.
How I would fix it
GuildMember just needs to subclass user so theres parameters that will always be available in DM & guilds no matter what. I think its better than passing 2 arguments into a function since the user slash command option should only return be one argument.

This will be in my next PR


x/build: bring back "broke the build" notifications

I monitor the dev.ssa dashboard for build failures, with decreasing frequency these days. It'd be nice to bring back the automatic notification.
cc @bradfitz

Sure would be nice!

@rsc, how is this a Go1.6 issue? It's not released with Go.
In any case, it's not exactly clear how this should work. Should a flake make it fire? Do you need N failures in a row first? What if the N failures in a row are different? How do you detect they're different? Parsing the text?
The easiest thing is to ignore flakes and just say any transition from ok to failure emails.
I suppose the coordinator could poll http://build.golang.org/?mode=json occasionally and post to Gerrit (which emails), since the coordinator already can post to Gerrit. By asking for the data from build.golang.org it would also catch builders like old-style builders like netbsd and solaris, which report directly to build.golang.org.
I'd prefer if people just don't break the build, though, so I've been spending my builder time primarily on making trybots better.
I'm happy to review code to resurrect this, though. I'm not sure where it lives before, or if it even makes sense to reuse any of the code. @adg?

The code is already there in the build dashboard, it's just broken and I
haven't had an opportunity to investigate why.
On 31 October 2015 at 03:25, Brad Fitzpatrick<EMAIL_ADDRESS>wrote:

@rsc https://github.com/rsc, how is this a Go1.6 issue? It's not
released with Go.
In any case, it's not exactly clear how this should work. Should a flake
make it fire? Do you need N failures in a row first? What if the N failures
in a row are different? How do you detect they're different? Parsing the
text?
The easiest thing is to ignore flakes and just say any transition from ok
to failure emails.
I suppose the coordinator could poll http://build.golang.org/?mode=json
occasionally and post to Gerrit (which emails), since the coordinator
already can post to Gerrit. By asking for the data from build.golang.org
it would also catch builders like old-style builders like netbsd and
solaris, which report directly to build.golang.org.
I'd prefer if people just don't break the build, though, so I've been
spending my builder time primarily on making trybots better.
I'm happy to review code to resurrect this, though. I'm not sure where it
lives before, or if it even makes sense to reuse any of the code. @adg
https://github.com/adg?
—
Reply to this email directly or view it on GitHub
https://github.com/golang/go/issues/12509#issuecomment-152576038.

Would still like this, and it would have potentially sped the work on Go 1.6, but too late now and obviously not going to gate Go 1.6.

cc @andybons

This would be useful both for the dev branches and for the subrepos (so we are notified when master breaks x/crypto or x/crypto breaks on 1.9).

This could even be in cmd/gopherbot (which is easy to hack on locally), looking at the build.golang.org failure results and trying to not spam too early and waiting until it's confident (e.g. make.bash failing is a real failure, but a test failure might be a flake unless we saw in N times in a row).
Look at x/build/cmd/retrybuilds for code that accesses the build.golang.org failure results.
/cc @toothrot


Http2FrameCodecBuilder.autoAckSettingsFrame(...) must be public

Motivation:
b3dba317d797e21cc253bb6ad6776307297f612e added AbstractHttp2ConnectionBuilder.autoAckSettingsFrame(...) as protected method and made it public for Http2MultiplexCodecBuilder. Unfortunally it did miss to also make it public in Http2FrameCodecBuilder
Modifications:
Correctly override autoAckSettingsFrame in Http2FrameCodecBuilder and so make it usable when building Http2FrameCodec.
Result:
Be able to also configure autoAckSettingsFrame when Http2FrameCodec is used.

@netty-bot Test this please

Testfailure is related to a race fixes in https://github.com/netty/netty/pull/9298

@netty-bot Test this please


Hide ToHashSet in .net472

When MoreLinq is using with net472 target, it gives an error:
CS0121	The call is ambiguous between the following methods or properties: 'System.Linq.Enumerable.ToHashSet(System.Collections.Generic.IEnumerable)' and 'MoreLinq.MoreEnumerable.ToHashSet(System.Collections.Generic.IEnumerable)'
https://learn.microsoft.com/en-us/dotnet/api/system.linq.enumerable.tohashset?view=netstandard-2.1

To avoid the conflict, explicitly import the extensions you need from MoreLINQ.

Thank you for the suggestion! However, given the current stage of .NET's evolution, it's quite common for developers to support code across at least two frameworks. Most would prefer do not write specific code just to handle some minor differences.
Since there's already a dedicated net8 target, I believe many others would also appreciate adding a dedicated net472 target. It’s more likely that developers would prefer using targeted netX framework versions rather than relying on a generic netstandard2 artifact.


Fixed blend shapes disappearing in FBX Importer

This fixes duplicate blend shape names being added to the mesh instance causing the renderer to not render the blend shapes properly or at all.
Sponsored by IMVU.
Co-authored-by: K. S. Ernest (iFire) Lee<EMAIL_ADDRESS>

Thanks!


StyleCop crashing Visual Studio with NotSupportedException

Hey, I'm from the Visual Studio reliability team, and StyleCop is crashing Visual Studio on this path:
       System.NotSupportedException: 'Specified method is not supported.'
 	KERNELBASE.dll!RaiseException(unsigned long dwExceptionCode, unsigned long dwExceptionFlags, unsigned long nNumberOfArguments, const unsigned long * lpArguments) Line 937	C
 	[Managed to Native Transition]
>	System.Windows.Forms.dll!System.Windows.Forms.Control.MarshaledInvoke(System.Windows.Forms.Control caller, System.Delegate method, object[] args, bool synchronous) Line 7846	C#
 	System.Windows.Forms.dll!System.Windows.Forms.Control.Invoke(System.Delegate method, object[] args) Line 7373	C#
 	StyleCop.VisualStudio.dll!StyleCop.VisualStudio.AnalysisHelper.AnalyzeComplete(object sender, System.EventArgs e)	Unknown
 	StyleCop.VisualStudio.dll!StyleCop.VisualStudio.AnalysisThread.AnalyzeProc()	Unknown
 	mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(object state)	Unknown
 	mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx)	Unknown
 	mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx)	Unknown
 	mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state)	Unknown
 	mscorlib.dll!System.Threading.ThreadHelper.ThreadStart()	Unknown
 	[Native to Managed Transition]
 	kernel32.dll!75e96739()	Unknown
 	kernel32.dll![Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]	Unknown
 	ntdll.dll!__RtlUserThreadStart(long(__stdcall*)(void *) StartAddress, void * Argument) Line 1152	C
 	ntdll.dll!_RtlUserThreadStart(long(__stdcall*)(void *) StartAddress, void * Argument) Line 1069	C

Unfortunately, due to the way Windows Forms rethrows the exception, the original stack of the NotSupportedException is being thrown away, but it appears something of inside of AnalyzeCompleteMain is throwing this exception.
We have no repro, and this is just from crash reports being sent to Microsoft.
We're seen about 1000 hits of this crash across all versions of VS from 16.7 -> 16.9, the past 90 days all against StyleCop.VisualStudio.dll [version: 6.2.7489.1].

Thanks for the report.
I tried to repro this on VS 16.8.5 with several different solutions and was unsuccessful. If anyone encounters this and is able to provide a readily-available codebase this can be reproduced with, I'll work on a fix ASAP. I'd also gladly accept a PR.

I have VS2019 16.8.5 and it fails exactly like it was described in the original post. Here is a stack trace:
Application: devenv.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.NotSupportedException    at System.Windows.Forms.Control.MarshaledInvoke(System.Windows.Forms.Control, System.Delegate, System.Object[], Boolean)    at System.Windows.Forms.Control.Invoke(System.Delegate, System.Object[])    at StyleCop.VisualStudio.AnalysisHelper.AnalyzeComplete(System.Object, System.EventArgs)    at StyleCop.VisualStudio.AnalysisThread.AnalyzeProc()    at System.Threading.ThreadHelper.ThreadStart_Context(System.Object)    at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)    at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)    at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)    at System.Threading.ThreadHelper.ThreadStart()
Here is what I'm seeing. If StyleCop detects no violations on the file, there is no crash. If there is at least 1 violation, StyleCop displays the number of violations in the error list panel and then VS2019 crash occurs. Here is a sample output of violations, which then triggers VS2019 crash.
`
------ StyleCop 6.2 (build 6.2.7489.1) started ------
------ StyleCop completed ------
========== Violation Count: 6 ==========`

@sishik1 Thanks!

Can you open another instance of Visual Studio, make sure the Debug -> Exception settings look like this:

Tools -> Attach to Process -> Choose the other devenv instance and make sure it looks like this:

Then repro the situation?

When it breaks on the original thrown exception, can you Paste the stack and exception message?

I followed the steps to try to capture the stack and exception message, but it looks like it's the same stack trace as above.

@sishik1 Can you try again but this time check all the boxes to stop all exceptions and repro the situation? See if that stops earlier.

@davkean This is all I could capture. Hope that this helps:
System.NotSupportedException
HResult=0x80131515
Message=Specified method is not supported.
Source=System.Windows.Forms
StackTrace:
at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
at StyleCop.VisualStudio.AnalysisHelper.AnalyzeComplete(Object sender, EventArgs e)
at StyleCop.VisualStudio.AnalysisThread.AnalyzeProc()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
This exception was originally thrown at this call stack:
[External Code]

Version 6.3.7806.0 of the VS extension has been published with this fix.

Thanks @csdahlberg @SanjayGuntur!


Animating CSS properties

I'd love to be able to animate box-shadow, border-radius, etc.

Most things are animatable through Framer now.


Use more natural zooming on mobile

Right now you have to hit the plus/minus buttons even on mobile in order to zoom the document. This is really strange especially since pinch-to-zoom is active as well. I think the best way to go on mobile is maybe to render at a "natural" size, and let the browser control the zoom, similar to a web page.

Is there any progress.I'm expecting this new feature.

+2 for this

Someone got a solution for this 2 year old issue?

Nothing has been done about this as far as I know. I refer to my previous comment in https://github.com/mozilla/pdf.js/issues/2582#issuecomment-30316908. We invite anyone to submit a PR for this once there is working code.

Would love to see a solution for this. At the moment this is the only thing that is stopping me from using PDF.JS :(

Pinch zoom would be great! I found this jquery plugin that uses pdf.js and has pinch zoom and swiping pages. http://touchpdf.net/demo/index.htm But it would be good if it was build in pdf.js from the start :-)

+1 Would love to see this here.

+1, also would the example elsewhere that uses hammer.js to capture the event and then call the pdf.js zoom functions not be a relatively "clean" method?

@sporkman what i did in the end was to render the canvas really large, then to use native browser zooming to allow zooming (my app was designed for touch devices). i can share the source if needed.

@rorysmorris how did you manage to get around disabling native browser zoom when pinching while scrolling? I have also implemented hammer.js on pdf.js but cannot get around that particular issue

Have you tried to use the touch-action CSS property?
https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action
On Oct 5, 2016 3:15 PM, "toplay3"<EMAIL_ADDRESS>wrote:

@rorysmorris https://github.com/rorysmorris how did you manage to get
around disabling native browser zoom when pinching while scrolling? I have
also implemented hammer.js on pdf.js but cannot get around that particular
issue
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/mozilla/pdf.js/issues/2582#issuecomment-251670785,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABTUT83E287dv4LSs4T_TGnzwe8yqCMYks5qw6LmgaJpZM4AXvZ2
.

@Rob--W
wow genius! works perfectly now! thanks so much!

When is this issue planning to be implemented? Its been quite some time since this issue was originally posted. Needless to say +1!

I also check this issue every week since a year now. Would be awesome to have it in core or as a addon with hammer js.
Am 14.10.2016 15:35 schrieb Yahya Uddin notifications@github.com:When is this issue planning to be implemented? Its been quite some time since this issue was originally posted. Needless to say +1!
—You are receiving this because you commented.Reply to this email directly, view it on GitHub, or mute the thread.

To be more constructive on this thread, here is requirements for UI (if somebody wants to really help out and speed out the resolution of the issue) and there is nothing specific to PDF.js:

to zoom and pan set of DIVs (with different sizes) that are vertically stacked
not allowing user to get lost in viewport at different scales
detect and inform when a div visibility or scale changes.

The latter is important since we don't want paint all pages at max resolution on low powered devices. If somebody will have prototype, find to me at IRC I'll help to hook PDFPageView for visibility and scale events. Shall I also set 5-good-beginner-bug?

I agree that this would be a good beginner bug, so I'm labeling it as such.

This is not just for mobile, I'm also getting feature requests to support two-finger trackpad zooming (on Mac).
From my brief investigation, I found that there is no cross-browser way to support zoom gestures yet.

Safari has some specific gesture events: https://developer.apple.com/reference/webkitjs/gestureevent
Firefox add-on code has access to gesture events: https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mouse_gesture_events
Some bugzilla discussion on converting pinch events to ctrl-wheel (with input and references to other browsers): https://bugzilla.mozilla.org/show_bug.cgi?id=1052253

+1

@toplay3 and @Rob--W What did you do to get it working? Adding "touch-action: auto;"? To what? Thanks!

Hi everyone, like most of you I'm interested in getting pinch to zoom working, has anyone been able to do so, even by using external libs like hammer? If so, what is the set up? @rorysmorris @toplay3 @Rob--W thanks

👍

@rorysmorris any advice about the above question? thanks :)

Hi @squallstar - at first I tried to use a JS pinch and zoom library to handle this for me, but I found a few problems. It didn't zoom how i wanted, i.e. it would allow the PDF canvas to go completely off-screen, when i never wanted the edges to be away from the screen edge, if that makes sense. In the end, I just used the native zooming that's built into the mobile browser to pinch/zoom/navigate. I setup PDF.js to render the PDF at 3x the pixel size it was being displayed, then scaled down with CSS, so it would remain fairly crisp when zoomed in. If you need any help, I could show you a working example of my implementation.

@rorysmorris thanks, it would be great if you show me (or send a snippet) or how you implemented it. Much appreciated 👍

@squallstar send me an email through the contact form on my site and I'll get a demo over to you later on today :) http://rorymorris.co.uk

@squallstar This is not really a solution but kind of a workaround. Disadvantages are: Performance, result has devices dependency, zoom is not endless.

The performance is greatly improved by using native scrolling and panning, as opposed to using JavaScript to perform those tasks. Maximum zoom-level is easily configurable with a meta viewport tag, and who wants endless zoom on a rasterised image anyway? Great looking "JS-ImageResizer" library by the way! @MickL

Performance was more a guess. Lets say using an iPhone Plus in landscape @ 2208px width. Now you would have a 6624px Canvas. Depending on the PDF complexity and count of pages you may have 3 rendered 6000px Canvas with HTML-text, graphics etc.
I guess your solution is great for a lot of people. But as you described its more a fake-zoom than it actually triggers PDF.js zoom and rerendering :)

True, performance-wise from that aspect isn't great. In my particular use-case for this, I had to render out 300+ page PDF's at iPad (retina) size, as well as have a drawing canvas on top of each one!
PDF.js would crash the browser (iOS Safari) at around 10 rendered PDF pages, so in the end I had to only show one PDF page at a time with previous/next buttons. Not ideal! And I agree, native zoom functionality built into PDF.js would've been a lot nicer.

checkout kamihq.com for working pinch-zoom example

@rorysmorris I've sent you my email yesterday evening through the contact form, any chance you can send me the example you were talking about? :) thanks

Can anyone who has a working example (@rorysmorris, @Rob--W, etc) please share?

@rorysmorris I tried to contact you through your website. If anyone has a working example of this, can you please share?

@ltullman @hetalv985 I managed to have it working, check my gist here:
https://gist.github.com/squallstar/1d720e93eabe7f60dc61b547d2c19228
simply paste that to the end of viewer.html 👍  that's it.

Thanks squallstar. But we are not using the viewer.html. We are rendering the pdf in our iOS mobile app inside a div tag. How do we use this feature in that case? Do we need to include the viewer files?

So we have the function handleMouseWheel which is very similar. Why not use the exact same function with touch gesture oder hammer js?

Unfortunately it's not that easy. Please refer to my previous comment at https://github.com/mozilla/pdf.js/issues/2582#issuecomment-30316908. We need to limit the amount of touch gestures so that the canvas is not re-rendered on every delta change, which is a major performance issue. If someone is willing to work on this, feel free to submit a PR and we'll review it.

If thats the only issue... :)

I invested alot of time in this. Actually it seem possible but there are several problems i couldn't solve:

hammer.js only works on pinchend (pinchmove always gets canceled when pdf.js zooms)
I could not scroll perfectly to the center of pinchend even though i used the same method as mousewheel-zoom does
I tried to add css transformation on pinchmove which would give great performance but again i was not able to scroll perfectly (position #viewer with css translate)
hammer.js prevents any other touch-action(in our case regular page scroll) so i had to modify hammer.js to only prevent when 2 fingers are used

Even if all problems would be solved iOS 10 allows page-zoom even when it is disabled with user-scalable=no. A few times preventDefault() is not working and the whole page is zoomed. This would lead in to major issue for the end user (only way to get out is to double-tap the toolbar).

@MickL I gave it a try. I was able to avoid the "pinch zoom" cancellation by adding the CSS property "pointer-events: none" to the classes pdfViewer and page (and calling stopPropagation + preventDefault when viewerContainer dispatches double touch events so the entire page doesn't zoom on iOS).
I'm having the same issue you describe of not having the perfect zoom position event when I use the modified mousewheel method (pass the next scale to be applied, current "middle position" or target and the delta of "middle position" to know how much to move to left, right, up, down, managed by pdfViewer.container.scrollLeft and pdfViewer.container.scrollTop). There seems to be always an error introduced maybe by the timeout that keeps the viewer from rendering on every double touch event.
Any hint on where to apply those CSS scale transformations to avoid rendering everything on every scale delta?

@betovidal I know it's been a few months since your last post. Have you made any updates on getting pinch-zooming to work in PDF.js? I'm working on a project for work that requires this.
Maybe we could work together to figure something out?

@squallstar I tested your solution on iOS very briefly. But so far, it's working for me! Thanks for sharing your solution 💯

@vuinguyen thanks! I'm glad it worked for you too ;)

+1

Hey,
Can't we pinch zoom and re-render the page? In my case I want this feature to work width touch desktops.

I saw that "Box Content Preview" (which uses PDFJS to show PDFs) does a good implementation for this. This is a Codepen of their viewer:
https://codepen.io/box-platform/pen/rmZdjm
And this is the pull request for their fix:
https://github.com/box/box-content-preview/pull/567
I thought that maybe someone could make something similar for PDFJS, based on their solution. I'll try to implement it myself and post the code if I do. I'll be great if someone else (that probably have more experience than me) can also collaborate and try it!

@amurillo17 thanks for the link. The Box solution looks fantastic. I'd love to see something like this working with pdfjs. Please keep us updated on your progress!

any updates ? Thanks

Are there any simple ways to add this feature to the existing viewer?

Are there any simple ways to add this feature to the existing viewer?
No.

@prohtex Hm, that's pretty sad. I hope, that such a feature will be added soon after all these years.

@prohtex Hm, that's pretty sad. I hope, that such a feature will be added soon after all these years.

It will only be added when someone steps up and integrates code into a PR (not me, sadly), and even then, it could take years.

I have a workaround, but it is "Android only" as I don't care about iOS in my "Firefox for Android" addon:
https://github.com/M-Reimer/android-pdf-js/blob/master/patches/pdfjs-pinch-gestures.js
My Makefile just appends this to "web/viewer.js". It registers to the touch events and translates the pinch gestures to button clicks.

I have a workaround, but it is "Android only" as I don't care about iOS in my "Firefox for Android" addon:
It works on my iPad as well, but it feels a little bit sluggish and not very natural. It zooms one step after each pinch. So you have to release the fingers to make it zoom and it doesn't matter how far of a distance you have pinched. Is this the normal behavior, or just a device-specific bug? Thank you anyways, cause this is a step into the right direction.

It works on my iPad as well, but it feels a little bit sluggish and not very natural. It zooms one step after each pinch. So you have to release the fingers to make it zoom and it doesn't matter how far of a distance you have pinched. Is this the normal behavior, or just a device-specific bug? Thank you anyways, cause this is a step into the right direction.

Looking at the code, this is not a viable solution or even a good workaround. All this does is watch for zoom events and simulate clicking on the [-] [+] buttons with jQuery.

@prohtex Exactly. If you try it, it does something, but it doesn't work well at all.

As I said: Not perfect but better than nothing.
At least for me it's easier to do the pinch gesture than to hit a small zoom button on a small mobile screen. It makes gestures work that every mobile device user expects to work.

It works on my iPad as well, but it feels a little bit sluggish and not very natural. It zooms one step after each pinch. So you have to release the fingers to make it zoom and it doesn't matter how far of a distance you have pinched. Is this the normal behavior, or just a device-specific bug? Thank you anyways, cause this is a step into the right direction.

It hits the buttons. "Natural zooming" is not possible with this simple approach and I don't want to mess too much with PDF.js. This is not the goal of my Addon.
But it should be possible to do multiple button presses depending on how far the fingers have moved. I'll try that.

Looking at the code, this is not a viable solution or even a good workaround. All this does is watch for zoom events and simulate clicking on the [-] [+] buttons with jQuery.

I'm open to suggestions, but as this is part of an Addon which just wants to make PDF.js usable as PDF viewer inside Firefox, I won't do deep modifications.
BTW: There is not a single line of jQuery in my code. This is raw JavaScript.

It should be actually possible to do the zoom steps while moving the fingers...
I'll try to do some more improvements, but the only communication path, I'll use, are the two buttons that I'll remote-control. This way my code doesn't interfere with PDF.js.

BTW: There is not a single line of jQuery in my code. This is raw JavaScript.
I stand corrected. Hoping for a mature solution soon.

The way to accomplish this is by using css transformation while pinch-zoom. Also the movement of the fingers needs to be applied not just the zoom. Then on pinch-zoom-end you can reset css transformation and apply actual zoom and scroll to pdf.js.

P.S. Using jQuery inside a non-jQuery project already seems like a bad practice to me.

Where does @M-Reimer use JQuery? As he already stated, his workaround does only use plain Javascript.

Yeah.. my bad. Point being, this solution doesn't work well.

Updated so the distance between fingers changes the zoom amount:
https://github.com/M-Reimer/android-pdf-js/blob/master/patches/pdfjs-pinch-gestures.js
It is not possible to zoom while moving the fingers as, for some reason, the actual zoom and redraw causes the touch event to somehow "end".
Again: Better than not handling the gesture at all.

@M-Reimer Thank you very much for your work. At least, it's an improvement compared to the last version. Maybe someone finds a solution to make it redraw while zooming. Or it might be possible to temporarily zoom using css transformations and then redraw it eventually after the touch gesture ends.

@anvaka Looked into the case and it seems like there might be a rather simple solution. Unfortunately I currently don't have the time to test it, but maybe one wants to try and test it.

Is there still no fix for this issue? I'd like to use pdf.js on mobile but without the ability to zoom it is mostly useless on smaller screens.

I made it work without the use of hammer.js but since it was for a customers project i cant share the code. I implemented pinch and doubletap and zoomed with css and on pinchend i zoomed pdf.js. Some elements require to set width/height and some can be transformed with css-transform. Also while zooming the scroll-watch of pdf.js viewer.js has to be prevented. Took me lot of time but it worked pretty well in the end.

Is there still no fix for this issue? I'd like to use pdf.js on mobile but without the ability to zoom it is mostly useless on smaller screens.

Until a developer experienced with the pdf.js codebase steps to offer a solution, it will be up to each person who implements pdf.js to cobble something together. Doesn’t seem to be a big priority for this project.
https://github.com/mozilla/pdf.js/issues/2582#issuecomment-539660914

https://gist.github.com/jsprpalm/12217feab2f1acc14bd8e8508291619e
@jsprpalm  thank you works great needs a fix please someone help to fix

@aidrouge https://gist.github.com/larsneo/bb75616e9426ae589f50e8c8411020f6

@aidrouge https://gist.github.com/larsneo/bb75616e9426ae589f50e8c8411020f6

I've added this one to my PDF viewer addon. Seems to work pretty well.
https://addons.mozilla.org/android/addon/android-pdf-js/

Works but seems to be wreaking havoc on rendering of text in OCR’d PDF’s

For me working more natural setting this:
<meta
      name="viewport"
      content="width=device-width, initial-scale=1, maximum-scale=10.0, minimum-scale=1.0"
    />

I have a question. What is this link? Is it what has said very long time?
https://www.integratingstuff.com/2014/09/14/displaying-a-part-of-a-pdf-page-and-reading-acroforms-with-pdf-js/

I have the same question as @KazysNoobiys.
minimum-scale on the viewport doesn't affect the zooming

I'm working on another work around:  a transparent css layer overlaying pdf.js to handle various swipe functionality.  The overlay portion works now, but I don't know what functions to call.
if(swipe=='left')   ????
What function would I call in order to advance to the next page or backup to the previous page or zoom?

save your time & life, edit your .html file like this
// delete the 'maximum-scale'
<meta name="viewport" content="width=device-width, initial-scale=1">

eg. https://github.com/mozilla/pdf.js/blob/master/web/viewer.html#L26

https://github.com/manuelstofer/pinchzoom is good

I'm designing for Android and iOS. Several people mentioned modifying the meta tag in the viewer.html file to something like this:
<meta       name="viewport"       content="width=device-width, initial-scale=1, maximum-scale=10.0, minimum-scale=1.0" />
On Android, this does not seem to have any effect. Pinching does nothing on the PDFs in the viewer. Has anyone successfully used the native zooming on Android within the viewer.html?

Sorry but is there any progress?

in pdf.js comment out
    // window.addEventListener("touchstart", webViewerTouchStart, {
    //   passive: false
    // });

then the native blurry zooming by <meta will work again.
but if you use desktop browser and enable devtools/mobile mode , pinching on the touchpad will change the pdf canvas zoom directly...

Any news on this? Isn't this a super desired feature? Scrolling on desktop using Ctrl+Mousewheel is so super smooth, why not just offer this behavior for pinching?

Seven years later? No one interessted anymore in using PDF.js with gestresst? Or what I have missed?

🎉🎉🎉🎉🎉


Redesign methods and structures for multi-element and IAP combinations

Some of the more realistic use cases in the CESMIX universe are systems with multiple atom types (i.e., HfO2, HfB, Hydrogen/Palladium cluster). In such systems there are often 2 modeling choices that occur: (1) the forces between atoms is modeled as a combination of potentials (i.e., an empirical potential like ZBL and a basis potential like SNAP) and (2) the function that is used to calculate the force between two atoms (atom_i, atom_j) might depend on the elements of atom_i and atom_j (i.e., in the GaN example Ga-Ga, Ga-N, and N-N are all modeled differently).
In the hope of providing flexibility and ease of use for users of InteratomicPotentials.jl, I think there should be some mechanism available to easily describe the modeling choices of the system. An example could be something like what is implemented in Turing.jl:
## GaN <: CompiledModel
@model GaN(q_Ga, q_N, rcut_Ga_Ga, rcut_N_N, rcut_Ga_N, ε_Ga, σ_Ga, ε_N, σ_N, a, ρ) = begin
 # Define Galium-Galium Interaction
   :Ga ~ :Ga -> Coulomb(q_Ga, q_Ga, e0, rcut_Ga_Ga) + LennardJones(ε_Ga, σ_Ga)

 # Define Nickel-Nickel Interaction
   :N ~ :N -> Coulomb(q_N, q_N, e0, rcut_N_N) + LennardJones(ε_N, σ_N)

 # Define Galium-Nickel Interaction
  :Ga ~ :N -> Coulomb(q_Ga, q_N, e0, rcut_Ga_N) + BornMayer(a, ρ)
end

With such a model, you could compute the energy and force like so:
potential_energy(A, GaN) # A <: AbstractSystem
force(A, GaN)

There are some challenges with this approach. First, I have no idea how to implement such a thing in Julia (help?). Second, if a CompiledModel contained a BasisPotential that needed to be fitted (i.e., SNAP). It would be helpful to extract the descriptors associated with that potential. Normally you would invoke the code
descriptors = evaluate_basis(A, snap)

But this could become more complicated take the following example:
## Suppose we are modeling a cluster system with Hydrogen and Palladium. Suppose we want Hydrogen-Hydrogen,
## Hydrogen-Palladium, and Palladium-Palladium atoms, to interact with the same SNAP potential but we also want
## Hydrogen-Hydrogen atoms to have an extra Bessel potential.
@model Cluster(β_SNAP, β_Bessel, SNAPParams, BesselParams) = begin
 # Define Hydrogen and Palladium Interaction
   :P ~ :P -> SNAP(β_SNAP, SNAPParams)
   :P ~ :H -> SNAP(β_SNAP, SNAPParams)
  :H ~ :H -> SNAP(β_SNAP, SNAPParams) + Bessel(β_Bessel, BesselParams)
end

This model only needs the single SNAP potential (not three separate SNAP potentials) and single Bessel potential. If I call the descriptors for this model, I want to make sure that they are separated into the SNAP descriptors and Bessel descriptors. Furthermore, for solving linear systems (those generated by SNAP, ACE, etc.), it is important to separate out the so-called 'reference' energies and forces provided by the empirical potentials from the contributions of the BasisPotentials.

I don't fully understand the BasisPotentials, but my first thought at least for EmpericalPotentials, would be something like this:
struct HybridPotential <: ArbitraryPotential
    interactions::Dict{Set{Symbol}, EmpericalPotential}
    rcutoff::AbstractFloat
end

get_potential(p::HybridPotential, A::AbstractSystem, i::Integer, j::Integer)
    p.interactions[Set([atomic_species(A, ii), atomic_species(A, jj)])]
end

function force(A::AbstractSystem, p::HybridPotential)
    f = fill(zeros(3), length(A))
    nnlist = neighborlist(A, p.rcutoff)

    for ii in 1:length(A)
        j = nnlist.j[ii]
        r = nnlist.r[ii]
        R = nnlist.R[ii]
        for (jj, rj, Rj) in zip(j, r, R)
            fo = force(Rj, rj, get_potential(p, A, ii, jj))
            f[ii] += fo
            f[jj] -= fo
        end
    end
    SVector{3}.(f)
end

function potential_energy(A::AbstractSystem, p::HybridPotential)
    e = 0.0
    nnlist = neighborlist(A, p.rcutoff)

    for ii in 1:length(A)
         j = nnlist.j[ii]
        R = nnlist.R[ii]
        for (jj, Rj) in zip(j, R)
            e += potential_energy(Rj, get_potential(p, A, ii, jj))
        end
    end
    e
end

function virial(A::AbstractSystem, p::HybridPotential)
    v = virial_stress(A, p)
    v[1] + v[2] + v[3]
end

function virial_stress(A::AbstractSystem, p::HybridPotential)
    v = zeros(6)
    nnlist = neighborlist(A, p.rcutoff)

    for ii in 1:length(A)
        r = nnlist.r[ii]
        R = nnlist.R[ii]
        for (rj, Rj) in zip(r, R)
            fo = force(Rj, rj, get_potential(p, A, ii, jj))
            vi = rj * fo'
            v += [vi[1, 1], vi[2, 2], vi[3, 3], vi[3, 2], vi[3, 1], vi[2, 1]]
        end
    end
    SVector{6}(v)
end

This is just off the top of my head, so the names could probably use some work. I could also come up with a way to dispatch things to avoid having the duplicated code (basically something along the lines of make this the default implementation for all EmpericalPotentials, make the default implementation of get_potential just fall through for normal EmpericalPotentials, and have HybridPotential subtype EmpericalPotential), but this seemed like a good format to get the idea across.
So then the usage would be something like this:
GaN = HybridPotential(
    Dict(
        Set([:Ga, :Ga]) => _____,
        Set([:N, :N]) => _____,
        Set([:Ga, :N]) => _____
    ),
    rcut
)

If you don't want all the initialization syntax, we could probably add some sort of macro, though I'll admit that isn't something I have experience with. Does this design accomplish the main things you are looking for? The one thing I can see it doesn't do is handle different rcut for each potential. If that is important we would have to change the order of steps (i.e. have separate ball trees for each pair of atom types (3 in the case of this example) -- this feels doable but would certainly add some more overhead).
You can also pretty easily add a method of Base.+ so that the sum of two potentials yields a potential that dispatches the force, potential_energy, viral_stress, and virial functions in roughly 10 lines. Something like this:
struct CombinedPotential{A<:ArbitraryPotential, B<:ArbitraryPotential} <: ArbitraryPotential
    p1:A
    p2:B
end

Base.:+(p1::A, p2::B) where {A <: ArbitraryPotential, B <: ArbitraryPotential} = CombinedPotential{A, B}(p1, p2)

force(R::AbstractFloat, r::SVector{3,<:AbstractFloat}, p::CombinedPotential) = force(R, r, p.p1) + force(R, r, p.p2)
potential_energy(R::AbstractFloat, p::CombinedPotential) = potential_energy(R, p.p1) + potential_energy(R, p.p2)

That's the gist of it anyway. I'd have to look a bit more how you are doing things for types other than the EmpericalPotential side of the tree.
If you want me to implement any of this stuff, just let me know and I'll gladly code it up in a PR.
Reading your summary of the SNAP side of things, I have some thoughts about how you could go about it, but there is enough of a gap in my understanding that I'll hold off for now. If you want my (half-formed) thoughts on that, it will be easier to convey live when I can get some real time answers to fill in those gaps.

Regarding the modeling of problems such as GaN, an alternative based on multiple dispatch could be the following:
lj_Ga_Ga = LennardJones(ε_Ga, σ_Ga); lj_N_N = LennardJones(ε_N, σ_N)
c_Ga_Ga = Coulomb(q_Ga, q_Ga, e0); c_N_N = Coulomb(q_Ga, q_N, e0);
c_Ga_N = Coulomb(q_Ga, q_N, e0); bm_Ga_N = BornMayer(a, p)

function potential_energy(particle1::Ga, particle2::Ga)
  r = position(particle1) - position(particle2)
  return  potential_energy(r,c_Ga_Ga) + potential_energy(r,lj_Ga)
end

function potential_energy(particle1::N, particle2::N)
    r = position(particle1) - position(particle2)
    return  potential_energy(r,c_N_N) + potential_energy(r,lj_N)
end

function potential_energy(particle1::Ga, particle2::N)
    r = position(particle1) - position(particle2)
    return  potential_energy(r,c_Ga_N) + potential_energy(r,bm_Ga_N)
end

function potential_energy(particle1::N, particle2::Ga)
   return potential_energy(particle2, particle1)
end

This would avoid directly modeling the GaN potential.

If we need more flexibility, we can add one more parameter, something like this:
struct GaN <: InteratomicPotential end

function potential_energy(particle1::Ga, particle2::Ga, p::GaN)
  r = position(particle1) - position(particle2)
  return  potential_energy(r,c_Ga_Ga) + potential_energy(r,lj_Ga)
end

function potential_energy(particle1::Ga, particle2::Ga, p)
  r = position(particle1) - position(particle2)
  return  potential_energy(r, p)
end

If we need to compute SNAP plus ZBL:
s = SNAP(...); z = ZBL(...)
p = potential_energy(particle1, particle2, s) + potential_energy(particle1, particle2, z)

That's what comes to my mind at the moment :)

From having read this, I have to say I like @emmanuellujan's approach best.
But I think before designing the interface we should think about a few crazy things one would want to be able to do and try to ensure the interface is able to do it, e.g.

Switch potentials based on a distance cutoff or something (angle ? dihedrals? local environment?)
Easily switch or tweak parameters (e.g. update them or differentiate with respect to them)
What about linear combinations, not just addition?

Being able to have full flexibility in defining potentials is quite important in my opinion for our toolkit and as these examples illustrate combinatorial complexity quickly explodes, so I would not start writing such high-level macros or convenience functions until setting up the problem becomes a pain. Undoing these abstractions later is much harder than adding them.
I often found (similar to what @emmanuellujan suggested) plain functions to be a good starting point. Why not just provide a good set of functions that are easy-to-use building blocks and leave the composition completely to the user (and ask him to define his types for that purpose)? The part I don't like about @emmanuellujan's approach that I am not so sure about is to use types to encode atoms. For me this is just "data" and not so much worth a type. Also I guess that leads to potentially a lot a lot of types (think about 4-body interactions for example).
So perhaps just provide a Functor for each kind of interaction as basic building blocks (holding the state of the parameters) and then leave the combination of it all completely to the user. Then for standard tasks (i.e. one type of potential for each atom type and interaction) provide a small set of convenience assemblers to do that combination. As time passes we will notice what are frequent patterns we need and we can add more convenience assemblers for these. We also keep full flexibility: If people need more fancy things, they can use those building blocks to do their own stuff. In the end as long as the final evaluation function they produces matches the requirements they are good to go.


spline interpolation gets into weird state

currently if we try to define an oval, the spline makes the camera rotate in a really weird way which is counterintuitive.
see green cam on video:
https://user-images.githubusercontent.com/14854811/192383606-f9ae9903-5677-4462-beef-9d499350e029.mov

Fixed #858


Feat: Improve the Readiness Check page

Description
Additional details were added to explain the different kind of health check endpoints, workaround for 3.2 and lower, as well as additional resources and recommendations for users. Corrections were also made (wrong ports were used in the previous examples prior to this PR as one example).
Jira: https://konghq.atlassian.net/browse/DOCU-3591
Wiki: https://konghq.atlassian.net/wiki/x/FwD_vw (written by @hbagdi - thank you Harry!)
Testing instructions
Preview link:
Checklist

[x] Review label added
[x] PR pointed to correct branch (main for immediate publishing, or a release branch: e.g. release/gateway-3.2, release/deck-1.17)

Tagging @Guaris for review as owner of the associated Jira.


select2 enabled field

Problem Description
I wanna keep a select field with select2 js enabled in my custom module settings. then user can easily type and search the value within the dropdown. but currently it is not possible to do. Anyone can guide me please?

I'm afraid custom fields for module settings are not yet supported. We are planning to add support soon, hopefully sometime next month.

If you are fine with single select values, maybe you could write some JavaScript to listen for DOM changes, check if your modules settings are shown, find the select and apply select2 to it.

If you are fine with single select values, maybe you could write some JavaScript to listen for DOM changes, check if your modules settings are shown, find the select and apply select2 to it.

Yes, i did in that way. But what happens is, i initiated the select2 and then select the values and saved it. Then when i open it again the values are not set. Values are resetting from the actual select.
So if you can help me where does this values store? When we save, the ajax call has all the data. So i checked some places and edited the values. But no purpose of it.  These are the places i found values stores,

ETBuilderBackendDynamic.shortcode_object
ETBuilderBackend.shortcodeObject
ETBuilderBackend.shortcode_object

But even if i change the values in these objects that cant help. So if i know where the result store, then i can modify them.
I hope you understand the issue. This is not happening for backend editor. Only for ReactJS enabled editors.

If you send me a copy of your module I will check it out and see if I can find a solution

Is it planned yet?

Any Update on this? I noticed that the behaviour of the deleting value only happens in the "New and improved Version" not in the "classic" Version of the Editor. I also don't understand how the values are saved. If I look at the code, the values from a select field with select2 or selectize are set correctly, but after 1 sec it gets resetted to default " ".  In the bundle.js I couldn't find an interval function or something similar which could cause this. Only a listener for element changes...
Furthermore the current select fields perfomance with over 500 items is absolutely bad. In my case I need to dynamically get all posts from the past two years with a search function. The loading time after I clicked on the select field is massive. The previous handling with these fields was way better in my opinion