[BUG] ObjectTracker repeatedly removes and then reaquries tracks

Describe the bug
For objects of any class other than the first detected class, the ObjectTracker pipeline node will emit a NEW tracklet followed by a REMOVED tracklet in the next frame. This behavior repeats over the entire sequence of frames, i.e. you'll see NEW, REMOVED, NEW, REMOVED, NEW, REMOVED... I have observed this behavior only with the YOLO pipeline node.
To Reproduce
To make this as easy to reproduce as possible, I updated the object_tracker_video example code to use YOLO + the yolov4 model zoo model instead of mobilenet. I then took the darknet sample image and turned it into a 4 second video (i.e. 100 frames of the same stationary image, see attached) so that the tracker's job is as easy as possible. The tracker has been configured to use the UNIQE_ID TrackerIdAssigmentPolicy, so you should see the id for the dog and horse detections go up with each frame. The ID of the person object will remain constant.
#!/usr/bin/env python3

from pathlib import Path
import cv2
import depthai as dai
import numpy as np
import time
import argparse

labelMap = [
    "person",         "bicycle",    "car",           "motorbike",     "aeroplane",   "bus",           "train",
    "truck",          "boat",       "traffic light", "fire hydrant",  "stop sign",   "parking meter", "bench",
    "bird",           "cat",        "dog",           "horse",         "sheep",       "cow",           "elephant",
    "bear",           "zebra",      "giraffe",       "backpack",      "umbrella",    "handbag",       "tie",
    "suitcase",       "frisbee",    "skis",          "snowboard",     "sports ball", "kite",          "baseball bat",
    "baseball glove", "skateboard", "surfboard",     "tennis racket", "bottle",      "wine glass",    "cup",
    "fork",           "knife",      "spoon",         "bowl",          "banana",      "apple",         "sandwich",
    "orange",         "broccoli",   "carrot",        "hot dog",       "pizza",       "donut",         "cake",
    "chair",          "sofa",       "pottedplant",   "bed",           "diningtable", "toilet",        "tvmonitor",
    "laptop",         "mouse",      "remote",        "keyboard",      "cell phone",  "microwave",     "oven",
    "toaster",        "sink",       "refrigerator",  "book",          "clock",       "vase",          "scissors",
    "teddy bear",     "hair drier", "toothbrush"
]

nnPathDefault = str((Path(__file__).parent / Path('models/yolo-v4-tiny-tf_openvino_2021.4_6shave.blob')).resolve().absolute())
videoPathDefault = str((Path(__file__).parent / Path('models/construction_vest.mp4')).resolve().absolute())
parser = argparse.ArgumentParser()
parser.add_argument('-nnPath', help="Path to yolo detection network blob", default=nnPathDefault)
parser.add_argument('-v', '--videoPath', help="Path to video frame", default=videoPathDefault)

args = parser.parse_args()

# Create pipeline
pipeline = dai.Pipeline()

# Define sources and outputs
manip = pipeline.createImageManip()
objectTracker = pipeline.createObjectTracker()
detectionNetwork = pipeline.createYoloDetectionNetwork()

manipOut = pipeline.createXLinkOut()
xinFrame = pipeline.createXLinkIn()
trackerOut = pipeline.createXLinkOut()
xlinkOut = pipeline.createXLinkOut()
nnOut = pipeline.createXLinkOut()

manipOut.setStreamName("manip")
xinFrame.setStreamName("inFrame")
xlinkOut.setStreamName("trackerFrame")
trackerOut.setStreamName("tracklets")
nnOut.setStreamName("nn")

# Properties
xinFrame.setMaxDataSize(1920*1080*3)

manip.initialConfig.setResize(416, 416)
manip.initialConfig.setKeepAspectRatio(False)
# manip.initialConfig.setResize(384, 384)
# manip.initialConfig.setKeepAspectRatio(False) #squash the image to not lose FOV
# The NN model expects BGR input. By default ImageManip output type would be same as input (gray in this case)
manip.initialConfig.setFrameType(dai.ImgFrame.Type.BGR888p)
manip.inputImage.setBlocking(True)

# setting node configs
detectionNetwork.setConfidenceThreshold(0.8)
detectionNetwork.setNumClasses(80)
detectionNetwork.setCoordinateSize(4)
detectionNetwork.setAnchors(np.array([10, 14, 23, 27, 37, 58, 81, 82, 135, 169, 344, 319]))
detectionNetwork.setAnchorMasks({"side26": np.array([1, 2, 3]), "side13": np.array([3, 4, 5])})
detectionNetwork.setIouThreshold(0.2)
detectionNetwork.setBlobPath(args.nnPath)
detectionNetwork.setNumInferenceThreads(2)
detectionNetwork.input.setBlocking(True)

objectTracker.inputTrackerFrame.setBlocking(True)
objectTracker.inputDetectionFrame.setBlocking(True)
objectTracker.inputDetections.setBlocking(True)
# possible tracking types: ZERO_TERM_COLOR_HISTOGRAM, ZERO_TERM_IMAGELESS
objectTracker.setTrackerType(dai.TrackerType.ZERO_TERM_COLOR_HISTOGRAM)
# take the smallest ID when new object is tracked, possible options: SMALLEST_ID, UNIQUE_ID
objectTracker.setTrackerIdAssigmentPolicy(dai.TrackerIdAssigmentPolicy.UNIQUE_ID)

# Linking
manip.out.link(manipOut.input)
manip.out.link(detectionNetwork.input)
xinFrame.out.link(manip.inputImage)
xinFrame.out.link(objectTracker.inputTrackerFrame)
detectionNetwork.out.link(nnOut.input)
detectionNetwork.out.link(objectTracker.inputDetections)
detectionNetwork.passthrough.link(objectTracker.inputDetectionFrame)
objectTracker.out.link(trackerOut.input)
objectTracker.passthroughTrackerFrame.link(xlinkOut.input)

# Connect and start the pipeline
with dai.Device(pipeline) as device:

    qIn = device.getInputQueue(name="inFrame")
    trackerFrameQ = device.getOutputQueue(name="trackerFrame", maxSize=4)
    tracklets = device.getOutputQueue(name="tracklets", maxSize=4)
    qManip = device.getOutputQueue(name="manip", maxSize=4)
    qDet = device.getOutputQueue(name="nn", maxSize=4)

    startTime = time.monotonic()
    counter = 0
    fps = 0
    detections = []
    frame = None

    def to_planar(arr: np.ndarray, shape: tuple) -> np.ndarray:
        return cv2.resize(arr, shape).transpose(2, 0, 1).flatten()

    # nn data, being the bounding box locations, are in <0..1> range - they need to be normalized with frame width/height
    def frameNorm(frame, bbox):
        normVals = np.full(len(bbox), frame.shape[0])
        normVals[::2] = frame.shape[1]
        return (np.clip(np.array(bbox), 0, 1) * normVals).astype(int)

    def displayFrame(name, frame):
        for detection in detections:
            bbox = frameNorm(frame, (detection.xmin, detection.ymin, detection.xmax, detection.ymax))
            cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (255, 0, 0), 2)
            cv2.putText(frame, labelMap[detection.label], (bbox[0] + 10, bbox[1] + 20), cv2.FONT_HERSHEY_TRIPLEX, 0.5, 255)
            cv2.putText(frame, f"{int(detection.confidence * 100)}%", (bbox[0] + 10, bbox[1] + 40), cv2.FONT_HERSHEY_TRIPLEX, 0.5, 255)
        cv2.imshow(name, frame)

    cap = cv2.VideoCapture(args.videoPath)
    baseTs = time.monotonic()
    simulatedFps = 30
    inputFrameShape = (1280, 720)

    while cap.isOpened():
        read_correctly, frame = cap.read()
        if not read_correctly:
            break

        img = dai.ImgFrame()
        img.setType(dai.ImgFrame.Type.BGR888p)
        img.setData(to_planar(frame, inputFrameShape))
        img.setTimestamp(baseTs)
        baseTs += 1/simulatedFps

        img.setWidth(inputFrameShape[0])
        img.setHeight(inputFrameShape[1])
        qIn.send(img)

        trackFrame = trackerFrameQ.get()
        if trackFrame is None:
            continue

        track = tracklets.get()
        manip = qManip.get()
        inDet = qDet.get()

        counter+=1
        current_time = time.monotonic()
        if (current_time - startTime) > 1 :
            fps = counter / (current_time - startTime)
            counter = 0
            startTime = current_time

        detections = inDet.detections
        manipFrame = manip.getCvFrame()
        displayFrame("nn", manipFrame)

        color = (255, 0, 0)
        trackerFrame = trackFrame.getCvFrame()
        trackletsData = track.tracklets
        for t in trackletsData:
            roi = t.roi.denormalize(trackerFrame.shape[1], trackerFrame.shape[0])
            x1 = int(roi.topLeft().x)
            y1 = int(roi.topLeft().y)
            x2 = int(roi.bottomRight().x)
            y2 = int(roi.bottomRight().y)

            try:
                label = labelMap[t.label]
            except:
                label = t.label

            cv2.putText(trackerFrame, str(label), (x1 + 10, y1 + 20), cv2.FONT_HERSHEY_TRIPLEX, 0.5, 255)
            cv2.putText(trackerFrame, f"ID: {[t.id]}", (x1 + 10, y1 + 35), cv2.FONT_HERSHEY_TRIPLEX, 0.5, 255)
            cv2.putText(trackerFrame, t.status.name, (x1 + 10, y1 + 50), cv2.FONT_HERSHEY_TRIPLEX, 0.5, 255)
            cv2.rectangle(trackerFrame, (x1, y1), (x2, y2), color, cv2.FONT_HERSHEY_SIMPLEX)

        cv2.putText(trackerFrame, "Fps: {:.2f}".format(fps), (2, trackerFrame.shape[0] - 4), cv2.FONT_HERSHEY_TRIPLEX, 0.4, color)

        cv2.imshow("tracker", trackerFrame)

        if cv2.waitKey(1) == ord('q'):
            break

Expected behavior
The dog and horse detections should each be assigned a track in the first frame and these tracks should last the entire video.
Screenshots

https://user-images.githubusercontent.com/91002185/133919361-52398f3c-ede0-4cef-870d-e218fad70178.mp4

Hello @JasonHMaxwell, sorry about the inconvenience. This shouldn't happen, but we, unfortunately, can't do anything about it. Object tracker logic is proprietary software of Intel and is compiled so we can't change/fix anything. There are also other problems with the current object tracker:
one thing I notice is that tracklets get removed sometime after 1 "LOST" status and sometimes after 30. Not really sure how to explain that. I also believe that the threshold isn't (always) working as expected. Also there is some random issue that it will create multiple tracklets for the same object, link here (I'm not sure if it has been resolved)
So my suggestion would be to either use mobilenet (maybe better detection accuracy?) or run a custom tracking NN.
Thanks, Erik

Thanks for your reply @Erol444. I've manged to work around this issue by pulling the nn detections back to the host, setting the labels all to the same value, e.g. 1, and then sending the modified detections to the on-device tracker. It's possible that throwing away the detection labels will reduce the accuracy of the tracker, but I'm not sure what algorithm is being used. Is the tracking algorithm documented somewhere?. If the algorithm doesn't use the image data at all, then I may as well do the tracking on the host.
Would you be able to raise a bug with intel? Having said that, it sounds like Intel's tracker is a bit of a disaster, so maybe it would be faster for you to implement your own.


test_ondemand_activation is flaky

37 failures in last 7 days.

it was quite flaky but isn't any more now.

This is unrelated to the storage controller. Tenant warm-up happens on a different task and we add the entry to the tenant map optimistically. The test expects that once the tenant map has been updated, all the tenants should have finished warming-up, which is not racy.
We need to wrap the metrics wait in a wait_until.


Rename

Should this be deleted? Because the name ApiKeyInterceptor is invalid, there already is an interceptor called ApiKey so membrane would not start


File Types

how to handle the input of different files types
how to construct different file types for output

I'd file this under "serialization". I made a chapter header for it already.


