text:
Fixed: fix vlc label #1287

Replaced the conditional URLs with universal URL and DMG and added recommended variables.  Made grep more flexible incase of file name change in the future.
2023-11-23 12:02:03 : REQ   : vlc : ################## Start Installomator v. 10.6beta, date 2023-11-23
2023-11-23 12:02:03 : INFO  : vlc : ################## Version: 10.6beta
2023-11-23 12:02:03 : INFO  : vlc : ################## Date: 2023-11-23
2023-11-23 12:02:03 : INFO  : vlc : ################## vlc
2023-11-23 12:02:03 : DEBUG : vlc : DEBUG mode 1 enabled.
2023-11-23 12:02:06 : DEBUG : vlc : name=VLC
2023-11-23 12:02:06 : DEBUG : vlc : appName=
2023-11-23 12:02:06 : DEBUG : vlc : type=dmg
2023-11-23 12:02:06 : DEBUG : vlc : archiveName=vlc-3.0.20-universal.dmg
2023-11-23 12:02:06 : DEBUG : vlc : downloadURL=https://get.videolan.org/vlc/last/macosx/vlc-3.0.20-universal.dmg
2023-11-23 12:02:06 : DEBUG : vlc : curlOptions=
2023-11-23 12:02:06 : DEBUG : vlc : appNewVersion=3.0.20
2023-11-23 12:02:06 : DEBUG : vlc : appCustomVersion function: Not defined
2023-11-23 12:02:06 : DEBUG : vlc : versionKey=CFBundleShortVersionString
2023-11-23 12:02:06 : DEBUG : vlc : packageID=
2023-11-23 12:02:06 : DEBUG : vlc : pkgName=
2023-11-23 12:02:06 : DEBUG : vlc : choiceChangesXML=
2023-11-23 12:02:06 : DEBUG : vlc : expectedTeamID=75GAHG3SZQ
2023-11-23 12:02:06 : DEBUG : vlc : blockingProcesses=VLC
2023-11-23 12:02:06 : DEBUG : vlc : installerTool=
2023-11-23 12:02:06 : DEBUG : vlc : CLIInstaller=
2023-11-23 12:02:06 : DEBUG : vlc : CLIArguments=
2023-11-23 12:02:06 : DEBUG : vlc : updateTool=
2023-11-23 12:02:06 : DEBUG : vlc : updateToolArguments=
2023-11-23 12:02:06 : DEBUG : vlc : updateToolRunAsCurrentUser=
2023-11-23 12:02:06 : INFO  : vlc : BLOCKING_PROCESS_ACTION=tell_user
2023-11-23 12:02:06 : INFO  : vlc : NOTIFY=success
2023-11-23 12:02:06 : INFO  : vlc : LOGGING=DEBUG
2023-11-23 12:02:06 : INFO  : vlc : LOGO=/System/Applications/App Store.app/Contents/Resources/AppIcon.icns
2023-11-23 12:02:06 : INFO  : vlc : Label type: dmg
2023-11-23 12:02:06 : INFO  : vlc : archiveName: vlc-3.0.20-universal.dmg
2023-11-23 12:02:06 : DEBUG : vlc : Changing directory to /Users/someuser/Documents/GitHub/Installomator/build
2023-11-23 12:02:06 : INFO  : vlc : App(s) found: /Applications/VLC.app
2023-11-23 12:02:06 : INFO  : vlc : found app at /Applications/VLC.app, version 3.0.18, on versionKey CFBundleShortVersionString
2023-11-23 12:02:06 : INFO  : vlc : appversion: 3.0.18
2023-11-23 12:02:06 : INFO  : vlc : Latest version of VLC is 3.0.20
2023-11-23 12:02:06 : REQ   : vlc : Downloading https://get.videolan.org/vlc/last/macosx/vlc-3.0.20-universal.dmg to vlc-3.0.20-universal.dmg
2023-11-23 12:02:06 : DEBUG : vlc : No Dialog connection, just download
2023-11-23 12:02:51 : DEBUG : vlc : File list: -rw-r--r--  1 someuser  staff    81M Nov 23 12:02 vlc-3.0.20-universal.dmg
2023-11-23 12:02:51 : DEBUG : vlc : File type: vlc-3.0.20-universal.dmg: bzip2 compressed data, block size = 100k
2023-11-23 12:02:51 : DEBUG : vlc : curl output was:

