Images are not the same after saving

Before opening a new issue, we wanted to provide you with some useful suggestions (Click "Preview" above for a better view):

Consider checking out SDK examples.
Have you looked in our documentations?
Is you question a frequently asked one?
Try searching our GitHub Issues (open and closed) for a similar issue.

All users are welcomed to report bugs, ask questions, suggest or request enhancements and generally feel free to open new issue, even if they haven't followed any of the suggestions above :)

Required Info

Camera Model
{D435 }

Firmware Version
(Open RealSense Viewer --> Click info)

Operating System & Version
{Win (10)

Kernel Version (Linux Only)

Platform
PC

SDK Version
{ legacy / 2. }

Language
{Python 3.10 }

Segment

I pressed the e key to save the color and depth images in npy format, but the values were different when I loaded the images after saving. I want to solve this problem. The code and output is below:
`#depth rgb 이미지 저장
import math
import time
import cv2
import numpy as np
import pyrealsense2 as rs
class AppState:
def __init__(self, *args, **kwargs):
    self.WIN_NAME = 'RealSense'
    self.pitch, self.yaw = math.radians(-10), math.radians(-15)
    self.translation = np.array([0, 0, -1], dtype=np.float32)
    self.distance = 2
    self.prev_mouse = 0, 0
    self.mouse_btns = [False, False, False]
    self.paused = False
    self.decimate = 1
    self.scale = True
    self.color = True

def reset(self):
    self.pitch, self.yaw, self.distance = 0, 0, 2
    self.translation[:] = 0, 0, -1

@property
def rotation(self):
    Rx, _ = cv2.Rodrigues((self.pitch, 0, 0))
    Ry, _ = cv2.Rodrigues((0, self.yaw, 0))
    return np.dot(Ry, Rx).astype(np.float32)

@property
def pivot(self):
    return self.translation + np.array((0, 0, self.distance), dtype=np.float32)

state = AppState()
Configure depth and color streams
pipeline = rs.pipeline()
config = rs.config()
pipeline_wrapper = rs.pipeline_wrapper(pipeline)
pipeline_profile = config.resolve(pipeline_wrapper)
device = pipeline_profile.get_device()
found_rgb = False
for s in device.sensors:
if s.get_info(rs.camera_info.name) == 'RGB Camera':
found_rgb = True
break
if not found_rgb:
print("The demo requires Depth camera with Color sensor")
exit(0)
config.enable_stream(rs.stream.depth, 848, 480,rs.format.z16, 30)
config.enable_stream(rs.stream.color, 848, 480, rs.format.bgr8, 30)
Start streaming
pipeline.start(config)
Get stream profile and camera intrinsics
profile = pipeline.get_active_profile()
depth_profile = rs.video_stream_profile(profile.get_stream(rs.stream.depth))
depth_intrinsics = depth_profile.get_intrinsics()
w, h = depth_intrinsics.width, depth_intrinsics.height
Processing blocks
pc = rs.pointcloud()
decimate = rs.decimation_filter()
decimate.set_option(rs.option.filter_magnitude, 2 ** state.decimate)
colorizer = rs.colorizer()
def mouse_cb(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
    state.mouse_btns[0] = True

if event == cv2.EVENT_LBUTTONUP:
    state.mouse_btns[0] = False

if event == cv2.EVENT_RBUTTONDOWN:
    state.mouse_btns[1] = True

if event == cv2.EVENT_RBUTTONUP:
    state.mouse_btns[1] = False

if event == cv2.EVENT_MBUTTONDOWN:
    state.mouse_btns[2] = True

if event == cv2.EVENT_MBUTTONUP:
    state.mouse_btns[2] = False

if event == cv2.EVENT_MOUSEMOVE:

    h, w = out.shape[:2]
    dx, dy = x - state.prev_mouse[0], y - state.prev_mouse[1]

    if state.mouse_btns[0]:
        state.yaw += float(dx) / w * 2
        state.pitch -= float(dy) / h * 2

    elif state.mouse_btns[1]:
        dp = np.array((dx / w, dy / h, 0), dtype=np.float32)
        state.translation -= np.dot(state.rotation, dp)

    elif state.mouse_btns[2]:
        dz = math.sqrt(dx**2 + dy**2) * math.copysign(0.01, -dy)
        state.translation[2] += dz
        state.distance -= dz

if event == cv2.EVENT_MOUSEWHEEL:
    dz = math.copysign(0.1, flags)
    state.translation[2] += dz
    state.distance -= dz

state.prev_mouse = (x, y)

cv2.namedWindow(state.WIN_NAME, cv2.WINDOW_AUTOSIZE)
cv2.resizeWindow(state.WIN_NAME, w, h)
cv2.setMouseCallback(state.WIN_NAME, mouse_cb)
def project(v):
"""project 3d vector array to 2d"""
h, w = out.shape[:2]
view_aspect = float(h)/w
# ignore divide by zero for invalid depth
with np.errstate(divide='ignore', invalid='ignore'):
    proj = v[:, :-1] / v[:, -1, np.newaxis] * \
        (w*view_aspect, h) + (w/2.0, h/2.0)

# near clipping
znear = 0.03
proj[v[:, 2] < znear] = np.nan
return proj

def view(v):
"""apply view transformation on vector array"""
return np.dot(v - state.pivot, state.rotation) + state.pivot - state.translation
def line3d(out, pt1, pt2, color=(0x80, 0x80, 0x80), thickness=1):
"""draw a 3d line from pt1 to pt2"""
p0 = project(pt1.reshape(-1, 3))[0]
p1 = project(pt2.reshape(-1, 3))[0]
if np.isnan(p0).any() or np.isnan(p1).any():
return
p0 = tuple(p0.astype(int))
p1 = tuple(p1.astype(int))
rect = (0, 0, out.shape[1], out.shape[0])
inside, p0, p1 = cv2.clipLine(rect, p0, p1)
if inside:
cv2.line(out, p0, p1, color, thickness, cv2.LINE_AA)
def grid(out, pos, rotation=np.eye(3), size=1, n=10, color=(0x80, 0x80, 0x80)):
"""draw a grid on xz plane"""
pos = np.array(pos)
s = size / float(n)
s2 = 0.5 * size
for i in range(0, n+1):
x = -s2 + is
line3d(out, view(pos + np.dot((x, 0, -s2), rotation)),
view(pos + np.dot((x, 0, s2), rotation)), color)
for i in range(0, n+1):
z = -s2 + is
line3d(out, view(pos + np.dot((-s2, 0, z), rotation)),
view(pos + np.dot((s2, 0, z), rotation)), color)
def axes(out, pos, rotation=np.eye(3), size=0.075, thickness=2):
"""draw 3d axes"""
line3d(out, pos, pos +
np.dot((0, 0, size), rotation), (0xff, 0, 0), thickness)
line3d(out, pos, pos +
np.dot((0, size, 0), rotation), (0, 0xff, 0), thickness)
line3d(out, pos, pos +
np.dot((size, 0, 0), rotation), (0, 0, 0xff), thickness)
def frustum(out, intrinsics, color=(0x40, 0x40, 0x40)):
"""draw camera's frustum"""
orig = view([0, 0, 0])
w, h = intrinsics.width, intrinsics.height
for d in range(1, 6, 2):
    def get_point(x, y):
        p = rs.rs2_deproject_pixel_to_point(intrinsics, [x, y], d)
        line3d(out, orig, view(p), color)
        return p

    top_left = get_point(0, 0)
    top_right = get_point(w, 0)
    bottom_right = get_point(w, h)
    bottom_left = get_point(0, h)

    line3d(out, view(top_left), view(top_right), color)
    line3d(out, view(top_right), view(bottom_right), color)
    line3d(out, view(bottom_right), view(bottom_left), color)
    line3d(out, view(bottom_left), view(top_left), color)

def pointcloud(out, verts, texcoords, color, painter=True):
"""draw point cloud with optional painter's algorithm"""
if painter:
# Painter's algo, sort points from back to front
    # get reverse sorted indices by z (in view-space)
    # https://gist.github.com/stevenvo/e3dad127598842459b68
    v = view(verts)
    s = v[:, 2].argsort()[::-1]
    proj = project(v[s])
else:
    proj = project(view(verts))

if state.scale:
    proj *= 0.5**state.decimate

h, w = out.shape[:2]

# proj now contains 2d image coordinates
j, i = proj.astype(np.uint32).T

# create a mask to ignore out-of-bound indices
im = (i >= 0) & (i < h)
jm = (j >= 0) & (j < w)
m = im & jm

cw, ch = color.shape[:2][::-1]
if painter:
    # sort texcoord with same indices as above
    # texcoords are [0..1] and relative to top-left pixel corner,
    # multiply by size and add 0.5 to center
    v, u = (texcoords[s] * (cw, ch) + 0.5).astype(np.uint32).T
else:
    v, u = (texcoords * (cw, ch) + 0.5).astype(np.uint32).T
# clip texcoords to image
np.clip(u, 0, ch-1, out=u)
np.clip(v, 0, cw-1, out=v)

# perform uv-mapping
out[i[m], j[m]] = color[u[m], v[m]]

out = np.empty((h, w, 3), dtype=np.uint8)
align_to = rs.stream.color
align = rs.align(align_to)
while True:
# Grab camera data
if not state.paused:
# Wait for a coherent pair of frames: depth and color
frames = pipeline.wait_for_frames()
aligned_frames = align.process(frames)
    depth_frame = aligned_frames.get_depth_frame()
    color_frame = aligned_frames.get_color_frame()

    depth_frame = decimate.process(depth_frame)

    # Grab new intrinsics (may be changed by decimation)
    depth_intrinsics = rs.video_stream_profile(
        depth_frame.profile).get_intrinsics()
    w, h = depth_intrinsics.width, depth_intrinsics.height

    depth_image = np.asanyarray(depth_frame.get_data())
    color_image = np.asanyarray(color_frame.get_data())

    depth_colormap = np.asanyarray(
        colorizer.colorize(depth_frame).get_data())

    if state.color:
        mapped_frame, color_source = color_frame, color_image
    else:
        mapped_frame, color_source = depth_frame, depth_colormap

    points = pc.calculate(depth_frame)
    pc.map_to(mapped_frame)

    # Pointcloud data to arrays
    v, t = points.get_vertices(), points.get_texture_coordinates()
    verts = np.asanyarray(v).view(np.float32).reshape(-1, 3)  # xyz
    texcoords = np.asanyarray(t).view(np.float32).reshape(-1, 2)  # uv

# Render
now = time.time()

out.fill(0)

grid(out, (0, 0.5, 1), size=1, n=10)
frustum(out, depth_intrinsics)
axes(out, view([0, 0, 0]), state.rotation, size=0.1, thickness=1)

if not state.scale or out.shape[:2] == (h, w):
    pointcloud(out, verts, texcoords, color_source)
else:
    tmp = np.zeros((h, w, 3), dtype=np.uint8)
    pointcloud(tmp, verts, texcoords, color_source)
    tmp = cv2.resize(
        tmp, out.shape[:2][::-1], interpolation=cv2.INTER_NEAREST)
    np.putmask(out, tmp > 0, tmp)

if any(state.mouse_btns):
    axes(out, view(state.pivot), state.rotation, thickness=4)

dt = time.time() - now

# dt가 0보다 큰지 확인하여 FPS 계산
if dt > 0:
    fps = 1.0 / dt
else:
    fps = 0  # dt가 0일 경우 FPS를 0으로 설정    q
cv2.setWindowTitle(
state.WIN_NAME, "RealSense (%dx%d) %dFPS (%.2fms) %s" %
(w, h, fps, dt*1000, "PAUSED" if state.paused else ""))

cv2.imshow(state.WIN_NAME, out)
key = cv2.waitKey(1)

if key == ord("r"):
    state.reset()

if key == ord("p"):
    state.paused ^= True

if key == ord("d"):
    state.decimate = (state.decimate + 1) % 3
    decimate.set_option(rs.option.filter_magnitude, 2 ** state.decimate)

if key == ord("z"):
    state.scale ^= True

if key == ord("c"):
    state.color ^= True

if key == ord("e"):
    # save depth and color images
    depth_frame = frames.get_depth_frame()
    color_frame = frames.get_color_frame()
    depth_image = np.asanyarray(depth_frame.get_data())
    color_image = np.asanyarray(color_frame.get_data())

    print("depth shape:",depth_image.shape)
    print("color shape:",color_image.shape)
    print("Original depth image dtype:", depth_image.dtype)
    print("Original depth image shape:", depth_image.shape)
    print("Original color image dtype:", color_image.dtype)
    print("Original color image shape:", color_image.shape)

    np.save(r'C:\Users\juseok\Desktop\depth_image.npy', depth_image.astype(np.uint16))
    np.save(r'C:\Users\juseok\Desktop\color_image.npy', color_image.astype(np.uint8))

    # save as ply format
    points.export_to_ply(r'C:\Users\juseok\Desktop\pcd.ply', color_frame)

if key in (27, ord("q")) or cv2.getWindowProperty(state.WIN_NAME, cv2.WND_PROP_AUTOSIZE) < 0:
    break

Stop streaming
pipeline.stop()`
**Output:
depth shape: (480, 848)
color shape: (480, 848, 3)
Original depth image dtype: uint16
Original depth image shape: (480, 848)
Original color image dtype: uint8
Original color image shape: (480, 848, 3)**
`loaded_depth_image = np.load(r'C:\Users\juseok\Desktop\depth_image.npy')
loaded_color_image = np.load(r'C:\Users\juseok\Desktop\color_image.npy')
print("Loaded depth image dtype:", loaded_depth_image.dtype)
print("Loaded depth image shape:", loaded_depth_image.shape)
print("Loaded color image dtype:", loaded_color_image.dtype)
print("Loaded color image shape:", loaded_color_image.shape)
if np.array_equal(depth_image, loaded_depth_image):
print("Depth data is consistent after loading.")
else:
print("Depth data is NOT consistent after loading.")
if np.array_equal(color_image, loaded_color_image):
print("Color data is consistent after loading.")
else:
print("Color data is NOT consistent after loading.")`
**Output:
depth shape: (480, 848)
color shape: (480, 848, 3)
Original depth image dtype: uint16
Original depth image shape: (480, 848)
Original color image dtype: uint8
Original color image shape: (480, 848, 3)
Loaded depth image dtype: uint16
Loaded depth image shape: (480, 848)
Loaded color image dtype: uint8
Loaded color image shape: (480, 848, 3)
Depth data is NOT consistent after loading.
Color data is NOT consistent after loading.**

Hi @jooseuk  Do you get a better depth npy file if you test the Python npy export script at https://github.com/IntelRealSense/librealsense/issues/4934#issuecomment-537705225 please?

Hi @jooseuk  Do you require further assistance with this case, please?  Thanks!

Case closed due to no further comments received.


Resolution settings

Hi,
Love this app, I've modified it to always pick the highest resolution for the selected camera. I had one that defaulted to 640x480, yuk.
Would you be interested in a PR?
I thought it might be better if there was another menu option so a user could select from the supported resolutions, would this be if interest to you?
Let me know and I'll do it.

That would be great, Ross - a sub menu with available resolutions from the camera would be a useful feature.

So a quick play around to get something working locally and i can make a list like this

Note ive differentiated different codecs the camera supports even though its technically the same res, im thinking we should just collapse down into a single resolution set as thats maybe a normal user might want?
Do you have any preferences?
PS i use this app several times a week at work for sharing whiteboard sessions and phone demos, its great!

Thanks for looking into this, Ross. What would you think about putting the resolution menu as a submenu of the camera source. Something like:
Camera => Select Source => C922 Pro Stream Webcam => 640x480
                                                     720x480
                                                     800x600
                                                     1024x768
                                                     1600x1200
                                                     1920x1080 ✔

A check mark would indicate the selected resolution (with it defaulting to the highest resolution upon start). I also agree that we shouldn't show the codecs.

sounds good to me, ill give that a go and submit a PR

please see https://github.com/simonguest/quick-camera/pull/14

BTW would it be worth having Quick Camera default to the highest resolution supported by the selected source device?

BTW would it be worth having Quick Camera default to the highest resolution supported by the selected source device?


Patch bug in Pafy when fetching audiostreams with latest youtube-dl

Addresses #149.
(Upstream PR: https://github.com/mps-youtube/pafy/pull/230)

Please change the comparison in youtube_tools.py to also include version 0.5.5 of pafy. It appears that they released a new minor version that still doesn't include this fix https://github.com/mps-youtube/pafy/pull/230.
Also, I made a silly pull request #637 because I didn't find out that this issue was already fixed... 😅

@taniotanio7 Would you like to make a PR to update pafy's version? That should probably fix this issue.

I've made a PR in #638.


UNREGISTER, then ERASE, leaves nick protections in place

Reported by Csibesz. ERASE on a working account removes the protections, but if you UNREGISTER first and then follow it up with an ERASE, the protections are not removed.

Root cause: in this flow, the ERASE operation was unable to correctly retrieve the account name key, hence unable to compute the skeleton, hence unable to remove skeleton protections, which persisted even after the ERASE.


Orisa ultimate voiceline

Created by: MaxwellJung
Use Orisa's ultimate voiceline when using supercharger

moved from ow1_emulator_backup#515


Enhance : New Total Solar eclipse added

Fixes #274

[x] Run the unit tests with gradlew app:connectedGmsDebugAndroidTest to make sure you didn't break anything (with an emulator running or phone connected)

[x] If you have multiple commits please combine them into one commit by squashing them.

@jaydeetay Please review.

@jddeep I think its a good practice to let first the mentor assign the task to some person and wait. I can see that some person has already requested before in #274 . Please avoid this.

@jddeep I think its a good practice to let first the mentor assign the task to some person and wait. I can see that some person has already requested before in #274 . Please avoid this.

@utkarsh530 I am a strong believer of what you said here. But as you might have seen this issue was an enhancement and was a user feedback. So I thought it would be better to directly make a PR and let it be reviewed. Because if we would have waited to get assigned for every issue the development process would have taken too long. But nevertheless It is always a good practice to get assigned first. But in this case I had to make an exception. There are lots of aspects to be worked on. Hope you understand my point buddy. Cheers!

@jddeep this doesn't make sense at all. If you wanted to work on this then you should have asked me first whether if I'm working on it or not. I was already working on this issue and would have sent PR by tonight.

@jddeep this doesn't make sense at all. If you wanted to work on this then you should have asked me first whether if I'm working on it or not. I was already working on this issue and would have sent PR by tonight.

@aayushsingla If you had commented on the issue that you will be working on it instead of asking for it. I would have surely made sure of that. But here I think there has been a lack of miscommunication as well. Well in that case I would really recommend you to let it be in a branch and do some more work in another one. And let it be untill this PR get's reviewed. Then after that you can make a PR from your side. Untill then I really apologise for the miscommunication. Hope you understand this time buddy.

Till then feel free to work on some other issue. Cheers!

@aayushsingla If I had seen an affirmation that you would be working on it, I would surely have left that, But as the issue had been given an Enhancement, I decided to directly make a PR and then get it reviewed at once instead of waiting to get assigned. You see if we wait to get assigned for every issue, it would extend the development process. But from now on let us all communicate on gitter and help each other in development. Cheers!

@jaydeetay Please review this,

Hi folks. Thanks for the PR. As you'll have figured out by now, I don't have enough time to police who should be working on what. I wish I did, as clearly you guys have lots of enthusiasm and energy and I'm certainly flattered that you're putting it into Sky Map. So, I'm sorry that you've ended up treading on each others' toes here. It happens. Generally speaking I'm going to examine PRs in the order that they arrive in my inbox (very slowly, probably). As always, follow the README and check in with me before embarking on significant feature work.

I'm not convinced the date is right here.


Bracketed @param name doesn't add null | undefined in strict mode

Code
// @noEmit: true
// @allowJs: true
// @checkJs: true
// @strict: true
// @Filename: a.js

/** @param {number} [p] */
function f(p) {
    p = undefined
    p = null
}

Expected behavior:
The type of p should be number | null | undefined, and should be optional in the signature of f.
Actual behavior:
p is optional but doesn't include null | undefined in its type.

Doesn't happen with postfix = types either:
/** @param {number=} p */


Correct instructions for submodule initialization

This PR updates the PR with the correct command to initialize submodules recursively.
Fixes #361

coverage: 83.337%. remained the same when pulling 5bc5c02565fcd14aac920dbc88d1ff9520a4e882 on readme into d1c5001f2bc701796126d8fec08613eefb9ab20f on main.


Harvest

Description

Fix: Update SWR package to 1.1.2 (handles window.requestAnimationFrame bug)
Fix: Harvest admins are now limited to only view their own time entries, even if their API creds allow them to view/edit other user's timers in their company.
New: Support for viewing timers on other days (see below)
New: Add user preference to control how time entries are sorted
Improvement: Remove brackets in project picker if no code is present (fixes #538)
Improvement: Project picker now groups projects by client (more similar the Harvest app)
Improvement: Now uses new alert dialog for deleting time entry confirmation
Improvement: Total hours for a given day are shown in the header of the list of time entries

NOTE: The new feature that allows editing entries on other days is incomplete, but until there is a Date only form field component, I can't get it to function correctly. Expected behavior is that you would navigate to a different day, then choose the "New Timer" action and the date field would be prefilled to the day that you had navigated to. Due to timezone differences, if I put any date in as the default value, it displays as 6 pm on the previous day. To me, this behavior is worse than not pre-setting the date at all, so I've disabled that part of the feature for now. However, if the date field is left blank, the API will still create the time entry on the correct date this is just not made clear to the user in the form.
Also, please note it was an intentional decision to change the navigation header when switching days, as otherwise there would be no indication of which is your current day if there are no time entires on that day.
Type of change

Bug fix / improvement for my extension
Screencast

https://cln.sh/meou3X
Checklist

[X] I read the extension guidelines
[X] I read the documentation about publishing

@unnamedd Sorry about that, this new commit should only effect my own extension. Thanks for the tip, I'll be sure to use that in my future development!

@unnamedd Sorry about that, this new commit should only effect my own extension. Thanks for the tip, I'll be sure to use that in my future development!

@pernielsentikaer So that looks like a different error than "invalid API token". At first, I was unable to replicate, but that's because I've been testing with the node production environment. Could this be something polyfilled by the Raycast Dev API, or do I need to adjust my code? Again, you won't get that error when it's running in production.

Hi @eluce2 👋
Just to be sure once more, sorry, If I get the extension from Store right now, this is the error you have fixes, yes? (The one with wrong credentials)

Yes, I'm trapping for the 401 HTTP response now in the latest push, and showing a generic error for any other non-success HTTP statuses


Make cocoa apps have app name as title of first menu item (not "python")

Is this easily doable? I haven't been able to figure it out. Any help much appreciated.

It is; but not if you start the app from the command line. The name of the app in the menubar is the name of the executable bundle; if you use the command line to start the app, that's "python".
However, if you wrap your project up in an app bundle, you can provide app metadata and set the app to be whatever you want. Briefcase is a project that makes this relatively simple - just define your setup.py, and the rest is auto generated for you.

Thanks! Moving on to Briefcase now to try that out!

Excellent. Confirmed that Briefcase fixes this. Feel free to close this.

Excellent; closing.
That said, if anyone can work out a magic combination of invocations that allows setting the app name without wrapping in an app bundle, I'd happily integrate that change.


Fix for Gitlab url not ending with /

Fixes https://github.com/pydata/pydata-sphinx-theme/issues/1147, and should prevent errors when using URLs like https://gitlab.com/deltares/imod/imod-python/-/issues

What's the status on this one? It seems to be fixing a bug, but now sure if we need to get it in the next release or not.

Sorry for not picking this up. The comment by @drammock made me question whether my approach was correct.  I had trouble running the tests locally to test unfortunately. I think it is probably better to not include the fix in the next release, to avoid this open merge request blocking the next release.


Modify cookie[]= to take a hash of extra options

Based on pull request #66, with the suggested syntax changes. Doesn't work using cookie[:key] = 'value', :option => 'asdf' for whatever reason, so you need to wrap the extra hash in {}'s.
Also, on implementation: when []=(key, value) gets called with a hash, value becomes an array containing both the bare value, as well as the hash. Just one of quirky Ruby things I guess.

I'm with you, we probably shouldn't implement any more api that recommends using cookie outside of response.set_cookie.
Closing this until we can decide on a better API. Thanks!


Added showAll.

Added showAll using down() for all elements.
Rewrote hideAll to use up() for all elements.
Like in #8460 purposed by @crbranch the hideAll method should use the up() method.
Also showAll() could be useful.

it's a feature purpose, if I undestand correctly ?
It should be better to merge it in v6.3 than develop

Agree with @ncoden.  Please resubmit against v6.3.  Also please add a unit test for this case in test/javascript/components/accordionMenu.js.  You can use the tests in test/javascript/components/toggler.js as an example of how these can be structured. See: https://github.com/zurb/foundation-sites/blob/develop/test/javascript/components/toggler.js
Thanks!

Well this actually solves an issue with the ARIA attributes when using hideAll(), because as mentioned in #8460 the current implementation of hideAll() doesn't use up() which causes the ARIA attributes to not match the element state.
I can add this PR to v6.3 if you want, though.

I'm happy to have the hideAll fix for the patch release, but we want to be very careful to only have api changes at minor releases.  I'll leave it up to you if you want to split one to develop and one to v6.3 or just send them all to v6.3


Auth errors not returned when creating ACLs

I'm using the clusteradmin and the CreateACL method. When the service is not authorized to perform such operation, no error is returned but error logs in the brokers suggest that the service is not authorized. Is that to be expected?

Unfortunately we need the same for DescribeAcls and DeleteAcls.


Metadata file does not exist: /etc/puppet/environments/production/metadata.json

With this really basic Puppetfile, I'm getting the error "Metadata file does not exist" when I run:
cd /etc/puppet/environments/production ; librarian-puppet install --destructive
I'm running Ubuntu 14.04, Puppet 3.7.5, Ruby 1.9.3p484.
Can I safely ignore this error? What am I doing wrong?
#!/usr/bin/env ruby
#^syntax detection

forge "https://forgeapi.puppetlabs.com"

# use dependencies defined in metadata.json
metadata

mod 'puppetlabs-stdlib', '4.6.0'
mod 'puppetlabs-apache', '1.4.1'

you are using metadata which says "use dependencies defined in metadata.json" and you don't have a metadata.json?

@carlossg I was confused by the documentation for metadata, I thought that this was to tell librarian-puppet to read the metadata.json files inside of the modules instead of the Modulefile.
What is the actual usecase for the metadata option? Is using it like an alternative to listing the modules in the Puppetfile?

correct, so you don't need to duplicate info


Homework 2

Drift Video Link:- https://video.drift.com/v/abdEeTvNIwWl8cCsCuQNEmio8iXK4lDLMUrw2Dzu3sc/

Metric
Value

alert_status
:white_check_mark: OK

bugs
0

code_smells
6

reliability_rating
A (0 Bugs)Note: A being best, E being worst

security_rating
A (0 Vulnerabilities)Note: A being best, E being worst

vulnerabilities
0

Metric
Value

alert_status
:white_check_mark: OK

bugs
0

code_smells
0

reliability_rating
A (0 Bugs)Note: A being best, E being worst

security_rating
A (0 Vulnerabilities)Note: A being best, E being worst

vulnerabilities
0

Metric
Value

alert_status
:white_check_mark: OK

bugs
0

code_smells
6

reliability_rating
A (0 Bugs)Note: A being best, E being worst

security_rating
A (0 Vulnerabilities)Note: A being best, E being worst

vulnerabilities
0


WIP: Store thread id on state machine level for connection

Signed-off-by: Miroslav Kovar<EMAIL_ADDRESS>

Codecov Report

Merging #375 (f36c237) into refactor/state-machines (a595002) will decrease coverage by 43.92%.
The diff coverage is n/a.

@@                     Coverage Diff                      @@
##           refactor/state-machines     #375       +/-   ##
============================================================
- Coverage                    66.44%   22.51%   -43.93%
============================================================
  Files                          155       18      -137
  Lines                        14580     1128    -13452
  Branches                      2881      284     -2597
============================================================
- Hits                          9687      254     -9433
+ Misses                        2555      799     -1756
+ Partials                      2338       75     -2263

Flag
Coverage Δ

integration-aries-vcx
?

unittests-agency-client
22.51% <ø> (ø)

unittests-aries-vcx
?

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

agency_client/src/agency_client.rs
0.00% <0.00%> (-9.10%)
:arrow_down:

agency_client/src/get_message.rs
0.00% <0.00%> (-3.25%)
:arrow_down:

agency_client/src/payload.rs
0.00% <0.00%> (ø)

aries_vcx/src/handlers/connection/connection.rs

...x/src/handlers/connection/invitee/state_machine.rs

...x/src/handlers/connection/inviter/state_machine.rs

aries_vcx/src/messages/a2a/mod.rs

aries_vcx/src/messages/connection/request.rs

aries_vcx/src/messages/thread.rs

aries_vcx/src/utils/serialization.rs

... and 130 more

Continue to review full report at Codecov.

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


WIP Add run dashboard

creating a dashboard giving an overview about the test running watch different crs, htop and logs and pods
TODO: customize layout, create a command that can detect when crs moved to target cluster so it use the kubeconfig and keep watching, find the needed pods name and show their logs, add parameter to get the Jenkins test logs and streaming them

!!!! Please do not merge this PR. Changing default branch to main. !!!!!

Branch renaming completed, your PR is automatically updated to point towards main branch .

let's rebase it and I can continue the review @mboukhalfa

/markdownlint

/retest


typo in column name

@williamadba : Thanks for your contribution! The author(s) have been notified to review your proposed change.

Looks good. Thanks for this fix @williamadba


Supported dynamic set variables when proc given.

Let me suggest evaluating procs function when proc is given to a set value.
■Use case example
set :lock_file_name , proc { @options[:task] } # => the task name is set
job_type :runner, "setlock -n /tmp/:lock_file_name bin/rails runner -e :environment ':task' :output"
every :day, at: '11am' do
  runner "TestBatch.run" # => lock_file_name is the same as the task name
end
every :day, at: '11am' do
  runner "TestBatch.run( frequency: :daily )", lock_file_name: "custom_lock_daily" #=> lock_file_name can be over written as the custom name
end

■Why needed?
job_type :runner, "setlock -n /tmp/:task bin/rails runner -e :environment ':task' :output"
is basically good, but not worked in case the task name contains white margin ex: TestBatch.run( frequency: :daily ).
I considered the proc evaluating mechanism is required in order to achieve such issue.
What do you think of this request?

In my case, I want to use this feature for lock_file_name of setlock (to protect duplicated execution).
Lock file can't be shared with batches, so I want to avoid the same lock file name could be set.
I'm considering the protection method for such cases.

I was looking for exactly this feature, and I would love for this to be merged and released.


Adding a Swift MessageFactory for performance

Hiya guys!
Blackfire comparison: https://blackfire.io/profiles/compare/0ab8c333-3272-4af0-8b57-ff0b4e3478de/graph
Prior to this, in order for the main logger to be instantiated, if you had a swiftmailer handler, ultimately a single Swift_Message would be created, even if you didn't need it. That sounds minor, but due to Swift's
autoloading, it required quite a few extra classes, which added a small amount of extra memory (~1MB) and extra CPU due to the auto-loader (~10-20ms).
This keeps BC, only renaming a service that was private anyways.
Cheers!

Seems good to me, @stof any feedback?

Rebased and tests passing. I think this should be safe - it only changes a non-public service, and is doing so on the master branch anyways.
Thanks!

Alright then, thanks

@Seldaek aw shucks, you're the best :)


Update default anatomy source

Change the default anatomy from phenoscape-ext-simple.obo  to:
http://purl.obolibrary.org/obo/uberon/ext.obo

Fixed by faab24edbdd199783966e0886e37a1f5ccb6a150.


move CI tests to test:ci

Right now CI uses test and I've started sprinkling test:local throughout for ease of testing locally (env var defaults, etc.). We should flip this and use pnpm test for local usages and move CI to use pnpm test:ci.
For most cases where they're ~the same thing, we can just map pnpm test:ci to pnpm test.

Hello, only that would be the change? test to test:ci nothing else?

Hello, only that would be the change? test to test:ci nothing else?

Steps that I would take:

add test:ci script to each package, default it to pnpm run test (so same behavior as before)
any using test:local should rename test->test:ci and test:local->test
update CI config to use test:ci


DynamoDatastore: batch reads

very ugly compared to the unbatched code, but potentially a lot faster.
One point of possible refinement is the busy loop when dynamo returns a partial response in getChunksBatch.
This could use an exponential back-off or be futurized.

I was going to say that partial responses seem unlikely at the sizes we're working with, but I suppose they could happen if many clients were trying to access the chunks table concurrently & we hit a provisioning limit....
Exponential backoff is probably a decent idea, but that seems like a job for a separate PR that futurizes the blocking calls.
As unfortunate as the batch API is, I'm cool with using it if it works.  For reads anyway; if the batch writes are too complex maybe we should just avoid them for now

the batch writes may be paritally successful, returning an ugly jumble indicating which items weren't written.
This requires failure recovery, with some exponential back off etc -- and this is better suited to a background thread doing queued writes.
I made an issue -  #61

Closing and parking this for now.


Product query extension is not executed for custom product model

It looks like the first time the product query gets constructed is via the PageMetadata call in head.html on the CIF page component. The PageMetadata makes an adaptTo call to adapt the request to a product model which doesn't take in account the custom product model (which has the product query hook) resulting in AEM caching an incorrect product object. The subsequent call from the product component on the page doesn't result in a new product query call being made (which is correct from a performance perspective as we don't want to fetch the "same" product twice).
One way that I managed to get around this is to create a custom PageMetadata Sling model and overload the head.html HTL script to use it instead of the core one.
Expected Behaviour
New product attributes defined via a product query hook are available in the product component.
Actual Behaviour
Calls to get methods for new attributes result in a NullPointerException as attributes are not available in the query response due to the query hook not being included.
Reproduce Scenario (including but not limited to)
Steps to Reproduce

Create a custom Product Model and add an extend* call in the @PostConstruct method
Add a get* method for the additional attributes
Extend product.html and include a call to any of the get methods

Platform and Version
CIF core components: 1.7.0
Magento Graphql: 6.0.0-magento235
AEM: Cloud Service SDK 2021.1.4830.20210128T075814Z-201217
Sample Code that illustrates the problem
Logs taken while reproducing problem
Caused by: java.lang.RuntimeException: java.lang.NullPointerException
at com.shopify.graphql.support.AbstractResponse.lambda$converterWrapper$0(AbstractResponse.java:83) [com.adobe.commerce.cif.magento-graphql:6.0.0.magento235]
at com.shopify.graphql.support.AbstractResponse.getAs(AbstractResponse.java:93) [com.adobe.commerce.cif.magento-graphql:6.0.0.magento235]
at com.shopify.graphql.support.AbstractResponse.getAsString(AbstractResponse.java:106) [com.adobe.commerce.cif.magento-graphql:6.0.0.magento235]
at com.CUSTOMER.aem.brands.core.models.commerce.CustomProductImpl.getMethod(CustomProductImpl.java:243) [breville-aem-brands.core:1.0.0.SNAPSHOT]
... 444 common frames omitted
Caused by: java.lang.NullPointerException: null
at com.shopify.graphql.support.AbstractResponse.jsonAsString(AbstractResponse.java:197) [com.adobe.commerce.cif.magento-graphql:6.0.0.magento235]
at com.shopify.graphql.support.AbstractResponse.lambda$converterWrapper$0(AbstractResponse.java:81) [com.adobe.commerce.cif.magento-graphql:6.0.0.magento235]
... 447 common frames omitted
25.02.2021 15:38:11.791 INFO [[0:0:0:

@znikolovski any updates on this?

Hey @mhaack sorry for the late reply - this is now resolved.

@znikolovski / @cjelger , are you sure this issue is fixed? I've been trying to extend the product functionality using the delegate pattern as suggested here. But I was still seeing the same issue while using core cif components version 2.3.1, which has the change for this ticket.
After going through the pull request the only way I could see for the for it to load the custom query for the new productImpl class was to override the pagemetadata class and use my new product  interface to pass to the model factory on this line:
https://github.com/adobe/aem-core-cif-components/blob/1be13d82888ed09d399cd07c3f31f36cabf27470/bundles/core/src/main/java/com/adobe/cq/commerce/core/components/internal/models/v1/page/PageMetadataImpl.java#L71
Without this I was just seeing the same behavior as before.

@Lawrence-M-Reynolds yes this should be fixed, custom models extending the core models should work.
What is the AEM & CIF version you are using?
Can you also share the custom model class? Especially the annotations of the class?

Thanks for responding @mhaack .
The versions are:
AEM quickstart jar version: 2021.8.5788.20210830T213613Z-210800
cif: Version 2<IP_ADDRESS>
I've attached the productimpl.java aswell as the PageMetadataImpl.java I had to create and reference in the page head template.
CustomModels.zip
Maybe you can see something I've missed..

Thanks for sharing the code. What are the extension you do in the PageMetadataImpl.java I could not spot any extra methods? If you don't add extra stuff here you don't need it. Also yours looks little older, which version of CIF Core Components do you have?
For the product model you class annotations is not 100% and missing there "original" CIF core product interface.
The annotation should look like
@Model(adaptables = SlingHttpServletRequest.class, adapters = { Product.class, CustomProductModel.class}, resourceType = CustomProductModelImpl.RESOURCE_TYPE)

Where Product.class is the CIF Core Component interface and CustomProductModel.class is your extended interface. With the class will be correctly picked up by our CIF core PageMetadataImpl.java and instantiated.

Hi @mhaack
You pointed me in the right direction and I've managed to find out what the problem was. In this tutorial they only set the custom model interface "MyProductTeaser" in the adaptable annotation. That was how I was doing it so it wasn't being picked up  in the PageMetadataImpl.java. But it is now that I've included the core interface as well:
@Model(adaptables = SlingHttpServletRequest.class,         adapters = { Product.class, com.adobe.cq.commerce.core.components.models.product.Product.class},         resourceType = ProductImpl.RESOURCE_TYPE )
By the way, I named my interface and implementation class as "Product" and "ProductImpl" as well which is where the confusion was. And I didn't need to make any extensions to the PageMetadataImpl.java class, I was just using the new interface I'd created to pass to the model factory. It would probably have made sense to name it slightly different.
It would probably be a good idea to update the tutorial so that the core Product model interface is included as an adaptable for the custom model.
But thanks very much for your help @mhaack , it's made it much clearer to me now.

Cool to hear you could fix the issue.
The original interface is only needed for components on the PDP or PLP, because here we have the page meta data which instantiates the Sling model already by using the original interface. That happens before your component gets called. You component then already gets the cache impl. and it is not instantiated a second time. Creating the model a second time cloud lead to the query a second time, which we want to avoid. We use Sling model caching here.
ForMyProductTeaser example this does not apply, hence here the tutorial is correct. But we should add this hint to the docs pages.

Good catch @Lawrence-M-Reynolds you are right we are not following the recommendations here. The caching of the model was introduced later this is an oversight. We will fix it.

Actually I was aware of the recommendation, but the main issue was fixed in sling models 1.4.10. Although the website says it may create issues, we've never had any in the past few years. Also note that this recommendation is pretty old and there have been quite a few changes in the sling caching since then, so I'm not 100% sure this still applies.


Current Version not available via NPM

I would really need the baseURL feature of 1.0.4.
As of now the latest release via npm – and thus the latest release that can be installed via gitbook install is 1.0.2.
Could you please release the 1.0.4 via npm?
Thanks!

Thanks!!


Import previously built map

Hey @TixiaoShan,
I see that it is possible to export a built map.
Is it possible to re-import and localise into a previously built map?
Cheers,
Harley

@harleypritchard  @TixiaoShan , can I check if you manage to export a built map and reimport to localise?

@harleypritchard  @TixiaoShan , can I check if you manage to export a built map and reimport to localise?


Email support

Does it send email notifications?

@mancharagopan The security plugin does not support sending email notification.
Although, you can use the  alerting plugin along with security plugin to send notifications using webhooks. You can take a look at following docs to see this helps:

https://opendistro.github.io/for-elasticsearch-docs/docs/alerting/
https://aws.amazon.com/blogs/opensource/open-distro-for-elasticsearch-alert-security-events/

Interestingly, the Alerting webpage (https://opendistro.github.io/for-elasticsearch/features/alerting.html) shows SMTP notification as the screenshot/showcase image...
😆

Please reopen if you still have questions.


Copying metastore only

Is it possible to replicate metastore only?
Is it possible to copy metadata between different Hive metastore versions?

It's possible to replicate metastore only, but you'll need to made some code changes to DestinationObjectFactory.
Yes, it's possible to copy metadata between different Hive metastore versions.


MedPerf support for embedded MLCube config files

For the FeTS challenge, it would be ideal if we can support MLCube images with embedded parameters.yaml and mlcube.yaml files. This probably requires making these fields optional and having the client assume the files are embedded if they are not specified in the DB.

This requires some features which I believe are still experimental from MLCube. @davidjurado can you confirm?
Additionally, we need to discuss how the server changes because of this.
Are we planning on supporting both current method as well as embbeded MLCube config?

This is still an open issue, I think. @davidjurado  and I discussed that we could (for the FeTS challenge) also generate mlcube.yamls manually by inserting the correct image name into the template yaml file provided to the competitors. However, I don't know how this would affect the interaction with MedPerf, so I think we need to continue this discussion.

closing as outdated


Tactile sensor rework

Currently the tactile sensor display is a little vague. We should display some information about the object it that has been detected eg. "stone", "mushroom" etc.

duplicate


Labeler Action fails on every PR event

Pre-requisites

[x] I looked through both open and closed issues and did not find an existing bug.

Describe the bug

Something is broken with our labeler Action
To Reproduce

Steps to reproduce the behavior:

Make a PR
Check the logs for the Labeler Action

The extension for the labeler file is wrong. It needs to be yml instead of yaml


Grab Hand Top of Cell (to be removed) - Native Notebooks Editor

Remove hand cursor from top of code cell that indicates ability to drag cells.

Already fixed in b873dc659aa5e11c28274eb209dbc20ed8de6f45


LinearGradient Stop component is setup in a way that doesn't allow for animation.

it seems that the <Stop />, is just a dummy component that wouldn't allow for (at least UI thread) animations.

Same here, did you solve it?

@jaraujocds No, I have not.

I believe it is the same problem as #1695 so I will close it to keep the discussion in one place. Feel free to comment here if I am wrong and we can reopen it then.


s_client.pod: Fix grammar in NOTES section.

Checklist

[ ] documentation is added or updated
[ ] tests are added or updated

The 1_1_1 variant of https://github.com/openssl/openssl/pull/9421
The source file that this small change was in in master has changed from .pod to .in

This PR is in a state where it requires action by @openssl/committers but the last update was 242 days ago

This change was already merged to master

This pull request is ready to merge

Thanks Pauli. Merged to 111


Bypass authentication check for /_up

Add config variable chttpd.require_valid_user_except_for_up defaulting
to false.
This will allow various automated health check systems to hit /_up
without having to provide a username/password pair when the
chttpd.require_valid_user config setting is true. Apparently, many
of these health check providers do not even allow supplying creds
for such a purpose...
Closes #823

Overview

Testing recommendations

Related Issues or Pull Requests

Checklist

[ ] Code is written and works correctly
[ ] Changes are covered by tests
[ ] Any new configurable parameters are documented in rel/overlay/etc/default.ini
[ ] A PR for documentation changes has been made in https://github.com/apache/couchdb-documentation

supersedes #856
@rnewson how do you feel bout his approach?

I usually squash those on merge to master.

afaict, the only merge commit that made it recently is from @kocolosk


\r in table cell content brakes the table

Probably not a big deal but still
docx.table([["te\rst", "test", "te\nst"]]) produces

Truthfully, I've been on *nix systems so long now that I haven't seen a carriage return in the wild in a really long time.  How would you propose Caracal handle CRs?  Strip them?  Convert them to line feeds?  Something else?
Also, I thought Windows always followed a CR with a LF?  Does MSWord have the same rendering issue if you supply the string "te\r\nst"?
(Note: I'm assuming that the issue here is how MSWord renders the Caracal document's markup when the markup contains a lone CR in a table cell, not that Caracal is writing crazy OOXML when it encounters a carriage return.)

\r\n produces the same behaviour.
I don't know should the library do something about it as the user can easily filter his data the way he wants (probably just remove \r).
Mostly I wanted to notify the people about it because I've encountered the following example and was really confused:
docx.table([["test", "te\r\nst", "test"]])


changes:

fix to show the value with more decimals for earned.

https://github.com/omgnetwork/optimism/issues/504

https://github.com/omgnetwork/optimism/pull/496


Initialized empty Collection is not populated

In our project, we work with generated classes that contain List properties.
At first this code was generated from WSDL's, and the List properties would not be initialized in the generated code.
protected List<SomeType> list;
However, we are now generating the code from an OpenAPI spec and the List properties are already initialized.
private List<SomeType> list = new ArrayList<>();
This causes an issue as these lists are not populated because they are not null anymore.
I've already created a test and a fix, I'll open a pull request in a minute.

Thank you for opening this issue. However, as mentioned by @msievers , you can use the overrideDefaultInitialization, which is designed specifically for that case. Here is the section in the docs that explains that parameter with an example: https://github.com/j-easy/easy-random/wiki/Randomization-parameters#override-default-initialization.
I am closing this issue and the corresponding PRs as I believe the solution is already implemented with the overrideDefaultInitialization parameter. Thank you for your time anyway.
@msievers Thank you for the follow up!


Translate values are not calculated properly (svg zoom)

I have a svg on a page which displays an image. The svg has a zoom callback to scale and translate the image but when I try to pan across the x and y values for the transform event are not calculated properly (I observed this when the scale value is less than 1, not sure if it affects other values).
It returned values as high as translate(-7319162427.508864,-250872513.49670592) scale(0.2871745887492586)
I created an observable to demonstrate the bug. https://observablehq.com/@harshsharma12/zoom-svg
To reproduce -

Zoom out using the wheel (easier to see if scale < 0.4)
The longer distance you pan across by keeping the mouse button down, the higher the translation values (absolute values) are.

I've sent you a suggestion to fix it.

Thank you so much @Fil. That fixed my issue.
Posting it here for more visibility

“the zoom behavior should be set on svg, and the transform applied to its svg:g (zoom_node) descendant”

I have not updated the original observable in case reference is required in the future. Observable with the fix can be found here - https://observablehq.com/@harshsharma12/zoom-bug-svg-fixed


Rename Blacklist and Whitelist to be self explanatory

I originally started this exercise because I believe the terms blacklist and whitelist have racial connotations that are inappropriate to be used. But while trying to find new names I found that SuppressedFalsePositive and TemporarySuppressedIssues actually describe much more accurately than the previous values.
This PR would currently be a breaking change because existing baseline files would no longer work. If desired I think it would be possible to build in backward compatibility. However, I think the fact that this is a breaking change is a good thing because it will raise more awareness about the fact that blacklist and whitelist are really terms that we should all stop using.
Edit:
Updated the PR to not be a breaking change anymore. Existing baseline files with <Blacklst> and <Whitelist> tags will still be supported, but newly generated baselines will use SuppressedFalsePositive and TemporarySuppressedIssues respectively.

I would encourage you to reconsider!
There is wider precedent for this, ietf has a great write-up here: https://tools.ietf.org/id/draft-knodel-terminology-00.html#rfc.section.1.2
Also:
1 - blacklist/whitelist can have racial connotations with "white good black bad" semantics
2 - they have no meaning to non-native speakers, as they are english-only colloquialisms

I understand the potential connotations of these words. I explicitly didn't negate that.
I said that changes like this have an impact on users, clients and 3rd party contributors with custom domain-specific detekt extensions. I think that compatibility and long term support are very important for static code analyzers in order to foster user acceptance. Don't forget the users in this process.

Thanks for the feedback. As mentioned in the OP it is quite easy to add backward compatibility. I just pushed a change that does that.
Existing baseline files that contain the XML tags Whitelist and Blacklist are still supported and will be parsed properly while the new values are also supported and the tasks to write the baseline uses the new tags.

I still think the names TemporarySuppressedIssues and SuppressedFalsePositives are weird. Why is a whitelist a temporary suppressed issue and blacklist a suppressed false positive? The names would need an explanation in a separate section. I could live with allow and deny list from the user perspective.

In the docs it says this

The intention of a whitelist is that only new code smells are printed on further analysis. The blacklist can be used to write down false positive detections (instead of suppressing them and pollute your code base).

I agree that TemporarySuppressedIssues might not be the right term, but the goal of those is to temporarily suppress detekt issues that are found when first adding detekt. Those issues should be considered tech debt and eventually cleaned up, hence temporary.
This actually show that blacklist and whitelist might were bad names to begin with. a whitelist and a blacklist are opposites, one is traditionally used to include things and the other to exclude. In Detekt they are functionally doing the same thing.

@remcomokveld thanks for pointing that out. What do you think of allow and deny list? Do you have other terms/words in your mind?

Hi,
thanks for the discussion here.
My first thought was "good change for a 2.0 release" because of breaking change
but implementing this in a backwards compatible way should be safe for a minor release.
@schalkms @remcomokveld @ZacSweers the NCSC uses the terms allow and deny lists as @schalkms mentioned - https://inews.co.uk/news/government-cyber-experts-blacklist-whitelist-racism-fears-2840970
Open question:
Should we automatically migrate the baselines to the new names or if the user used the old names it should stay old until 2.0 so this does not cause an additional git commit for them?

They would both be allow because in both lists, if an issue is added there it will allow detekt to succeed even though the issue is there. The only difference between the two lists is communicating reason to developers why the issues are ignored.
The only place where these lists are read is here
https://github.com/detekt/detekt/blob/98b89f4f1df4c05186de588d68d17904d2861874/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/baseline/Baseline.kt#L13

Should we automatically migrate the baselines to the new names or if the user used the old names it should stay old until 2.0 so this does not cause an additional git commit for them?

I'm voting for option 2 here.

I agree with option 2 as well. The only thing that might be nice to add to this is a warning message when deprecated <Whitelist> and <Blacklist> tags are being used. That would give users more of a heads up that a breaking change will happen in 2.0 and already start migrating.

Thanks for the change @remcomokveld
I also think that this is the opportunity to remove some of the confusion around the current baseline. As you already mentioned, <Whitelist> and <Blacklist> are "opposite" terms while they are both used to let detekt ignore a specific issue report.
Given that when running detektBaseline the former <Whitelist> is populated, maybe we can rename them to something like:

Whitelist -> CurrentIssues or DiscoveredIssue to convey the meaning that those issue have been discovered by Detekt and stored inside the baseline. This will suggest the user that they should slowly clean the CurrentIssue list.

Blacklist -> ManuallySuppressedIssues to convey the meaning that those issues have been intentionally suppressed by the user.

I would argue against using Temporary in any of the two as having time related terminology here is not a great fit (also there is nothing more permanent than a temporary solution).
As for the SuppressedFalsePositive (aka the Whitelist), technically you could use it to suppress a failure that is not a detekt false positive. The rule might just behave correctly but your specific code imposes you to suppress it for some reason, and I don't consider that a false positive.

Thanks for the change @remcomokveld
I also think that this is the opportunity to remove some of the confusion around the current baseline, and be more inclusive. As you already mentioned, <Whitelist> and <Blacklist> are "opposite" terms while they are both used to let detekt ignore a specific issue report.
Given that when running detektBaseline the former <Whitelist> is populated, maybe we can rename them to something like:

Whitelist -> CurrentIssues or DiscoveredIssue to convey the meaning that those issue have been discovered by Detekt and stored inside the baseline. This will suggest the user that they should slowly clean the CurrentIssue list.
Blacklist -> ManuallySuppressedIssues to convey the meaning that those issues have been intentionally suppressed by the user.

I would argue against using Temporary in any of the two as having time related terminology here is not a great fit (also there is nothing more permanent than a temporary solution).
As for the SuppressedFalsePositive (aka the Whitelist), technically you could use it to suppress a failure that is not a detekt false positive. The rule might just behave correctly but your specific code imposes you to suppress it for some reason, and I don't consider that a false positive.

I like all three names. Lets go with CurrentIssues and ManuallySuppressedIssues?
And when we are at renaming maybe change SmellBaseline to just Baseline (ofc can be another PR)?

Should we automatically migrate the baselines to the new names or if the user used the old names it should stay old until 2.0 so this does not cause an additional git commit for them?

I vote for option 2 here.

I vote option 1. We will generate a bit of noise in git but all those users will have their baselines migrated so once they move to 2.0 it will just work.

Should we automatically migrate the baselines to the new names or if the user used the old names it should stay old until 2.0 so this does not cause an additional git commit for them?

I vote for option 2 here.

I vote option 1. We will generate a bit of noise in git but all those users will have their baselines migrated so once they move to 2.0 it will just work.
And thanks for the PR!

Hm, well to be honest. If the user updates the detekt version he already has to create one commit.
Including baseline tag renamings should be fine.
As I now realize this will only happen for gradle detektBaseline not gradle detekt so it is okay.

@arturbosch any clue what is causing the checks to fail now? I'm not seeing what exactly went wrong

@arturbosch any clue what is causing the checks to fail now? I'm not seeing what exactly went wrong

I have not the slightest clue :(.
I've restarted the job and it still fails so it might be reproducible.
Could you add --stacktrace to ./gradlew verifyGeneratorOutput in .github/workflows/pre-merge.yaml please?

I said that changes like this have an impact on users, clients and 3rd party contributors with custom domain-specific detekt extensions. I think that compatibility and long term support are very important for static code analyzers in order to foster user acceptance. Don't forget the users in this process.

I second this. If tomorrow will bring another set of words considered inappropriate in the current momentum, would this mean all project should ignore their users and just blindly go on with whatever is demanded?
Here's a good answer from an opensource project maintainer on a similar issue.

@dimsuz I recognize the point you're trying to make regarding churn and making invasive changes for what you feel may be trivial changes, and I appreciate your effort to engage in this honestly and from a position of pragmatism. If this were a significant breaking change, it would be valid to suggest waiting until a major release to change. If these came frequently, it could be valid to suggest being tactical about what changes are meaningful. In this specific PR however, there are no breaking changes. It is a free swing at doing something that is meaningful to a nontrivial number of users that do face endemic terminology like this every day.
If social progress were as slippery of a slope as you're suggesting, we'd be in a much better place today than we are. That is not the case though, not yet. In light of that, we should aspire to embrace opportunities progress in all its forms, whenever and if ever they arrive on our doorstep.

Blacklist and whitelist words have nothing to do with racism. Or any other social problems. It is just words. Pretty understandable from professional point of view. Without any additional meaning.
Any change like that would be problematic at  very least. It solves absolutely no problem and makes no sense at all.

Pretty understandable from professional point of view.
I think it's been demonstrated in this thread that the meanings of blacklist and whitelist are not clear in detekt, and that the proposed names of "ManuallySuppressedIssues" and "CurrentIssues" capture the meanings more clearly.

Pretty understandable from professional point of view.

I think it's been demonstrated in this thread that the meanings of blacklist and whitelist are not clear in detekt, and that the proposed names of "ManuallySuppressedIssues" and "CurrentIssues" capture the meanings more clearly.

Generally, if community decides, that these words are more understandable - no objections from my side. I’m against “these words are racists“ motivation.

If everybody feels that sensitive to words they write once and forget and it's not a major breaking change for users then at least we need to find a good replacements. As I've already noted "CurrentIssues" is not a suitable one imo. I'm currently failing to come up with a good one though, maybe someone would?
By the way, are you sure that these are non-breaking changes? If I have a baseline.xml and update to a newer detekt version, it seems like old tag names won't be picked up anymore.

In the parsing logic the old and the new tags are treated as synonyms.
https://github.com/detekt/detekt/blob/d37b9d84454ad3db89f94b2ec4ffbdf444cbe378/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/baseline/BaselineHandler.kt#L17-L19
There was also a test added which verifies that the old baseline format still parses correctly here
https://github.com/detekt/detekt/blob/d37b9d84454ad3db89f94b2ec4ffbdf444cbe378/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/baseline/BaselineFormatSpec.kt#L42-L51

What about blockList, allowList?

What about blockList, allowList?

Both lists are "allowList". The only difference between them is that the values in CurrentIssues are discarted and generated again each time you run --create-baseline and the ones in ManuallySuppressedIssues are keeped.

Based on the reactions this seems to be a controversial change.
What can we do about that? Which improvements do people suggest? What does the community think?

Based on the reactions this seems to be a controversial change.
What can we do about that? Which improvements do people suggest? What does the community think?

Judging by the amount of comments and emojis I see a clear trend towards changing these tags.
Imo we now have much better descriptive names as before (also when looking back on many questions I got about the difference between what to write where in the baseline file).
I want to prepare a 1.10.0-RC1 release tonight. So if most are happy with CurrentIssues, we can ship this PR too.

@remcomokveld You can start repainting The White House because it's a symbol of white supremacy.

@schalkms anything else you see missing in this PR to get it merged?

There's a merge conflict. Documentation has been updated as far as I can see.


docker volume does not track plugins over a restart

Steps to reproduce; you'll need a volume plugin to test.

docker volume create -d myplugin --name test
docker volume ls
docker run --name foo -it -v test:/mnt ubuntu bash
docker inspect foo # note that the driver is set to local, not myplugin
restart docker
docker volume ls # the driver should say local now
docker rm foo # hangs trying to delete a volume that doesn't exist

/cc @cpuguy83 @shaleman @jainvipin @srust

Hi!
Please read this important information about creating issues.
If you are reporting a new issue, make sure that we do not have any duplicates already open. You can ensure this by searching the issue list for this repository. If there is a duplicate, please close your issue and add a comment to the existing issue instead.
If you suspect your issue is a bug, please edit your issue description to include the BUG REPORT INFORMATION shown below. If you fail to provide this information within 7 days, we cannot debug your issue and will close it. We will, however, reopen it if you later provide the information.
This is an automated, informational response.
Thank you.
For more information about reporting issues, see https://github.com/docker/docker/blob/master/CONTRIBUTING.md#reporting-other-issues

BUG REPORT INFORMATION
Use the commands below to provide key information from your environment:
docker version:
docker info:
uname -a:
Provide additional environment details (AWS, VirtualBox, physical, etc.):
List the steps to reproduce the issue:
1.
2.
3.
Describe the results you received:
Describe the results you expected:
Provide additional info you think is important:
----------END REPORT ---------
#ENEEDMOREINFO

Also reproduced in: https://gist.github.com/srust/88b53f1e85814fdb2662

Just tested this, and confirmed

fixed in #15999


adds sdk for tf-operator from OpenAPI Spec

Addresses (partially): https://github.com/kubeflow/tf-operator/issues/167
I'll follow-up with another PR to create the actual client sdk.
Similar to what Argo has: https://github.com/argoproj/argo/tree/master/hack/gen-openapi-spec and @yuzisun did for KFServing.
/cc @jlewi @richardsliu @johnugeorge

This change is

Coverage remained the same at 76.744% when pulling f83c1562e3b52b7e45c94a2eb48f44de4528425d on swiftdiaries:tf-operator-client into fd76deec5cf9c1305a92b9e4c699b0379bcb5456 on kubeflow:master.

@swiftdiaries Can you please add the same to pytorch-operator ?

@johnugeorge ok will do it in a while :)

Hey @swiftdiaries,
Something went wrong with the build.
TravisCI finished with status errored, which means the build failed because of something unrelated to the tests, such as a problem with a dependency or the build process itself.
View build log
TravisBuddy Request Identifier: dd3cf2c0-9395-11e9-bc3e-3d3ede91b564

I'm keeping both versions. Let me know if you want it removed :)
On Thu, Jun 20, 2019 at 14:01 Richard Liu<EMAIL_ADDRESS>wrote:

@richardsliu commented on this pull request.
In pkg/apis/tensorflow/v1beta2/swagger.json
https://github.com/kubeflow/tf-operator/pull/1027#discussion_r296005099:

@@ -0,0 +1,6436 @@
+{

Does this file still need to be changed?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/kubeflow/tf-operator/pull/1027?email_source=notifications&email_token=AFPVDH5GZCDEQ6FAJZS36GLP3PV4BA5CNFSM4HZONMVKYY3PNVWWK3TUL52HS4DFWFIHK3DMKJSXC5LFON2FEZLWNFSXPKTDN5WW2ZLOORPWSZGOB4GWUBY#pullrequestreview-252537351,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AFPVDH5BCRCF46L7FEGTZ43P3PV4BANCNFSM4HZONMVA
.

/test kubeflow-tf-operator-presubmit

/lgtm

/retest

@swiftdiaries Great contribution!  Seems there are some excrescent files, such as sdk/docs/IoK8sApiCoreV1Affinity.md , could you please confirm is that needed for the SDK?

@richardsliu @johnugeorge ; I removed myself as a reviewer and added you both as reviewers. Can one of you take the lead on reviewing and approving this please?

/retest

lint and some other tests are failed

@swiftdiaries We no need to to build k8s api since there are already be there https://github.com/kubernetes-client/python. You just need to set importMappings in the swagger config file. See what did in the KFServing for details :-). https://github.com/kubeflow/kfserving/pull/218

@swiftdiaries Would you mind to close the PR, this has been implemented. Thanks.


z-index for inline fullscreen player

the function VG_UTILS.getZIndex uses element.style.zIndex, which only count inline styles, z-index added by css will be ignored.
Is this for performance reason?
Maybe expose a configurable z-index for fullscreen will be better?

This is a bug, it should count also CSS styles.
It should be fixed in the next release.


BUG ASAP - I was able to get the following errors in level 1.2. It made it so that I could not take hits from enemies.

IndexOutOfRangeException: Array index is out of range.
PowerUpUnderlay.Add () (at Assets/Scripts/PowerUpUnderlay.cs:48)
ArchetypePlayer.OnSpellEvent (.SpellEvent e) (at Assets/Scripts/Archetypes/ArchetypePlayer.cs:348)
Events+c__AnonStorey0`1[SpellEvent].<>m__0 (.GameEvent e) (at Assets/Scripts/EventHandling/Events.cs:35)
Events.Raise (.GameEvent e) (at Assets/Scripts/EventHandling/Events.cs:73)
ArchetypeSpell.SpellLevelAdjusted (Boolean full) (at Assets/Scripts/Archetypes/ArchetypeSpell.cs:92)
UnityEngine.GameObject:SendMessage(String, Object, SendMessageOptions)
IndexOutOfRangeException: Array index is out of range.
PowerUpUnderlay.Subtract () (at Assets/Scripts/PowerUpUnderlay.cs:65)
ArchetypePlayer+c__Iterator0.MoveNext () (at Assets/Scripts/Archetypes/ArchetypePlayer.cs:266)
UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress) (at /Users/builduser/buildslave/unity/build/Runtime/Export/Coroutines.cs:17)
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
ArchetypePlayer:BeginPlayerHit(Boolean, String) (at Assets/Scripts/Archetypes/ArchetypePlayer.cs:260)
ArchetypeMove:OnTriggerEnter(Collider) (at Assets/Scripts/Archetypes/ArchetypeMove.cs:341)

@wadek2 cannot reproduce - when does this happen, after collecting a soap?


[DO NOT MERGE] Update reference-architectures for Feb release

Description
Update reference-architectures for Feb release (only merge when we release)
Release required?

[x] No release
[ ] Patch release (x.x.X)
[ ] Minor release (x.X.x)
[ ] Major release (X.x.x)

Release notes content

Run the pipeline
If the CI pipeline doesn't run when you create the PR, the PR requires a user with GitHub collaborators access to run the pipeline.
Run the CI pipeline when the PR is ready for review and you expect tests to pass. Add a comment to the PR with the following text:
/run pipeline

Checklist for reviewers

[ ] If relevant, a test for the change is included or updated with this PR.
[ ] If relevant, documentation for the change is included or updated with this PR.

For mergers

Use a conventional commit message to set the release level. Follow the guidelines.
Include information that users need to know about the PR in the commit message. The commit message becomes part of the GitHub release notes.
Use the Squash and merge option.

/run pipeline

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

GitHub release
v5.15.1

Your semantic-release bot :package::rocket:


Typo in sample app config

In samples/Parcel/.proxyrc.js
it should be
app.use(         "/oidc/",         createProxyMiddleware({             target: "http://localhost:15000/",         })     );
not
app.use(         createProxyMiddleware("/oidc/", {             target: "http://localhost:15000/",         })     );
as it currently is.
This is causing the error [0] Error: [HPM] Missing "target" option. Example: {target: "http://www.example.org"} to be thrown by http-proxy-middleware when trying to run the sample app.
To reproduce
cd samples/Parcel
npm install
npm run start
Wasn't sure how to create a new branch for a pull request.

thanks for reporting


Write proper documentation using material-mkdocs

Docs are now live at https://sevanssp.github.io/inquire-modeltest-sdk/
The work of documenting the code and usage continues....


Add rails template for Nginx

Add basic Nginx template for rails + update documentation

This PR is a : New feature

[x] Documentation is written
[x] Changelog was updated

Thanks! :neckbeard:


Define URL structure for frontend

For example:
template/tpl_2424
template/tpl_2424/q/new
template/tpl_2424/section/new
template/tpl_2424/section/sec_5a6a1
template/tpl_2424/q/q_a414f

My proposed would be something like this
Template builder
template/{template id}
template/{template id}/q/new
template/{template id}/s/new
template/{template id}/preview
template/{template id}/s/{section id}
template/{template id}/q/{question id}
template/{template id}/q/{question id}/preview
Projects/Plans
projects/
projects/new
projects/{project id}
projects/{project id}/project
projects/{project id}/funding
projects/{project id}/collaborators
projects/{project id}/outputs
projects/{project id}/export
projects/{project id}/dmp/{dmp id}
projects/{project id}/dmp/{dmp id}/s/{section id}
projects/{project id}/dmp/{dmp id}/q/{question id}
I could see being in a question when editing a plan quite a long URL, but it is pretty hierarchical
If you are a purist, you might want it to be project/{id}/dmp/{dmpid}/s/{section id}/q/{qid} but that seems quite long to me but what is everyone else thoughts

I think this makes sense @fraserclark.
project/{project id}/project feels redundant. Maybe project/{project id}/details instead?
We will also want a project/{project id}/related or project/{project id}/works URL for the related works page (where the user can approve/reject works found by our harvesters.
I don't have a strong preference between the shorter project/question and the longer project/section/question format. I really like the use of 's' and 'q' instead of 'section' and 'question'.
In the context of the Plans, would we have a separate URL for an individual question or are they navigating to a section which includes all of the questions on it?
Anyway, shorter is probably better.
I thought everything should effectively be its own page, where possible.
So yeah, I think each question should be its own page. I think the benefits you get for "free" with it being its own page - like browser back buttons, linkable/shareable etc,

@fraserclark and @briri the urls look good to me. Fraser, in regards to your question about this url project/{id}/dmp/{dmpid}/s/{section id}/q/{qid}, it sounds like from your above conversation that project/{project id}/dmp/{dmp id}/q/{question id} can be used since questions will be on their own page.
Will we be able to get the section info with just a question id from the backend if we need to?

Yep pretty sure. Based on @briri database structure cards, the questions are associated with a section - so I suspect GraphQL will make that easy to pull in that relationship

@briri, I am ok with those paths.


[v1.15] envoy: Bump envoy version from v1.29.7 to v1.29.9

This commit is to bump envoy version to v1.29.9^1, mainly for below CVEs:

CVE-2024-7264: Update curl lib
CVE-2024-45808: Malicious log injection via access logs
CVE-2024-45806: Potential manipulate x-envoy headers from external sources
CVE-2024-45809: Jwt filter crash in the clear route cache with remote JWKs
CVE-2024-45810: Envoy crashes for LocalReply in http async client

Relates build: https://github.com/cilium/proxy/actions/runs/10949709637/job/30403536243

/test-backport-1.15

/test-backport-1.15


Release notes for control center app releases

Add release notes for the GA release on 15th January 2021.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

Added RN to Dev Portal file via https://github.com/mendix/docs/commit/0d24f39ce1307c7b661066facf5c5fdc94bd5486

Added RN to Dev Portal file via https://github.com/mendix/docs/commit/0d24f39ce1307c7b661066facf5c5fdc94bd5486


Exit parser instead of raising error

Exit parser instead of raising error
See #68. The problem we have is the 2nd and 3rd screenshots, with a superfluous and nonexistent location reported.
This happens because BS/OCaml's way of reporting an error is to catch e.g. a Location.Error exception. The reporting displays the location, then move on. This is problematic for our syntax, because we report more than one error (i.e. we have more than one location to show).
The theoretical solution is to refactor the BS/OCaml reporting pipeline to accept a new exception that allows more than one error. But this shakes things up too much, so our temporary solution is to print all the errors on the syntax side, then simply exit the process. No exception raised means the BS side also doesn't catch anything and tries to display that nonsensical location line.
Caveats

(Not implemented yet) We need to reproduce the display logic inside the syntax code. We'll use the same display logic as BS' super-errors for now, and assume that most folks using BS also have super-errors turned on (which is the default). The result is that when we run bsb, a syntax error display and a compiler error display are visually consistent, even though they're produced by 2 different pieces of code. The look will be inconsistent if user has super-errors disabled; a type error (from BS) would look rustic, while a syntax error (from here) still looks super. Technically the compiler can invoke the syntax api and pass a flag to make it display the old ocaml error format, but nah.
Exiting a process is a hard control flow. The compiler can't even "catch" it. This is problematic if the compiler wants to keep operating on the file after syntax errors. Right now there's no such thing as "catching a syntax error and recover and keep analyzing the file", but we'll likely need this in the future when in the editor, the compiler operates on the recovered syntax tree in order to provide best-effort type hint, autocomplete, etc. Can't have the syntax exit the compiler process there =).
The online playground, compiled through jsoo, naturally doesn't understand "exiting a process". We'll need some patching here.

Anyway, temporary, rather stable solution. After other things settle a bit, we'll come back to this and properly fix it.

cc @IwanKaramazow @bobzhang @ryyppy

I think this will actually not interfere with the JSOO implementation since we are overriding the Napkin_driver functionality and using bits of the Napkin_diagnostics module directly


Remove System.Logging.Facade.Class

This makes the package simpler and removes the transformers dependency.
A corresponding class can easily be defined in a separate package, if
needed.

@soenkehahn WDYT?

Not sure. Personally I've never used anything but IO (I think). But I can see how logging-facade would be much less useful without the class if you're working on a code-base that uses monad transformers a lot.
Is the transformers dependency very bad? It doesn't impose any version constraints on the transformers package, and it ships with ghc.


json-compilation-database generates empty compile_commands.json

To generate not empty compile_commands.json deleting projects DerivedData is requred now. If you do not delete derive data from project, xctool generates empty compile_commands.json

I meet this problem too, may be you should try xcpretty tool. And you should take care for it, when you generate the compilation_command.json, you need to choose the right build config Debug or Release  ~  I did it successfully~  good luck


Support shared operator deployments

Would like to shared generated manifest for a single operator. This will allow users to generator manifest for a single operator multiple times and give the flexibility to change value source between each operator.

Closing as we don't need to share operators


bugfix: handle empty feature orders list

Description

The observation publisher is failing after the introduction of feature orders field, because it was assumed that the feature orders is either None or a list with one or more elements.
Modifications

Tests

Checklist

[ ] Added PR label
[ ] Added unit test, integration, and/or e2e tests
[ ] Tested locally
[ ] Updated documentation
[ ] Update Swagger spec if the PR introduce API changes
[ ] Regenerated Golang and Python client if the PR introduces API changes

Release Notes

LGTM! Thanks @khorshuheng


Use of HttpClientFactory instead of HttpClient?

Motivation
In viewing some of the performance best practices document I had noticed awhile back you are using a single httpClient for all Kentico Kontent requests.
According to this you should instead use HttpClientFactory:
https://docs.microsoft.com/en-us/aspnet/core/performance/performance-best-practices?view=aspnetcore-3.1#pool-http-connections-with-httpclientfactory
It's not entirely clear to me though if this guidance applies to a static httpClient like what all of your examples use.
Proposed solution
Determine if a static HttpClient is OK or if it is better to use HttpClientFactory.
Additional context
N/A

Hi @xantari ,
you made a brilliant point!
Motivation
First, to answer your concerns and address the two problems with the HttpClient described in MS docs:

Performance (aka socket depletion): the DeliveryClient (re)uses a single instance of HttpClient over and over again. Although the HttpClient implements IDisposlable and thus suggests repeated instantiation, it's not designed to be short-lived. So, performance-wise, the Delivery SDK acts according to the best practice and shouldn't pose an issue.
Disrespecting DNS changes: This is a global problem of .NET which could previously be worked around by using the ServicePointManager. The current best practice is to use the HttpClientFactory and .SetHandlerLifetime(...).

So, generally speaking, using the Delivery SDK as-is is safe. However, if you wish to use the HttpClientFactory with the Kontent's Delivery SDK, you need to use the Generated clients approach described in the MS docs:
DeliveryClient + HttpClientFactory
services.AddHttpClient("FactoryClient", c => c.DefaultRequestHeaders.Add("X-KC-SOURCE", "Greetings from the HttpClientFactory!")) // Or any other additional configuration
        .AddTypedClient(c => DeliveryClientBuilder.WithProjectId("975bf280-fd91-488c-994c-2f04416e5ee3").WithHttpClient(c).Build())
        .AddPolicyHandler(GetRetryPolicy()); // Add retry policies, etc.

Using the HttpClientFactory has some additional benefits, e.g. you get free logging, as @shanselman demonstrates in his post.
Outstanding issues
Although it's possible to use HttpClientFactory with this SDK, I'll leave this issue open as I think we should improve several things:

Add support for Named clients and Typed clients - this is currently not possible which effectively prevents simultaneous usage of DI and multiple instances of the HttpClientFactory-powered DeliveryClient

The WithHttpClient should be replaced or accompanied by a method that would allow injection of the HttpClientFactory

This would be also useful for unit testing when injecting fake instances of the HttpClient

Use the HttpClientFactory internally for creating a default HttpClient instance when registering the default dependencies
Update the best practices on the DeliveryClient instantiation

Refactor the resiliency policy

Make the resiliency logic compatible with Polly, following the best practices from MS docs
Add Simmy for tests
Rewrite the best practices on how to use the retry policy, favoring the usage of the HttpClientFactory in combination with .AddPolicyHandler(...) rather than handling it internally

We are currently working on best practices for .NET developers. We'll make sure to incorporate these learnings. (ping @tomasjurasek)
Recommended extra reading:

HTTPCLIENTFACTORY IN ASP.NET CORE 2.1 by @stevejgordon
You're (probably still) using HttpClient wrong and it is destabilizing your software by @joseftw

code

HttpClientFactoryServiceCollectionExtensions to see the various ways of HttpClient registration

I hope this answer will help you and thanks again for pointing this out!

@xantari just to let you know - we're working on a new version that'll be optimized for usage together with the HttpClientFactory

@petrsvihlik great!

this will be a part of the v13 release. the docs will be taken care of separately.
-> closing


Command line refactoring provides friendly prompts

In the process of using it, I found the current prompt messages too confusing
When I execute bingo, I am prompted with the following message
bingo: 'go get' like, simple CLI that allows automated versioning of Go package level binaries (e.g required as dev tools by your project!)
built on top of Go Modules, allowing reproducible dev environments. 'bingo' allows to easily maintain a separate, nested Go Module for each binary.

For detailed examples and documentation see: https://github.com/bwplotka/bingo

'bingo' supports following commands:

Commands:

  get <flags> [<package or binary>[@version1,none,latest,version2,version3...]]

  -go string
        Path to the go command. (default "go")
  -insecure
        Use -insecure flag when using 'go get'
  -l    If enabled, bingo will also create soft link called <tool> that links to the current<tool>-<version> binary. Use Variables.mk and variables.env if you want to be sure that what you are invoking is what is pinned.
  -moddir string
        Directory where separate modules for each binary will be maintained. Feel free to commit this directory to your VCS to bond binary versions to your project code. If the directory does not exist bingo logs and assumes a fresh project. (default ".bingo")
  -n string
        The -n flag instructs to get binary and name it with given name instead of default, so the last element of package directory. Allowed characters [A-z0-9._-]. If -n is used and no package/binary is specified, bingo get will return error. If -n is used with existing binary name, copy of this binary will be done. Cannot be used with -r
  -r string
        The -r flag instructs to get existing binary and rename it with given name. Allowed characters [A-z0-9._-]. If -r is used and no package/binary is specified or non existing binary name is used, bingo will return error. Cannot be used with -n.
  -v    Print more'

  list <flags> [<package or binary>]

List enumerates all or one binary that are/is currently pinned in this project. It will print exact path, Version and immutable output.

  -moddir string
        Directory where separate modules for each binary is maintained. If does not exists, bingo list will fail. (default ".bingo")
  -v    Print more'

  version

Prints bingo Version.

In contrast, gh looks like this
Work seamlessly with GitHub from the command line.

USAGE
  gh <command> <subcommand> [flags]

CORE COMMANDS
  auth:        Authenticate gh and git with GitHub
  browse:      Open the repository in the browser
  codespace:   Connect to and manage codespaces
  gist:        Manage gists
  issue:       Manage issues
  pr:          Manage pull requests
  release:     Manage releases
  repo:        Manage repositories

ACTIONS COMMANDS
  run:         View details about workflow runs
  workflow:    View details about GitHub Actions workflows

ADDITIONAL COMMANDS
  alias:       Create command shortcuts
  api:         Make an authenticated GitHub API request
  completion:  Generate shell completion scripts
  config:      Manage configuration for gh
  extension:   Manage gh extensions
  gpg-key:     Manage GPG keys
  help:        Help about any command
  label:       Manage labels
  search:      Search for repositories, issues, and pull requests
  secret:      Manage GitHub secrets
  ssh-key:     Manage SSH keys
  status:      Print information about relevant issues, pull requests, and notifications across repositories

HELP TOPICS
  actions:     Learn about working with GitHub Actions
  environment: Environment variables that can be used with gh
  exit-codes:  Exit codes used by gh
  formatting:  Formatting options for JSON data exported from gh
  mintty:      Information about using gh with MinTTY
  reference:   A comprehensive reference of all gh commands

FLAGS
  --help      Show help for command
  --version   Show gh version

EXAMPLES
  $ gh issue create
  $ gh repo clone cli/cli
  $ gh pr checkout 321

LEARN MORE
  Use 'gh <command> <subcommand> --help' for more information about a command.
  Read the manual at https://cli.github.com/manual

FEEDBACK
  Open an issue using 'gh issue create -R github.com/cli/cli'

He outputs help with hierarchy, can bingo be changed to do the same? Provide enough examples in the help
Here's a simple change I made
Bingo is a command line tool for Like `go get`  but for Go tools!

For detailed examples and documentation see: https://github.com/bwplotka/bingo

Usage:
  bingo [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  get
  help        Help about any command
  list        List enumerates all or one binary that are/is currently pinned in this project.
  version     Prints bingo Version.

Flags:
  -h, --help            help for bingo
  -m, --moddir string   Directory where separate modules for each binary will be maintained.
                        Feel free to commit this directory to your VCS to bond binary versions to your project code.
                        If the directory does not exist bingo logs and assumes a fresh project. (default ".bingo")
  -v, --verbose         Print more

Use "bingo [command] --help" for more information about a command.

In terms of output they are more concise and the use has not changed

Love it. We would welcome such contribution! Thanks!

https://github.com/bwplotka/bingo/pull/121
Can this PR be reopened?

Ah it requires cobra framework, sorry closing your PR so quickly - with this issue (or perhaps description mentioning the motivation) I see the reason now. Thanks!
I think I would be keen to have it, but we would need to change if all flag behave as it should - CI should check that. Let me reopen.