minification.removeConsoleCalls doesn't remove console calls

All console calls remains in the code after processing with minification.removeConsoleCalls turned on.

The minification transformers are undocumented and unfinished.

O.o but why it is visible in --help?

Just haven't gotten around to fleshing them out because I've been busy with higher priority bugs and features. I just pushed a patch that fixes it. Probably necessary to add a flag to make transformers hidden too to avoid issues like this in the future.

Be carefull, your commit will break some react tests. Tried to fix it the same way before reporting :)

I know :) Haven't pushed a new release yet because I'm still doing some work.


[BUG] Jellyfin import includes wrong remote date

Describe the bug
I'm seeing the warning message regarding remote item date older than sync date mentioned in the FAQ. However, it seems like it is not using LastPlayedDate as described.
To Reproduce
Have a file with a create date in the past. Change the watch state in Jellyfin. Then do an import.
Expected behavior
I expect that if I see the warning message, the remote item date would be the LastPlayedDate (2024-05-16T13:15:04.3005904Z) (which might be wrong, per FAQ), but it was actually the DateCreated (2006-09-21T05:25:03-04:00)
Import Log
[2024-05-16T10:02:57-04:00] DEBUG: Processing [jellyfin] payload. { (library: [ (id: f137a2dd21bbc1b99aa5c0f6bf02a805), (title: Movies), (type: movies), (totalRecords: 110), (url: REDACTED ]), (segment: [ (number: 1), (of: 1), (size: 1000) ]), (body: [ (Name: Kung Fu Panda 4), (OriginalTitle: Kung Fu Panda 4), (ServerId: 7abc0b1b676d43bebf400adbb716fd0f), (Id: 76c0e4eff744fcd615a9b98b31943890), (DateCreated: 2006-09-21T09:25:03.0000000Z), (HasSubtitles: true), (Container: mkv,webm), (PremiereDate: 2024-03-02T00:00:00.0000000Z), (CriticRating: 72), (Path: REDACTED), (OfficialRating: PG), (ChannelId: None), (CommunityRating: 7.13), (RunTimeTicks:<PHONE_NUMBER>4), (ProductionYear: 2024), (ProviderIds: [ (Imdb: tt21692408), (Tmdb: 1011985), (TmdbCollection: 77816) ]), (IsFolder: false), (Type: Movie), (UserData: [ (PlayedPercentage: 10.535423303637), (PlaybackPositionTicks:<PHONE_NUMBER>), (PlayCount: 1), (IsFavorite: false), (LastPlayedDate: 2024-05-16T13:15:04.3005904Z), (Played: false), (Key: 1011985) ]), (VideoType: VideoFile), (ImageBlurHashes: [  ]), (LocationType: FileSystem), (MediaType: Video) ]) }
[2024-05-16T10:02:57-04:00] NOTICE: MAPPER: [jellyfin] item [122: Kung Fu Panda 4 (2024)] is marked as [unplayed] vs local state [played], However due to the remote item date [2006-09-21T05:25:03-04:00] being older than the last backend sync date [2024-05-16T09:55:55-04:00]. it was not considered as valid state.

Basic report
[ Basic Report ]

WatchState Version: 20240515-6dbe63a
PHP Version: 8.3.7
Timezone: America/New_York
Running in Container? Yes
Data Path: /config
Temp Path: /config
Database Migrated?: Yes
Has .env file? Yes
Is Tasks Runner working? Yes
Report Generated At: 2024-05-16T14:48:03+00:00

[ Backends ]

[ Plex (<IP_ADDRESS>95-c67dce28e) ==> plex ]

Is backend URL HTTPS? Yes
Has Unique Identifier? Yes
Has User? Yes
Export Enabled? Yes
Time since last export? 2024-05-16T14:20:00+00:00
Play state import enabled? Yes
Metadata only import enabled? No
Time since last import? 2024-05-16T14:40:50+00:00
Has webhook token? Yes
Is webhook match user id enabled? Yes
Is webhook match backend unique id enabled? Yes
Has custom options? Yes
{"ADMIN_TOKEN":"**HIDDEN**"}

[ Jellyfin (10.9.1) ==> jellyfin ]

Is backend URL HTTPS? Yes
Has Unique Identifier? Yes
Has User? Yes
Export Enabled? Yes
Time since last export? 2024-05-16T14:20:00+00:00
Play state import enabled? Yes
Metadata only import enabled? No
Time since last import? 2024-05-16T14:40:51+00:00
Has webhook token? Yes
Is webhook match user id enabled? Yes
Is webhook match backend unique id enabled? Yes
Has custom options? No
{}

[ Tasks ]

[ Import ]

Is Task enabled? Yes
Which flags are used to run the task? -v
When the task scheduled to run at? */10 * * * *
When is the next scheduled run? 2024-05-16T14:50:00+00:00

[ Export ]

Is Task enabled? Yes
Which flags are used to run the task? -v
When the task scheduled to run at? 5-59/10 * * * *
When is the next scheduled run? 2024-05-16T14:55:00+00:00

[ Push ]

Is Task enabled? Yes
Which flags are used to run the task? -v
When the task scheduled to run at? */1 * * * *
When is the next scheduled run? 2024-05-16T14:49:00+00:00

[ Progress ]

Is Task enabled? Yes
Which flags are used to run the task? -v
When the task scheduled to run at? */1 * * * *
When is the next scheduled run? 2024-05-16T14:49:00+00:00

[ Backup ]

Is Task enabled? Yes
Which flags are used to run the task? -v
When the task scheduled to run at? 0 6 */3 * *
When is the next scheduled run? 2024-05-19T10:00:00+00:00

[ Prune ]

Is Task enabled? Yes
Which flags are used to run the task? -v
When the task scheduled to run at? 0 */12 * * *
When is the next scheduled run? 2024-05-16T16:00:00+00:00

[ Indexes ]

Is Task enabled? Yes
Which flags are used to run the task? -v
When the task scheduled to run at? 0 3 * * 3
When is the next scheduled run? 2024-05-22T07:00:00+00:00

[ Requests ]

Is Task enabled? Yes
Which flags are used to run the task? -v --no-stats
When the task scheduled to run at? */2 * * * *
When is the next scheduled run? 2024-05-16T14:50:00+00:00

[ Logs ]

[ /config/logs/app.20240516.log ]

[2024-05-16T10:40:53.647976-04:00] logger.ERROR: Unexpected Content type [BoxSet] was received. {"backend":"jellyfin","library":{"id":"f137a2dd21bbc1b99aa5c0f6bf02a805","title":"Movies","type":"movies","totalRecords":110,"url":"https://mydomain.example:8920/Users/ab75dfa201d2462e9ab9daaa00349e29/items/?sortBy=DateCreated&sortOrder=Ascending&parentId=f137a2dd21bbc1b99aa5c0f6bf02a805&recursive=true&enableUserData=true&enableImages=false&excludeLocationTypes=Virtual&fields=ProviderIds%2CDateCreated%2COriginalTitle%2CSeasonUserData%2CDateLastSaved%2CPremiereDate%2CProductionYear%2CPath%2CUserDataLastPlayedDate&includeItemTypes=Movie%2CEpisode&limit=1000&startIndex=0"},"segment":{"number":1,"of":1.0,"size":1000},"body":{"Name":"Ice Age Collection","ServerId":"7abc0b1b676d43bebf400adbb716fd0f","Id":"1b34fe696adcb672bdaa8528c8911b58","DateCreated":"2023-09-30T15:30:45.5530944Z","PremiereDate":"2022-01-28T00:00:00.0000000Z","Path":"/config/data/data/collections/Ice Age Collection [boxset]","OfficialRating":"PG","ChannelId":null,"ProductionYear":2022,"ProviderIds":{"Tmdb":"8354"},"IsFolder":true,"Type":"BoxSet","UserData":{"UnplayedItemCount":1,"PlaybackPositionTicks":0,"PlayCount":0,"IsFavorite":false,"Played":false,"Key":"1b34fe69-6adc-b672-bdaa-8528c8911b58"},"DisplayOrder":"PremiereDate","ImageBlurHashes":[],"LocationType":"FileSystem","MediaType":"Unknown"}} []
[2024-05-16T10:40:53.648965-04:00] logger.ERROR: Unexpected Content type [BoxSet] was received. {"backend":"jellyfin","library":{"id":"f137a2dd21bbc1b99aa5c0f6bf02a805","title":"Movies","type":"movies","totalRecords":110,"url":"https://mydomain.example:8920/Users/ab75dfa201d2462e9ab9daaa00349e29/items/?sortBy=DateCreated&sortOrder=Ascending&parentId=f137a2dd21bbc1b99aa5c0f6bf02a805&recursive=true&enableUserData=true&enableImages=false&excludeLocationTypes=Virtual&fields=ProviderIds%2CDateCreated%2COriginalTitle%2CSeasonUserData%2CDateLastSaved%2CPremiereDate%2CProductionYear%2CPath%2CUserDataLastPlayedDate&includeItemTypes=Movie%2CEpisode&limit=1000&startIndex=0"},"segment":{"number":1,"of":1.0,"size":1000},"body":{"Name":"Hercule Poirot (Kenneth Branagh) Collection","ServerId":"7abc0b1b676d43bebf400adbb716fd0f","Id":"49ba48ed43fef31a327541db7bbcd347","DateCreated":"2023-10-02T04:15:44.7490723Z","PremiereDate":"2022-02-09T00:00:00.0000000Z","Path":"/config/data/data/collections/Hercule Poirot Collection [boxset]","OfficialRating":"PG-13","ChannelId":null,"ProductionYear":2022,"ProviderIds":{"Tmdb":"735384"},"IsFolder":true,"Type":"BoxSet","UserData":{"UnplayedItemCount":2,"PlaybackPositionTicks":0,"PlayCount":0,"IsFavorite":false,"Played":false,"Key":"49ba48ed-43fe-f31a-3275-41db7bbcd347"},"DisplayOrder":"PremiereDate","ImageBlurHashes":[],"LocationType":"FileSystem","MediaType":"Unknown"}} []
[2024-05-16T10:40:53.649898-04:00] logger.ERROR: Unexpected Content type [BoxSet] was received. {"backend":"jellyfin","library":{"id":"f137a2dd21bbc1b99aa5c0f6bf02a805","title":"Movies","type":"movies","totalRecords":110,"url":"https://mydomain.example:8920/Users/ab75dfa201d2462e9ab9daaa00349e29/items/?sortBy=DateCreated&sortOrder=Ascending&parentId=f137a2dd21bbc1b99aa5c0f6bf02a805&recursive=true&enableUserData=true&enableImages=false&excludeLocationTypes=Virtual&fields=ProviderIds%2CDateCreated%2COriginalTitle%2CSeasonUserData%2CDateLastSaved%2CPremiereDate%2CProductionYear%2CPath%2CUserDataLastPlayedDate&includeItemTypes=Movie%2CEpisode&limit=1000&startIndex=0"},"segment":{"number":1,"of":1.0,"size":1000},"body":{"Name":"New Kung Fu Cult Master Collection","ServerId":"7abc0b1b676d43bebf400adbb716fd0f","Id":"e0542ac2261aad3d15036d4d924698fa","DateCreated":"2023-10-07T19:48:27.8114314Z","PremiereDate":"2022-01-28T00:00:00.0000000Z","Path":"/config/data/data/collections/New Kung Fu Cult Master Collection [boxset]","ChannelId":null,"ProductionYear":2022,"ProviderIds":{"Tmdb":"935154"},"IsFolder":true,"Type":"BoxSet","UserData":{"UnplayedItemCount":2,"PlaybackPositionTicks":0,"PlayCount":0,"IsFavorite":false,"Played":false,"Key":"e0542ac2-261a-ad3d-1503-6d4d924698fa"},"DisplayOrder":"PremiereDate","ImageBlurHashes":[],"LocationType":"FileSystem","MediaType":"Unknown"}} []
[2024-05-16T10:40:53.650828-04:00] logger.ERROR: Unexpected Content type [BoxSet] was received. {"backend":"jellyfin","library":{"id":"f137a2dd21bbc1b99aa5c0f6bf02a805","title":"Movies","type":"movies","totalRecords":110,"url":"https://mydomain.example:8920/Users/ab75dfa201d2462e9ab9daaa00349e29/items/?sortBy=DateCreated&sortOrder=Ascending&parentId=f137a2dd21bbc1b99aa5c0f6bf02a805&recursive=true&enableUserData=true&enableImages=false&excludeLocationTypes=Virtual&fields=ProviderIds%2CDateCreated%2COriginalTitle%2CSeasonUserData%2CDateLastSaved%2CPremiereDate%2CProductionYear%2CPath%2CUserDataLastPlayedDate&includeItemTypes=Movie%2CEpisode&limit=1000&startIndex=0"},"segment":{"number":1,"of":1.0,"size":1000},"body":{"Name":"The Equalizer Collection","ServerId":"7abc0b1b676d43bebf400adbb716fd0f","Id":"bd3ae023496396f9f84608c750464b12","DateCreated":"2023-10-11T20:24:02.4498625Z","PremiereDate":"2014-09-24T00:00:00.0000000Z","Path":"/config/data/data/collections/The Equalizer Collection [boxset]","OfficialRating":"R","ChannelId":null,"ProductionYear":2014,"ProviderIds":{"Tmdb":"523855"},"IsFolder":true,"Type":"BoxSet","UserData":{"UnplayedItemCount":3,"PlaybackPositionTicks":0,"PlayCount":0,"IsFavorite":false,"Played":false,"Key":"bd3ae023-4963-96f9-f846-08c750464b12"},"DisplayOrder":"PremiereDate","ImageBlurHashes":[],"LocationType":"FileSystem","MediaType":"Unknown"}} []
[2024-05-16T10:40:53.651775-04:00] logger.ERROR: Unexpected Content type [BoxSet] was received. {"backend":"jellyfin","library":{"id":"f137a2dd21bbc1b99aa5c0f6bf02a805","title":"Movies","type":"movies","totalRecords":110,"url":"https://mydomain.example:8920/Users/ab75dfa201d2462e9ab9daaa00349e29/items/?sortBy=DateCreated&sortOrder=Ascending&parentId=f137a2dd21bbc1b99aa5c0f6bf02a805&recursive=true&enableUserData=true&enableImages=false&excludeLocationTypes=Virtual&fields=ProviderIds%2CDateCreated%2COriginalTitle%2CSeasonUserData%2CDateLastSaved%2CPremiereDate%2CProductionYear%2CPath%2CUserDataLastPlayedDate&includeItemTypes=Movie%2CEpisode&limit=1000&startIndex=0"},"segment":{"number":1,"of":1.0,"size":1000},"body":{"Name":"Indiana Jones Collection","ServerId":"7abc0b1b676d43bebf400adbb716fd0f","Id":"1565b657802b7777d3b71176ab5b667c","DateCreated":"2023-10-18T10:45:19.0000000Z","PremiereDate":"2023-06-28T00:00:00.0000000Z","Path":"/config/data/data/collections/Indiana Jones Collection [boxset]","OfficialRating":"PG-13","ChannelId":null,"ProductionYear":2023,"ProviderIds":{"Tmdb":"84"},"IsFolder":true,"Type":"BoxSet","UserData":{"UnplayedItemCount":1,"PlaybackPositionTicks":0,"PlayCount":0,"IsFavorite":false,"Played":false,"Key":"1565b657-802b-7777-d3b7-1176ab5b667c"},"DisplayOrder":"PremiereDate","ImageBlurHashes":[],"LocationType":"FileSystem","MediaType":"Unknown"}} []
[2024-05-16T10:40:53.663222-04:00] logger.ERROR: Unexpected Content type [BoxSet] was received. {"backend":"jellyfin","library":{"id":"f137a2dd21bbc1b99aa5c0f6bf02a805","title":"Movies","type":"movies","totalRecords":110,"url":"https://mydomain.example:8920/Users/ab75dfa201d2462e9ab9daaa00349e29/items/?sortBy=DateCreated&sortOrder=Ascending&parentId=f137a2dd21bbc1b99aa5c0f6bf02a805&recursive=true&enableUserData=true&enableImages=false&excludeLocationTypes=Virtual&fields=ProviderIds%2CDateCreated%2COriginalTitle%2CSeasonUserData%2CDateLastSaved%2CPremiereDate%2CProductionYear%2CPath%2CUserDataLastPlayedDate&includeItemTypes=Movie%2CEpisode&limit=1000&startIndex=0"},"segment":{"number":1,"of":1.0,"size":1000},"body":{"Name":"Rebel Moon Collection","ServerId":"7abc0b1b676d43bebf400adbb716fd0f","Id":"4bf0ac2776e479ed2f9d1747eee90c54","DateCreated":"2023-12-23T09:33:43.0000000Z","PremiereDate":"2023-12-15T00:00:00.0000000Z","Path":"/config/data/data/collections/Rebel Moon Collection [boxset]","OfficialRating":"PG-13","ChannelId":null,"ProductionYear":2023,"ProviderIds":{"Tmdb":"934765"},"IsFolder":true,"Type":"BoxSet","UserData":{"UnplayedItemCount":2,"PlaybackPositionTicks":0,"PlayCount":0,"IsFavorite":false,"Played":false,"Key":"4bf0ac27-76e4-79ed-2f9d-1747eee90c54"},"DisplayOrder":"PremiereDate","ImageBlurHashes":[],"LocationType":"FileSystem","MediaType":"Unknown"}} []
[2024-05-16T10:40:53.664237-04:00] logger.ERROR: Unexpected Content type [BoxSet] was received. {"backend":"jellyfin","library":{"id":"f137a2dd21bbc1b99aa5c0f6bf02a805","title":"Movies","type":"movies","totalRecords":110,"url":"https://mydomain.example:8920/Users/ab75dfa201d2462e9ab9daaa00349e29/items/?sortBy=DateCreated&sortOrder=Ascending&parentId=f137a2dd21bbc1b99aa5c0f6bf02a805&recursive=true&enableUserData=true&enableImages=false&excludeLocationTypes=Virtual&fields=ProviderIds%2CDateCreated%2COriginalTitle%2CSeasonUserData%2CDateLastSaved%2CPremiereDate%2CProductionYear%2CPath%2CUserDataLastPlayedDate&includeItemTypes=Movie%2CEpisode&limit=1000&startIndex=0"},"segment":{"number":1,"of":1.0,"size":1000},"body":{"Name":"The Hunger Games Collection","ServerId":"7abc0b1b676d43bebf400adbb716fd0f","Id":"2e954df1e82e794a1895f1a9b26e1581","DateCreated":"2023-12-28T09:55:13.0000000Z","PremiereDate":"2023-11-15T00:00:00.0000000Z","Path":"/config/data/data/collections/The Hunger Games Collection [boxset]","OfficialRating":"PG-13","ChannelId":null,"ProductionYear":2023,"ProviderIds":{"Tmdb":"131635"},"IsFolder":true,"Type":"BoxSet","UserData":{"UnplayedItemCount":1,"PlaybackPositionTicks":0,"PlayCount":0,"IsFavorite":false,"Played":false,"Key":"2e954df1-e82e-794a-1895-f1a9b26e1581"},"DisplayOrder":"PremiereDate","ImageBlurHashes":[],"LocationType":"FileSystem","MediaType":"Unknown"}} []
[2024-05-16T10:40:53.673291-04:00] logger.ERROR: Unexpected Content type [BoxSet] was received. {"backend":"jellyfin","library":{"id":"f137a2dd21bbc1b99aa5c0f6bf02a805","title":"Movies","type":"movies","totalRecords":110,"url":"https://mydomain.example:8920/Users/ab75dfa201d2462e9ab9daaa00349e29/items/?sortBy=DateCreated&sortOrder=Ascending&parentId=f137a2dd21bbc1b99aa5c0f6bf02a805&recursive=true&enableUserData=true&enableImages=false&excludeLocationTypes=Virtual&fields=ProviderIds%2CDateCreated%2COriginalTitle%2CSeasonUserData%2CDateLastSaved%2CPremiereDate%2CProductionYear%2CPath%2CUserDataLastPlayedDate&includeItemTypes=Movie%2CEpisode&limit=1000&startIndex=0"},"segment":{"number":1,"of":1.0,"size":1000},"body":{"Name":"Captain Marvel Collection","ServerId":"7abc0b1b676d43bebf400adbb716fd0f","Id":"6115c3e46fe0dab48352017e3e211ba1","DateCreated":"2024-01-18T11:05:35.9853783Z","PremiereDate":"2023-11-08T00:00:00.0000000Z","Path":"/config/data/data/collections/Captain Marvel Collection [boxset]","OfficialRating":"PG-13","ChannelId":null,"ProductionYear":2023,"ProviderIds":{"Tmdb":"623911"},"IsFolder":true,"Type":"BoxSet","UserData":{"UnplayedItemCount":1,"PlaybackPositionTicks":0,"PlayCount":0,"IsFavorite":false,"Played":false,"Key":"6115c3e4-6fe0-dab4-8352-017e3e211ba1"},"DisplayOrder":"PremiereDate","ImageBlurHashes":[],"LocationType":"FileSystem","MediaType":"Unknown"}} []
[2024-05-16T10:40:53.675668-04:00] logger.ERROR: Unexpected Content type [BoxSet] was received. {"backend":"jellyfin","library":{"id":"f137a2dd21bbc1b99aa5c0f6bf02a805","title":"Movies","type":"movies","totalRecords":110,"url":"https://mydomain.example:8920/Users/ab75dfa201d2462e9ab9daaa00349e29/items/?sortBy=DateCreated&sortOrder=Ascending&parentId=f137a2dd21bbc1b99aa5c0f6bf02a805&recursive=true&enableUserData=true&enableImages=false&excludeLocationTypes=Virtual&fields=ProviderIds%2CDateCreated%2COriginalTitle%2CSeasonUserData%2CDateLastSaved%2CPremiereDate%2CProductionYear%2CPath%2CUserDataLastPlayedDate&includeItemTypes=Movie%2CEpisode&limit=1000&startIndex=0"},"segment":{"number":1,"of":1.0,"size":1000},"body":{"Name":"Aquaman Collection","ServerId":"7abc0b1b676d43bebf400adbb716fd0f","Id":"b343d7e1f8f20d35ca86907b1fc39be5","DateCreated":"2024-03-07T21:14:17.0546111Z","PremiereDate":"2023-12-20T00:00:00.0000000Z","Path":"/config/data/data/collections/Aquaman Collection [boxset]","OfficialRating":"PG-13","ChannelId":null,"ProductionYear":2023,"ProviderIds":{"Tmdb":"573693"},"IsFolder":true,"Type":"BoxSet","UserData":{"UnplayedItemCount":1,"PlaybackPositionTicks":0,"PlayCount":0,"IsFavorite":false,"Played":false,"Key":"b343d7e1-f8f2-0d35-ca86-907b1fc39be5"},"DisplayOrder":"PremiereDate","ImageBlurHashes":[],"LocationType":"FileSystem","MediaType":"Unknown"}} []
[2024-05-16T10:40:53.680511-04:00] logger.ERROR: Unexpected Content type [BoxSet] was received. {"backend":"jellyfin","library":{"id":"f137a2dd21bbc1b99aa5c0f6bf02a805","title":"Movies","type":"movies","totalRecords":110,"url":"https://mydomain.example:8920/Users/ab75dfa201d2462e9ab9daaa00349e29/items/?sortBy=DateCreated&sortOrder=Ascending&parentId=f137a2dd21bbc1b99aa5c0f6bf02a805&recursive=true&enableUserData=true&enableImages=false&excludeLocationTypes=Virtual&fields=ProviderIds%2CDateCreated%2COriginalTitle%2CSeasonUserData%2CDateLastSaved%2CPremiereDate%2CProductionYear%2CPath%2CUserDataLastPlayedDate&includeItemTypes=Movie%2CEpisode&limit=1000&startIndex=0"},"segment":{"number":1,"of":1.0,"size":1000},"body":{"Name":"Dune Collection","ServerId":"7abc0b1b676d43bebf400adbb716fd0f","Id":"a7e0aa35e0b4d4502353666b2d6642f6","DateCreated":"2024-04-19T05:22:44.0000000Z","PremiereDate":"2021-09-15T00:00:00.0000000Z","Path":"/config/data/data/collections/Dune Collection [boxset]","OfficialRating":"PG-13","ChannelId":null,"ProductionYear":2021,"ProviderIds":{"Tmdb":"726871"},"IsFolder":true,"Type":"BoxSet","UserData":{"UnplayedItemCount":2,"PlaybackPositionTicks":0,"PlayCount":0,"IsFavorite":false,"Played":false,"Key":"a7e0aa35-e0b4-d450-2353-666b2d6642f6"},"DisplayOrder":"PremiereDate","ImageBlurHashes":[],"LocationType":"FileSystem","MediaType":"Unknown"}} []

[ /config/logs/access.20240516.log ]

[2024-05-16T10:20:16.749481-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/tasks HTTP/1.1" 200 1921 "http://server.home:18080/tasks" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.0" "-" [] []
[2024-05-16T10:20:20.651176-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/tasks/import HTTP/1.1" 200 232 "http://server.home:18080/console" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.0" "-" [] []
[2024-05-16T10:20:20.698033-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/system/command/ HTTP/1.1" 200 {size} "http://server.home:18080/console" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.0" "-" [] []
[2024-05-16T10:20:36.556476-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/system/env HTTP/1.1" 200 5321 "http://server.home:18080/env" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.0" "-" [] []
[2024-05-16T10:20:37.753331-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/tasks HTTP/1.1" 200 1921 "http://server.home:18080/tasks" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.0" "-" [] []
[2024-05-16T10:20:38.995339-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/logs HTTP/1.1" 200 952 "http://server.home:18080/logs" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.0" "-" [] []
[2024-05-16T10:20:40.864958-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/system/command/ HTTP/1.1" 200 {size} "http://server.home:18080/console" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.0" "-" [] []
[2024-05-16T10:20:52.128580-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/history/ HTTP/1.1" 200 18212 "http://server.home:18080/history" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.0" "-" [] []
[2024-05-16T10:20:53.253763-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/backends HTTP/1.1" 200 773 "http://server.home:18080/backends" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.0" "-" [] []
[2024-05-16T10:20:53.876645-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/history/ HTTP/1.1" 200 18212 "http://server.home:18080/history" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.0" "-" [] []

[ /config/logs/task.20240516.log ]

[2024-05-16T10:40:55-04:00] NOTICE: SYSTEM: Finished waiting on [8] requests.
[2024-05-16T10:40:55-04:00] NOTICE: MAPPER: No changes detected.
┌─────────┬───────┬─────────┬────────┐
│ Type    │ Added │ Updated │ Failed │
├─────────┼───────┼─────────┼────────┤
│ Movie   │ 0     │ 0       │ 0      │
├─────────┼───────┼─────────┼────────┤
│ Episode │ 0     │ 0       │ 0      │
└─────────┴───────┴─────────┴────────┘

[ /config/logs/webhook.20240516.log ]

[2024-05-16T01:12:24.358505-04:00] webhook.INFO: Request user id [24172497] does not match configured value [533856] [] []
[2024-05-16T01:13:11.216884-04:00] webhook.INFO: Request user id [24172497] does not match configured value [533856] [] []
[2024-05-16T02:30:24.220330-04:00] webhook.INFO: Queued [plex: library.new] episode [Star Trek: Discovery (2024) - 05x008]. [] []
[2024-05-16T09:15:04.488033-04:00] webhook.INFO: Queued [jellyfin: PlaybackStart] movie [Kung Fu Panda 4 (2024)]. [] []
[2024-05-16T09:41:36.191133-04:00] webhook.INFO: Queued [jellyfin: PlaybackStop] movie [Kung Fu Panda 4 (2024)]. [] []
[2024-05-16T10:16:39.503249-04:00] webhook.INFO: Queued [jellyfin: PlaybackStart] movie [Kung Fu Panda 4 (2024)]. [] []
[2024-05-16T10:16:58.367667-04:00] webhook.INFO: Queued [jellyfin: PlaybackStop] movie [Kung Fu Panda 4 (2024)]. [] []
[2024-05-16T10:17:01.352684-04:00] webhook.INFO: Queued [plex: media.stop] movie [Kung Fu Panda 4 (2024)]. [] []
[2024-05-16T10:17:01.415283-04:00] webhook.INFO: Queued [plex: media.stop] movie [Kung Fu Panda 4 (2024)]. [] []
[2024-05-16T10:17:07.497505-04:00] webhook.INFO: Queued [plex: media.stop] movie [Kung Fu Panda 4 (2024)]. [] []

[ /config/logs/app.20240515.log ]

[2024-05-15T23:57:58.954362-04:00] logger.ERROR: DateTime constructor received invalid time argument \'-1\' - -1. DateTimeImmutable::__construct(): Argument #1 ($datetime) must be of type string, int given {"kind":"App\\Libs\\Exceptions\\InvalidArgumentException","file":"/opt/app/src/Libs/Extends/Date.php","line":29,"trace":[{"file":"/opt/app/src/Libs/helpers.php","line":100,"function":"__construct","class":"App\\Libs\\Extends\\Date","type":"->"},{"file":"/opt/app/src/Libs/Entity/StateEntity.php","line":586,"function":"makeDate"},{"file":"/opt/app/src/API/Backend/Webhooks.php","line":223,"function":"getPlayProgress","class":"App\\Libs\\Entity\\StateEntity","type":"->"},{"file":"/opt/app/src/API/Backend/Webhooks.php","line":63,"function":"process","class":"App\\API\\Backend\\Webhooks","type":"->"},{"file":"/opt/app/vendor/league/route/src/Strategy/ApplicationStrategy.php","line":48,"function":"__invoke","class":"App\\API\\Backend\\Webhooks","type":"->"},{"file":"/opt/app/vendor/league/route/src/Route.php","line":167,"function":"invokeRouteCallable","class":"League\\Route\\Strategy\\ApplicationStrategy","type":"->"},{"file":"/opt/app/vendor/league/route/src/Dispatcher.php","line":59,"function":"process","class":"League\\Route\\Route","type":"->"},{"file":"/opt/app/src/Libs/Middlewares/ParseJsonBodyMiddleware.php","line":33,"function":"handle","class":"League\\Route\\Dispatcher","type":"->"},{"file":"/opt/app/vendor/league/route/src/Dispatcher.php","line":59,"function":"process","class":"App\\Libs\\Middlewares\\ParseJsonBodyMiddleware","type":"->"},{"file":"/opt/app/src/Libs/Middlewares/APIKeyRequiredMiddleware.php","line":53,"function":"handle","class":"League\\Route\\Dispatcher","type":"->"},{"file":"/opt/app/vendor/league/route/src/Dispatcher.php","line":59,"function":"process","class":"App\\Libs\\Middlewares\\APIKeyRequiredMiddleware","type":"->"},{"file":"/opt/app/vendor/league/route/src/Strategy/ApplicationStrategy.php","line":37,"function":"handle","class":"League\\Route\\Dispatcher","type":"->"},{"file":"/opt/app/vendor/league/route/src/Dispatcher.php","line":59,"function":"process","class":"Psr\\Http\\Server\\MiddlewareInterface@anonymous\u0000/opt/app/vendor/league/route/src/Strategy/ApplicationStrategy.php:30$47","type":"->"},{"file":"/opt/app/vendor/league/route/src/Dispatcher.php","line":53,"function":"handle","class":"League\\Route\\Dispatcher","type":"->"},{"file":"/opt/app/vendor/league/route/src/Router.php","line":111,"function":"dispatchRequest","class":"League\\Route\\Dispatcher","type":"->"},{"file":"/opt/app/src/Libs/Initializer.php","line":377,"function":"dispatch","class":"League\\Route\\Router","type":"->"},{"file":"/opt/app/src/Libs/Initializer.php","line":261,"function":"defaultAPIServer","class":"App\\Libs\\Initializer","type":"->"},{"file":"/opt/app/src/Libs/Initializer.php","line":195,"function":"defaultHttpServer","class":"App\\Libs\\Initializer","type":"->"},{"file":"/opt/app/public/index.php","line":81,"function":"http","class":"App\\Libs\\Initializer","type":"->"}]} []

[ /config/logs/access.20240515.log ]

[2024-05-15T23:58:38.518093-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/system/version HTTP/1.1" 200 30 "http://server.home:18080/logs" "Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36" "-" [] []
[2024-05-15T23:58:40.381013-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/log/webhook.20240515.log HTTP/1.1" 200 123 "http://server.home:18080/logs/webhook.20240515.log" "Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36" "-" [] []
[2024-05-15T23:58:45.885112-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/log/webhook.20240515.log HTTP/1.1" 200 123 "http://server.home:18080/logs/webhook.20240515.log" "Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36" "-" [] []
[2024-05-15T23:58:45.899782-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/system/version HTTP/1.1" 200 30 "http://server.home:18080/logs/webhook.20240515.log" "Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36" "-" [] []
[2024-05-15T23:58:47.339912-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/logs HTTP/1.1" 200 472 "http://server.home:18080/logs" "Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36" "-" [] []
[2024-05-15T23:58:50.493758-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/log/webhook.20240515.log HTTP/1.1" 200 123 "http://server.home:18080/logs/webhook.20240515.log" "Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36" "-" [] []
[2024-05-15T23:58:52.903955-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/logs HTTP/1.1" 200 472 "http://server.home:18080/logs" "Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36" "-" [] []
[2024-05-15T23:58:54.332929-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/log/app.20240515.log HTTP/1.1" 200 3054 "http://server.home:18080/logs/app.20240515.log" "Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36" "-" [] []
[2024-05-15T23:59:06.057804-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/logs HTTP/1.1" 200 473 "http://server.home:18080/logs" "Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36" "-" [] []
[2024-05-15T23:59:07.818695-04:00] http.INFO: <IP_ADDRESS> - "GET /v1/api/log/access.20240515.log HTTP/1.1" 200 16012 "http://server.home:18080/logs/access.20240515.log" "Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36" "-" [] []

[ /config/logs/task.20240515.log ]

Task: progress (Started: Wed, 23:59:54 EDT)
Command: /opt/app/bin/console state:progress -v
Exit Code: 0 (Ended: Wed, 23:59:55 EDT)
--------------------------
[2024-05-15T23:59:55-04:00] NOTICE: SYSTEM: Sending [1] progress update requests.
[2024-05-15T23:59:55-04:00] NOTICE: SYSTEM: Updated [jellyfin] [Grey's Anatomy (2018) - 14x012] watch progress.
[2024-05-15T23:59:55-04:00] NOTICE: SYSTEM: Sent [1] watch progress requests.
[2024-05-15T23:59:55-04:00] NOTICE: Using WatchState Version - '20240515-6dbe63a'.

[ /config/logs/webhook.20240515.log ]

[2024-05-15T23:58:07.055209-04:00] webhook.INFO: Queued [plex: media.play] episode [Grey's Anatomy (2018) - 14x012]. [] []
[2024-05-15T23:59:27.949283-04:00] webhook.INFO: Queued [plex: media.pause] episode [Grey's Anatomy (2018) - 14x012]. [] []
[2024-05-15T23:59:59.452851-04:00] webhook.INFO: Queued [plex: media.stop] episode [Grey's Anatomy (2018) - 14x012]. [] []

<!-- Notice

Beware, while we try to make sure no sensitive information is leaked, it's possible
that some private information might be leaked via the logs section.
Please review the report before posting it.
-->

Hi,
Please do this
$ docker exec -ti db:list --metadata --key 'jellyfin.id' --value f137a2dd21bbc1b99aa5c0f6bf02a805 -o yaml

and post the result, i suspect either the jellyfin.added_at is different than that of the one being reported by the backend as result the shouldmarkAsUnplayed is not triggering.

I've changed the status of the episode again, so running the command you gave doesn't work anymore.
However, if the code chooses DateCreated when the remote item status is unwatched, it seems that it will never sync the unwatched status back to the watchstate because that date will always be older than the current date, isn't it?
According to the FAQ, using webhooks should be a workaround. I do have webhooks set up on Jellyfin, but I don't think the watch status is being pushed to the webhook. Does the "playback start" and "playback stop" event update the watch status?

I've changed the status of the episode again, so running the command you gave doesn't work anymore.

Changing the status of item doesn't change the remote item id. this sounds like you have something else cussing issues.

However, if the code chooses DateCreated when the remote item status is unwatched, it seems that it will never sync the unwatched status back to the watchstate because that date will always be older than the current date, isn't it?

The logic is identical item is unwatched the LastPlayDate in majority of cases is empty. And to support mark as unplayed we need reference on when the media was added and it should match what we have in db otherwise as soon as you reply ab item it gets unmarked for example there is lots of documentation in the Mappers classes addressing this issue.

According to the FAQ, using webhooks should be a workaround. I do have webhooks set up on Jellyfin, but I don't think the watch status is being pushed to the webhook. Does the "playback start" and "playback stop" event update the watch status?

The workaround in FAQ mostly concerns marking item as watched due to bug in jellyfin API it doesn't update the last Play date when marking items as such, thus the tool doesn't have any idea that the item has changed before the LastSync date is set.

I assume the issue has been resolved as there is no reply within two weeks. If the problem still present please reopen the issue.


Update README.md

Add modsecurity info

Thank you! Could you please add the reasoning for why ModSecurity blocks Plausible without these rules?


[Feature]: 72hz Refresh rate

Is the feature related to a "problem"?
Can you please add a 72Hz refresh rate to match my VR headset?
The Nvidia refresh rate setting "FAST" makes the image projection smoother in some games with the 90Hz setting, but maintaining 90 FPS in VR is very difficult. My Pico 4 does not support 60Hz, so the next lower step would be 72Hz, which is not supported by your driver.
Other than that, great work!
Your suggestion
Add 72hz to refresh rate
Contact Details
No response

You can change it in either the xml or the option.txt depending on what version you're using

I'm using the newest beta.

THX! i found it! This went FAST!

yeh, just pop it open, look for the resolution you want to add 72hz too and add a refresh rate. Or you can use the xml editor on the website
https://vdd.mikethetech.com/#xmlConfig

THX! i found it! This went FAST!

I had just turned my computer on and opened discord the second you opened the issue


Update byte-buddy, byte-buddy-agent to 1.14.17

About this PR
📦 Updates

net.bytebuddy:byte-buddy
net.bytebuddy:byte-buddy-agent

from 1.14.2 to 1.14.17
Usage
✅ Please merge!
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

🔍 Files still referring to the old version number
The following files still refer to the old version number (1.14.2).
You might want to review and update them manually.
website/yarn.lock

⚙ Adjust future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "net.bytebuddy" } ]

Or, add this to slow down future updates of this dependency:
dependencyOverrides = [{
  pullRequests = { frequency = "30 days" },
  dependency = { groupId = "net.bytebuddy" }
}]

labels: library-update, early-semver-patch, semver-spec-patch, old-version-remains, commit-count:1

Superseded by #803.


CEO-207 Add lower limit plots per user

Purpose

Adds error message when too few plots have been assigned per user.
Related Issues
Closes CEO-207
Submission Checklist

[x] Commits include the JIRA issue and the #review hashtag (e.g. CEO-### #review <comment>)
[x] Code passes linter rules (npm run eslint/clj-kondo --lint src)

Testing

Given I am an admin, When I am creating a project, And I assign plots, Then I must provide a minimum number of plots per user.

Screenshots

src/js/project/CreateProjectWizard.js
307, Only check the math if qa qc overlap is selected.
Math.round(totalPlots / users.length * percent)
308 Too few plots per user for QC overlap. Each user must have at least ${users.length} plots.


Add "Upgrading From Chisel 3.4 to 3.5"

This new document is a place to describe issues users may run into when
upgrading from Chisel 3.4 to 3.5. This initial version includes the
solution for the removal of virtual method "val io".
Inspired by the question on chisel-users: https://groups.google.com/g/chisel-users/c/OtRSISNvHeA/m/DQNzCSj3AgAJ
Here's the result of running mdoc: https://gist.github.com/jackkoenig/4949f6a455ae74923bbcce10dbf846b5
Contributor Checklist

[NA] Did you add Scaladoc to every public function/method?
[x] Did you add at least one test demonstrating the PR?
[x] Did you delete any extraneous printlns/debugging code?
[x] Did you specify the type of improvement?
[x] Did you add appropriate documentation in docs/src?
[NA] Did you state the API impact?
[x] Did you specify the code generation impact?
[x] Did you request a desired merge strategy?
[NA] Did you add text to be included in the Release Notes for this change?

Type of Improvement

documentation

API Impact
No impact
Backend Code Generation Impact
No impact
Desired Merge Strategy

Squash

Release Notes
Reviewer Checklist (only modified by reviewer)

[ ] Did you add the appropriate labels?
[ ] Did you mark the proper milestone (Bug fix: 3.3.x, [small] API extension: 3.4.x, API modification or big change: 3.5.0)?
[ ] Did you review?
[ ] Did you check whether all relevant Contributor checkboxes have been checked?
[ ] Did you mark as Please Merge?

remove cloneType and force name plugin should be another two issues

remove cloneType and force name plugin should be another two issues

agreed but no reason to not go ahead and merge this 🙂

Okay well that's freaky. I cancelled CI trying to make https://github.com/chipsalliance/chisel3/pull/2302 pass first and thus be merged first, but Mergify went ahead and merged the PR despite CI being cancelled 😱

Screenshot for posterity since I am going to rerun to get rid of the red x


grad_reg_inc_gamma: more accurate for large z

Submisison Checklist

[X] Run unit tests: ./runTests.py test/unit
[X] Run cpplint: make cpplint
[X] Declare copyright holder and open-source license: see below

Summary:
Compute the gradient of the asymptotic expansion of the
incomplete gamma, for use when z is large.
This was motivated by seeing inaccurate gradients in
gamma_ccdf_log(16,3,3), failing the testcase I was trying to add. This
was due to accumulated error in the series expansion when z is large.
Though the asymptotic expansion doesn't appear common (e.g. scipy uses
continued fractions instead), it is simple to differentiate.
Numerical accuracy was checked using sympy as a reference,
comparing the accuracy of the series expansion to the asymptotic
expansion. Over a grid (50 evenly-logspaced values of A between
0.001 and 1000), the cutoff (z>=a)&&(z>=8) was found to be a
sufficient condition.
Analysis:
http://nbviewer.jupyter.org/gist/b11z/4f49105acbe90cab29a9c3ae56590e4a
Intended Effect:
Accurate CCDF and gradient for the testcase gamma_ccdf_log(16,3,3).
How to Verify:
Testcases added for gamma_ccdf_log(16,3,3) and grad_reg_inc_gamma(3,48).
Side Effects:
Documentation:
http://nbviewer.jupyter.org/gist/b11z/4f49105acbe90cab29a9c3ae56590e4a
Reviewer Suggestions:
Copyright and Licensing
Please list the copyright holder for the work you are submitting (this will be you or your assignee, such as a university or company):
Brian Bloniarz
By submitting this pull request, the copyright holder is agreeing to license the submitted work under the following licenses:

Code: BSD 3-clause (https://opensource.org/licenses/BSD-3-Clause)
Documentation: CC-BY 4.0 (https://creativecommons.org/licenses/by/4.0/)

Looks like there's a legitimate difference in behavior that should be addressed.  The new algorithm branches based on the arguments and so is not always throwing.  I pasted the failing tests below but I think all that's needed to fix it is separate tests for the different branches.  I also noticed in the code one of your test goes from an EXPECT_THROW to EXPECT_EQ but we still want the EXPECT_THROW test for the old branch.
[ RUN      ] AgradRevGammaQ.infLoopInVersion2_0_1_var_var

test/unit/math/rev/scal/fun/gamma_q_test.cpp:33: Failure

Expected: f.grad(x,g) throws an exception of type std::domain_error.

  Actual: it throws nothing.

[  FAILED  ] AgradRevGammaQ.infLoopInVersion2_0_1_var_var (0 ms)

[ RUN      ] AgradRevGammaQ.infLoopInVersion2_0_1_var_double

test/unit/math/rev/scal/fun/gamma_q_test.cpp:43: Failure

Expected: f.grad(x,g) throws an exception of type std::domain_error.

  Actual: it throws nothing.

[  FAILED  ] AgradRevGammaQ.infLoopInVersion2_0_1_var_double (0 ms)

[----------] 2 tests from AgradRevGammaQ (0 ms total)

[----------] Global test environment tear-down

[==========] 6 tests from 2 test cases ran. (2 ms total)

[  PASSED  ] 4 tests.

[  FAILED  ] 2 tests, listed below:

[  FAILED  ] AgradRevGammaQ.infLoopInVersion2_0_1_var_var

[  FAILED  ] AgradRevGammaQ.infLoopInVersion2_0_1_var_double

 2 FAILED TESTS

test/unit/math/rev/scal/fun/gamma_q_test --gtest_output="xml:test/unit/math/rev/scal/fun/gamma_q_test.xml" failed

exit now (08/07/16 05:15:09 UTC)

Also, thanks for the pull request! Could you update the tests?

Jenkins, ok to test.

@sakrejda thanks for the review!
Good point -- it'd be good to have testcases that cover the domain_error.
I just did a search, however, and couldn't find any parameter values that
trigger it any more -- I believe the new implementation doesn't encounter infinity
the way the previous one did.
I.e. from the test case, we know that the previous implementation
could throw for very large z, but that case is now covered by the asymptotic
expansion without overflow. I couldn't find any values within the range now used
(z <= a or z <= 8) which threw domain_error -- I figured very small $a$
might cause it but no luck.
I believe the new implementation is returning the right thing for the
testcase (a=8.01006, z=2.47579e+215); z is so large that reg_gamma_q==1,
and its gradient is vanishingly small.
With that in mind, I updated the gamma_q_test (sorry for the oversight)
to do EXPECT_EQ. Please let me know if you have any ideas of parameter
values which could help exercise the isinf case.

@b11z I thought that might be the case, in that case it's fine.  I'll make sure I understand your python notebook today and then we can call it reviewed.  @syclik I looked at the test results and this time it looks like the tests failed due to some CI issue not a problem with the code.

The code matches the math and the Jupyter notebook, the choice for when to switch over to the new algorithm based on a/z makes sense based on the notebook.  I think this is good to go.

@b11z Could you add the little derivation from the Jupyter notebook as a doxygen comment for the function? @syclik I know we would like full doxygen doc for the math functions but do we require it?

Jenkins, retest this please.

@b11z, all of the other changes look straightforward. Just the implementation of grad_reg_inc(). Since you're fixing it, mind changing the last argument, T precision, to double precision? There's no reason we need to promote that to a T if T = stan::math::var.

@sakrejda, it's not a strict requirement, but it does help. As we're addressing issues, if we can add doc, it helps -- otherwise we'll never get everything documented.

Took another pass -- added some doxygen docs, fixed code style & efficiency @syclik @bob-carpenter @sakrejda
Please give a heads up if this should be git squashed by now

It's not necessary to rebase for us, and I'm always afraid
to rewrite history after pushing to Stan's GitHub (origin) repos.
https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History

Bob

On Aug 15, 2016, at 1:47 AM, Brian Bloniarz<EMAIL_ADDRESS>wrote:
Took another pass -- added some doxygen docs, fixed code style & efficiency @syclik @bob-carpenter @sakrejda
Please give a heads up if this should be git squashed by now
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

+1. No need to git squash anything.
Feel free to do it on the branch if you want. I tend not to do it too often
since there is the risk of losing changes, but once it's on develop, we
won't rewrite history.
On Mon, Aug 15, 2016 at 7:58 AM, Bob Carpenter<EMAIL_ADDRESS>wrote:

It's not necessary to rebase for us, and I'm always afraid
to rewrite history after pushing to Stan's GitHub (origin) repos.
https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History

Bob

On Aug 15, 2016, at 1:47 AM, Brian Bloniarz<EMAIL_ADDRESS>wrote:
Took another pass -- added some doxygen docs, fixed code style &
efficiency @syclik @bob-carpenter @sakrejda
Please give a heads up if this should be git squashed by now
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/stan-dev/math/pull/340#issuecomment-239785790, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAZ_FxphbRfkKm8QBbNm3w_OsDMPWCPdks5qgFRVgaJpZM4JebR_
.

Jenkins, retest this please.

@syclik I think the new changes to code/doc bring it inline with everything we asked for.  It looks good to me.


Fix keypress latency issues with hotspots.is_open

If one profiles typing a bunch in a Zulip compose box, one sees that Zulip does end up doing some work on every keypress. There's some work that's important and complex, like processing_text, but apparently we spend just as much time calling hotspots.is_open, which feels like a major waste, since hotspots are very rarely open and focused.

We should fix this by having the hotspots module be responsible for keeping track of whether any of its elements are presently open directly in JavaScript, so that this check can be instant.  There are plenty of examples of this pattern in the other functions called from hotkey.js today.
One this is done, it may also be working looking at reimplementing processing_text using native browser APIs rather than jQuery, and seeing if that significantly improves the profiled performance of mashing keys in the compose box.

I've been able to replicate this in the performance debugger locally and see the issue. That there .querySelectorAll() is pretty expensive!
Still working on the most idiomatic way to internally keep track of whether or not a hotspot is open, but I think I have a good idea of what needs to be done here and am working on getting a PR going.
@zulipbot claim


Add support for Apple Silicon in SwiftSupport.cmake

This matches the behavior of a similar elseif branch in the Swift toolchain itself.

Checklist

[ ] I've added at least one test that validates that my change is working, if appropriate
[x] I've followed the code style of the rest of the project
[x] I've read the Contribution Guidelines
[ ] I've updated the documentation if necessary

@swift-ci please test

@swift-ci please test

I wonder if I can't build on CI because I don't have commit access here? 🤔

I wonder if I can't build on CI because I don't have commit access here? 🤔

I can't speak to whether you need commit privileges, but the macOS build failed saying it couldn't clone the repo.  Note the Linux build passed.

Huh, I think I saw the same error for the Linux build on the first try. Let's hope it's intermittent...

@swift-ci Please test

@MaxDesiatov Thanks for this! Were you able to test on an Apple Silicon Mac?

Do you mean running the test suite via CMake on Apple Silicon, or just plain building the project? I was able to do the latter on Apple Silicon as a part of a bigger toolchain build, only with this patch applied (which enables the build).

I think that's sufficient for me to merge, thanks!


SCRAM-SHA-1(-PLUS) + SCRAM-SHA-256(-PLUS) supports

Dear @RainLoop team,
There is a big security problem, the missing support of SCRAM-SHA-*.
Can you add supports of :

SCRAM-SHA-1
SCRAM-SHA-1-PLUS
SCRAM-SHA-256
SCRAM-SHA-256-PLUS
SCRAM-SHA-512
SCRAM-SHA-512-PLUS
SCRAM-SHA3-512
SCRAM-SHA3-512-PLUS

"When using the SASL SCRAM mechanism, the SCRAM-SHA-256-PLUS variant SHOULD be preferred over the SCRAM-SHA-256 variant, and SHA-256 variants [RFC7677] SHOULD be preferred over SHA-1 variants [RFC5802]".

SCRAM-SHA-1(-PLUS):
-- https://tools.ietf.org/html/rfc5802
-- https://tools.ietf.org/html/rfc6120

SCRAM-SHA-256(-PLUS):
-- https://tools.ietf.org/html/rfc7677 since 2015-11-02
-- https://tools.ietf.org/html/rfc8600 since 2019-06-21: https://mailarchive.ietf.org/arch/msg/ietf-announce/suJMmeMhuAOmGn_PJYgX5Vm8lNA

SCRAM-SHA-512(-PLUS):
-- https://tools.ietf.org/html/draft-melnikov-scram-sha-512

SCRAM-SHA3-512(-PLUS):
-- https://tools.ietf.org/html/draft-melnikov-scram-sha3-512

https://xmpp.org/extensions/inbox/hash-recommendations.html
-PLUS variants:

RFC5056: On the Use of Channel Bindings to Secure Channels: https://tools.ietf.org/html/rfc5056
RFC5929: Channel Bindings for TLS: https://tools.ietf.org/html/rfc5929
Channel-Binding Types: https://www.iana.org/assignments/channel-binding-types/channel-binding-types.xhtml
RFC 9266: Channel Bindings for TLS 1.3: https://tools.ietf.org/html/rfc9266

LDAP:

RFC5803: Lightweight Directory Access Protocol (LDAP) Schema for Storing Salted: Challenge Response Authentication Mechanism (SCRAM) Secrets: https://tools.ietf.org/html/rfc5803

HTTP:

RFC7804: Salted Challenge Response HTTP Authentication Mechanism: https://tools.ietf.org/html/rfc7804

2FA:

Extensions to Salted Challenge Response (SCRAM) for 2 factor authentication: https://tools.ietf.org/html/draft-melnikov-scram-2fa

IANA:

Simple Authentication and Security Layer (SASL) Mechanisms: https://www.iana.org/assignments/sasl-mechanisms/sasl-mechanisms.xhtml

Linked to:

https://github.com/scram-xmpp/info/issues/1

@the-djmaze: Thanks for your work!
I have seen today, your commit in SnappyMail!
Maybe you can do a PR for RainLoop?

@the-djmaze: I have edited the ticket with more informations (TLS Binding: -PLUS variants and other SCRAM...).
If you are ready to add SCRAM-SHA-512 and SCRAM-SHA3-512 in SnappyMail, you can ^^
I have added SnappyMail in the https://github.com/scram-xmpp/info/issues/1.

@the-djmaze: Recently SCRAM hashes have been added in:

https://github.com/pear/Auth_SASL
https://github.com/pear/Auth_SASL2
https://github.com/pear/Net_SMTP

A good job done by @schengawegga.
Maybe you can help for -PLUS variants?
And for repositories:

https://github.com/pear/Net_Sieve
https://github.com/pear/Net_IMAP
https://github.com/pear/Mail_IMAPv2
https://github.com/pear/Net_POP3
https://github.com/pear/Mail
https://github.com/pear/Mail2
https://github.com/pear/Auth
https://github.com/pear/Auth_HTTP


How to use policies

Hello
I'm trying to write and use a policy inside a module controller($this->authorize() method)
no matter what I do it just doesn't work
I tried to register my policy in a different provider  (which extends from Illuminate\Foundation\Support\Providers\AuthServiceProvider )
but it doesn't work
please help me
thank you

does this thread explain it for you?
https://github.com/nWidart/laravel-modules/issues/16

Hello I'm trying to write and use a policy inside a module controller($this->authorize() method) no matter what I do it just doesn't work I tried to register my policy in a different provider (which extends from Illuminate\Foundation\Support\Providers\AuthServiceProvider ) but it doesn't work
please help me
thank you

same problem


Version 0.0.2

Codecov Report

Merging #1 (17cbd5e) into master (abf1287) will not change coverage.
The diff coverage is 100.00%.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
@@            Coverage Diff            @@
##            master        #1   +/-   ##
=========================================
  Coverage   100.00%   100.00%
=========================================
  Files           26        26
  Lines         1046      1046
=========================================
  Hits          1046      1046

Files Changed
Coverage Δ

hishel/__init__.py
100.00% <100.00%> (ø)

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Bug: Materialized SERIAL causes RDF test to sometimes fail

Kùzu version
No response
What happened?
Previously, the multi-file.test for rdf was:
-STATEMENT MATCH (a)-[p]->(o) RETURN a.iri, p.iri, o.iri, o.val;
---- 5
https://test/s0|https://test/p0|https://test/mm|
https://test/s0|https://test/p0||0
https://test/s0|https://test/p3|https://test/x|
https://test/s1|https://test/p1||1
https://test/s2|https://test/p2||2

This failed likely due to the now parallel SERIAL batch insert.
See https://github.com/kuzudb/kuzu/actions/runs/9434076123/job/25985780220 for an example of fail.
Are there known steps to reproduce?
No response

asking for some help here since I'm not very familiar with how RDF should work in our system 😄


Directive that detects all the features of the useragent and send through an event to the components

UserAgent directive:
<user-agent  (data)="myMethod($event)><user-agent>

In component get :
myMethod(value){
myVar = value;
}
content in my myVar => {
device:"android",
pixelration: "1x",
browser: "chrome",
 ....etc
};

user agent directive completed. Close.


Cant sign Transaction

I shutdown the connection to the internet
I create a taproot wallet with derivation m/86...
I export the xpub to create the only watch wallet in bluewallet
I send sats to a legacy adress of this only watch wallet
I start sparrow with internet and public server connection
I change the script type to legacy and safed to the derivation m/87...
Now I can see the sats and the address but cant sign them for spend

Pls help me!

There is no error message. I use my wallet password and press sign but nothing happens.

Can you check the log file (Help menu) for an error when you sign? It would be interesting to know what the error is.
To recover the funds:

Turn off derivation path validation in Sparrow (General Preferences)
Create a new wallet in Sparrow
Set the script type to Legacy
Enter the seed words (Software wallet)
Before importing the seed words, change to a custom derivation path of m/86'/0'/0'
Import the seed words

You should now have the same xpub as you entered into BW, and be able to spend the funds. BTW, this issue is caused by BW incorrectly assuming that all xpubs reference legacy wallets.


Update to scala 2.12

I am opening a PR against the latest release branch to showcase the diff. I am not sure whether you want to merge back into the release branch

I would make sense to merge these back into the fork's master branch thus I changed the base.


Full customization of tables

What would you like to be added:
I would like to be able to customize each table that is displayed in Lens (Nodes, Pods, Events, Jobs ...):

What columns are visible
Additional columns at each table. For example for pods I would like to see the node name or resource limits and requests
Able to filter for each column like you can do in Excel: I would like to see only the events from a particular node or of particular type. A regexp filter will do.
Ability to resize and reorder columns
Sorting (already exists)

Why is this needed:
The ability to customize the look and feel of Lens will greatly improve usability.
Environment you are Lens application on:

Kubernetes distribution: [EKS, AKS, GKE, Rancher, ...]
Desktop OS: Linux

Some investigative work is underway (https://github.com/lensapp/lens/pull/1823, looking at react-table)

Some investigative work is underway (#1823, looking at react-table)

This PR looks dead, #2146 looks more hopeful :)

yes please. I want to see the Job duration. Like what you get from kubectl get job

Able to filter for each column like you can do in Excel: I would like to see only the events from a particular node or of particular type.

This would be very helpful. Something like name:aks-usernode* when filtering on node names.
I would also like a way to filter on nodes while in the pods workloads page, either through a drop-down or filter like node:aks-usernode*
('aks-usernode' is an example node name)

Please give a priority for this feature!


Peer to peer code review Module 1 Block 1

In the list section it will be great to make awesome books heading aligned in the center. it will make your design look good.

It will be nice to make the remove button smaller in the list section. It will show your design good.

I would suggest adding the functionalities of init() method into the add() method.

I would recommend that instead of this.form.style.display = 'none'; , you can use helper class. it's good to not have the inline style in our project.


feat: self-describing signature format

Goal
Currently, our signature proto comprises serialized bytes and a recovery bit, but a couple critical pieces of context must be obtained out of band:

What is the message that was signed? Right now this is re-constructed via application code with out-of-band usage context e.g. this signature is for identity key association, so message = "XMTP : Create Identity..."
What is the encoding of the serialized signature bytes? What digest algorithm was used?

Our hope is to create a fully self-describing signature format that also includes explicit context to avoid cross-context signature re-use security issues. The concrete first objective is to support SIWE-like signatures for revocable send keys.
Changes
Add a 3rd signature type to the union: Generic
Notes
This initial PR is meant to power discussion. Let's iterate on everything here from naming to structure. Cheers!

From our discussion I see a few things that need to be captured/enumerated in our proto, totally open on how to design it:

[SCHEME] Information required to successfully verify the signature
a) Original message being signed
b) Digital signature algorithm
c) Any processing and digest scheme used to reduce the original message into an input into the digital signature algorithm
[PURPOSE] Purpose of the signature (almost like a domain separator) which ensures a signature can only be used for its prescribed purpose
a) Note: currently this is not encoded in the proto in any way, instead it is implicitly derived from the parent protos containingSignature protos and the exact use case within XMTP application logic
b) Examples: wallet_to_identity_key_association, wallet_to_send_key_association

Two possible schemes:

As above, overload the oneof union ... with a new Signature message type for every (scheme, purpose) pair. Results in a cross-product and lack of re-use of similar signature formats
Define a new message type for oneof union ... for every scheme. Have a separate enum for every purpose and include it in Signature message types as a context field.

Thoughts? @jazzz @richardhuaaa @neekolas

I think this change might need to be more narrowly focused. I've learned from this discussion that the term Signature is an overloaded term in XMTP and used in many conflicting ways. A single solution may not be the most appropriate at this time.
Rather than focusing on All signatures used across the XMTP protocol suite, I think it might help to focus on one of these applications, the Association Signature. (Since signature is overloaded I'm going to propose the term "Proof" is used, aka the AssociationProof.)
I think the most immediate work needed is to relax the definition of the AssociationProof. Where Signatures used for message contents could remain unchanged for now.

Got it, so immediate work is to make proto and code changes to allow an AssociationProof to stand in for what is currently accomplished via Signature.WalletECDSACompact and xmtp-js application logic?

Note: the context (aka domain aka purpose) would need to be part of the signed message.... before actually passing it into the signature algorithm.

I like the intention however I see some issues with the current formulation. If the intention is to allow developers more flexibility in which signatures are used in adding this requirement would have the opposite effect. e.g. Using SIWE with a ContextPrefix would make the the Signature non compliant with https://eips.ethereum.org/EIPS/eip-4361. Furthermore achieve this this a EIP191 compliant wallet would mean that the signature text would need to be injected into the text (which would force app developers to change their signature texts in a destructive way.
I think there is a way to achieve this though:
In the case of the existing AssociationProof, The textPrefix "Create Identity" embeds the context in the signature.
In the case of SIWE this is achievable via controlling the resource line, and embedding the context there.
I think its fair to say that all supported AssociationProof types MUST have an embedded context to guard against signatures being used out of context.
(Sidenote: The 'Context' approach I think would be highly applicable when reformatting digestSignatures, which are signed by XMTP keypairs and are not externally/user facing)

Got it, so immediate work is to make proto and code changes to allow an AssociationProof to stand in for what is currently accomplished via Signature.WalletECDSACompact and xmtp-js application logic?

Yes. and the MessageContentProof could be address separately using an approach unique to its specific needs

Closing in favor of: https://github.com/xmtp/proto/pull/43


Update traffic data format

https://github.com/Netflix/vizceral/pull/59 got merged into Vizceral recently. It adds entryNode property and removes requirement for INTERNET node. It also allows two way message passing in our cluster view.
Things we have to change to update to version 4.4.0:

change focused -> focusedChild
for every graph add entryNode property describing graph entry node
replace one, one way connection to entryNode with warnings with two, one way connection without it

It is related into traffic view, right? I'll look into it as soon as I'm finished with Elixir stuff 🙂
Does this update mean that there won't be INTERNET node, and we will have bi-directional particles flow?

Correct :)

Very cool.
BTW, in one of the Vizceral examples I saw force directed graph layout demo. Can we give it a try in the second level, where we render message passing?

@arkgil @michalslaski This change it crucial for us right now because a lot of people are trying EPL in recent days. These changes will fix no nodes in /traffic view when only one node in cluster. After getting this resolved on both front and backend we should release new version asap.

I'll try to look into it this evening 🙂

@arkgil Are going to look into it today or can I?

You can always look into issues, I'd be happy to help :) I don't have much time lately, sorry for delay.


[PE-D] Some actual module names are rejected by program

Module names can contain characters deemed invalid by TAssist, such as "YSS4211 India as a Rising Power, 1947-Present".
To reproduce:
add module n/India as a Rising Power, 1947-Present c/YSS4211 a/22S2

Expected result: a module with the given name is added
Actual result: module name is rejected as invalid

Labels: type.FeatureFlaw severity.Medium
original: zhongfu/ped#5

update regex for module name


Summer versionless test

changes will not be merged

I wouldn't expect this to work until the nightly job has run, as I think the changes need to also be reflected in the manifest to which we are comparing

 Same! Just capturing some metrics / logs on a specific change pre-nightly build to compare against! From: Ian Rose<EMAIL_ADDRESS>Wednesday, December 4, 2024 at 4:08 PMTo: cagov/caldata-mdsa-caltrans-pems<EMAIL_ADDRESS>summer-mothwood<EMAIL_ADDRESS>Author<EMAIL_ADDRESS>Re: [cagov/caldata-mdsa-caltrans-pems] Summer versionless test (PR #493)I wouldn't expect this to work until the nightly job has run, as I think the changes need to also be reflected in the manifest to which we are comparing—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID<EMAIL_ADDRESS>
Roger, carry on!

captured CI runtime and logs for comparison. closing without merge!


add node 12 support

Locally (on node 12.6.0) I wasn't able to install presskit due to the
sharp dependency. I tried updating the version in package.json, and
it appears to have worked.
I haven't tested it extensively beyond running jest and successfully
building a site. If there's something specific I should test beyond
that, let me know. Thanks!

Hello!
I think the calls to sharp need to be changed a bit. Using updated sharp on the default presskit gives me few errors:
(background is not a function).
because sharp changed its API.
Looks like in builder.js line 256 the background option needs to be in flatten now.
 await sharp(imagePath)
        .resize(450)
        .flatten({ background: { r: 255, g: 255, b: 255, alpha: 1 }})
        .jpeg()
        .toFile(thumbPath)

I need to check with @solarsailer if I'm missing something, but yes we need to update the dependencies. :)

Thanks for your contribution.
We indeed needed to update all the dependencies anyways, which included this fix.


extra_links.tmpl doesn't add custom link to interface

Gitea version (or commit ref): 38a9cda
Git version: 2.15.0
Operating system: Docker Image gitea/gitea:latest
Database (use [x]):

[ ] PostgreSQL
[x] MySQL
[ ] MSSQL
[ ] SQLite

Can you reproduce the bug at https://try.gitea.io:

[ ] Yes (provide example URL)
[ ] No
[x] Not relevant

Log gist:

Description
I have followed the instructions on https://docs.gitea.io/en-us/customizing-gitea/ and added a
Impressum
in an extra_links.tmpl to add my Impressum to the Gitea pages. The Link doesn't appear on my Gitea pages (gitea.hibiki.eu)

My bad. I forgot to add a folder templates/custom in the GITEA_CUSTOM folder and put the template there instead of GITEA_CUSTOM -.-

My bad. I forgot to add a folder templates/custom in the GITEA_CUSTOM folder and put the template there instead of GITEA_CUSTOM -.-


Event for when JDA encounters an exception

Take errors such as below and turn it into an event so we can deal with it as we'd like instead of it forcibly being pushed to the console as stack traces tend to scare people who don't know what they are/shouldn't need to be concerned with them.
[Mon, 3. Apr 2017 19:47:32 ERROR] [JDA] Encountered an exception:
[Mon, 3. Apr 2017 19:47:32 ERROR] [JDA] com.mashape.unirest.http.exceptions.UnirestException: java.net.SocketException: Connection reset
    at com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:143)
    at com.mashape.unirest.request.BaseRequest.asString(BaseRequest.java:56)
    at github.scarsz.discordsrv.dependancies.jda.core.requests.Requester.execute(Requester.java:122)
    at github.scarsz.discordsrv.dependancies.jda.core.requests.ratelimit.BotRateLimiter$Bucket.run(BotRateLimiter.java:301)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at sun.security.ssl.InputRecord.readFully(Unknown Source)
    at sun.security.ssl.InputRecord.read(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.readDataRecord(Unknown Source)
    at sun.security.ssl.AppInputStream.read(Unknown Source)
    at github.scarsz.discordsrv.dependancies.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:139)
    at github.scarsz.discordsrv.dependancies.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:155)
    at github.scarsz.discordsrv.dependancies.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:284)
    at github.scarsz.discordsrv.dependancies.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:140)
    at github.scarsz.discordsrv.dependancies.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:57)
    at github.scarsz.discordsrv.dependancies.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:261)
    at github.scarsz.discordsrv.dependancies.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:165)
    at github.scarsz.discordsrv.dependancies.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:167)
    at github.scarsz.discordsrv.dependancies.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:272)
    at github.scarsz.discordsrv.dependancies.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:124)
    at github.scarsz.discordsrv.dependancies.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:271)
    at github.scarsz.discordsrv.dependancies.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
    at github.scarsz.discordsrv.dependancies.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
    at github.scarsz.discordsrv.dependancies.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
    at github.scarsz.discordsrv.dependancies.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
    at github.scarsz.discordsrv.dependancies.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
    at github.scarsz.discordsrv.dependancies.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)
    at github.scarsz.discordsrv.dependancies.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
    at com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:138)
    ... 10 more
[Mon, 3. Apr 2017 19:47:32 ERROR] [JDA] RestAction queue returned failure: [ErrorResponseException] Discord returned an error with no defined error-code : null

Something like that has already been brought up lately. It was supposed to also catch errors thrown by EventListeners, but there's one problem: When an EventListener that listens for the ErrorEvent throws an exception JDA would get stuck in an infinite loop

Wouldn't a simple solution to that be to just not report errors that an ErrorEvent listener throws? Add that into the javadoc in bold: "can't be done for obvious reasons."

Sure it would be a simple solution, but remember that you can use try-catch blocks which are already part of the Java language.
I understand that putting every single event in a try-catch block might not be as efficient, however "muting" exceptions is an even worse idea.

That...that isn't what he is talking about @ShanerX. He is referring to the exceptions printed from within JDA. He is hoping to have the stack trace stuff removed and replaced by their simple message and forwarded to an ExceptionEvent.

I beg your pardon, maybe I didn't understand the topic.
Again, shouldn't this be do-able with a try-catch block?
Also, @Scarsz said that (quoting):

deal with it as we'd like instead of it forcibly being pushed to the console as stack traces tend to scare people who don't know what they are

Silencing exceptions so the user doesn't see them isn't recommended, especially on a production bot.

This an exception that is thrown by the JDA Requester and then logged and sent to the failure callback of a RestAction.

@ShanerX no, it's not try-catchable. The exceptions are thrown completely internal to JDA, there's no spot where a user's code could catch anything. Also, silencing the exceptions was not the intention. As I said in the OP, getting rid of stack traces is the intention. End users that don't know what they are get frightened from seeing them. Id prefer to be able to handle the exceptions and display a message myself.

I can see situations where this would be useful.

Having an ErrorManager interface might be an effective implementation for this. Builder::setErrorHandler, have the default/unspecified behavior be to an implementation that reflects JDA's current behavior.

@Scarsz that is a good point, use the same mentality as Thread.setDefaultExceptionHandler

I hear you on it, I just can't think of any situations where a bunch of error handlers would be better than one central one besides just having the option for it

Exceptions and errors that are caught by JDA internals are passed into respective sections of the API. This means you can handle them through the ExceptionEvent or for RestAction with the failure callbacks. The logging of timeouts and requester errors is intentional behavior and I don't want to change it since it seems unnecessary and misleading. Timeouts and HTTP issues should be at a minimum for proper functioning communication anyway, if an issue rises it should most certainly be logged including the stacktrace for better issue prevention. JDA attempts to retry on an HTTP timeout once if it occurs, if that retry fails as well we will print the timeout exception to alert the end user of the faulty connection.
Since JDA makes use of the SLF4J api it is possible to configure the logger to ignore or filter out any exception, although I highly discourage from ignoring them.
My mentioned concerns and the fact this issue has been stale for such a long time are reason enough to close the thread.


Document that vm.expectRevert should not be used for low-level calls

As discussed in https://github.com/foundry-rs/foundry/issues/1124, and https://github.com/foundry-rs/foundry/issues/3901#issuecomment-1356501651.

As @mds1 said in this comment:

If so, then maybe the best path forward here is leaving as-is and updating the foundry book to mention you must assert on the return status for expectRevert work as expected for low-level calls


Move OptimismHardfork to reth-optimism-chainspec

Describe the feature
Move reth_ethereum_forks::OptimismHardfork into new crate reth-optimism-chainspec
Additional context
No response

I’ll love to work on this

thanks @ShantelPeters, it's blocked rn though, so pls pick another issue until that label disappears!


Inconsistency/bug with renderWith using MyClass::class

I may be falsely under the assumption that ->renderWith() would automatically check the Includes folder as I have never had to specify it, however:
Broken:
$this->renderWith(GridFieldSortableRows::class, $args);

Working:
$this->renderWith('SortableGridField\Forms\Includes\GridFieldSortableRows', $args)

You can use
$this->renderWith(['type' => 'Includes', GridFieldSortableRows::class], $args);

I believe.
It's only automatic when you use <% include %> in a template.
Let me know if this doesn't address your issue. :)


Correction to cluster agent deployment toleration attributes

Signed-off-by: Joe Hohertz<EMAIL_ADDRESS>What this PR does / why we need it:
Correction to cluster agent deployment toleration attributes
Was taking it from the wrong config section.
Also list the attribute in the README as it was missing.
Checklist
[Place an '[x]' (no spaces) in all applicable fields. Please remove unrelated fields.]

[X] DCO signed
[X] Chart Version bumped
[X] Variables are documented in the README.md

/lgtm
/ok-to-test

/retest

1.11.1 has just been merged, you'll need to increase version to 1.11.2, sorry for the inconvenience

Updated the version

Thanks a lot!
/lgtm


Why isn't the loss of validation on the same scale as the loss of training ?

Star RTDETR
请先在RTDETR主页点击star以支持本项目
Hi Sir @lyuwenyu, i am trully sorry if my question is low level but
I would like to understand something that is not clear to me.

Even normalizing the validation dataset as you said, I still don't understand why the loss value is not of the same order as the train loss.
I mean for example that with an average train loss = 16.9771, I have an average val loss = 0.911.

I don't understand why.
Here's the code I use (before taking the average val loss, I divide by the len(data_loader).

Can you, please explain me if i'm doing something badly. And for sure i'm normalizind the validation set as the same way of the training set.  Thanks

https://github.com/lyuwenyu/RT-DETR/blob/5b628eaa0a2fc25bdafec7e6148d5296b144af85/rtdetr_pytorch/src/solver/det_engine.py#L74-L83
I think you can use the same code as train, and use metric_logger to print loss

Okay sir @lyuwenyu i'm going to try it as you said and see what gonna happen.
Thanks for your answer sir !

hello have you solved the problem? @Geo99pro

Hi @meirashaf, not yet, I'm still trying to figure it out.

hello have you solved the problem? @Geo99pro

Hi @meirashaf, not yet, I'm still trying to figure it out.


Investigate tail recursive stream processing

The Streamex library has pioneered an exciting & very clever approach that allows Streams to be recursively processed in a tail-call optimized way, stream.spliterator() (unlike stream.iterator()) returns the provided iterator type which means that nested stack frames can be avoided by iterating over nested spliterators rather than making nested calls.
Investigate use cases of tail call optimized Streams to determine whether such an approach adds value for SequenceM streams in cyclops or LazyFutureStreams in simple-react.

Working prototype available, not sure about the use cases.


Create new security, codefendant permission screen

The screen should come right before we ask for the codefendant names.  It will:

Advise that codefendant information will be public,
Ask if the User has permission to add the codefendant's name and contact information to the public filing.

yes/no.  If no> skip codefendant questions If yes> proceed to codefendant questions.
Issue #31 is related.

Do we need this permissions screen for each codefendant individually?

No this screen will only be once before the initial COD name ask. then new you/Quinten text is on each individual's contact info

If you write the text in here, I can add the question.

Fixed by #99


Are there any benchmark results for the memory-constrained setting?

Hi,
I was wondering if you have tested your implementation on a machine with limited RAM, where most of the index has to be kept on disk? Especially for DiskANN, which was originally designed to work well in this setting.

Hi! Currently the library supports in-memory search only and we don't have an SSD-optimized graph search routine. If you do any benchmarking of this manner using ParlayANN, we would love to hear about it.


Update library

Hi,
Kat was taken down a few days ago, but a clone came back => https://kat.am/
Is it possible to fix the library ?
Thanks !
Regards,
Billos

I just opened a PR to fix it. Check out PR #9.

I tried updating the search options, but kat.am does not seem to entirely work yet. Maybe with another mirror.

up

Why are https://kat.am and https://kickass.cd/full pulling different data?

I guess those are incomplete clones of the original kickass.


pop-up window

Because the command window does not support Chinese character output,

I use start cmd /k to run the command in a new CMD window. I want to cancel the pop-up window after running tuw. What should I do?

Thanks for the report.

Because the command window does not support Chinese character output

You can see it supports Chinese characters already.

Probably, the cause is locale (like gb2312 and big5) for python. Tuw only supports user's default locale. So, it can show garbled strings if your python script changes the setting.
I opened a new issue for it.
Sync locale with child processes on Windows · Issue #36 · matyalatte/tuw

I use start cmd /k to run the command in a new CMD window. I want to cancel the pop-up window after running tuw. What should I do?

I opened another issue because there is nothing you can do for now.
Option to disable message dialogues · Issue #37 · matyalatte/tuw

I'll close this issue because I added an option to skip the pop-up window at v0.7.0.
You can skip the dialog with "show_success_dialog": false.
{
    "gui": [
        {
            "label": "Option to skip success dialog",
            "show_success_dialog": false,
            "command": "echo Hello!",
            "components": []
        }
    ]
}

The garbled string issue will be addressed in #36.


Update to latest LevelDB

Description
The fuse source LevelDB JNI wrapper hasn't been updated for quite a while.  We should create our own fork and upgrade to the latest LevelDB version.

Closing this venerable issue as a duplicate of #6138


Sultans is not responding in AWS instance of cludbreak

Hi,
Recently I installed cloudbreak in a AWS instance and after logging in, I am redirected to the dashboard page where the loading screen appears as below:

Digging into the logs further, I see the following logs from uluwatu docker image:
GET /sultans/permission - - ms - -
GET /sultans/account/details - - ms - -
I hope this means that the uluwatu is not able to get data from the urls sultans/permission and sultans/account/details
Also the following error occurs when uluwatu starts:
Subscribing client to Cloudbreak notifications
Exception error occurred: ECONNRESET when try to connect: backend:8089/oauth/token
Exception error occurred: ECONNRESET when try to connect: backend:8089/oauth/token
No session found, websocket notifications won't work [socket ID: gLDtmQjnsihY7d7jAAAA] Error: could not look up session by key: connect.sid
The following are the logs from the sultan docker image:
cd /sultans
node main.js
UAA server location: http://backend:8089
Server listening on port 3000 in development mode
[TypeError: Cannot read property 'statusCode' of undefined]
Can somebody please help me to troubleshoot the error?
Regards,
Malathi

It worked after exposing port 8089 in the AWS instance


Version bump

Bumping up to minor version 0.0.91

@ashwnacharya I think we do a,b,c type...Check earlier releases once and merge

There is either a(alpha),b(beta) or a proper version bump ... No c,d ....
On Jun 22, 2015 7:46 PM, "prabodh"<EMAIL_ADDRESS>wrote:

@ashwnacharya https://github.com/ashwnacharya I think we do a,b,c
type...Check earlier releases once and merge
—
Reply to this email directly or view it on GitHub
https://github.com/Aplopio/rip/pull/28#issuecomment-114123663.

Ok...I am not sure if alpha, beta also applies here..
Then @ashwnacharya  as you said Lets stick to 1,2 s :)


Ack the StreamStart package before attempting to connect

Fixes #517.
This PR should likely be reviewed on a commit-by-commit bases.

7daf5362cf6ccfc5743d998f508b102887bdb9c6: To send a package between listening on the stream_port and waiting for the server connection the  StreamSocket::connect_to_server function had to be split in two.
c4ec024452939fbaed50162fa240bafb10a4e000: Introduces the ClientControllPacket::StreamReady packet.
a01dab72f3f66a4f6dc63c62d7a556e82962b9b5: Adds version checks to send StreamReady only on versions 15.1.0 or higher. This commit should be easily revert-able for 16.0.0 and uses the reserved fields on the ClientConfigPacket and HeadsetInfoPacket. The server has this information already very early in the connection process, but passing it through would be very cumbersome. The client has no idea of the server version. This should likely be fixed in future versions of the protocol.
80828d9221f917abc269255921bc093b3259bb27: Bumb the version to 15.1.0. Can be ignored/dropped from the PR, if unwanted.

I did some tests with this branch today and wired connections via ADB are working just like networked ones now. Client and server connect reliably on startup, no matter the startup order. As soon as all parts are in place, the stream starts immediately.
Once this hits a stable release, I will add a wiki page explaining the setup process.
Until then for testing you need a quest with adb enabled (which is required for installing ALVR anyway) and follow these steps:

Disable wifi (to prevent discovery) on your quest and check the ALVR app for your hostname, note it down.
Add the quest manually to the ALVR server using <IP_ADDRESS> as the IP. (You will get an error here, if the quest was already discovered with a different IP, so check your wifi settings before.)
Enable wifi again, ALVR cannot listen for connections otherwise, including adb-connections.
Establish the port forwarding using:

adb devices <- check that your quest shows up and your pc is trusted
adb forward tcp:9943 tcp:9943
adb forward tcp:9944 tcp:9944

(If you start port forwarding before the app on the quest runs, the server now prints warnings to the log, you can safely ignore these. Connections will succeed once the app on the quest runs and can send answers.)
The stream should work at this point!

Should also work on the Oculus Go, but I have no device to test this.

There are a lot of changes but I don't have anything more to change. Thank you 🙂
The manual bump is not a problem. Usually I do this though the release CI script, so in this case CI will just bump the android version code when making the v15.1.0 release.

I noticed one thing now. You put StreamReady as the top variant for ClientControlPacket. I think this will break deserialization with bincode. There was already the Reserved variant for this scope but I think moving StreamReady to the bottom of the list will be enough to avoid breaking changes.

I noticed one thing now. You put StreamReady as the top variant for ClientControlPacket. I think this will break deserialization with bincode. There was already the Reserved variant for this scope but I think moving StreamReady to the bottom of the list will be enough to avoid breaking changes.

Good catch, I was not aware, that this was order dependent, but that makes total sense.

EDIT: I think we can't add any variant in any case. If the server sends the packet and the (outdated) client does not receives it right away, it will end up collected by the control socket receive loop, where deserialization will fail, closing the connection.

But that is why the new variant is not send, if the version is too old. Or is the bincode format dependent of the amount of variants?

But that is why the new variant is not send, if the version is too old.

Right. So if we keep the variant as last the problem shouldn't appear, because you don't send the packet at all if the server cannot receive it. Anyway, bincode encodes enums as tag index + data, so we cannot reorder the variants.

With the adb part of this pull request does that mean one could use alvr without a wifi connection now?

@muevoid Yes, follow the guide here: https://github.com/alvr-org/ALVR/wiki/Use-ALVR-through-a-USB-connection
You need the latest nightly.

@zarik5 thanks for the response very helpful. It sucks that you still need to be connected to wifi though for this to work.

I think just turned on. But I didn't try