Trying 62.210.246.226:443...
Connected to get.videolan.org (62.210.246.226) port 443 (#0)
ALPN: offers h2,http/1.1
(304) (OUT), TLS handshake, Client hello (1):
} [321 bytes data]
CAfile: /etc/ssl/cert.pem
CApath: none
(304) (IN), TLS handshake, Server hello (2):
{ [102 bytes data]
TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [4059 bytes data]
TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [300 bytes data]
TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [37 bytes data]
TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
ALPN: server accepted h2
Server certificate:
subject: CN=get-dc2.videolan.org
start date: Oct 17 01:12:07 2023 GMT
expire date: Jan 15 01:12:06 2024 GMT
subjectAltName: host "get.videolan.org" matched cert's "get.videolan.org"
issuer: C=US; O=Let's Encrypt; CN=R3
SSL certificate verify ok.
using HTTP/2
h2 [:method: GET]
h2 [:scheme: https]
h2 [:authority: get.videolan.org]
h2 [:path: /vlc/last/macosx/vlc-3.0.20-universal.dmg]
h2 [user-agent: curl/8.1.2]
h2 [accept: /]
Using Stream ID: 1 (easy handle 0x12c00a800)

GET /vlc/last/macosx/vlc-3.0.20-universal.dmg HTTP/2
Host: get.videolan.org
User-Agent: curl/8.1.2
Accept: /

< HTTP/2 302
< server: nginx
< date: Thu, 23 Nov 2023 09:02:08 GMT
< content-type: text/html; charset=UTF-8
< location: https://mirror.rasanegar.com/videolan/vlc/3.0.20/macosx/vlc-3.0.20-universal.dmg < alt-svc: h2=":443"
<

Ignoring the response-body { [124 bytes data]
Connection #0 to host get.videolan.org left intact
Issue another request to this URL: 'https://mirror.rasanegar.com/videolan/vlc/3.0.20/macosx/vlc-3.0.20-universal.dmg'
Trying 5.160.200.196:443...
Connected to mirror.rasanegar.com (5.160.200.196) port 443 (#1)
ALPN: offers h2,http/1.1
(304) (OUT), TLS handshake, Client hello (1):
} [325 bytes data]
(304) (IN), TLS handshake, Server hello (2):
{ [102 bytes data]
TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [2446 bytes data]
TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [181 bytes data]
TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [70 bytes data]
TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
SSL connection using TLSv1.2 / ECDHE-ECDSA-AES128-GCM-SHA256
ALPN: server accepted h2
Server certificate:
subject: CN=ir.mirror.rasanegar.com
start date: Oct 31 20:12:36 2023 GMT
expire date: Jan 29 20:12:35 2024 GMT
subjectAltName: host "mirror.rasanegar.com" matched cert's "mirror.rasanegar.com"
issuer: C=US; O=Let's Encrypt; CN=R3
SSL certificate verify ok.
using HTTP/2
h2 [:method: GET]
h2 [:scheme: https]
h2 [:authority: mirror.rasanegar.com]
h2 [:path: /videolan/vlc/3.0.20/macosx/vlc-3.0.20-universal.dmg]
h2 [user-agent: curl/8.1.2]
h2 [accept: /]
Using Stream ID: 1 (easy handle 0x12c00a800)

GET /videolan/vlc/3.0.20/macosx/vlc-3.0.20-universal.dmg HTTP/2
Host: mirror.rasanegar.com
User-Agent: curl/8.1.2
Accept: /

< HTTP/2 200
< server: nginx
< date: Thu, 23 Nov 2023 09:02:10 GMT
< content-type: application/octet-stream
< content-length: 85166688
< last-modified: Wed, 01 Nov 2023 22:17:15 GMT
< etag: "6542ce6b-5138a60"
< accept-ranges: bytes
<
{ [16238 bytes data]

Connection #1 to host mirror.rasanegar.com left intact

2023-11-23 12:02:51 : DEBUG : vlc : DEBUG mode 1, not checking for blocking processes
2023-11-23 12:02:51 : REQ   : vlc : Installing VLC
2023-11-23 12:02:51 : INFO  : vlc : Mounting /Users/someuser/Documents/GitHub/Installomator/build/vlc-3.0.20-universal.dmg
2023-11-23 12:02:57 : DEBUG : vlc : Debugging enabled, dmgmount output was:
Checksumming Protective Master Boot Record (MBR : 0)…
Protective Master Boot Record (MBR :: verified   CRC32 $1A4FDA35
Checksumming GPT Header (Primary GPT Header : 1)…
GPT Header (Primary GPT Header : 1): verified   CRC32 $339E94F1
Checksumming GPT Partition Data (Primary GPT Table : 2)…
GPT Partition Data (Primary GPT Tabl: verified   CRC32 $13C5254A
Checksumming  (Apple_Free : 3)…
(Apple_Free : 3): verified   CRC32 $00000000
Checksumming disk image (Apple_HFS : 4)…
disk image (Apple_HFS : 4): verified   CRC32 $AF5647D5
Checksumming  (Apple_Free : 5)…
(Apple_Free : 5): verified   CRC32 $00000000
Checksumming GPT Partition Data (Backup GPT Table : 6)…
GPT Partition Data (Backup GPT Table: verified   CRC32 $13C5254A
Checksumming GPT Header (Backup GPT Header : 7)…
GPT Header (Backup GPT Header : 7): verified   CRC32 $1C4D11CA
verified   CRC32 $34B86637
/dev/disk5              GUID_partition_scheme
/dev/disk5s1            Apple_HFS                       /Volumes/VLC media player
2023-11-23 12:02:57 : INFO  : vlc : Mounted: /Volumes/VLC media player 2023-11-23 12:02:57 : INFO  : vlc : Verifying: /Volumes/VLC media player/VLC.app
2023-11-23 12:02:57 : DEBUG : vlc : App size: 238M      /Volumes/VLC media player/VLC.app
2023-11-23 12:03:25 : DEBUG : vlc : Debugging enabled, App Verification output was:
/Volumes/VLC media player/VLC.app: accepted
source=Notarized Developer ID
origin=Developer ID Application: VideoLAN (75GAHG3SZQ)
2023-11-23 12:03:25 : INFO  : vlc : Team ID matching: 75GAHG3SZQ (expected: 75GAHG3SZQ ) 2023-11-23 12:03:25 : INFO  : vlc : Downloaded version of VLC is 3.0.20 on versionKey CFBundleShortVersionString (replacing version 3.0.18). 2023-11-23 12:03:25 : INFO  : vlc : App has LSMinimumSystemVersion: 10.7.5 2023-11-23 12:03:25 : DEBUG : vlc : DEBUG mode 1 enabled, skipping remove, copy and chown steps 2023-11-23 12:03:25 : INFO  : vlc : Finishing...
2023-11-23 12:03:28 : INFO  : vlc : App(s) found: /Applications/VLC.app 2023-11-23 12:03:28 : INFO  : vlc : found app at /Applications/VLC.app, version 3.0.18, on versionKey CFBundleShortVersionString
2023-11-23 12:03:28 : REQ   : vlc : Installed VLC, version 3.0.20
2023-11-23 12:03:28 : INFO  : vlc : notifying
2023-11-23 12:03:29 : DEBUG : vlc : Unmounting /Volumes/VLC media player
2023-11-23 12:03:29 : DEBUG : vlc : Debugging enabled, Unmounting output was:
"disk5" ejected.
2023-11-23 12:03:29 : DEBUG : vlc : DEBUG mode 1, not reopening anything
2023-11-23 12:03:29 : REQ   : vlc : All done!
2023-11-23 12:03:29 : REQ   : vlc : ################## End Installomator, exit code 0

Thank you!

Thank you!

authors: BigMacAdmin greatkemo


text:
How to set shipping information to invoice?

Hi, I was able to set shipTo but I was unable to find a way to add additional shipping information , Is there any way to set shippingAddress, shipPhoneNumber, shipCity, shipCompanyName, ShipPostalCode, ShipState, ShipCountry etc..
Thanks

You would have that information on an new/existing contact, and then use setShipToContactName on the invoice

Intacct\Functions\Company\ContactCreate and Intacct\Functions\Company\ContactUpdate are two included functions

source: gharchive/issue

authors: Dhavalptel jimmymcpeter

repo: Intacct/intacct-sdk-php

license_type: permissive

license_source: bigquery


text:
[Feature request] implement generic docker_run action

implement an action to run a docker container from within a scenario

add in #205

license_source: github-api


text:
Update to Numba 0.52.0

Apply patches to release0.52 branch.
Created branches:

release0.51-patched
release0.52-patched

Corresponding PRs shows applied patches:

https://github.com/IntelPython/numba/pull/182
https://github.com/IntelPython/numba/pull/181

Done.

repo: IntelPython/numba


text:
Multi camera calibration

Required Info

Camera Model
D435

Operating System & Version
Win 10

Language
C++

Segment
object reconstruction

Hello,
I am using four cameras in parallel, at different constant position, so that I can capture a 360° 3D picture of any random object.
To link each image taken by each camera, I only performed rotations and translations, knowing a priori the theoretical positions of each camera. The fact is that I have error measures and there is a little gap between each image when I do the reconstruction.
Do you know how I could do a dynamic calibration? I could for instance put a visible point in the field of vision of the four cameras, detect this point, and then do the rotations and translation according to the distances from this point, and not according to the theoretical positions of the cameras i have?
Has anyone already done that kind of things, or has a good method to perform multicamera calibration?
Thank you and regards,
Emmanuel

@EmmanuelCos I'm afraid that there's no document for Vicalib installation on windows yet. Maybe you can have a try on Linux or Mac first.

I think that intel should develop one user friendly tool for multi camera calibration.
In librealsense there is already a multicam part, and I appreciate the effort, but it is of little use if there is nothing for the calibration.
Do you know to whom I should ask for that?

If Intel add a feature request tag to this discussion then it will make it easier for them to track it over time.

There are also some good examples on ROS section to demonstrate using multi-camera that are installed at fixed locations.
https://github.com/intel-ros/realsense/wiki
Examples can be found on the right hand side of the page.

repo: IntelRealSense/librealsense


text:
Unable to get rid of warning: RealSense UDEV-Rules are missing! UDEV-Rules permissions configuration   for RealSense devices.

librealsense
2.29.0 RELEASE

OS
Linux

Name
Intel RealSense D415

Serial Number
830512060562

Firmware Version
05.11.15.00

Advanced Mode
YES

Camera Locked
YES

Usb Type Descriptor
3.2

Product Line
D400

Asic Serial Number
842213022371

Firmware Update Id
842213022371

I just newly installed the RealSense, but I always get this warning of, "RealSense UDEV-Rules are missing! UDEV-Rules permissions configuration   for RealSense devices."
I tried using "sudo apt-get upgrade/install librealsense2-udev-rules" but I get a "E: Invalid operation upgrade/install" in return.
I proceed on to key in "sudo cp ~/.99-realsense-libusb.rules /etc/udev/rules.d/99-realsense-libusb.rules && sudo udevadm control --reload-rules && udevadm trigger" nothing returns to me. But problem still persists.

@zhangmingcheng28 , this was a udev-rules discrepancy with the Debian package in the last release. Will be fixed in the upcoming version.


text:
KinectFusion in the browser with realsense and webGL2-compute

Required Info

Camera Model
{ D400 }

Operating System & Version
{Win (8.1/10) / Linux (Ubuntu 14/16/17)

Platform
PC

Hi all, hope this is ok to share here, please remove if you like, but I hope it will be of interest to this community.
As a side project I was keen on looking into using the realsense inside a browser but didnt have much luck getting the nodeJS samples to work in this repo or the demo's here https://github.com/intel/depth-camera-web-demo as the w3c spec seemed to have dropped a lot of the support which that code relied on (such as the videoKind: depth constraints).
Fortunately accessing the depth camera as a normal userMedia device still works great, so I hacked together some stuff and put together a simple demo showcasing a KinectFusion implementation which utilises the new webGL2-Compute capability of Chrome (> v80).
You need to set two flags in chrome (goto chrome://flags) to enable webGL2.0-Compute which are
WebGL 2.0 Compute Enabled
Choose ANGLE graphics backend OpenGL
After that you can try the code here, on page load, you can press 'Load Realsense' to start the camera, and then by clicking on any depth surface on the depth image you can re-center the KinectFusion tracking volume. Resetting the volume can be acheived by pressing the 'Reset Volume' button.
https://philipnoonan.github.io/wglFusion/depthColorDemo.html
I've tested this mainly in windows, but it does work in ubuntu, but I think you need Chrome Dev rather than the offical build. I have tested on various systems with GTX 1070, 1080, 2080, various quadro's, and a bootcamped windows 10 running on a 2019 Macbook Pro. Note this will not run on MacOS due to Apple's lack of support for OpenGL.
Hopefully this will be of interest to anyone wanting to see what you can do with the realsenses in the browser :)

Thanks so much for your great work on this project!  I will promote a link to it on Intel Support's RealSense forum too.

I will close this case now.   It will still be accessible through browser searches.  Thanks again for your work on this project!

authors: MartyG-RealSense philipNoonan


text:
It is possible to delete contribution payments that are payed via direct debit

Het is mogelijk contributie-betalingen van leden te verwijderen die via automatische incasso zijn betaald, terwijl dat eigenlijk via de streeplijst-incasso-frontend moet gebeuren.
It is possible to delete contribution payments that have been payed via direct debit, even though this should happen through the cookie-corner-direct-debit-frontend.

Removing a contribution-payment should only be possible if no withdrawal has been attempted or if all withdrawals of the contribution payment have been "reversed" (gestorneerd).

authors: AVeenstra Sophietje

repo: Inter-Actief/amelie


text:
Consider alternative build instructions using pre-built roscpp_android

It may be possible to skip the build step for roscpp_android and use pre-built binaries instead (see point 2 here: http://wiki.ros.org/android_ndk/Tutorials/Building The Example Applications using the Binary Distribution)
Was this attempted?

@adamantivm perhaps a new release of roscpp_android should be performed for that; that link points to an old release, which doesn't have all the required packages for this app (in particular, Image transport plugins.

Ok, I left an issue in the repo to request a new release - https://github.com/ekumenlabs/roscpp_android/issues/59 . After than then this can be improved to not require the lengthy rosndk build.

authors: adamantivm jubeira


text:
[feature] support brave search api and refractor google serper api in BingBroswer

new support feature is as title, google serper api had been refractor so that the response return by the function is  having consistent formatting and will not throw an error when using google serper api in MindSearch.
both brave search api and refactored google serper api had been tested on MindSearch with no error.

已加docstring

source: gharchive/pull-request

repo: InternLM/lagent


text:
serve llava-v1.6-vicuna-7b failed with lmdeploy 0.2.6 version

Checklist

[X] 1. I have searched related issues but cannot get the expected help.
[X] 2. The bug has not been fixed in the latest version.

Describe the bug
Serve llava-v1.6-vicuna-7b failed with lmdeploy 0.2.6 version on 2 *A30 (24GB)，the reason is that OOM as below.

Reproduction
Lmdeploy: 0.2.6
Model: llava-v1.6-vicuna-7b

lmdeploy serve api_server /data/models/llava-v1.6-vicuna-7b/ --server-port 80012 --tp 2

Environment
sys.platform: linux
Python: 3.8.10 (default, Nov 14 2022, 12:59:47) [GCC 9.4.0]
CUDA available: True
MUSA available: False
numpy_random_seed: 2147483648
GPU 0,1: NVIDIA A30
CUDA_HOME: /usr/local/cuda
NVCC: Cuda compilation tools, release 11.8, V11.8.89
GCC: x86_64-linux-gnu-gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
PyTorch: 2.1.2+cu121
PyTorch compiling details: PyTorch built with:
  - GCC 9.3
  - C++ Version: 201703
  - Intel(R) oneAPI Math Kernel Library Version 2022.2-Product Build 20220804 for Intel(R) 64 architecture applications
  - Intel(R) MKL-DNN v3.1.1 (Git Hash 64f6bcbcbab628e96f33a62c3e975f8535a7bde4)
  - OpenMP 201511 (a.k.a. OpenMP 4.5)
  - LAPACK is enabled (usually provided by MKL)
  - NNPACK is enabled
  - CPU capability usage: AVX512
  - CUDA Runtime 12.1
  - NVCC architecture flags: -gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_70,code=sm_70;-gencode;arch=compute_75,code=sm_75;-gencode;arch=compute_80,code=sm_80;-gencode;arch=compute_86,code=sm_86;-gencode;arch=compute_90,code=sm_90
  - CuDNN 8.9.2
  - Magma 2.6.1
  - Build settings: BLAS_INFO=mkl, BUILD_TYPE=Release, CUDA_VERSION=12.1, CUDNN_VERSION=8.9.2, CXX_COMPILER=/opt/rh/devtoolset-9/root/usr/bin/c++, CXX_FLAGS= -D_GLIBCXX_USE_CXX11_ABI=0 -fabi-version=11 -fvisibility-inlines-hidden -DUSE_PTHREADPOOL -DNDEBUG -DUSE_KINETO -DLIBKINETO_NOROCTRACER -DUSE_FBGEMM -DUSE_QNNPACK -DUSE_PYTORCH_QNNPACK -DUSE_XNNPACK -DSYMBOLICATE_MOBILE_DEBUG_HANDLE -O2 -fPIC -Wall -Wextra -Werror=return-type -Werror=non-virtual-dtor -Werror=bool-operation -Wnarrowing -Wno-missing-field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wno-unused-parameter -Wno-unused-function -Wno-unused-result -Wno-strict-overflow -Wno-strict-aliasing -Wno-stringop-overflow -Wno-psabi -Wno-error=pedantic -Wno-error=old-style-cast -Wno-invalid-partial-specialization -Wno-unused-private-field -Wno-aligned-allocation-unavailable -Wno-missing-braces -fdiagnostics-color=always -faligned-new -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping-math -Werror=format -Werror=cast-function-type -Wno-stringop-overflow, LAPACK_INFO=mkl, PERF_WITH_AVX=1, PERF_WITH_AVX2=1, PERF_WITH_AVX512=1, TORCH_DISABLE_GPU_ASSERTS=ON, TORCH_VERSION=2.1.2, USE_CUDA=ON, USE_CUDNN=ON, USE_EXCEPTION_PTR=1, USE_GFLAGS=OFF, USE_GLOG=OFF, USE_MKL=ON, USE_MKLDNN=ON, USE_MPI=OFF, USE_NCCL=1, USE_NNPACK=ON, USE_OPENMP=ON, USE_ROCM=OFF,

TorchVision: 0.16.2+cu121
LMDeploy: 0.2.6+
transformers: 4.37.2
gradio: 4.16.0
fastapi: 0.110.0

Error traceback
No response

You can try to reduce the kv cache memory usage by pass --cache-max-entry-count 0.1.
The kv cache memory is used for large batch size and long session length.
lmdeploy serve api_server /data/models/llava-v1.6-vicuna-7b/ --server-port 80012 --tp 2 --cache-max-entry-count 0.1

You can try to reduce the kv cache memory usage by pass --cache-max-entry-count 0.1.
The kv cache memory is used for large batch size and long session length.
lmdeploy serve api_server /data/models/llava-v1.6-vicuna-7b/ --server-port 80012 --tp 2 --cache-max-entry-count 0.1

The default value of --cache-max-entry-count  is 0.8, which causes unsufficient  free memory for torch framework.
Thanks a lot.

Why isn't the kv cache memory evenly allocated on both cards?

when you init the vl model with turbomind backend. First, it will allocate memory for llm model weights and then allocate kv cache. The memory on two gpus shoud be same with these two steps. After that, the pipeline will use pytorch to load the vision model, the different memory in the red box is the vision model used.

the vl pipeline have two parts, the llm and vision. For now, the llm part only support turbomind backend. The vision part is with pytorch backend.
when you init the pipeline with turbomind backend. First, turbomind will allocate memory for llm model weights and then allocate kv cache. The memory on two gpus shoud be same with these two steps. After that, the pipeline will use pytorch to load the vision model, the different memory in the red box is the vision model used.

I understand that. So when does the vision model support with turbomind backend?
Do you have benchmarked the performance for LMM(large multimodal model) models (like llava-v1.6-vicuna-13b) with the pipeline consists of turbomind backend for llm and pytorch backend for vision model?

We are not likely to support inference the vision model by turbomind as structure of the vision model is not very fixed. We might look into whether using triton or some other tools can improve the vision model performance.
There is no benchmark result from vl yet. Compared to other inference tools, we add the batching strategy to collect images with received server requests, while the performance is mainly affected by llm part as exists models only support single or less images as input.

@wanzhenchn is there any public benchmark you can share?

We are not likely to support inference the vision model by turbomind as structure of the vision model is not very fixed. We might look into whether using triton or some other tools can improve the vision model performance.
There is no benchmark result from vl yet. Compared to other inference tools, we add the batching strategy to collect images with received server requests, while the performance is mainly affected by llm part as exists models only support single or less images as input.

Many thanks for your response. Actually, there are relatively few inference frameworks that support multimodal models at present, and to the best of my knowledge, vllm does not currently support it, and the LLaVA seems to be not very user-friendly.

@wanzhenchn is there any public benchmark you can share?

I just begin to reaearch and benckmark the framework which has supported LMMs these days. I will be happy to share the benchmark data if it is available.

The vl pipeline have two parts, the llm and vision. For now, the llm part only support turbomind backend. The vision part is with pytorch backend.
When you init the vl pipeline. First, turbomind will allocate memory for llm model weights and then allocate kv cache. The memory on two gpus shoud be same with these two steps. After that, the pipeline will use pytorch to load the vision model, the different memory in the red box is the vision model used.

As you said, the gpu1 memory used should be about: 15461 MB + 1.7*1000MB =  17161 MB ≈ 18GB (the model size of clip-vit-large-patch14-336),
However, the gpu1 memory used 23.9 GB actually, what's wrong  about it?
@irexyc

However, the gpu1 memory used 23.9 GB actually, what's wrong about it?

fixed it in https://github.com/InternLM/lmdeploy/pull/1325

However, the gpu1 memory used 23.9 GB actually, what's wrong about it?

fixed it in #1325

If I set the --cache-max-entry-count 0.001 , the gpu1's memory usage is 14 GB, then I increase the value of --cache-max-entry-count 0.3 ,  the gpu1 will OOM. It seems that there is still some problems about gpu memory management for vision model with torch backend
Given the meaning of cache_max_entry_count determines the percentage of free memory for k/v blocks, the server should work well when setting --cache-max-entry-count 0.3 , the memory usage of gpu1 is about
13317 + (24576-13317)*0.3 + 1.7*1000 = 18.3 GB, However, the OOM occurs.
@irexyc

I modifed the vision model loading strategy. Now, the model will be loaded on cpu first and then moved to gpu, so the peck cuda memory should be smaller than previous. You can try again.

I modifed the vision model loading strategy. Now, the model will be loaded on cpu first and then moved to gpu, so the peck cuda memory should be smaller than previous. You can try again.

LGTM

authors: irexyc lvhan028 wanzhenchn

repo: InternLM/lmdeploy


text:
[Service-Modules] Use HttpService for sending messages from TokenManagerService and BrokerService or have a Service setting Timeout settings for all HTTP Clients

The BrokerService and TokenManagers currently get their own HttpClients from the ClientProvider sending them independently from the HttpService, so their Timeout Settings are always the OkHttp default values. They should use the HttpService, so the Timeouts set there apply to the Broker and DAPS messages, too.
Another way to solve this would be to add a Method to the ClientProvider to override the default Timeouts for all generated Clients (instead of just a method to get an alternative client with other timeout settings once).

This Ticket should be obsolete, BrokerService is using the MessageService, which is using the IdsHttpService.
To use the IdsHttpService in the Tokenmanager we would have to move the http package from Messaging to Core.

I like "obsolete" issues.

authors: tmberthold vdakker


text:
Fix datum conversion in 'fromLedgerTxOuts' when using 'fromAlonzoTxOut'

Changelog
- description: |
    Fix datum conversion in 'fromLedgerTxOuts' when using 'fromAlonzoTxOut'
# uncomment types applicable to the change:
  type:
  # - feature        # introduces a new feature
  # - breaking       # the API has changed in a breaking way
  # - compatible     # the API has changed but is non-breaking
  # - optimisation   # measurable performance improvements
  # - refactoring    # QoL changes
  - bugfix         # fixes a defect
  # - test           # fixes/modifies tests
  # - maintenance    # not directly related to the code
  # - release        # related to a new release preparation
  # - documentation  # change in code docs, haddocks...

Context
Additional context for the PR goes here. If the PR fixes a particular issue please provide a link to the issue.
How to trust this PR
Highlight important bits of the PR that will make the review faster. If there are commands the reviewer can run to observe the new behavior, describe them.
Checklist

[x] Commit sequence broadly makes sense and commits have useful messages
[ ] New tests are added if needed and existing tests are updated. See Running tests for more details
[ ] Self-reviewed the diff

@carbolymer I rebased and signed my commits. Thank you for your review.

repo: IntersectMBO/cardano-api


text:
[Bug/Question]

Describe the bug

First, thank you Jonas for the work you put in building this library.
I have followed the documentation and I'm able to get to the authorized page.

The problem comes when I try to call the protected endpoint. I get status 401 and message below even when using the same admin account that I used to do the Azure Configuration.

To Reproduce
I used the code exactly as provided in the documentation.
Stack trace

Your configuration
Azure is configured as instructed in the documentation.

If this is a Single-tenant app (no external users), you're being blocked because you're a guest user.
You might also misunderstand which tenant type you should use. You might want to use B2C instead.

Thank you Jonas,
I have sorted it out!
You are a Star!
On Mon, 11 Dec 2023 at 12:17, Jonas Krüger Svensson <
@.***> wrote:

If this is a Single-tenant app (no external users), you're being blocked
because you're a guest user
https://intility.github.io/fastapi-azure-auth/usage-and-faq/guest_users.
You might also misunderstand which tenant type you should use. You might
want to use B2C
https://intility.github.io/fastapi-azure-auth/b2c/azure_setup instead.
—
Reply to this email directly, view it on GitHub
https://github.com/Intility/fastapi-azure-auth/issues/173#issuecomment-1849623704,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AHZRSZRDY2LT5Z4M7R465FDYI3FSLAVCNFSM6AAAAABAPLKWVSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQNBZGYZDGNZQGQ
.
You are receiving this because you authored the thread.Message ID:
@.***>

authors: Ciscko JonasKs

repo: Intility/fastapi-azure-auth

license: MIT


text:
[BUG/Question] Cross-origin token redemption is permitted only for the 'Single-Page Application' client-type.

Describe the bug
Auth error
Error: Bad Request,
error: invalid_request,
description: AADSTS9002326: Cross-origin token redemption is permitted only for the 'Single-Page Application' client-type.

To Reproduce
This is the minimal FastAPI app:
from pydantic import AnyHttpUrl, BaseSettings, Field
from fastapi.middleware.cors import CORSMiddleware
from typing import Union

class Settings(BaseSettings):
    SECRET_KEY: str = Field('my super secret key', env='SECRET_KEY')
    BACKEND_CORS_ORIGINS: list[Union[str, AnyHttpUrl]] = ['http://localhost:8000']
    OPENAPI_CLIENT_ID: str = Field(default='', env='OPENAPI_CLIENT_ID')
    APP_CLIENT_ID: str = Field(default='', env='APP_CLIENT_ID')
    TENANT_ID: str = Field(default='', env='TENANT_ID')

    class Config:
        env_file = '.env'
        env_file_encoding = 'utf-8'
        case_sensitive = True

from fastapi import FastAPI

settings = Settings()
app = FastAPI()

settings = Settings()
if settings.BACKEND_CORS_ORIGINS:
    app.add_middleware(
        CORSMiddleware,
        allow_origins=[str(origin) for origin in settings.BACKEND_CORS_ORIGINS],
        allow_credentials=True,
        allow_methods=['*'],
        allow_headers=['*'],
    )

app = FastAPI(
    swagger_ui_oauth2_redirect_url='/oauth2-redirect',
    swagger_ui_init_oauth={
        'usePkceWithAuthorizationCodeGrant': True,
        'clientId': settings.OPENAPI_CLIENT_ID,
    })

from fastapi_azure_auth import SingleTenantAzureAuthorizationCodeBearer

azure_scheme = SingleTenantAzureAuthorizationCodeBearer(
    app_client_id=settings.APP_CLIENT_ID,
    tenant_id=settings.TENANT_ID,
    scopes={
        #"User.ReadBasic.All": 'read'
        'https://graph.microsoft.com/.default': 'default'
        #AADSTS70011
        #f'api://{settings.APP_CLIENT_ID}/user_impersonation': 'user_impersonation',
    })

@app.on_event('startup')
async def load_config() -> None:
    """    Load OpenID config on startup.    """
    await azure_scheme.openid_config.load_config()

from fastapi import Security, responses

@app.get("/", dependencies=[Security(azure_scheme, scopes=["default"])])
def read_root():
    """
    Redirects to /docs
    """
    return "It works."

Please, set the following envars:
export TENANT_ID=<your-tenant_id>
export OPENAPI_CLIENT_ID=<your-client_id>
export APP_CLIENT_ID="https://login.microsoftonline.com/$TENANT_ID"
export SECRET_KEY=<your-secret>

Steps to reproduce the behavior:

Go to http://localhost:8000/docs
Click in 'Autorize'
Leave client_secret blank, and select scopes
Click in 'Autorize', the page will return the error

Configuration
I believe this bug is related to my Azure AD set up, so may provide the Manifest from AD.
Sensitive information is hidden and the <CENSORED> is put in place.
{
	"id": "<CENSORED>",
	"acceptMappedClaims": null,
	"accessTokenAcceptedVersion": 2,
	"addIns": [],
	"allowPublicClient": false,
	"appId": "<CENSORED>",
	"appRoles": [],
	"oauth2AllowUrlPathMatching": false,
	"createdDateTime": "2022-01-11T19:43:15Z",
	"description": null,
	"certification": null,
	"disabledByMicrosoftStatus": null,
	"groupMembershipClaims": null,
	"identifierUris": [],
	"informationalUrls": {
		"termsOfService": null,
		"support": null,
		"privacy": null,
		"marketing": null
	},
	"keyCredentials": [],
	"knownClientApplications": [],
	"logoUrl": null,
	"logoutUrl": "https://localhost:8000/oauth2-redirect",
	"name": "backoffice",
	"notes": null,
	"oauth2AllowIdTokenImplicitFlow": true,
	"oauth2AllowImplicitFlow": true,
	"oauth2Permissions": [],
	"oauth2RequirePostResponse": false,
	"optionalClaims": null,
	"orgRestrictions": [],
	"parentalControlSettings": {
		"countriesBlockedForMinors": [],
		"legalAgeGroupRule": "Allow"
	},
	"passwordCredentials": [
		{
			"customKeyIdentifier": null,
			"endDate": "2022-04-21T17:02:20.006Z",
			"keyId": "<CENSORED>",
			"startDate": "2022-01-21T17:02:20.006Z",
			"value": null,
			"createdOn": "2022-01-21T17:02:31.8956842Z",
			"hint": ".F7",
			"displayName": "API-Test"
		}
	],
	"preAuthorizedApplications": [],
	"publisherDomain": "<CENSORED>",
	"replyUrlsWithType": [
		{
			"url": "http://localhost:8000/",
			"type": "Web"
		},
		{
			"url": "http://localhost:8000/oauth2-redirect",
			"type": "Web"
		},
	],
	"requiredResourceAccess": [
		{
			"resourceAppId": "00000003-0000-0000-c000-000000000000",
			"resourceAccess": [
				{
					"id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d",
					"type": "Scope"
				},
				{
					"id": "14dad69e-099b-42c9-810b-d002981feec1",
					"type": "Scope"
				}
			]
		}
	],
	"samlMetadataUrl": null,
	"serviceManagementReference": null,
	"signInUrl": null,
	"signInAudience": "AzureADMyOrg",
	"tags": [],
	"tokenEncryptionKeyId": null
}

Hi,
The application created for OpenAPI seems to be configured for web and not Spa. See this section:

The application itself should looke something like this:
"replyUrlsWithType": [
		{
			"url": "http://localhost:8000",
			"type": "Web"
		}
	],

and the OpenAPI application registration should look something like this:
	"replyUrlsWithType": [
		{
			"url": "http://localhost:8000/oauth2-redirect",
			"type": "Spa"
		}
	],

@JonasKs Huge Thanks!

My pleasure 😊

@JonasKs another question:
The /docs interface gives me this curl:
curl -X 'GET' \
  'http://localhost:8000/' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJub25jZSI6IjJXNEVRTEZHdjVQY2MzS1RpWHVoUnFNcEpkNm53ZUxENW9qSFREcjFUalkiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1yNS1BVWliZkJpaTdOZDFqQmViYXhib1hXMCIsImtpZCI6Ik1yNS1BVWliZkJpaTdOZDFqQmViYXhib1hXMCJ9.eyJhdWQiOiJodHRwczovL2dyYXBoLm1pY3Jvc29mdC5jb20iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8yMDNlMDc4ZC0zNTJiLTRlNmItOWNmYS00MWE5Y2FkZDVjMzcvIiwiaWF0IjoxNjQzODk0OTk5LCJuYmYiOjE2NDM4OTQ5OTksImV4cCI6MTY0Mzg5OTcwMiwiYWNjdCI6MCwiYWNyIjoiMSIsImFpbyI6IkUyWmdZRmlid01HY0dNUnM3M09yTkUwcjA1WjlnYXVOMXROVmhndUVXdlk2SGQ2M2VTSUEiLCJhbXIiOlsicHdkIl0sImFwcF9kaXNwbGF5bmFtZSI6ImJhY2tvZmZpY2UiLCJhcHBpZCI6Ijg4NjJiYmE3LTcwNDUtNGRlOS1hMWE2LTVkMmM2YjljNWQ1OSIsImFwcGlkYWNyIjoiMCIsImZhbWlseV9uYW1lIjoiVmlkbyIsImdpdmVuX25hbWUiOiJMdWNhcyIsImlkdHlwIjoidXNlciIsImlwYWRkciI6IjE4Ny4xMC4zOC4yMjciLCJuYW1lIjoiTHVjYXMgVmlkbyIsIm9pZCI6ImZiMGQ3Yjc1LTZhNjAtNDljMS05YWZlLTE4ZTA5M2I2MTgyOSIsIm9ucHJlbV9zaWQiOiJTLTEtNS0yMS0yNzUxNDk2Nzc2LTU4MzkxODYyMC0zNDE4MDIyOTA0LTM0ODMiLCJwbGF0ZiI6IjgiLCJwdWlkIjoiMTAwMzIwMDEzOEVBOEMzNiIsInJoIjoiMC5BU1lBalFjLUlDczFhMDZjLWtHcHl0MWNOd01BQUFBQUFBQUF3QUFBQUFBQUFBQW1BT1UuIiwic2NwIjoib3BlbmlkIHByb2ZpbGUgVXNlci5SZWFkIFVzZXIuUmVhZEJhc2ljLkFsbCBlbWFpbCIsInNpZ25pbl9zdGF0ZSI6WyJrbXNpIl0sInN1YiI6ImFqUURwdzNzdjZSSldHNTBvakNDaFl1WXdaOTNMenE5cFFvSEFfY3dURHMiLCJ0ZW5hbnRfcmVnaW9uX3Njb3BlIjoiU0EiLCJ0aWQiOiIyMDNlMDc4ZC0zNTJiLTRlNmItOWNmYS00MWE5Y2FkZDVjMzciLCJ1bmlxdWVfbmFtZSI6Imx1Y2FzLnZpZG9AdGdyb3VwLmNvbS5iciIsInVwbiI6Imx1Y2FzLnZpZG9AdGdyb3VwLmNvbS5iciIsInV0aSI6InNkdlFzNW5rN1VtRF9vZU1kZEU2QUEiLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbImI3OWZiZjRkLTNlZjktNDY4OS04MTQzLTc2YjE5NGU4NTUwOSJdLCJ4bXNfc3QiOnsic3ViIjoiU1p2RVRJS1QxWlBVUVoweEZQaHd0T25fZW5VYUtKNDN6RWdIcDNoY2tEcyJ9LCJ4bXNfdGNkdCI6MTUzNjE3ODkxOX0.YrBCWmdvPLres0IuRlvSnznOd_OYgH6_ggdiFlJP85iexMybdfR5XpyLAvX7KLn_TH8GBYa5N0XaJWo-ufeXGgvx-xuursgC7IHFRZ_gFXGHRANPxdKfiNtRDC7uZFtkVWkhkGDUSQxOjhe1Wxg8xkdz7wlQohFz_NKS5AXL-e3Gu66vwDppCcRH95X0jkkbJTlc0QuqC2N0ZaRnUFwbaF6xeowpdc7-ISTJUvLf2n6yVSSis23jgu9urP1yUU5BNbnNQAC2Van4jfvomn15AqiEoRj5_3UY3Uf2ZdlZ3lxXxYnMPFJn9ZAKLZjBw3ssd33TtBqhanPpscjJxoQ4pw'

But I the this 401 response:
{
  "detail": "Required scope missing"
}

I read the code, It seems that you must consider the scope in the resquest (in some way), I'm not sure
https://github.com/Intility/fastapi-azure-auth/blob/51a0afa7851fb3a62e1ed9c718c632eada6d8b5a/fastapi_azure_auth/auth.py#L143
Am I missing something?

Either request the scope for the token, such as user_impersonation described in the setup, and then require that scope for that API. Scopes are not mandatory and you can provide an empty list in Security(), or even just use Depends() instead of Security()
(Sorry for formatting, written in a rush on my phone)

@Vido I'm deleting and reposting your comment as it included potential sensitive information.

@JonasKs another question:
The /docs interface gives me this curl:
curl -X 'GET' \
  'http://localhost:8000/' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer [removed]'

But I the this 401 response:
{
  "detail": "Required scope missing"
}

I read the code, It seems that you must consider the scope in the resquest (in some way), I'm not sure
https://github.com/Intility/fastapi-azure-auth/blob/51a0afa7851fb3a62e1ed9c718c632eada6d8b5a/fastapi_azure_auth/auth.py#L143
Am I missing something?

Hi guys,
@JonasKs thanks for the swift answer.
I can't get it to work... I guess there are something wrong with AD config.
Consider this code.
I'm not using the  'https://graph.microsoft.com/.default': 'default'scope. (It wasn't working)
I created the user_impersonation, and it gets the token.
azure_scheme = SingleTenantAzureAuthorizationCodeBearer(
    app_client_id=settings.APP_CLIENT_ID,
    tenant_id=settings.TENANT_ID,
    scopes={
        # 'https://graph.microsoft.com/.default': 'default'
        f'api://{settings.APP_CLIENT_ID}/user_impersonation': 'user_impersonation',
    })

# I try this... same results
# @app.get("/", dependencies=[Security(azure_scheme, scopes=[])])

@app.get("/", dependencies=[Security(azure_scheme, scopes=["user_impersonation"])])
def read_root():
    return "It works."

I get 401 { "detail": "Token contains invalid claims" }
This is the underlining exception:
api_1  | Traceback (most recent call last):
api_1  |   File "/usr/local/lib/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py", line 375, in run_asgi
api_1  |     result = await app(self.scope, self.receive, self.send)
api_1  |   File "/usr/local/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 75, in __call__
api_1  |     return await self.app(scope, receive, send)
api_1  |   File "/usr/local/lib/python3.9/site-packages/fastapi/applications.py", line 208, in __call__
api_1  |     await super().__call__(scope, receive, send)
api_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/applications.py", line 112, in __call__
api_1  |     await self.middleware_stack(scope, receive, send)
api_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 181, in __call__
api_1  |     raise exc
api_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 159, in __call__
api_1  |     await self.app(scope, receive, _send)
api_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/middleware/cors.py", line 84, in __call__
api_1  |     await self.app(scope, receive, send)
api_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/exceptions.py", line 82, in __call__
api_1  |     raise exc
api_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/exceptions.py", line 71, in __call__
api_1  |     await self.app(scope, receive, sender)
api_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 656, in __call__
api_1  |     await route.handle(scope, receive, send)
api_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 259, in handle
api_1  |     await self.app(scope, receive, send)
api_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 61, in app
api_1  |     response = await func(request)
api_1  |   File "/usr/local/lib/python3.9/site-packages/fastapi/routing.py", line 216, in app
api_1  |     solved_result = await solve_dependencies(
api_1  |   File "/usr/local/lib/python3.9/site-packages/fastapi/dependencies/utils.py", line 525, in solve_dependencies
api_1  |     solved = await call(**sub_values)
api_1  |   File "/code/./api/main.py", line 117, in __call__
api_1  |     token = jwt.decode(
api_1  |   File "/usr/local/lib/python3.9/site-packages/jose/jwt.py", line 157, in decode
api_1  |     _validate_claims(
api_1  |   File "/usr/local/lib/python3.9/site-packages/jose/jwt.py", line 484, in _validate_claims
api_1  |     _validate_aud(claims, audience=audience)
api_1  |   File "/usr/local/lib/python3.9/site-packages/jose/jwt.py", line 350, in _validate_aud
api_1  |     raise JWTClaimsError("Invalid audience")
api_1  | jose.exceptions.JWTClaimsError: Invalid audience

Am I missing something?

Can you decode the token at e.g. jwt.io? The audience for the token is wrong.
Seeing your manifest is different multiple places compared to the tutorial, I strongly suggest that you follow the tutorial exactly as it is written once and get everything working, and then alter the setup to your needs later.

@JonasKs Huge Thanks again!
The jwi.io tip was quite helpful. I wasn't aware that the JWT-token carried so much information.
I'm dumpAF, now a realized what I messed up.
Thanks for your help.

You’re welcome 😊

@JonasKs Hi, just one more question. (I don't think this worth to open a new issue.)
Considering the same exemple of this Issue:
@app.get("/", dependencies=[Security(azure_scheme, scopes=["user_impersonation"])])
def read_root():
    return "It works."

How to I get the authenticated user object (username, email, etc...) ?

Hi!
There's two ways, either using the request object as seen here, or adding a dependency in the input of your function, as seen here.

@app.get("/")
def read_root(user: User = Security(azure_scheme, scopes=["user_impersonation"]):
    return "It works."

Hi @JonasKs , another silly question.
Let's assume that the use case of the API is systems interoperability (ETLs, etc...), and not a SPA.
What is the appropriate way to authenticate this process?
What would be the curl command that gets the token?
Thanks.

Hi,
That's not a silly question! You would use something called Client Credentials flow. Basically just create a secret for your app reg and do something like this:
from aiohttp import ClientSession

payload = {
    'grant_type': 'client_credentials',
    'client_id': client_id,
    'client_secret': client_secret,
    'scope': scope
}
async with ClientSession() as azure_client:
    async with azure_client.post(f'https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token', data=payload) as azure_response:
        azure_response = await azure_response.json()
        token = azure_response['access_token']
        print(token)

or if you use httpx:
from httpx import AsyncClient

payload = {
    'grant_type': 'client_credentials',
    'client_id': client_id,
    'client_secret': client_secret,
    'scope': scope
}

async with AsyncClient() as azure_client:
    response = await azure_client.post(url=f'https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token', data=body)
        token = response.json()['access_token']
        print(token)

If I don't remember wrong, you have to use the .default scope. So if your backend app reg client ID is abcd then your scope should be api://abcd/.default.

@JonasKs thanks again. This link about authentications protocols was quite helpful.
As far as I understood: there are two types of clients: public clients and confidential clients.
Basically: confidential means 'intranet' or internal-services. Which is the case of Client Credentials flow.
In my use case, the API must be open to the internet, because business-costumers will get their data from it.
I would like the auth to be public and non-interactive. I guess username-password auth-flow is what fits my aplication
https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-authentication-flows#usernamepassword

Basically: confidential means 'intranet' or internal-services. Which is the case of Client Credentials flow.

Confidential means any service which is not exposed in any way. A place where the client_secret can be safely stored, such as on your local computer or on a server. That does not include any javascript or frontend application. Anyone with access to the frontend could grab the client secret and authenticate as an application in any context. The client_secret must be secret.
If authentication is done through the frontend (such as OpenAPI swagger docs or an SPA), you must use PKCE flow as described in the documentation. Between secure applications (such as you using curl or through your python backend application), you can use client credentials flow to get tokens, and talk to APIs using that.

@JonasKs. Thanks for the clarification.

PKCE flow -> for SPA frontend (interactive public client)
Client credentials flow -> for secure applications (non-interactive confidential client)

Let's suppose: I have 100 business-costumers. The want to authenticate with a non-interactive (for easy of use). Do I have to share the client_secret among all of them? (Sounds messy). What are my alternatives for non-interactive clients?
Another concern:
I'd like to have automated tests im my application. Let's suppose we are writing tests for a specific endpoint protected by azure_scheme. How to we authenticate this test-client?

Every application (confidential, secure client) would have their own application registration(appreg). That application has access to your backend. It's set up just like you would with the OpenAPI (Swagger) app registration.
The users themself can get access to their appreg, and create their own secrets for their own application.
No, you should not share secrets between applications.

Hi,
The application created for OpenAPI seems to be configured for web and not Spa. See this section:

The application itself should looke something like this:
"replyUrlsWithType": [
		{
			"url": "http://localhost:8000",
			"type": "Web"
		}
	],

and the OpenAPI application registration should look something like this:
	"replyUrlsWithType": [
		{
			"url": "http://localhost:8000/oauth2-redirect",
			"type": "Spa"
		}
	],

how do i overcome this, make it web instead of SPA?

Not sure if I understand. You want the OpenAPI docs and other SPA applications (such as a JavaScript frontend) to be configured as SPA.
I tested this flow last week, so if you follow the tutorial everything should work.


text:
🛑 alpha-as.no is down

In 45036f2, alpha-as.no (https://alpha-as.no) was down:

HTTP code: 0
Response time: 0 ms

Resolved: alpha-as.no is back up in 6f8a4ef after 46 minutes.

repo: Intus-AS/Types-status


text:
🛑 hell-catering.no is down

In 75b871f, hell-catering.no (https://hell-catering.no) was down:

HTTP code: 0
Response time: 0 ms

Resolved: hell-catering.no is back up in f700f74 after 13 minutes.


text:
🛑 dininfoskjerm.no is down

In 0dfb148, dininfoskjerm.no (https://dininfoskjerm.no) was down:

HTTP code: 0
Response time: 0 ms

Resolved: dininfoskjerm.no is back up in 058a1d0 after 33 minutes.


text:
🛑 frumento.no is down

In 1c30576, frumento.no (https://frumento.no) was down:

HTTP code: 0
Response time: 0 ms

Resolved: frumento.no is back up in 0e2b4b0 after 45 minutes.


text:
Fix submit-button for input-write element

Thanks to comment on my project I found a bug, I must fix the submit-button jquery event for input-write element

Just included .input-write in one line of code :)

repo: Involt/Involt

license: mit


text:
Include typings

I'm submitting a...

[ ] Bug report
[x] Feature request

The typings from here should be adapted for EasyMDE and included in this repo.

Agreed.
This should be included since https://github.com/Ionaru/easy-markdown-editor/milestone/1 is not yet finished.

@Ionaru Do you want to include typings in EasyMDE before v3 is finished, or alternatively, to have a PR in DefinitelyTyped for "@types/easymde"?

I'll add typings to this package, no need to use @types/easymde

authors: FranklinWhale Ionaru chris13524

repo: Ionaru/easy-markdown-editor


text:
HTML

HTML
User Story
As a bootcamp student
I want the prework notes to be structured on a webpage
so that I can easily find and read information
Acceptance Criteria
GIVEN a Prework Study Guide website
WHEN I visit the website in my browser
THEN I see four boxes titled HTML, CSS, Git, and JavaScript with associated notes listed

Task completed. Please refer to feature/add-html branch.

repo: Isglad/prework-study-guide


text:
It'd be nice to have a "typed string" field type

I'm thinking that along the lines of the "typed relation" (in which an entity may be related to an object as author, contributor, photographer, etc), we could probably used a "typed string" field. My first use case would be an "Identifier" field. Each Identifier would contain a string field and a taxonomy dropdown. The user would enter the identifier (e.g. 9784567890123) as a free-text string, and select a type (e.g. ISBN or ISSN or LCCN etc.) from the dropdown.
This could also be used for notes with types (coming from MODS), and probably others.

Was this ticker resolved by the controlled_access_term module or is this still a desired feature?

No. This has not be implemented in Islandora 8 or Controlled Access Terms.
As I mentioned, I do have a solution in ArchivesSpace-Drupal, but I don't know that people will want to install that module just for the typed string field. It could be pulled out as a separate module if folks really want it despite the complications I mentioned in my last comment.

I'm more concerned about management and interfaces. I mean, I understand that with some interstitial layers (including conditionals, and maybe some widgets), we might be able to make something useable. But is it more "Drupally" to make this many separate fields?

ISNI
VIAF
JST
DIA
DOI
ISSN
eISSN
lISSN
ISBN
ArXiv ID
bibcode
ean13
fundref id
handle
infouri
LSID
NIHMSID
NII
OCI
OpenID
ORCID
PMCID
PMID
PII
PURL
Thomson Reuters Researcher ID
SICI
GRID
Crossref ID
Locally controlled ID schemes for people, objects, organizations
and any other schema we can find

(I'm not just brainstorming! I'm trying to implement the Datacite Spec, and most of these are present there.)
This is too many fields to present in a form to a user, and not fun to configure in displays either.

@rosiel for identifiers I would probably use the first solution I described: building a "typed identifier" widget and formatter (for data entry and display, respectively) but storing the value as a concatenated string rather than the second option of creating a new field type (or the implied third option of creating a whole bunch of fields).

Putting in my support for this feature as an option to facilitate multilingual metadata tagging.

I think part of this got discussed/referenced in the Islandora8 Slack channel and then moved to the new #multilingual slack channel, but I wanted to highlight/capture a few things here.

I'm wary of something like this being used for multilingual metadata tagging. I think the overall consensus on the Slack channel was maybe that this field type is not really for that. Handling multilingual metadata with this sort of field type with type=English and type=French seems to conflate multiple issues/problems.

I'm in favor of exploring this field type and the best way to make it happen. I have questions about the implications of storing the whole thing as a string for: indexing, interoperability as linked data, and reuse/mapping outside Islandora such as via OAI-PMH or any kind of "generate" citation functionality, etc.

INDEXING: would the type/label end up as part of the indexed value? Depending on how search is configured, that could be a problem? Especially for identifiers which folks often want to index as strings (literal, full match) rather than text (fuzzy, natural language parsing, etc)

I think part of this got discussed/referenced in the Islandora8 Slack channel and then moved to the new #multilingual slack channel, but I wanted to highlight/capture a few things here.

I'm wary of something like this being used for multilingual metadata tagging. I think the overall consensus on the Slack channel was maybe that this field type is not really for that. Handling multilingual metadata with this sort of field type with type=English and type=French seems to conflate multiple issues/problems.

I'm in favor of exploring this field type and the best way to make it happen. I have questions about the implications of storing the whole thing as a string for: indexing, interoperability as linked data, and reuse/mapping outside Islandora such as via OAI-PMH or any kind of "generate" citation functionality, etc.

INDEXING: would the type/label end up as part of the indexed value? Depending on how search is configured, that could be a problem? Especially for identifiers which folks often want to index as strings (literal, full match) rather than text (fuzzy, natural language parsing, etc)
INTEROPERABILITY/REUSE - given example of typed identifier field with type = ISBN, would this return a string value like "isbn:9780498570" and is that workable for known linked data/data harvesting use cases if we have them? Could a citation generator grab only the ISBN or ISSN as appropriate? etc.

A metadata administrator-level user needs to easily be able to add new types for a given field. When I think of how I'd expect to do this in a system with taxonomies (including taxonomies for other system behavior), I imagine creating an
"Identifier type" taxonomy for use with my Typed Identifier field (instance of Typed String field type), or a "Note type" taxonomy for use with my Typed Note field (another instance of Typed String field).

A metadata administrator-level user needs to easily manage the URI predicate(s) associated with each type. Ideally the predicate(s) for the type are used to generate the RDF for a statement of "object - predicate - stringliteral"

The field type should support empty or blank type for cases where it's just a general note or some random identifier. (Under the hood this could be "Typed String field named Note with default type = note"). Otherwise you end up having to create a separate text field for the values without a known specific type, which complicates or breaks indexing/searching on "notes", etc.

So how do we move this forward? I personally believe this is a decision that should be made by Islandora end-users (metadata folks, to over-generalize) and that the software folks should implement that spec decision. If folks agree with that approach, can this go to ICC and/or the Metadata Interest Group for a decision? Then an issue could be written up, and the work could be done in an upcoming sprint. My personal belief is that Islandora will be better if this decision is made by non-developers, because the correct solution here is what represents the data most correctly, not what technical solution is most appealing.
CC @manez @dannylamb @dara2

Kristina's comment, along with my original issue description, cover my interpretation of the discussions, needs, and decisions expressed in the MIG [1], [2] and if I recall correctly, the User Call. As for a ticket... how about this one right here? It highlights several use cases, describes reasons for wanting them, and outlines a technical solution that nobody has said is not possible. If there's a feeling that it's important, I can bring the issue of not being able to alter the indexing relevancy by the value of 'type' to the next MIG meeting (IMO it is minor, nonetheless, it is useful to know the kinds of limitations/drawbacks that may not be otherwise obvious from a particular implementation).
(BTW, the MIG does have a document coming up requesting changes to Defaults with regard to technical metadata.)

Then I'll rephrase my question with Rosie's last comment as the context: how do we move this from talk to action, if this has been blessed as a thing that Islandora should do/support?
Does this go to ICC for placement onto our roadmap, and/or on to the i8 Committers for implementation planning and execution? Or do we just wait until this organically is implemented as part of a specific institution's work, and just take what we can get because they're doing it as volunteers, even if it doesn't match the spec that Rosie and Kristina have laid out?

authors: kspurgin noahwsmith rosiel seth-shaw-unlv whikloj

repo: Islandora/documentation


text:
migrate 7.x settings

Create a page to use for setting the configuration values for the migration instead of changing files from terminal.
This is a simple process. This is an example of the interface. I'm about done with the input fields (I think) but  I'm still working on integrating it into a yml files.

Is there anything I should keep in mind?
Is this something others want?
Any problems you can foresee that I might miss?

https://github.com/Islandora-Devops/migrate_7x_claw/pull/27


text:
Created ThreadSafeOrderedDictionary Wrapper

🔹 Jira Ticket(s)

MOB-XXXX

✏ Description

Please provide a brief description of what this pull request does.

InAppManager can crash as stated in this issue due to OrderedDictionary not being thread safe. This change introduces ThreadSafeOrderedDictionary which is a wrapper around it to ensure thread safety. To minimize changes I have introduced it only where needed. In the future it would be a good idea to look at making OrderedDictionary safe by itself.
Tests for concurrency safety have also been added.

merging into feature branch for review.

repo: Iterable/iterable-swift-sdk


text:
FlannBasedMatcher add single

Hi, I wonder how could I add a single Descriptor set to a trained Matcher, with the common interface. Because the docs says, that you have to pass in a vector.
So I need to pass a vector with a single descriptor, right? Ok, then my question is, which imageIdx will have the matches related to this descriptor?

@dropfen , the Q&A forum is more appropriate place for questions: http://answers.opencv.org/

authors: dropfen mshabunin

repo: Itseez/opencv


text:
[HELP][docker] Build failed with default

Using groq for testing, but the docker build failed, do you have a already build docker present?
Looks like next.js sharp is failing to install
Here is the error:
 => [perplexica-backend internal] load build definition from backend.dockerfile                                                                0.0s
 => => transferring dockerfile: 440B                                                                                0.0s
 => [perplexica-backend internal] load metadata for docker.io/library/node:buster-slim                                                         1.9s
 => [perplexica-backend internal] load .dockerignore                                                                                0.0s
 => => transferring context: 55B                                                                                0.0s
 => [perplexica-backend internal] load build context                                                                                0.0s
 => => transferring context: 2.03kB                                                                                0.0s
 => [perplexica-backend  1/10] FROM docker.io/library/node:buster-slim@sha256:6b9c7110d38cfe71967ba3154c8e32bca078783402b3b801a81dcf9bd22343f  0.0s
 => CACHED [perplexica-backend  2/10] WORKDIR /home/perplexica                                                                                0.0s
 => CACHED [perplexica-backend  3/10] COPY src /home/perplexica/src                                                                            0.0s
 => CACHED [perplexica-backend  4/10] COPY tsconfig.json /home/perplexica/                                                                     0.0s
 => [perplexica-backend  5/10] COPY config.toml /home/perplexica/                                                                              0.0s
 => [perplexica-backend  6/10] COPY package.json /home/perplexica/                                                                             0.0s
 => [perplexica-backend  7/10] COPY yarn.lock /home/perplexica/                                                                                0.0s
 => [perplexica-backend  8/10] RUN sed -i "s|SEARXNG = ".*"|SEARXNG = "http://searxng:8080"|g" /home/perplexica/config.toml                    0.2s
 => ERROR [perplexica-backend  9/10] RUN yarn install                                                                                39.7s
------
 > [perplexica-backend  9/10] RUN yarn install:
0.398 yarn install v1.22.19
0.438 [1/4] Resolving packages...
0.533 [2/4] Fetching packages...
31.87 [3/4] Linking dependencies...
31.88 warning " > ts-node@10.9.2" has unmet peer dependency "@types/node@*".
34.18 [4/4] Building fresh packages...
39.46 error /home/perplexica/node_modules/sharp: Command failed.
39.46 Exit code: 1
39.46 Command: (node install/libvips && node install/dll-copy && prebuild-install) || (node install/can-compile && node-gyp rebuild && node install/dll-copy)
39.46 Arguments:
39.46 Directory: /home/perplexica/node_modules/sharp
39.46 Output:
39.46 sharp: Downloading https://github.com/lovell/sharp-libvips/releases/download/v8.14.5/libvips-8.14.5-linux-x64.tar.br
39.46 sharp: Installation error: Request timed out
39.46 sharp: Please see https://sharp.pixelplumbing.com/install for required dependencies
39.46 info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

Seems like a network issue?

I'm running into the same problem

I'm running into the same problem. Over on the sharp repo they recommend updating to sharp 0.33:
lovell/sharp#3795
Maybe that helps

We're not using sharp directly, It is a dependency of some dependency of Perplexica

An official prebuilt docker image will be way more helpful. I will try this later in the evening.

The issue is still present. Same issue.

An official prebuilt docker image will be way more helpful. I will try this later in the evening.

We can't provide it due to the environment variables and the config file that needs to be edited manually. If we started doing so, more issues will come to change stuff, etc.

Just use $PWD to mount the directory where env/config file is located.

authors: ItzCrazyKns debjit leuchtetgruen

repo: ItzCrazyKns/Perplexica


text:
[BUG]jellyfin10.9.6似乎用不了nginx反向代理的模式了

Version
jellyfin verson

Describe the bug
之前在用jellyfin10.8.13的时候是可以使用的，nginx的配置应该是没问题的，最近更新到10.9.6了之后发现似乎用不了了，但是如果用tampermonkey插件的话还是可以用的.
使用tampermonkey插件

使用nginx

我用Caddy倒是没啥问题，你nginx的配置文件是怎么写的？

我直接用的那个完整示例
`
worker_processes  1;
events {
worker_connections  1024;
}
http {
include       mime.types;
default_type  application/octet-stream;
sendfile        on;
keepalive_timeout  65;

server {
    listen       80;
    server_name  localhost;

location / {
    proxy_pass http://192.168.3.5:8096;
    proxy_pass_request_headers on;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $http_host;
    # 在流式传输时禁用缓冲
    proxy_buffering off;
}

location = /web/index.html {
    proxy_pass http://192.168.3.5:8096/web/index.html;
    proxy_pass_request_headers on;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $http_host;
    # 禁用与后端压缩并侧载脚本
    proxy_set_header Accept-Encoding "";
    sub_filter '' '';
    sub_filter_once on;
}

    location /socket {
    proxy_pass http://192.168.3.5:8096;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Protocol $scheme;
    proxy_set_header X-Forwarded-Host $http_host;
}

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

}

}
`
之前是可以用的，应该没啥问题

这里
location = /web/index.html {

Jellyfin 10.9 的URL后边不带index.html了，你可以在地址栏那确认一下，所以得删去

这个我后来也试过了，还是不行

刚才忘记说下一行的proxy_pass里面的也得删了。你看一下最新的那个完整示例，他用的是10.10版的Jellyfin，也能正确替换

另外，更改之后，还要取消注册service worker，不然浏览器还会使用自己缓存的旧版网页

okok解决了

另外，更改之后，还要取消注册service worker，不然浏览器还会使用自己缓存的旧版网页

绷不住了，万万没想到是我没清缓存导致的(シ_ _)シ

https://github.com/Izumiko/jellyfin-danmaku/issues/8
之前更新了一下 新版本url路径变了 但是添加为桌面app时的url路径没变 所以我加了个301重定向

authors: Izumiko Xarth-Mai index20481

repo: Izumiko/jellyfin-danmaku


text:
.

.

Let me break the code down for you as you clearly cant read the python script.
This is a Python script that automates the purchase of limited items from the Roblox marketplace.
The script reads two text files: "limiteds.txt" and "cookie.txt". "limiteds.txt" contains a list of the limited items that the script should attempt to purchase, while "cookie.txt" contains the user's authentication cookie for Roblox.
The script then uses the Roblox API to obtain the authenticated user's ID, and starts a separate thread to periodically obtain an X-CSRF-Token required for making requests to the Roblox API.
The main loop of the script repeatedly queries the Roblox API for details about each item in the "limiteds.txt" file. If an item is available for purchase, the script attempts to buy it using the purchasedetails endpoint. If the purchase is successful, the script prints a message indicating success. If the purchase is unsuccessful, the script tries again until the item is sold out or a limit is reached.
The script uses time.sleep() to implement a cooldown period between purchase attempts. The length of the cooldown period is calculated based on the number of items in the "limiteds.txt" file. The script also prints a message indicating how long the script took to execute and how long it should ideally take, as well as how many items were successfully purchased during the current execution.
Now with all of this considered.

No, this code does not send your Roblox API to another user. The code retrieves your own user ID by sending a request to the Roblox API using the authentication cookie you provide in cookie.txt. It then uses this user ID to purchase limited items on your account. The code does not send any information about your API or authentication cookie to another user.

yea yea, I wanted to close it, bc it was a wrong project

thats why I edited it it had a similar name to urs anyways thanks


text:
【drip-table-generator】删除初始化无数据情况下展示的三角感叹号图标

当generator里面给定schema，但未给组件传初始Data值信息，会出现感叹号图标，建议将感叹号图标删除

这块是我做的兜底提示，不是bug

最新效果

repo: JDFED/drip-table


text:
🛑 Woodpecker is down

In 92acf1f, Woodpecker (https://ci.frohnmeyer-wds.de/repos/28) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Woodpecker is back up in eba90aa after 38 minutes.

repo: JFronny/uptime


text:
@limiter.limit doesn't render ratelimit value correctly

Bug Report
On using below decorator from README file
@limiter.limit("1/second")

raises Value Error
ValueError: invalid literal for int() with base 10: 'second'

I guess, decorator doesn't work with aiohttp.web Views
Python version
$ python --version
Python 3.10.4

OS
Windows 11

@routes.get("/")
@limiter.limit("1/second")
async def home(request):
    return web.Response(text="test")

This works fine for me. Make sure you are using aiohttp-ratelimiter version 4.0.0

@routes.get("/")
@limiter.limit("1/second")
async def home(request):
    return web.Response(text="test")

This works fine for me. Make sure you are using aiohttp-ratelimiter version 4.0.0

Yikes, I'm working with 3.5,3 version, need to update, but I'm unable to install emcache. Error has been pasted below:
$ pip install -U aiohttp-ratelimiter==4.0.0
Collecting aiohttp-ratelimiter==4.0.0
  Using cached aiohttp-ratelimiter-4.0.0.tar.gz (5.1 kB)
  Preparing metadata (setup.py) ... done
Requirement already satisfied: aiohttp in d:\soft_installed\python\lib\site-packages (from aiohttp-ratelimiter==4.0.0) (3.8.1)
Requirement already satisfied: limits in d:\soft_installed\python\lib\site-packages (from aiohttp-ratelimiter==4.0.0) (2.7.0)
Requirement already satisfied: coredis in d:\soft_installed\python\lib\site-packages (from aiohttp-ratelimiter==4.0.0) (4.6.0)
ERROR: Could not find a version that satisfies the requirement emcache (from aiohttp-ratelimiter) (from versions: none)
ERROR: No matching distribution found for emcache

I'm pretty sure you can just ignore that error. If 4.0.0 was successfully installed then you should be fine.

Okay thanks, @Nebulizer1213
I'll test and if it works fine, I'll close the issue.

I'm pretty sure you can just ignore that error. If 4.0.0 was successfully installed then you should be fine.

I'm unable to upgrade to the latest version. It returns same error.
I've suggested couple of suggested changes in setup.py file

I just released 4.0.1 and this should be fixed

cool, I'll verify and close the issue soon.

repo: JGLTechnologies/aiohttp-ratelimiter


text:
Keys containing parentheses are invalid

For example:
[vipm.dependencies]
national_instruments_lib_nipm_api_(beta) = "3.2.1.9"

will return an error because beta is within parentheses.
In the context of Dragon this will happen fairly often.

Hey @Tom-McQuillan.
national_instruments_lib_nipm_api_(beta) (without quotes) is not a valid TOML keyname.  It should be wrapped in quotes, to be valid:
[vipm.dependencies]
"national_instruments_lib_nipm_api_(beta)" = "3.2.1.9"

As such, this is more of a Dragon error than a toml-edit-labview library error. Ping me for some ideas...

Side note: The toml-edit-labview library now outputs toml parsing error details (specific line in the toml) when trying to load TOML data (e.g. the  toml.lvclass:from_string.vi VI)

authors: Tom-McQuillan jimkring

repo: JKISoftware/toml-edit-labview


text:
🛑 jm26.net is down

In 17aac0b, jm26.net (https://jm26.net/status.txt) was down:

HTTP code: 502
Response time: 9678 ms

Resolved: jm26.net is back up in e63af5b.


text:
🛑 SIPP is down

In 728a99a, SIPP (https://sipp.petroil.com.mx) was down:

HTTP code: 503
Response time: 109 ms

Resolved: SIPP is back up in f5b1f13.

repo: JReyesPetroil/upptime


text:
🛑 Rentabilidad is down

In 1656c52, Rentabilidad (https://api.grupopetroil.com.mx/v1/rentabilidad) was down:

HTTP code: 503
Response time: 123 ms

Resolved: Rentabilidad is back up in e96ba68.


text:
DROP ... IF EXISTS not yet supported

drop table fo if exists cascade;

Todo: modify the Grammer to accept the IF and EXISTS tokens.

I am confused because the Grammar looks correct:
<K_DROP>
    (
        tk=<S_IDENTIFIER>
        |
        tk=<K_TABLE>
        |
        tk=<K_INDEX>
        |
        tk=<K_VIEW>
        |
        tk=<K_SCHEMA>
        |
        tk=<K_SEQUENCE>
    )
    { drop.setType(tk.image); }

    [ LOOKAHEAD(2) <K_IF> <K_EXISTS> {drop.setIfExists(true);} ]

But the parser rejects it.

Apologies, I got confused:
-- official syntax in H2 and Postgres
drop table if exists foo;

-- also works in H2, but not documented
drop table foo if exists ;

repo: JSQLParser/JSqlParser


text:
Failed to Parse MySQL DDL

Actual Behavior
the sql is as follow:
CREATE TABLE IF NOT EXISTS `t_category` (
  `id` varchar(32) COLLATE utf8_bin NOT NULL,
  `name` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '名称',
  `code` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '编码',
  `description` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '介绍',
  `parentId` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '父类节点',
  `preset` tinyint(1) NOT NULL COMMENT '是否预置',
  `beId` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '分销商Id',
  `beCode` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '分销商编码',
  `targetBeId` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '目标分销商Id',
  `targetBeCode` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '目标分销商编码',
  `spu` text COLLATE utf8_bin,
  `createTime` datetime COLLATE utf8_bin DEFAULT NULL COMMENT '创建时间',
  `updateTime` datetime COLLATE utf8_bin DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

Expected Behavior
no error.
Steps to Reproduce the Problem
String sqls = FileUtils.readFileToString(new File("test.sql"));
        Statements stmt = CCJSqlParserUtil.parseStatements(sqls);

Exception
Exception in thread "main" net.sf.jsqlparser.JSQLParserException
	at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatements(CCJSqlParserUtil.java:111)

Caused by: net.sf.jsqlparser.parser.ParseException: Encountered " "NOT" "NOT "" at line 1, column 17.
Was expecting one of:
    <EOF>
    ";" ...
    "(" ...
    ";" ...
    ";" ...

	at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:9257)
	at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:9130)
	at net.sf.jsqlparser.parser.CCJSqlParser.Statements(CCJSqlParser.java:143)
	at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatements(CCJSqlParserUtil.java:109)
	... 1 more
Caused by:
net.sf.jsqlparser.parser.ParseException: Encountered " "NOT" "NOT "" at line 1, column 17.
Was expecting one of:
    <EOF>
    ";" ...
    "(" ...
    ";" ...
    ";" ...

	at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:9257)
	at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:9130)
	at net.sf.jsqlparser.parser.CCJSqlParser.Statements(CCJSqlParser.java:143)
	at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatements(CCJSqlParserUtil.java:109)

Process finished with exit code 1

Specifications

Version:0.9
Platform:win7
Subsystem:

JSqlParser 4.0 parses this.

JSqlParser 4.0 parses this.

authors: shanyuxiyun wumpz


text:
Love this man! Would be cool if there was a "push / pull" implementation

Absolutely love this repo, one thing I would love to see is something similar to bootstrap's "pull / push" col implementation... Just a thought 👀

Good idea, I'll add that when I have the time :smile:

That's cool man, I look forward to it!

Sorry for re-opening, really think this would be a cool feature though... Will close off if you want?

It's in there now, from version 2.8.0 :smile:

That's dope man! - Props to you!

authors: danjonescidtrix gerbenmeyer

repo: JSxMachina/react-grid-system

license: isc


text:
🛑 Glitch is down

In a6a9d75, Glitch ($GLITCH) was down:

HTTP code: 503
Response time: 410 ms

Resolved: Glitch is back up in bfc642a after 10 minutes.

repo: JYFUX/upptime


text:
har文件保存失败

分享的时候提示har文件保存失败，上传也看不到验证码

相同问题，有些机器har保存失败。
另外上传是上传到哪里，能否自定义配置呢

目前上传地址没有配置，需要在代码中MainActivity自行填写

har保存失败的话检查一下是否给了读写存储权限

权限都有的，还是保存不了，我在虚拟机上试过也不行

@yoni803 我这里用三星7.0测试保存文件没有问题，具体保存不了的机器是什么型号，android版本多少呢？

魅蓝x安卓6的底包，虚拟机上是安卓5的底包

可以了，谢谢

repo: JZ-Darkal/AndroidHttpCapture


text:
Can't download ALVR.zip

It gives me this.

Nvm I just had to uninstall it.


text:
Russian localization

Russian localization for Mother-Russia and other russian-speaking countries users
Co-Authored-By: Vladyslav Niemchencko vniemchenko@gmail.com

Thank you so much!


text:
🛑 US Central A (HS) is down

In 75a4395, US Central A (HS) (http://a.us-central.servers.jackz.me) was down:

HTTP code: 0
Response time: 0 ms

Resolved: US Central A (HS) is back up in 5e3f7fc.

repo: Jackzmc/upptime


text:
🛑 US Central A (HS) is down

In b6a57f9, US Central A (HS) (http://a.us-central.servers.jackz.me) was down:

HTTP code: 0
Response time: 0 ms

Resolved: US Central A (HS) is back up in e11c4d2.


text:
Edit Path

Is it possible to get the edit path (not just the distance) between two graphs for any of the graph edit algorithms?

Hi @safreita1,
The edit path is not accessible (for now) outside of the edit distance computation.
The edit_costs()  function is only accessible within the AbstractGraphEditDistance because of the cdef method type.
https://github.com/Jacobe2169/GMatch4py/blob/8d0f09467986a398432e2a902262e8ce8bfc6cac/gmatch4py/ged/abstract_graph_edit_dist.pyx#L55
If you wish to access it, you can replace cdef by cpdef in the edit_costs() declaration. I'll make the change in the next commit.
Bests,
Jacques

Hello,
I'd be also very interested in accessing the edit path : )

Hi @r03ert0  and @safreita1,
I just pushed a new version with an edit_path() method that return the edit path.
Bests,
Jacques

Thank you very much @Jacobe2169 !!
Is this the correct way of using the algorithm?
import networkx as nx
import gmatch4py as gm

g1=nx.complete_bipartite_graph(5,4)
g2=nx.complete_bipartite_graph(6,4)

aged=gm.ged.abstract_graph_edit_dist.AbstractGraphEditDistance(1,1,1,1)
result=aged.compare([g1,g2],None) # I get an error at this point
print(result)
aged.edit_path(result)

The error I'm getting is "Exception ignored in: 'gmatch4py.ged.abstract_graph_edit_dist.AbstractGraphEditDistance.substitute_cost'
NotImplementedError:"

Don't use the `AbstractGraphEditDistance, it's an abstract class ;) Here is an example :
import networkx as nx
import gmatch4py as gm

g1=nx.complete_bipartite_graph(5,4)
g2=nx.complete_bipartite_graph(6,4)

# Instance used to compute the Graph Edit Distance
ged=gm.GraphEditDistance(1,1,1,1)

# Gmatch4py use it's own graph structure, to use the edit_path() methods
# you first need to parse them
from gmatch4py.helpers.general import parsenx2graph
GS= parsenx2graph([g1,g2])

# Then use the methods
ged.edit_path(GS[0],GS[1])

"""
# Result
(array([2., 0., 0., 0., 0., 2., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., # edit path
        0., 7.]),
 array([[0.00000000e+00, 9.22337204e+18, 9.22337204e+18, 9.22337204e+18, # cost matrix
         9.22337204e+18, 2.00000000e+00, 2.00000000e+00, 2.00000000e+00,
         2.00000000e+00, 9.00000000e+00, 5.00000000e+00, 9.22337204e+18,
         9.22337204e+18, 9.22337204e+18, 9.22337204e+18, 9.22337204e+18,
         9.22337204e+18, 9.22337204e+18, 9.22337204e+18],
        ...
        [9.22337204e+18, 9.22337204e+18, 9.22337204e+18, 9.22337204e+18,
         9.22337204e+18, 9.22337204e+18, 9.22337204e+18, 9.22337204e+18,
         9.22337204e+18, 7.00000000e+00, 0.00000000e+00, 0.00000000e+00,
         0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
         0.00000000e+00, 0.00000000e+00, 0.00000000e+00]]),
 array([[False, False, False, False, False,  True, False, False, False, # result from the munkres algorithm
         False, False, False, False, False, False, False, False, False,
         False],
        [False,  True, False, False, False, False, False, False, False,
         False, False, False, False, False, False, False, False, False,
         False],
        ...
        [False, False, False, False, False, False, False, False, False,
         False, False, False, False, False, False, False, False, False,
          True],
        [False, False, False, False, False, False, False, False, False,
          True, False, False, False, False, False, False, False, False,
         False]]))
"""

The edit_path will soon be updated to directly takes networkx Graph as input (the parsing will be done within the method ;))
Hope it helps.

cool! that works \o/
Here's the result I get for the edit path:
Edit path:
[2. 0. 0. 0. 0. 2. 1. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 7.]

But I don't get True/False values for the Munkres assignment. I get integer values:
(array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18]), array([ 5,  1,  2,  3,  4,  0,  6,  7,  8, 10, 11, 12, 13, 14, 15, 16, 17,
       18,  9]))

How do I interpret these values? The edit path values are costs, right? Is there a way of knowing what were the edits? (node_del, node_ins, edge_del, edge_ins). How can I figure out which nodes in G1 were made to correspond with which nodes in G2?

It depends on the munkres assignment function you're using (cython version or spicy version). In Scipy, version the output is a set of two arrays corresponding to x and y positions in the cost matrix. In the cython, it's a boolean array.
In both cases, it's pinpoint the position of the optimal assignments in the cost matrix. As for the node <-> cost-matrix association (nodes order is the same as in your networkx input, use list(G.nodes())), it look like this :

thank you @Jacobe2169 for the figure ! It's very clear now : )

How do we treat this part of matrix if we have true values inside?

BTW. Is it possible to obtain which edges should be added/deleted/substituted?

Hi @Sultan91,
The values on the bottom-right of the matrix correspond to the "do nothing" graph edition.
As for knowing which edges is added/deleted or substituted, it is currently not implemented within the GraphEditDistance(). You can modify the GraphEditDistance class or  you can create a new class that inherit from AbstractGraphEditDistance and store such information during the cost matrix computation. You can use the following template to do so :
# -*- coding: UTF-8 -*-

import networkx as nx
from gmatch4py.ged.abstract_graph_edit_dist cimport AbstractGraphEditDistance

cdef class ExampleCustomGraphEditDistance(AbstractGraphEditDistance):

    def __init__(self,node_del,node_ins,edge_del,edge_ins,weighted=False):
        AbstractGraphEditDistance.__init__(self,node_del,node_ins,edge_del,edge_ins)
        self.weighted=weighted

    cpdef double substitute_cost(self, node1, node2, G, H):
        return 1

    cdef double delete_cost(self, int i, int j, nodesG, G):
       return 1

    cdef double insert_cost(self, int i, int j, nodesH, H):
        return 1

Best,
Jacques


text:
Section Function Change

The Example.Drasil.SRS file now has a list of individual functions for each section.  When possible, import SRS into Body and change the section ('title') parts of the section functions into their respective counterparts.
e.g.:
section (titleize specificsystemdescription)[s4_intro] [s4_1, s4_2]
->
SRS.specSysDec [s4_intro] [s4_1, s4_2]

[ ] SWHS
[x] PCM
[x] GlassBR
[ ] HGHC
[x] SSP
[ ] GamePhysics

Thanks

GlassBR has been updated for the section headers currently defined in SRS, but I still need to update the section headers that are specific to my example.

GlassBR updated as of commit decb291.

tiny does not have this section


text:
Feature 2.0.0

correct the spell of 'AbstractGenericActivity'
replace fastjson with gson for SerializationService
add hashSet parameter
fix providers type in SecondActivity

in case type not match exception

repo: JailedBird/ArouterKspCompiler


text:
Multiline text in attributes differs on Windows and Linux

I found that when using multi-line text in attributes, our tests fail with on CI, although locally everything is fine. The reason is line endings although it seems that ApiApprover already has built-in tools to bypass it. I use ObsoleteAttribute with detailed description which takes several lines. So I have \r\n literal in the middle of the line in approved file on Windows machine but on CI build server I get an error with \n literal. I use Shouldly - ShouldMatchApproved method.
I went through the ApiApprover code as a debugger (normalizing strings, etc.), but I didn’t figure out what should be done in this case.

@danielmarbach What does it mean?
Because of that normalization this replace in Shouldly does not work:

Before normalization:

After normalization:

I have no idea honestly why this code is there. Paging @JakeGinnivan maybe he recalls.
That being said can't shouldly ignore those cases?

Shouldly can ignore line endings, but the problem is that \\r\\n is no longer a line ending.

So the code does this
        static string NormaliseLineEndings(string value)
        {
            return Regex.Replace(value, @"\r\n|\n\r|\r|\n", Environment.NewLine);
        }

which replaces it with the platform-specific variant NewLine. So that means you'd have to Replace Newline with \r\n before you pass it to shoudly and then you'd be safe correct?

It seems to me that no. NormaliseLineEndings in my case does not replace anything because I have \\r\\n in value. This is just another character sequence that Shouldly leaves unchanged. The key question is not what Shouldly does, but what ApiApprover does - that obscure "normalization".
Why not just leave the attribute value as it is - with all the original line feeds without any "normalization"? What is meant by simplicity of comparison in a comment? It turned out the opposite complication.

@JakeGinnivan any insights from your side?

Honestly do not remember either. Sorry :(

Ok I guess then I will play around with the code a bit when I have time to better understand the implications of those normalizations and how my crazyness comes out of the code compiler by default

Honestly though I'm a bit on the fence how much effort is worth because I know quite a few teams that run this code on multiple platform without shouldly but don't have that problem

Probably they are not inclined to write lengthy descriptions in attributes.

Well at particular for example we have really lengthy attributes. Will check there as well-------- Ursprüngliche Nachricht --------Betreff: Re: [JakeGinnivan/ApiApprover] Multiline text in attributes differs on Windows and Linux (#75)Von: Ivan Maximov An: JakeGinnivan/ApiApprover Cc: Daniel Marbach ,Mention Probably they are not inclined to write lengthy descriptions in attributes.
—You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or mute the thread.

So I looked into this a bit. With NServiceBus we also have multi line attributes but we have no issue so far because our gitattributes normalizes line endings. As I can see graphql has
* text=auto

while we have
# Auto detect text files and perform CRLF normalization
* text=auto eol=crlf

Currently, all \n get turned into \\n and any combination of \r\n or \r\\n gets turned into \\r\\n and then they get normalized with Environment.NewLine which is under Windows \r\n and under nix environments it is \n.
The test you sent in that fails hardcodes the expectation to be \\r\\n which is only true under Windows but not under Linux so therefore it fails.
What would be your expectation of this library? What should it do for you or shouldn't it do? Would you want the ability to replace the normalization function which something that is consistent over all the platforms?

I want my approval test to work on both windows and nix. I do not want to hardcode anything. I just run api generator first time, renamed received file into approved then run test again and it passed. Then I pushed all this onto Cl and test failed. I did not hardcode anything manually.

Well like I said you can achieve that by changing the line endings for the approval files in gitattributes or replacing the Environment.NewLine with something hardcoded for now. From the perspective of this library it might make sense to normalize towards /r/n or /n independent from the platform in the next major -------- Ursprüngliche Nachricht --------Betreff: Re: [JakeGinnivan/ApiApprover] Multiline text in attributes differs on Windows and Linux (#75)Von: Ivan Maximov An: JakeGinnivan/ApiApprover Cc: Daniel Marbach ,Mention I want my approval test to work on both windows and nix. I do not want to hardcode anything. I just run api generator first time, renamed received file into approved then run test again and it passed. Then I pushed all this onto Cl and test failed. I did not hardcode anything manually.
—You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or mute the thread.

I'll need to take a closer look at what is going on the code to see if something here is wrong, but in general this library shouldn't be responsible for handling line ending differences. That should be handled by source control and the approval test library that consumes the files created by this library.

To ensure I understand, is this when you have:
[AnAttribute(
@"With a property
defined over
several lines?")]

Presumably this isn't limited to attributes? I guess you could also have a
public const string Defined =
@"Over
several
lines?";

If so, then I agree with @bording that this library should not do anything special with line endings.
Indeed, a change to the line endings in these values is a breaking change. A consumer could be checking for /r/n, and in the next version, you change that to /n and their code blows up.
A line ending character in a code base is just like any other character on the code base. It is the responsibility of the maintainers to... maintain them. "Special" treatment of line endings is what leads to problems like these.

Repeat of my comment:
Shouldly (consumer) can handle (ignore) different line endings, but the problem is that \r\n after apiapprover "normalization" is no longer a line ending.

Presumably this isn't limited to attributes?

It is only used in static CodeExpression CreateInitialiserExpression(CustomAttributeArgument attributeArgument), so for attribute values only. My test failed on rather long dexcription text in ObsoleteAttribute.

I'm not sure I fully understand this scenario, but if this library is currently doing something special with line endings then that behaviour should probably be removed.

I synced with @adamralph again to clarify a few things and we both came to the conclusion that the public api generator doing the right thing. The API generator inspects the assembly metadata and creates a sharp equivalent of the public API. If an attribute in a source file contains literal newline or carriage return line feed characters the csharp equivalent is the escaped version of these literals.
The problem seen here is not solvable from a public api generator perspective. The graphql repository contains
* text=auto

which mingles the line endings on the way into the repository. Thus when a csharp file created on Windows with an attribute that contains /r/n public API generator will escape it in the csharp equivalent to //r//n. With the line ending mingling, the source file gets checked out on linux with LF only which then gets escaped to //n thus the test fails.
Like @adamralph mentioned though the Api generator doesn't apply that behavior consistently. For example right now the attribute code only deals with /r/n and /n and for example doesn't deal with /t or other literal characters. This should probably be fixed. As well as applying the same behavior for constant strings

* text=auto eol=crlf works, thanks.

authors: JakeGinnivan adamralph bording danielmarbach sungam3r

repo: JakeGinnivan/ApiApprover


text:
Typo - Missing step

Added one step - hitting Properties option

Thanks! Deloying...

authors: JakeWharton sindyoke

repo: JakeWharton/butterknife


text:
Use classList instead of manupulating className property

We are currently doing string and array operations to add classes coming from the detect util results. We should be using classList since it has better performance and it is inside the browser spectrum we develop for.

classList is good, but I am hesitant to alter the current code as it is only run once (at the beginning of the app) so any performance gains would go unnoticed and it would remove support for IE9 (Although I hope we never have to support it again). Maybe if we use a polyfill for classList as well.

God, I thought we weren't supporting IE9 anymore. There is a polyfill that works well but adding a polyfill when we would be using this only when app kicks off makes no sense to me.

I'm pretty sure we don't have to support IE9 anymore, but I'm hesitant to make an update that reduces browser support for something this small. And I do agree with the polyfill comment, definitely would be overkill.


text:
Feature: add skip to content links

What kind of change does this PR introduce? (check at least one)

[ ] Bugfix (non-breaking change which fixes an issue)
[x] Feature (non-breaking change which adds functionality)
[ ] Code style update
[ ] Refactor (refactoring or adding test which isn't a fix or add a feature)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] Build-related changes
[ ] Other, please describe:

Does this PR introduce a breaking change? (check one)

[x] Yes
[ ] No

Adviser warns of an error with netmask (high).
Advisory code is 1658: https://www.npmjs.com/advisories/1658**
Did you test your solution?

[x] I lightly tested it in one browser
[ ] I deeply tested it in several browsers
[ ] I wrote tests around it (unit tests, integration tests, E2E tests)

Problem Description
Per WCAG 2.1 AA compliance having bypass blocks on each page is necessary.
Solution Description
One notably method of solving this is by:

G1: Adding a link at the top of each page that goes directly to the main content area

An alternate solution for Jam3 projects would include adding a subnav which satisfies the criteria:

G124: Adding links at the top of the page to each area of the content

This PR creates a tab-able, screen readable skip to content button which the user can click to skip the navbar on each page. It does so by using an anchor link at the bottom of the nav page to change focus.
Notable findings:

This link must be the first targetable focus on each page
While screen readers should be able to pick up content with opacity: 0; ChromeVox seems to ignore elements with opacity 0 all together when a user is navigating with their keyboard. A fix for this is to set the element with opacity: 0.0001. While this is not ideal, it guarantees the maximum number of screen readers will be able to read the link while not impacting design. In the future, when this ChromeVox bug is patched, opacity should be adjusted back to 0.

Unfocused link:

Focused Link:

Test with ChromeVox (audio) showing that selecting the Skip to Content skips the Nav and goes directly to focus on the "Welcome to Jam3."
https://user-images.githubusercontent.com/21203253/113030134-43c57e80-915b-11eb-8d6e-1af96990251a.mp4

Side Effects, Risks, Impact
Let me know if I should add the advisor warning to adviserrc.json.
Additional comments:

Merging this @DonghyukJacobJang we tested this in Tonal and worked fine

authors: KeshavChawla alemesa


text:
Adopt the Research Codebase Manifesto?

At one point we moved some dead-but-maybe-useful code into separate branches. There is also a dev branch which is supposed to be more broken in terms of CI than main. These facts, as well as that we may at some point want to move over code from other checkers and projects without necessarily immediately cleaning it up, suggest that we could benefit from a better organization of the file hierarchy instead of attempting to move between dedicated branches like this.
I propose that we adopt the Research Codebase Manifesto in some form. opencompl/ssa is another Lean project that has been using the RCM, and they report being happy with it.

That sounds quite good to me.
I see the SSA project has everything in one lake facet, but it looks like they tried having separate lake facets? Do you know more about that?
I'd prefer the core library be in its own lake facet:

Hoping the library gets some use outside of our group and it seems smart to dogfood the core library as a lake package.
Can separate CI between core & projects/experiments

I particularly look forward to this forcing us to more frequently review each others' code, since we will be PRing to experiments and projects with lower standards than how we have been treating main.

closing as completed

repo: JamesGallicchio/LeanSAT


text:
Need to Install New vip for integration test

Right now the integration test from source just operates with the installed vip file.
We need to install the vip file so the source based integration tests are linked to the new version of the library.

No longer needed. Linked the integration tests to the source versions and included a build of them as part of the CI workflow.
See the just files for details.


text:
Valkyria rifle scope mount model changed in recent patch

Hey, not sure if this is the best place for this, but I noticed that since the Ninja DLC dropped the Valkyria scope mount model changed. When GoonmodWeaponCustomizer is in the mod_overrides folder, it appears textureless. Screenshot attached.

Looking at the unchanged third-person model, this might be unintended.

Fixed this in yesterdays customizer overrides update. The scope mount now points to the correct texture.

authors: Isotaupe JamesWilko

repo: JamesWilko/GoonMod