problem with creating a tar dataset that has named tuples in it

I am getting the following error related to pickling when i try to save my dataset using TarWriter
_pickle.PicklingError: Can't pickle <class 'data.input'>: attribute lookup input on data failed
I tried to look up the error but could not find a reasonable solution so i am opening an issue here.
My data class is as follows(have only the main components to reproduce the problem). It returns two named tuples input and output
class Data(Dataset):
    '''
        Interface class to load all the data and to call geomdata class to process it
    '''
    def __init__(self, data_path):
        super().__init__()

        self.Input= namedtuple("input", ["coords"])
        self.Output= namedtuple("output", ["disps"])

    def len(self):
        return self.data.n_exps

    def __getitem__(self, idx):

        coords= np.zeroes(10,1)

        disps= np.zeroes(10,1)

        input= self.Input(coords=coords)
        output= self.Output(disps=disps)
        return (input, output)

I used this code to save the data in tar format
path= "/data"
dataset= Data(path)

sink = wds.TarWriter("/data/data.tar")

for idx, (input, output) in enumerate(dataset):
    sink.write({
        "__key__": "sample%06d" % idx,
        "input.pyd": input,
        "output.pyd": output,
    })
sink.close()

Can you please look into this error?

namedtuple creates a new class. You call that class input but store it in the variable self.Input, so the pickler can't find it by its class name. You can fix this error by replacing the code you have with a top-level assignment of Input = namedtuple("Input", ["coords"]). But if you do that, your file can't be unpickled by anything other than this exact main program, and that's probably not what you want. Sadly, named tuples and dataclasses just aren't well integrated into Python.
Ugly as it is, your best bet is to only store tuples, lists, dicts, and tensors in .pyd files.


Working with Mixins in Sass and Pass Arguments

NOTE: All 1st-time contributors should know Topic approval and PR submission does NOT guarantee your Topic/Article will be published. Our team of Peer Reviewers and Content Moderators will review all PRs that come in to make sure they adhere to the standard of quality we expect from the EngEd community.
We expect all community memebers to go through provided examples, resources, and previously published material before submitting content. As a rule of thumb, please only submit articles (pull requests) that are complete, formatted correctly, and include a fully polished article (ready to be published and error free).
All revisions and edits should be completed on your own forked repo (as to not take up room in the queue). Any PR that is submitted incomplete (meaning not ready to be published as is) will be closed. A PR being closed does NOT mean the article can not be published (or fixed) it simply means that the edits, revisions, and fixes will happen outside of the queue.
Topic Suggestion
Enter topic suggestion here...
Pre-submission advice
By following all our pre-submission advice and reviewing our Resources folder, you will maximise your chances of your topic being approved.
We ask that you please be patient as our team works through approving and publishing all articles/tutorials in a timely manner.
Allow 1-3 days for a topic to be reviewed and/or approved - allow 3-7 days for an articles to be reviewed and/or published (subject to vary depending on volume and/or backlog of articles).
Be sure to visit our Resources Page for tools, resources, and example articles that will help you propose and write a successful article.
Please ensure that you have only one open issue + linked pull request at a time. This will ensure that we complete the article in a timely manner from inception to publishing.)
We tend to stray away or tend not to publish reviews/comparisons of commercial product offerings.
Writing sample(s):
Include any links or writing samples - to help our team better gauge your writing quality.
Proposal Submission
Proposed title of article
Working with Mixins in Sass and Pass Arguments
Use keyword research to improve your article's SEO.
Proposed article introduction
A mixin is a code block which allows you to write your styles in it and use it throughout the whole project. You can also think of it as a reusable component. It also helps you to write cleaner code without having to repeat yourself.
Key takeaways

What mixins are
How to write mixins and include them in your code
How and when to pass arguments

Article quality
We will learn all about SASS mixins and how to call them in our CSS wherever we want.
References
N/A

Hi @mosesmwangi442
Could you please expand upon how your content will differ from what is already available through the official documentation? We lean towards content that offers an original viewpoint/approach around programming-centric topics.

Closing due to inactivity


Failed to find a finite solution：LQR for a two wheel self-balancing robot

Hi,
I'm a student and I'm trying to use MuJoCo for LQR control for a two wheel self-balancing robot. I follow the LQR tutorial but I cannot find a finite solution.
It says "numpy.linalg.LinAlgError: Failed to find a finite solution."
Here is my robot model :
<mujoco model="two_wheel_robot">
  <compiler angle="radian" coordinate='local' inertiafromgeom='true'/>

  <asset>
    <texture name="grid" type="2d" builtin="checker" width="512" height="512" rgb1=".1 .2 .3" rgb2=".2 .3 .4"/>
    <material name="grid" texture="grid" texrepeat="1 1" texuniform="true" reflectance=".2"/>
  </asset>

  <worldbody>
    <geom name="floor" size="0 0 .05" type="plane" material="grid" condim="3"/>
    <light name="spotlight" mode="targetbodycom" target="box" diffuse=".8 .8 .8" specular="0.3 0.3 0.3" pos="0 -6 4" cutoff="30"/>
    <body name="robot_body">
      <freejoint name="root"/>
      <body name="wheel" pos="0 0 0" quat="1 0 0 0">
        <body name="left_wheel" pos="0 -0.17035 0.05" quat="1 -1 0 0">
            <joint name="joint_left_wheel" axis="0 0 -1" damping="0.3"/>
            <geom name="left_wheel" type="cylinder" size="0.05 0.0125" pos="0 0 0.0125"/>
        </body>
        <body name="right_wheel" pos="0 0.17035 0.05" quat="1 -1 0 0">
            <joint name="joint_right_wheel" axis="0 0 -1" damping="0.3"/>
            <geom name="right_wheel" type="cylinder" size="0.05 0.0125" pos="0 0 -0.0125"/>
        </body>
      </body>
      <body name="box" pos="0 0 0.11" quat="1 0 0 0">
        <geom name="box" type="box" size="0.03 0.1353 0.08" pos="0 0 0"/>
      </body>
    </body>
  </worldbody>

  <actuator>
        <motor name="right_wheel" gear="40" joint="joint_right_wheel" />
        <motor name="left_wheel" gear="40" joint="joint_left_wheel"/>
    </actuator>

</mujoco>

Here is my code:
import mujoco
import numpy as np
import scipy
import time
import mujoco.viewer
import sys

model = mujoco.MjModel.from_xml_path("two_wheel_robot.xml")
data = mujoco.MjData(model)
nv=model.nv
nu=model.nu

R = np.eye(nu)

mujoco.mj_resetData(model,data)
mujoco.mj_forward(model,data)
jac_com=np.zeros((3,nv))
mujoco.mj_jacSubtreeCom(model,data,jac_com,model.body('robot_body').id)

jac_wheel_com=np.zeros((3,nv))
mujoco.mj_jacSubtreeCom(model,data,jac_wheel_com,model.body('wheel').id)

jac_diff=jac_com-jac_wheel_com
Qbalance=jac_diff.T@jac_diff
joint_names=[model.joint(i).name for i in range(model.njnt)]
root_dofs=range(6)
balance_dofs = [
    model.joint(name).dofadr[0]
    for name in joint_names
    if 'wheel' in name
]

BALANCE_COST=1000
BALANCE_JOINT_COST=3
Qjoint=np.eye(nv)
Qjoint[root_dofs,root_dofs]*=0
Qjoint[balance_dofs,balance_dofs]*=BALANCE_JOINT_COST
Qpos=BALANCE_COST*Qbalance+Qjoint
Q=np.block([[Qpos,np.zeros((nv,nv))],
            [np.zeros((nv,2*nv))]])

ctrl0=data.ctrl
qpos0=data.qpos

A = np.zeros((2*nv, 2*nv))
B = np.zeros((2*nv, nu))
epsilon = 1e-6
flg_centered = True
mujoco.mjd_transitionFD(model, data, epsilon, flg_centered, A, B, None, None)

# Solve discrete Riccati equation.
P = scipy.linalg.solve_discrete_are(A, B, Q, R)
# Compute the feedback gain matrix K.
K = np.linalg.inv(R + B.T @ P @ B) @ B.T @ P @ A

I do not know whether A,B is right, or I choose wrong Q. Could you please help me?

Can you print the matrix Qqpos and post here please?

Can you print the matrix and post here please?Qqpos

Thanks for the reply. qpos0 is: [0. 0. 0. 1. 0. 0. 0. 0. 0.]

That's not what I asked for.

That's not what I asked for.

That's not what I asked for.

I changes Q matrix many times, but still can't find a finite solution

Can you print B[nv:nv+6, :]?
Use the legible printout command from the import cell in the colab please. Your previous reply was unreadable.

Can you print B[nv:nv+6, :]?
Use the legible printout command from the import cell in the colab please. Your previous reply was unreadable.

B[nv:nv+6, :] is:
 [[-0.3   -0.3  ]
 [ 0.     0.   ]
 [ 0.     0.   ]
 [ 0.     0.   ]
 [ 2.941  2.941]
 [ 0.     0.   ]]

Thanks for reply. I set the output legible. Besides,
Qpos is:
 [[ 0.  0.  0.  0. -0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0. 36.  0.  0.  0.  0.]
 [-0.  0.  0.  0. 36.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  3.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  3.]]

Q is:
[[ 0.  0.  0.  0. -0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0. 36.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [-0.  0.  0.  0. 36.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  3.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  3.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]]

A is:
 [[     1.         0.         0.         0.        -0.         0.         0.         0.         0.002      0.         0.         0.         0.         0.         0.         0.   ]
 [     0.         1.         0.        -4.265     -0.         0.         0.         0.         0.         0.002      0.         0.         0.         0.         0.         0.   ]
 [     0.         0.       -17.054      0.        -0.         0.         0.         0.         0.         0.         0.002      0.         0.         0.         0.         0.   ]
 [     0.         0.         0.      -132.613     -0.         0.         0.         0.         0.         0.         0.         0.002      0.         0.         0.         0.   ]
 [     0.         0.         0.         0.         1.001      0.         0.         0.         0.         0.         0.         0.         0.002      0.        -0.        -0.   ]
 [     0.         0.         0.         0.         0.         1.         0.         0.         0.         0.         0.         0.         0.         0.002     -0.        -0.   ]
 [     0.         0.         0.         0.         0.        -0.         1.         0.         0.         0.         0.         0.         0.         0.         0.001     -0.   ]
 [     0.         0.         0.         0.         0.         0.         0.         1.         0.         0.         0.         0.         0.         0.        -0.         0.001]
 [     0.         0.         0.         0.        -0.032      0.         0.         0.         1.         0.         0.         0.         0.         0.         0.002      0.002]
 [     0.        -0.         0.     -2132.487     -0.         0.         0.         0.         0.         1.         0.         0.         0.         0.         0.         0.   ]
 [     0.         0.     -9026.979      0.        -0.         0.         0.         0.         0.         0.         1.         0.         0.         0.         0.         0.   ]
 [     0.        -0.         0.    -66806.536     -0.         0.         0.         0.         0.         0.         0.         1.         0.         0.         0.         0.   ]
 [     0.         0.         0.         0.         0.319     -0.         0.         0.         0.         0.         0.         0.         1.         0.        -0.022     -0.022]
 [     0.         0.         0.         0.         0.         0.         0.         0.         0.         0.         0.         0.         0.         1.        -0.        -0.   ]
 [     0.         0.         0.         0.         0.191     -0.         0.         0.         0.         0.         0.         0.         0.         0.         0.284     -0.006]
 [     0.         0.         0.         0.         0.191      0.         0.         0.         0.         0.         0.         0.         0.         0.        -0.006      0.284]]

B is:
 [[-0.001 -0.001]
 [ 0.     0.   ]
 [ 0.     0.   ]
 [ 0.     0.   ]
 [ 0.006  0.006]
 [ 0.     0.   ]
 [ 0.002  0.191]
 [ 0.191  0.002]
 [-0.3   -0.3  ]
 [ 0.     0.   ]
 [ 0.     0.   ]
 [ 0.     0.   ]
 [ 2.941  2.941]
 [ 0.     0.   ]
 [ 0.854 95.479]
 [95.479  0.854]]

Thank you very much for taking the time to help solve the problem!

Can you please add, right after your call to mj_resetData, the below, and let me know if anything changes?
for _ range(10):
  mujoco.mj_step(model, data)

Can you please add, right after your call to mj_resetData, the below, and let me know if anything changes?
for _ range(10):
  mujoco.mj_step(model, data)

Yes, A and B change a lot. Now
A is:
 [[ 1.     0.     0.     0.    -0.     0.     0.     0.     0.002  0.     0.     0.    -0.    -0.     0.     0.   ]
 [ 0.     1.    -0.    -0.    -0.    -0.     0.     0.     0.     0.002  0.    -0.     0.    -0.     0.     0.   ]
 [ 0.     0.     0.989  0.     0.     0.     0.     0.     0.     0.     0.002 -0.     0.    -0.     0.     0.   ]
 [ 0.     0.     0.     0.989 -0.    -0.     0.     0.     0.    -0.     0.     0.002  0.    -0.     0.     0.   ]
 [ 0.     0.     0.     0.     1.001  0.     0.     0.     0.001  0.     0.     0.     0.002  0.    -0.    -0.   ]
 [ 0.     0.     0.     0.    -0.     1.     0.     0.    -0.     0.     0.     0.     0.     0.002  0.    -0.   ]
 [ 0.     0.     0.     0.     0.    -0.     1.     0.    -0.002  0.     0.     0.    -0.    -0.     0.002 -0.   ]
 [ 0.     0.     0.     0.     0.    -0.     0.     1.    -0.002  0.     0.     0.    -0.     0.    -0.     0.002]
 [ 0.     0.     0.     0.    -0.036  0.     0.     0.     0.947  0.     0.     0.    -0.    -0.     0.015  0.015]
 [ 0.    -0.    -0.    -0.081 -0.    -0.     0.     0.     0.     0.818  0.    -0.003  0.    -0.     0.     0.   ]
 [ 0.     0.    -5.532  0.     0.     0.     0.     0.     0.     0.     0.805 -0.     0.    -0.     0.     0.   ]
 [ 0.    -0.    -0.    -5.614 -0.    -0.     0.     0.     0.    -0.057  0.     0.802  0.    -0.     0.     0.   ]
 [ 0.     0.     0.     0.     0.36  -0.     0.     0.     0.401  0.     0.     0.     1.     0.    -0.12  -0.12 ]
 [ 0.     0.     0.     0.    -0.     0.     0.     0.    -0.     0.     0.     0.     0.     0.953  0.05  -0.05 ]
 [ 0.     0.     0.     0.     0.216 -0.     0.     0.    -0.951  0.     0.     0.    -0.    -0.148  0.792 -0.049]
 [ 0.     0.     0.     0.     0.216 -0.     0.     0.    -0.951  0.     0.     0.    -0.     0.148 -0.049  0.792]]

B is:
 [[-0.004 -0.004]
 [ 0.     0.   ]
 [ 0.     0.   ]
 [ 0.     0.   ]
 [ 0.035  0.035]
 [ 0.015 -0.015]
 [ 0.014  0.042]
 [ 0.042  0.014]
 [-2.21  -2.21 ]
 [ 0.     0.   ]
 [ 0.     0.   ]
 [ 0.     0.   ]
 [17.374 17.374]
 [ 7.28  -7.28 ]
 [ 6.813 21.056]
 [21.056  6.813]]

B[nv:nv+6, :] is:
 [[-2.21  -2.21 ]
 [ 0.     0.   ]
 [ 0.     0.   ]
 [ 0.     0.   ]
 [17.374 17.374]
 [ 7.28  -7.28 ]]

Thanks so much! I am trying to change Q to find a solution.

Do you understand what happened? There is a whole section in the colab about getting the contacts correct at the initial pose. It is highly related to the problem you had with your model. It was basically floating in the air (at height 0, to numerical precision) with no proper contact, so the derivatives didn't show that applying torque to the wheels would have an effect on the free joint...

Do you understand what happened? There is a whole section in the colab about getting the contacts correct at the initial pose. It is highly related to the problem you had with your model. It was basically floating in the air (at height 0, to numerical precision) with no proper contact, so the derivatives didn't show that applying torque to the wheels would have an effect on the free joint...

Thank you very much for your patience in replying and explaining, I am following the documentation on the official website to learn how to model the robot correctly and rationally.
Besides, I would like to ask you a question, the matrices A and B I got are partially correct now. My self-balancing cart can only go forward and backward at the moment, and it can't turn, I think it's still a modeling problem, but I don't know how to improve it, Do you know where I should modify the model?
Happy Labor Day!

@15906185391
Please refer to the following code.
I have changed the qpos[2], jac_wheel_com(fixed to use mujoco.mj_jacBodyCom) and BALANCE_COST.
model = mujoco.MjModel.from_xml_path(""two_wheel_robot.xmll")
data = mujoco.MjData(model)
mujoco.mj_forward(model, data)
data.qacc = 0  # Assert that there is no the acceleration.
data.qpos[2] += -0.000304
qpos0 = data.qpos.copy()  # Save the position setpoint.
mujoco.mj_inverse(model, data)
qfrc0 = data.qfrc_inverse.copy()

actuator_moment = data.actuator_moment
ctrl0 = np.atleast_2d(qfrc0) @ np.linalg.pinv(actuator_moment)
ctrl0 = ctrl0.flatten()

nv=model.nv
nu=model.nu

R = np.eye(nu)

mujoco.mj_resetData(model, data)
data.qpos = qpos0
mujoco.mj_forward(model, data)
jac_com=np.zeros((3,nv))
mujoco.mj_jacSubtreeCom(model,data,jac_com,model.body('robot_body').id)

jac_wheel_com=np.zeros((3,nv))
mujoco.mj_jacBodyCom(model,data,jac_wheel_com,None,model.body('wheel').id)

jac_diff=jac_com-jac_wheel_com
Qbalance=jac_diff.T@jac_diff
joint_names=[model.joint(i).name for i in range(model.njnt)]
root_dofs=range(6)
balance_dofs = [
    model.joint(name).dofadr[0]
    for name in joint_names
    if 'wheel' in name
]

BALANCE_COST =<PHONE_NUMBER>  # Balancing.
BALANCE_JOINT_COST=3
Qjoint=np.eye(nv)
Qjoint[root_dofs,root_dofs]*=0
Qjoint[balance_dofs,balance_dofs]*=BALANCE_JOINT_COST
Qpos=BALANCE_COST*Qbalance+Qjoint
Q=np.block([[Qpos,np.zeros((nv,nv))],
            [np.zeros((nv,2*nv))]])

# Set the initial state and control.
mujoco.mj_resetData(model, data)
data.ctrl = ctrl0
data.qpos = qpos0

A = np.zeros((2*nv, 2*nv))
B = np.zeros((2*nv, nu))
epsilon = 1e-6
flg_centered = True
mujoco.mjd_transitionFD(model, data, epsilon, flg_centered, A, B, None, None)

# Solve discrete Riccati equation.
P = scipy.linalg.solve_discrete_are(A, B, Q, R)
# Compute the feedback gain matrix K.
K = np.linalg.inv(R + B.T @ P @ B) @ B.T @ P @ A

# Reset data, set initial pose.
mujoco.mj_resetData(model, data)
data.qpos = qpos0

# Allocate position difference dq.
dq = np.zeros(model.nv)

with mujoco.viewer.launch_passive(model, data) as viewer:
    start = time.time()
    data.ctrl = ctrl0

    while viewer.is_running():
        step_start = time.time()

        # Get state difference dx.
        mujoco.mj_differentiatePos(model, dq, 1, qpos0, data.qpos)
        dx = np.hstack((dq, data.qvel)).T
        # LQR control law.
        data.ctrl = ctrl0 - K @ dx

        mujoco.mj_step(model, data)
        viewer.sync()

        time_until_next_step = model.opt.timestep - (time.time() - step_start)
        if time_until_next_step > 0:
            time.sleep(time_until_next_step)


Accessibility Error is in error

Describe the bug
Upon trying to Open LES I receive an error that LES is not enabled in preferences, but it is.
Screenshots
Please see attached files.
Desktop (please complete the following information):

OS: MacOS Monterey
Version 12.4

Additional context
Add any other context about the problem here.

I've the same problem....

same :(

such a bum i got so used to this extension and since i got my new mac im screwed

*** found this online now it works
Seems to be working fine with a small workaround. If you try to open it like normal it will ask you to enable certain permissions, even if you’ve already enabled them. Instead of opening LES like normal, right click it and choose ‘show package contents’. Then open the item called ‘hammerspoon’. This will allow it to work for some reason. Make a shortcut for ‘hammerspoon’ on your desktop and open this anytime you need to open Live Enhancement Suite.

This didn't worked out for me, still the same windows pops up that Accessibility ist not enabled but it is. Can you share a screenshot of the "hammer spoon" folder?

you have to autorize terminal too in accessibility

still haven't been able to get around this

Same issue here :(

I managed to open Hammerspoon using:
sudo /Applications/Live\ Enhancement\ Suite.app/Contents/MacOS/Hammerspoon

(and then typing my password)
The icon appears on top of the screen as expected. However, it has no effect on Ableton... none of my menus show up.

Same issue with privacy settings :(

Duplicate of https://github.com/LiveEnhancementSuite/LESforMacOS/issues/6


More extensible tests?

🤔 What's the problem you've observed?
We're adding tests in the same file.
✨ Do you have a proposal for making it better?
Could draw inspiration from https://github.com/tooky/retro-tools and loop over separate test scripts in a directory.

This text was originally generated from a template, then edited by hand. You can modify the template here.

I'd wait until we have 10 tests. Ideally we'd also create a new temp folder with git repo for each test. But that was a bit too much for something so simple.


ux-redesign: Main page redesign

Changes:

Changed action structure to be more flexibile, because of change of action specific.
Fixed bug with removing VM in sagas.js stopProgress
And title of VM create button

Main page:

Modal confirmation:

Fixes: https://github.com/oVirt/ovirt-web-ui/issues/641

This change is

These patterns are new: https://rawgit.com/patternfly/patternfly/master-dist/dist/tests/message-dialogs.html
The 'suspend' dialog should look exactly like the 'Warning' one. So:

@lizsurette on whether the warning dialog should have the large title and the paragraph. Could get away with only title, but I like the look of both

See also: #587

@gregsheremeta does we already have design for all those confirmation modal windows?
I think better do redesign of modal windows in separate PR.

@gregsheremeta @bond95 I think we can rely on just the large title in this case "Are you sure you want to Suspend the VM?". No further smaller description needed.
I also agree that we should rely on the new messaging dialogs for further confirmation dialogs! I'm happy to do a review for each, but I don't think we'd need @jennyhaines to do a design for each. If there are any that are particularly tricky I'm happy to help with a design :)

@gregsheremeta Done.

@bond95 @gregsheremeta - If I hadn't given you those "Other OS" icons yet, here is where you can find them (SVG and correctly-sized PNG): https://drive.google.com/drive/folders/1nS5RynrZ1CmtycCS0fjhMoyNN7ORaVth?usp=sharing

@bond95 - the cards look great, except the VM status icons should appear under the VM names, and should have the wording of the status beside it ("on", "off", suspended", "running"...etc)

@jennyhaines oh yes, thank you. I did this redesign according to deprecated design.

@jennyhaines also I have question about error, now when in some VM action occur error it appear in card at the bottom. Does new design has something like this, or not?

Does new design has something like this, or not?

Not yet / it hasn't come up. Let's discuss in tomorrow's meeting.

I had meeting with @jennyhaines , so as a result I done some changes:

Changes VM status icons.
Added toast notifications instead of error message in VM card.

@gregsheremeta @lizsurette @mareklibra Please review.

Looks good. Small nitpick: the toasts need to be closer together, like so:
https://ovirt.github.io/ovirt-design/admin-ui/framework/notifications

@gregsheremeta

@lizsurette ^^

I think they need to be closer, 5px according to webadmin
line 69:
https://gerrit.ovirt.org/#/c/92896/2/frontend/brands/ovirt-brand/src/main/sass/_notifications.scss@69

@gregsheremeta Done.

@bond95 Looks awesome! Great job.

@gregsheremeta @sjd78 Please code review.

@bond95, @gregsheremeta - I pulled the icon updates to VmStatusIcon out to PR #694 so I can use them on the details page as well.

Fixed bug with removing VM in sagas.js stopProgress

Did the bug have an issue?  Probably would have been easier for that fix to have its own PR not attached to the bigger redesign so it can be merged faster.

Pool name isn't displayed on it's card.

Sever nit-pick → the "Run" button is 1px taller than the "Console" button:

Toast Notifications → just another display for user messages right? After this PR, every user message will get a toast and go in the UserMessages tray. That is the intent correct?

I think that's a good place to start. If we noticed a feeling of being spammed by toast notifications we might want to think about good strategies for defining which actions should produce one vs. which might not need to.

IIRC, the user messages are really only generated when a REST error or Login error happens. At this point, either there will be essentially no message or A LOT of messages (because the backend is down or their login session timed out (which probably won't happen since the 1 minute background refresh keeps the session alive)).
We should be good for now.
In future having more toasts would be nice (like VM stopped/started/running etc), but not strictly necessary.

In future having more toasts would be nice (like VM stopped/started/running etc), but not strictly necessary.

@sjd78 We already have issue for that https://github.com/oVirt/ovirt-web-ui/issues/695

fixes #367


Think about to fix the issues found by adapter checker

I am an automatic service that looks for possible errors in ioBroker and creates an issue for it. The link below leads directly to the test:
https://adapter-check.iobroker.in/?q=https://raw.githubusercontent.com/Pmant/ioBroker.fakeroku

[ ] [E021] "licenses" in package.json are depricated. Please use only "license": "NAME" field.
[ ] [E104] No common.titleLang found in io-package.json
[ ] [E114] No adapter are allowed in the repo without admin3 support
[ ] [E145] No news found for actual version 0.2.1
[ ] [E150] No common.connectionType found in io-package.json
[ ] [E152] No common.dataSource found in io-package.json
[ ] [E201] Bluefox was not found in the collaborators on NPM!. Please execute in adapter directory: "npm owner add bluefox iobroker.fakeroku"
[ ] [E301] Tests on Travis-ci.org are broken. Please fix.
[ ] [E605] No actual year found in copyright. Please add "Copyright (c) 2022 Pmant<EMAIL_ADDRESS>at the end of README.md
[ ] [E701] No actual year found in LICENSE. Please add "Copyright (c) 2022 Pmant<EMAIL_ADDRESS>at the start of LICENSE

I have also found warnings that may be fixed if possible.

[ ] [W113] Adapter should support compact mode
[ ] [W505] setTimeout found in "main.js", but no clearTimeout detected

Thanks,
your automatic adapter checker.
P.S.: There is a community in Github, which supports the maintenance and further development of adapters. There you will find many experienced developers who are always ready to assist anyone. New developers are always welcome there. For more informations visit: https://github.com/iobroker-community-adapters/info

Thanks, that all bugs have been fixed.


Added basic API tests to the new Flask endpoint for neuroconv

Implemented basic tests for the Flask endpoint in pytest after talking with @CodyCBakerPhD about the implementation and PR process.

@garrettmflynn This PR looks great except for the source-schema related tests; can you redo this PR branching from main? (a rebase of that last commit might also work too, not sure)

That new PR is now live at #12. Similar to #2, we can likely just convert this to a Draft PR for the sake of maintaining the changelog.

#2 still has some unique content for reference I think, but can this one be closed?

Yep! Closing now.


add output to status

I think it is better to match output of lunchy status with that of launchctl list more precisely.
I added PID  Status  Label in the first line of the output.
Before：
> lunchy status
9477	0	com.danga.memcached
48499	0	com.google.keystone.agent
-		1	com.mysql.mysqld
-		1	io.redis.redis-server
411		0	org.mongodb.mongod

After：
> lunchy status
PID		Status	Label
9477	0	com.danga.memcached
48499	0	com.google.keystone.agent
-		1	com.mysql.mysqld
-		1	io.redis.redis-server
411		0	org.mongodb.mongod

looks good.

0.10.2 is now available via rubygems.


symbol 'Z' is not shown in the bottom bar when pane is zoomed. Please add that.

Hello @harishpvv 👋
Ok let's try this


[Fix]Footer stacking incorrectly

The footer should be either 4 across, 2 in a row, and then stack in a single column at mobile. Currently, it starts wrapping and has 3 on 1 line, which shouldn't happen. It will need to be reworked to be a single grid column at mobile, then 2 cols at a medium breakpoint, and finally a single flex row at the lg breakpoint.

I'll get this, ok?

So it is solved?


[visual bug] Right hand blocks not positioned properly when modded

I made this custom right hand pose where the character is holding blocks like an Enderman.
it looks nice with vanilla blocks, but for some reason the modded blocks like custom wood types and more don't get positioned properly.

here's the character holding a wood log, the block is positioned properly. looks exactly how I made it look on the editor

and here's the character holding a plank of a custom wood type from Oh the biomes you'll go. as you can see it is not positioned properly.
any way to fix this? I believe it looks like it is not checking the rotation angles.

The item has the wrong third person rotations, you can make a resource pack or report it to the mod author.
The difference should be visible even with a vanilla model.


Projects don't appear when you have too many of them

Hi - I love the theme, and it's been really easy to use.  Thank you so much for this!
I only hit one serious issue.  After adding 6 or more projects, I found that when viewed on desktop, none of my projects was shown.  If I reduce the projects to 5, the problem goes away.
The issue looks to be with the way that the useOnScreen hook is used by the Animation component:
useOnScreen has a default threshold of 0.25, which means that 25% of an element must be on screen before useOnScreen indicates that it is on screen.
Animation checks whether an element is on screen, using the default threshold, and hides it (opacity: 0) if it's not on screen.
All the projects are rendered within a single Animation component.
So the problem arises when the total length of the projects div exceeds 4x the screen height.
At this point it becomes impossible for 25% of the projects div to be on screen at once, so it's never considered 'on screen', and always rendered with opacity : 0
I have made a local fix & patch by reducing the default threshold for useOnScreen to 0.01 (1%).  That's working fine for me now, but I'm not sure it's the best fix...

You might want to make the "onScreen" threshold adjust dynamically depending on the number of projects?
Or you might want to switch things around in ProjectsSection so that there is an Animation component per-project, rather than having one that spans all the projects?

Either way, I hope this bug report & analysis is useful.
Please don't rush to fix on my account, as I'm happy with may patched version for now.  But this may be a helpful bug to fix before others hit it.  6 projects doesn't seem like that many to me.

Hi there! Thanks a lot for opening the issue and your A+ analysis 💪😁 I try to fix it soonish! I think your second proposed option sounds best for me.

Hello, Great theme, and thank you for making it open source.
I have the same issue, I am not able to solve the issue.
I hosting the website on netlify. link
Can you please suggest how to solve this issue ?

What I did as a workaround was:
Install patch-package:
npm i patch-package

Edit package.json as per set-up instructions here
 "scripts": {
    "postinstall": "patch-package"
 }

Modify this line in node_modules/gatsby-theme-portfolio-minimal/src/hooks/useOnScreen.tsx...
export function useOnScreen<T>(ref: MutableRefObject<T | undefined>, threshold = 0.25): boolean {

to read
export function useOnScreen<T>(ref: MutableRefObject<T | undefined>, threshold = 0.01): boolean {

run
npx patch-package gatsby-theme-portfolio-minimal

That's all from memory & I'm not able to retest right now, but hopefully that will work for you.
Another method that should also work, though I have not tested is to take advantage of Gatsby Shadowing.
If you just copy node_modules/gatsby-theme-portfolio-minimal/src/hooks/useOnScreen.tsx to src/hooks/useOnScreen.tsx, and make the same edit (0.25 -> 0.01), things should hopefully work for you without the need to use patch-package.

Thanks @diarmidmackenzie!
I just tested the shadowing technique. It also works but note that you have to copy the file to src/gatsby-theme-portfolio-minimal/hooks/useOnScreen.tsx. (Your path is missing the theme name.)
I also had to use gatsby clean to get it to work locally.
I tested with a threshold of 0.05 (5%) instead of the original 0.25 (25%) and I believe it is low enough to solve this issue (up to 20 something projects, if my math is right) as well as #25 (for the vast majority of mobile devices) without negatively impacting the UX.
@konstantinmuenster Let me know if I fail to see other consequences of that change but if there are none I would suggest to simply adjust that threshold to fix both issues. Happy to make a PR if it helps.
If you want to quickly compare the UX with 3 different threshold values:
1% -> https://diarmid.online/
5% -> https://gaël.com/
25% -> https://gatsbystarterportfoliominimalt.gatsbyjs.io/

Hey @diarmidmackenzie @demondragong @Prakyathkantharaju ! Thanks for working on this - I just released new version that uses a 5% threshold. I hope this fixes the issue 🤞
Potentially, we could optimize the animations by revealing individual projects gradually, instead of the entire projects section altogether. But that's something for the future 😉

Thank you! So far the 5% threshold has been working for me :)
I'm not sure I understand your second paragraph. For me, projects show up one after the other. Ah maybe you're saying at the level of 1 individual project, content could show up gradually (image then title then description etc.)

@demondragong Regarding the second issue: the Projects component has an outer wrapper <Animation /> that calculate the reveal of the section based on the entire section length:
        <Animation type="fadeIn">
            <Section anchor={props.sectionId} heading={props.heading}>
                <Slider additionalClasses={[classes.Projects]}>
                    {data.projects.map((project, key) => {
                        return project.visible ? <Project key={key} index={key} data={project} /> : null;
                    })}
                </Slider>
                {data.button !== undefined && data.button.visible !== false && (
                    <Animation className={classes.MoreProjects} type="fadeIn">
                        <Button
                            type={ButtonType.LINK}
                            externalLink={true}
                            url={data.button.url}
                            label={data.button.label}
                        />
                    </Animation>
                )}
            </Section>
        </Animation>

Would be better to remove that and animate the section heading as well as the individual projects


Allow dynamic key-value pair configuration section for the storage service

Is your feature request related to a problem? Please describe.
The current configuration section designed for MinIO is hardcoded in a data structure and may stop developers from extending their own storage services.
Describe the solution you'd like
User a key-value pair (dictionary) similar to the message broker configuration.
Describe alternatives you've considered
Additional context
Meeting action from January 25, 2022

Fixed as part of #75


Different results in retriever and AWS console.

Hi,
I found out that I get different results from asking any question (i.e.: "What is Amazon Sagemaker?") using:

AWS Console by running query on Kendra Index
langchain.retrievers.AmazonKendraRetriever: retriever = AmazonKendraRetriever(   index_id=KENDRA_INDEX_ID,    region_name=AWS_REGION)

Are there any additional settings that I should make in my code to get the same results? Moreover, while results from Console are accurate, the ones I get from retriever are not especially accurate.

Were you able to resolve the issue @Sypek. I am experiencing the same issue, the console is giving relevant (good) results where as when the AmazonKendraRetriever is not even returning important information.

Hi, I am also facing the similar issue. Results from AWS Console Kendra and Retriver are not same

Hi,
Kendra Search console uses Query API, which is a bit different from the Retrieve API. Found the below on AWS Docs:
Retrieve API is similar to the Query (https://docs.aws.amazon.com/kendra/latest/APIReference/API_Query.html) API. However, by default, the Query API only returns excerpt passages of up to 100 token words. With the Retrieve API, you can retrieve longer passages of up to 200 token words and up to 100 semantically relevant passages. This doesn't include question-answer or FAQ type responses from your index. The passages are text excerpts that can be semantically extracted from multiple documents and multiple parts of the same document. If in extreme cases your documents produce zero passages using the Retrieve API, you can alternatively use the Query API and its types of responses.
The results would be similar when using the Query API.


Integration with JSONJoy

Hi, Im new in this, I'm wotking with Swift HTTP and JSONJoy
Everything is OK and compile and upload to simulator, but when I call webservice I have an error on JSONJoy.framework, it says no image found
Please can you help me

Are you trying to deploy to a real device and it's working? Check this out:
https://github.com/daltoniam/JSONJoy-Swift#add-copy-frameworks-phase

not yet, i'm trying in the simulator

Alright. I will need a code example and a screenshot of your settings to help further. As long as you followed the install docs for both SwiftHTTP and JSONJoy it should work fine.

I changed my install of JSONJoy for cocoapods, this is my error.

Ok cool. Did you install the CocoaPods beta? If not, use gem install cocoapods --pre.
Also are you building with the yourproject.xcworkspace file or yourproject.xcodeproj file? You should be using the xcworkspace.

the first thing is done, but second one I cannot understand you I havent used that file

CocoaPods creates a workspace project file that you should be using, instead of the original xcodeproj file.
http://cocoapods.org under the "Get Started" tab.

I openned it, but thats my screen capture

There a couple issues here, but first you need to close the project file and the workspace file. Then just open the workspace file. Try building after that.

Ok, it built and run, now Im getting this error
Could not build Objective-C module 'JSONJoy'

You need to clean the build folder. Hold option and go to product-> clean inside xCode. See this for more info:
http://stackoverflow.com/questions/26834293/swift-could-not-build-objective-c-module-alamofire

Thanks a lot for being patient with me.
I solved JSON Joy
But I've done the same to SwiftHTTP but issue persist
Could not build Objective-C module 'SwiftHTTP'

solved!! sorry man and thanks a lot again great Pro!!

:+1: nice work. Welcome and enjoy.


Address follow up comments for PR #1172

opensearch-security pull request intake form
Please provide as much details as possible to get feedback/acceptance on your PR quickly

Category: (Enhancement, New feature, Bug fix, Test fix, Refactoring, Maintenance, Documentation)
Maintenance

Github Issue # or road-map entry, if available:
This PR is a follow up PR to address the comments on PR #1172

Description of changes:
Code formatting changes

Why these changes are required?
To remove unnecessary changes from PR #1172

What is the old behavior before changes and new behavior after changes? (Please add any example/logs/screen-shot if available)
Lots of unnecessary changes happened to the old code, we want to undo all of them to prevent any unwanted merge conflicts in the future.

Testing done: (Please provide details of testing done: Unit testing, integration testing and manual testing)

TO-DOs, if any: (Please describe pending items and provide Github issues# for each of them)

Is it backport from main branch? (If yes, please add backport PR # and commits #)

By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Codecov Report

Merging #1224 (c48c747) into main (2ecb088) will increase coverage by 0.01%.
The diff coverage is 60.00%.

@@             Coverage Diff              @@
##               main    #1224      +/-   ##
============================================
+ Coverage     64.61%   64.63%   +0.01%
- Complexity     3178     3180       +2
============================================
  Files           245      245
  Lines         17140    17142       +2
  Branches       3034     3034
============================================
+ Hits          11075    11079       +4
+ Misses         4519     4518       -1
+ Partials       1546     1545       -1

Impacted Files
Coverage Δ

.../opensearch/security/OpenSearchSecurityPlugin.java
81.22% <ø> (ø)

...ch/security/dlic/rest/api/FlushCacheApiAction.java
63.33% <ø> (ø)

...g/opensearch/security/dlic/rest/support/Utils.java
48.68% <ø> (ø)

...zon/dlic/auth/http/saml/HTTPSamlAuthenticator.java
69.72% <33.33%> (ø)

...dlic/auth/http/saml/AuthTokenProcessorHandler.java
47.31% <100.00%> (+0.57%)
:arrow_up:

.../dlic/auth/ldap2/LDAPConnectionFactoryFactory.java
58.01% <0.00%> (+1.52%)
:arrow_up:

Continue to review full report at Codecov.

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

There are many tests that use _opendistro/_security prefix. Those tests either needs to be parametrized or should switch to _plugin/_security prefix when the REST API is not subject of that particular unit test.

There are many tests that use _opendistro/_security prefix. Those tests either needs to be parametrized or should switch to _plugin/_security prefix when the REST API is not subject of that particular unit test.

We already have parametrized REST API tests as part of PR #1172
If you mean doing it for all the tests, let's do it in another PR, as this PR is pending for about 2 months.

@afazel Please rebase and resolve conflict.

@afazel Please rebase and resolve conflict.

Done

There are still few issues introduced in #1172 that needs to be addressed:

static imports must be separated from other imports
wrong code indentation
no new line at the end of file

I separated the static imports from other imports.
For new line at the end of file, which files have that issue? currently in most of the file in security repo, there is a new line at the end of the file.
For indentation, I imported an file formatter to my Intellij and I believe it is taking care of the indentation, please let me know which file has issues?

There are still few issues introduced in #1172 that needs to be addressed:

static imports must be separated from other imports
wrong code indentation
no new line at the end of file

I separated the static imports from other imports.

For new line at the end of file, which files have that issue? currently in most of the file in security repo, there is a new line at the end of the file.

I refer only to files where new line at the EOF was removed as part of the PR: MigrationTests.java, RoleBasedAccessTest.java

For indentation, I imported an file formatter to my Intellij and I believe it is taking care of the indentation, please let me know which file has issues?

For example AccountApiTest.java:225.

There are still few issues introduced in #1172 that needs to be addressed:

static imports must be separated from other imports
wrong code indentation
no new line at the end of file

I separated the static imports from other imports.

For new line at the end of file, which files have that issue? currently in most of the file in security repo, there is a new line at the end of the file.

I refer only to files where new line at the EOF was removed as part of the PR: MigrationTests.java, RoleBasedAccessTest.java

For indentation, I imported an file formatter to my Intellij and I believe it is taking care of the indentation, please let me know which file has issues?

For example AccountApiTest.java:225.

This is MigrationTest before PR 1172: https://github.com/opensearch-project/security/blob/9328d08fff42375dfb11f9bd8141dc8e798c4f61/src/test/java/org/opensearch/security/dlic/rest/api/MigrationTests.java
There is no new line at the end of the file, so it was not removed as part of my PR.
It is the same for RoleBasedAccessTest: https://github.com/opensearch-project/security/blob/9328d08fff42375dfb11f9bd8141dc8e798c4f61/src/test/java/org/opensearch/security/dlic/rest/api/RoleBasedAccessTest.java

This is MigrationTest before PR 1172: https://github.com/opensearch-project/security/blob/9328d08fff42375dfb11f9bd8141dc8e798c4f61/src/test/java/org/opensearch/security/dlic/rest/api/MigrationTests.java
There is no new line at the end of the file, so it was not removed as part of my PR.

There was EOL at EOF, please see https://github.com/opensearch-project/security/pull/1172/files#r640238720 and https://github.com/opensearch-project/security/commit/2aa365854d881165d8b3592a9b0f57f78a9c4293

It is the same for RoleBasedAccessTest: https://github.com/opensearch-project/security/blob/9328d08fff42375dfb11f9bd8141dc8e798c4f61/src/test/java/org/opensearch/security/dlic/rest/api/RoleBasedAccessTest.java

https://github.com/opensearch-project/security/pull/1172/files#r640239711

This is MigrationTest before PR 1172: https://github.com/opensearch-project/security/blob/9328d08fff42375dfb11f9bd8141dc8e798c4f61/src/test/java/org/opensearch/security/dlic/rest/api/MigrationTests.java
There is no new line at the end of the file, so it was not removed as part of my PR.

There was EOL at EOF, please see https://github.com/opensearch-project/security/pull/1172/files#r640238720 and 2aa3658

It is the same for RoleBasedAccessTest: https://github.com/opensearch-project/security/blob/9328d08fff42375dfb11f9bd8141dc8e798c4f61/src/test/java/org/opensearch/security/dlic/rest/api/RoleBasedAccessTest.java

https://github.com/opensearch-project/security/pull/1172/files#r640239711

Fixed


Fix DateTime used wrong

I figured out the problem. Each time on connect we used player.SetDateTime(DateTime time) overload, coreclr does not convert DateTime's format internally. DateTime.Day returns 1-31 and DateTime.Month returns 1-12. But game natively expects 0-30 and 0-11 repseectively.
as per wiki:

The Date is influencing the Clouds and the Moon, it has different moon phases and it seems that the moon also has libration. The Stars aren't affected by the date. The Months and days are starting with zero, this means every day and month needs to be calculated with -1 (Month [0-11], Days [0-30]). The Week starts with Sunday. Note: When setting an invalid date eg 31.12.2020 you may experience Problems.

When I use DateTime overloaded method directly, with DateTime.Month==12 (December) lags occur for some clients.
So, I added conversion from DateTime format to "native" format as it has to be done.

thanks


Migrating to Composition Functions beta

Summary
The beta had quite a lot of changes. For one the GRPC communication is now the way Crossplane communicates with functions.
Crossplane also provides an SDK which does a lot of heavy lifting right out of the box. However due to the way we handle things the official SDK is not sufficient. It has thus been wrapped in a ServiceRuntime.
Functions now have to be packaged in order to work. Some initial make targets have been added with this change. They can probably be improved over the next few weeks/months.
Additional changes:

Naming and wording has been aligned to match Crossplane's upstream wording.
The runtime is no longer divided between desired and observed sub- objects. (up to debate)
The runtime mostly just tracks the desired changes and does marshalling of the objects. Everything else is off-loaded to the official go-sdk.
Only metadata and status of the composite can be changed! No other changes are allowed anymore.

Checklist

[ ] Categorize the PR by setting a good title and adding one of the labels:
bug, enhancement, documentation, change, breaking, dependency
as they show up in the changelog
[ ] Update tests.
[ ] Link this PR to related issues.

I will do docs in another PR.


Login throttling

Throttling one user type automatically throttles other user types...
e.g. if User class instance reaches max attempts then login attempt by Admin class instance not work...

i have same question like this, in laravel 5.5 when custom model auth refresh page logut user and could not login again


Add support for injecting extra options to pipx

Allow setting extra options for pipx installs, e.g.
"pipx:some-package" = { version = "latest", preinstall = "foo|bar" }

which would translate to:
pipx install some-package --preinstall foo --preinstall bar

These should be scoped, maybe in an "args" object

Guess this would be handy for other backends like cargo as well. Only question is how this could work with install and use where you can potentially define multiple tools at once without complicating the<EMAIL_ADDRESS>pattern. Maybe use an --args option which is applied to all specified tools or only allow one tool if args is set?


Custom tile size

@kvantricht , there was already an option in GFMap to set a custom tile_size when loading in collections, so I've just added an optional argument in worldcereal_preprocessed_inputs_gfmap to set a tilesize

Isn't it safer to explicitly state if tile_size is not None instead of doing a boolean evaluation?

aha yes, thanks for the suggestion! changes have been made


WARNING with Trailing space(s) at the end of ==--++ headers lines break(s)

from demo at http://parsedown.org/demo :
When trailing space(s) are present at the end of any header line ,
i.e. at the end of either =====, -------- or ###### lines,
renders as < p > instead of < h1 > , < h2 > , < h3 > , etc...

Thanks for the heads up :)


how can prevent the seek event when I call seekTo function?

how can prevent the seek event when I call seekTo function?

no feedback, closing.


react-dapp-v2 binance bep20 chain support

can someone help me how to add binance method and events configuration

binance is eip155:56

you can also use AppKit and import it as bsc from Wagmi


Slow query logging

Hi!
Doctrine supports slow query log?

Doctrine supports logging via the SQLLogger.
In-depth analysis of query performance is up to the db layer, though.


Reloading whole cluster failed to bring up Grafana with values.

Not sure what happened, but data wasn't forwarded to Grafana, although they seemed to have been fetched from Cassandra. Maybe it was a one off.

Not reproduced.


Swtich from moderngl-window to pure pyglet

moderngl_window was very finicky and we had to use many hacks to get it to work.. Since moderngl_window really uses pyglet in the background,  I think it's better to just do it with pyglet ourselves.

Awesome work! The moderngl-window hack was not sustainable...


the animation is stopped when i switch the window tab many times

Your system information

VelocityJS version: 2.0.5
Browser: 72.0.3626.121（32 位）
Operating System: windows 10

Checklist

Is this an issue with code?:  No
Is this an issue with documentation?: No
Have you reproduced this in other browsers?: Yes
Have you checked for updates?:Yes
Have you checked for similar open issues?: Yes

Please describe your issue in as much detail as possible:
I have a series of animations to excute, so it may take a couple of time。
when the animation is executing, if i switch the window tab to make the current site invisible,
the animation is stoped。
and then it can't resume at every time when i return the site。
(sometimes it can resume ,but not every time)
JSFiddle example showing issue in action (code):
https://codepen.io/je-lee/pen/WmgaNz

Go to https://jsfiddle.net/Rycochet/mqv9L27u/ - click the "Fork" button at the top, create the example and copy the new URL back here.

I've had a quick look through your code, and not sure what's going on - but Velocity should behave properly in the background - the result from a Velocity call is also a Promise, so you could actually use them rather than manually creating a Promise - but I'm not sure why that's not working right for you - and can't seem to reproduce it here where it's worked every time (and even finishes in the background etc).


MiniBatchProvider between epochs

Hello!
I didn't find anything in keras that I could choose how the batches are taken.
My problem is: I have some sequences so classify, and I would like to pick a window of X time steps to classify the next point. Today I had to manipulate a database creating another one with my needs, but it happens that I ran out of memory and I had to try hdf5.
Is there another way to do it in keras already implemented?
If there isn't, I think that we could have some kind of MiniBatchProvider object that could be passed into the model.fit and at each epoch_begin we could do something like this:
try:
    if mini_batch_provider is None:
	    ins_batch = slice_X(ins, batch_ids)
    else:
	     ins_batch = mini_batch_provider.get_mini_batch(ins, batch_index)
    except TypeError as err:
        raise Exception('TypeError while preparing batch. \
        If using HDF5 input data, pass shuffle="batch".\n')

Or even put the main loop of the model.fit inside a while mini_batch_provider.has_more_mini_batches()
What do you think?

The BatchIterator from nolearn maybe a good idea to have...
https://github.com/dnouri/nolearn/blob/master/nolearn/lasagne/base.py
We could have the BatchIterator not only on model.fit, but also on model.predict as in nolearn has different BatchIterators if the network is training or testing.

You can train your model on custom minibatches by using the methods model.train_on_batch and model.test_on_batch. You can refer to the documentation for more details.
You can also check out the CIFAR10 Keras example, which using this method to do real time data augmentation.


Incorrect example definition of array

I was looking at creating an example:
/* #swagger.parameters['quiz'] = {
in: 'body',
type: "object",
schema: {
"quiz_id": 1,
"questions": [0, 1, 2],
"quiz_name": "State COVID Line Up",
"quiz_instructions": "Do the thing"
}
} */
But the array for "questions" shows up as [0]. Alternatively, when I make an array of strings instead of integers, it shows up as [string]. How do I get the actual numbers and strings values to show up instead? I found this similarly happens in this documentation for myArrayofNumbers and myArrayofStrings

Hi @nettawang. Thank you for opening the issue.
This is really a bug. I'll handle it and submit in the next version.

The version 2.5.11 fixed it. If the problem persists, let me know.


Error default NullZero

when inserting or updating, the value is equal to the default value, then it is replaced with null
tag.option "default" set NullZero = true. Because of this, we get that value null
https://github.com/uptrace/bun/blob/master/schema/table.go#L380
https://github.com/uptrace/bun/blob/master/schema/field.go#L96

example
type Item struct {
	bun.BaseModel    `bun:"item"`
	ID               int       `bun:"id,pk,autoincrement"`
	NomenclatureGUID uuid.UUID `bun:"nomenclature_guid,type:binary(36)"`
	Count            int       `bun:"count,type:int,notnull,default:0"`
	Url              string    `bun:"url,type:varchar(100),notnull,default:''"`
}

item := error2.Item{
	Count: 5,
	Url:   "www.test.ru",
}
_, err = db.NewInsert().Model(&item).Exec(context.Background())

item.Url = ""
_, err = db.NewUpdate().Model(&item).WherePK().Exec(context.Background())

waiting
UPDATE `item` SET `nomenclature_guid` = '00000000-0000-0000-0000-000000000000', `count` = 5, `url` = '' WHERE (`item`.`id` = 1)
actual
UPDATE `item` SET `nomenclature_guid` = '00000000-0000-0000-0000-000000000000', `count` = 5, `url` = NULL WHERE (`item`.`id` = 1)
item.Count = 0
_, err = db.NewUpdate().Model(&item).WherePK().Exec(context.Background())

waiting
UPDATE `item` SET `nomenclature_guid` = '00000000-0000-0000-0000-000000000000', `count` = 0, `url` = '' WHERE (`item`.`id` = 1)
actual
UPDATE `item` SET `nomenclature_guid` = '00000000-0000-0000-0000-000000000000', `count` = NULL, `url` = NULL WHERE (`item`.`id` = 1)
The problem appeared after fixing issue 512
It was enough to pass the uuid=nil to be executed uuid_generate_v4()
https://github.com/uptrace/bun/pull/515/files#diff-abecd8d935ca8952a3554e15fa6989972dd0cea6de3410b6541931883b0d6d84R377

I just noticed I had the same problem when migrating an application from go-pg/pg to bun.
Thanks @dlarin for reporting this!
To clarify the issue: it is currently impossible to update a field having a default value to the zero value (should we update the title of the issue to clarify?).
Note that this is not an issue when inserting an item, since a zero value would be translated either to DEFAULT or to the default value set via the default tag (see query_insert.go#L322-L330).
Elaborating on your example, the following:
item := Item{
	Count: 5,
	Url:   "",
}
_, err = db.NewInsert().Model(&item).Exec(ctx)

would generate:
-- Using PostgreSQL, where DEFAULT placeholder is supported:
INSERT INTO "item" ("nomenclature_guid", "count", "url") VALUES (NULL, 5, DEFAULT);

-- Using a database where DEFAULT placeholder is not supported, e.q. sqlite:
INSERT INTO "item" ("nomenclature_guid", "count", "url") VALUES (NULL, 5 , '');

In both cases, the url column is set to the empty string (either by the database itself, applying the column's default, or by the query explicitly), as expected.
Then, as @dlarin showed previously, an update to the zero value is impossible as it is translated to NULL (see query_update.go#L313 which calls schema/field.go#L96-L98), since the default tag implies nullzero (see schema/table.go#L378-L381):
item.Url = ""
_, err = db.NewUpdate().Model(&item).Column("url").WherePK().Exec(context.Background())

UPDATE "item" SET "url" = NULL WHERE ("item"."id" = 1)

This is unexpected and seems like a bug.
A short-term workaround would be to use Set() or SetColumn() (see Update API) instead, but this can be tedious to implement.

same to me.

Also having this issue. Had to remove all default values, which is obviously highly problematic. Is it specific to Postgres?

Any update on this?

same here, had to remove "default" value from the model field

This issue has been automatically marked as stale because it has not had activity in the last 30 days. If there is no update within the next 7 days, this issue will be closed.

Let's keep it open, unless someone can confirm it is fixed.

In the latest version(v1.2.5), the default tag will not implies nullzero.
So this problem will no longer occur.

In the latest version(v1.2.5), the default tag will not implies nullzero. So this problem will no longer occur.

@j2gg0s Thanks for checking this 🙏
Indeed, Bun version 1.1.17 shipped with a fix from https://github.com/uptrace/bun/pull/937 (here) ensuring that the default tag no longer implies nullzero.
I've tested this change in one of my applications that would be affected by this issue, and I can confirm it is fixed if using Bun 1.1.17+. This issue can be closed as resolved!


tryParseDanish "tyvetyve" returns 40

tryParseDanish "tyvetyve" returns Some 40, which is surprising to say the least. It was never an explicit test case, though, but is a fairly standard idiom in the language, particularly when referring to years:

nitten-fireogfirs (1984)
tyve-seksten (2016)
atten-fireogtres (1864)

There are two potential ways to address such numbers:

If they are unambiguous, a better result from tryParseDanish "tyvetyve" would be Some 2020. While I suspect that they are unambiguous, anyone can, and is welcome to, prove me wrong with only a single counter-example.
If such numerals are ambiguous, the correct return value would be None.

Similar to #28


punctuation and tokenization

rasa NLU version: 0.8.5
Used backend / pipeline: npl_spacy, ner_crf,ner_synonyms
Issue:
In the sentence where is the bar? I would expect the what entity to be bar and not bar?
{
  "entities": [
    {
      "end": 18,
      "entity": "what",
      "extractor": "ner_crf",
      "start": 13,
      "value": "bar?"
    }
  ],
  "text": "where is the bar?"
}

{
  "entities": [
    {
      "end": 16,
      "entity": "what",
      "extractor": "ner_crf",
      "start": 13,
      "value": "bar"
    }
  ],
  "intent": {
    "confidence": 0,
    "name": ""
  },
  "text": "where is the bar"
}

This seems to be an issue with the tokenizer, in this case spacy. I am not sure if there is anything we can do about this (other than using a different tokenizer).

I think this got better with the current models, but also there isn't much we can do about this anyways.

I face the same issue with Rasa 1.10.1


conmon: 2.0.15 -> 2.0.16

https://github.com/containers/conmon/releases/tag/v2.0.16

Motivation for this change
Things done

[x] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Ensured that relevant documentation is up to date
[x] Fits CONTRIBUTING.md.

@ofborg test podman


Ignore e2e tests

Fix a small typo in lib.rs docs
Ignore long-running e2e tests

Clippy CI failures are fixed in https://github.com/AleoHQ/snarkOS/pull/2515

CI failure is fixed in https://github.com/AleoHQ/snarkOS/pull/2523


Updating .remote-sync.json while transferring causes freeze

While it might be obvious why and it's not a major issue, thought I'd let you know though.
Had to restart Atom and all was well afterwards.

Thanks @Jany-M we will look into this.


Coming from detours what are the equivalent API

If for example I have this kind of code on a DLL using C++
typedef signed int (__cdecl *pKey)(int a1, int a2, int a3);
signed int __cdecl myKey(int a1, int a2, int a3);
pKey myKey2 = (pKey)(0x60FFFF);

int (WINAPI *pConnect)(SOCKET, const struct sockaddr*, int) = connect;
int WINAPI myConnect(SOCKET s, const struct sockaddr *name, int namelen);

DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)pConnect, myConnect);
DetourTransactionCommit();

How would I do this on EasyHook, a API call and a address function call? I can't find much tutorials for easyhook compared to detours.

Take a look at the old unmanaged api doco: https://easyhook.github.io/downloads/EasyHook26UnmanagedAPI.pdf
LhInstallHook is what you are looking at.

Would you be so kind as to show some examples using send and a specific address to be hooked? Just the equivalent of what I asked. :) Thank you

Here you go (tested in VS2013 only). I'm using the Beep function instead as this is easier for me to test and prepare a sample for.
Preparation:

Create a new C++ console app.
Install the EasyHook Native Package from NuGet (don't get the "EasyHook" one, you need the "EasyHook Native Package")

Here is the code for the sample console app:
#include <string>
#include <iostream>
#include <Windows.h>
#include <easyhook.h>

using namespace std;

BOOL(WINAPI *pBeep)(_In_ DWORD, _In_ DWORD) = Beep;
BOOL WINAPI myBeepHook(_In_ DWORD dwFreq, _In_ DWORD dwDuration)
{
	cout << "\n****All your beeps belong to us!\n\n";
	return Beep(dwFreq + 800, dwDuration);
}

int _tmain(int argc, _TCHAR* argv[])
{
	HOOK_TRACE_INFO hHook = { NULL };

	NTSTATUS result = LhInstallHook(pBeep, myBeepHook, NULL, &hHook);
	if (FAILED(result))
	{
		wstring s(RtlGetLastErrorString());
		wcout << "Failed to install hook: ";
		wcout << s;
		cout << "\n\nPress any key to exit.";
		cin.get();
		return -1;
	}

	cout << "Beep after hook installed but not enabled.\n";
	Beep(500, 500);

	cout << "Activating hook for current thread only.\n";
	// If thread id is set to 0, defaults to GetCurrentThreadId()
	ULONG ACLEntries[1] = { 0 };
	//ACLEntries[0] = GetCurrentThreadId();
	LhSetInclusiveACL(ACLEntries, 1, &hHook);

	cout << "Beep after hook enabled.\n";
	Beep(500, 500);

	cout << "Uninstall hook\n";
	LhUninstallHook(&hHook);

	cout << "Beep after hook uninstalled\n";
	Beep(500, 500);

	cout << "\n\nRestore ALL entry points of pending removals issued by LhUninstallHook()\n";
	LhWaitForPendingRemovals();

	cout << "Press any key to exit.";
	cin.get();

	return 0;
}

Which results in the following output:
Beep after hook installed but not enabled.
Activating hook for all threads.
Beep after hook enabled.

****All your beeps belong to us!

Uninstall hook
Beep after hook uninstalled

Restore ALL entry points of pending removals issued by LhUninstallHook()
Press any key to exit.

For an exported address just use GetProcAddress, e.g. for the example above you could have used:
NTSTATUS result = LhInstallHook(
    GetProcAddress(GetModuleHandleW(L"kernel32"), "Beep"),
    myBeepHook, NULL, &hHook);

This has been added as a tutorial to the https://easyhook.github.io site


Remove "loading..." when asset has been loaded

I am using type: "iframe" to load image assets. Reason: type: "image" disables scrolling which doesn't make sense in my case. When using type: "iframe" a loading label is placed behind the iframe itself. If the content of the iframe doesn't fit the full width or height you can see the loading label which can be confusing.
An alternative could be to add an option to type: "image" to enable scrolling and disable offset :)

The remaining loading... label is due to my laziness... 🤦  It's visible when the site has no background color. I remember I noticed it at some time but it went off my mind then. It should be hide when the iframe content is loaded.

type: "image" disables scrolling which doesn't make sense in my case.

I don't think the addon prevents scrolling. The addon panel is not scrollable by default. For type: "image" preview, you can pan around by click-and-drag.

For type: "image" preview, you can pan around by click-and-drag

True. Not yet noticed :)
Thanks for your response and for looking into it!

Fixed in v5.4.4.

Test story
CHANGELOG

Thx :)


koreader: fix and update

Description of changes
koreader: fix startup
koreader looks for fonts/NotoSans-Regular.ttf at startup but our version
of noto fonts provide different files under different names (eg
NotoSans[wdth,wght].ttf) so koreader crashes.
Let's use the font files provided in the source repo instead. (they are
not in the debian package it seems)
koreader: 2022.08 -> 2023.04
changelogs:
https://github.com/koreader/koreader/releases/tag/v2022.10
https://github.com/koreader/koreader/releases/tag/v2022.11
https://github.com/koreader/koreader/releases/tag/v2023.01
https://github.com/koreader/koreader/releases/tag/v2023.03
https://github.com/koreader/koreader/releases/tag/v2023.04
Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[x] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
23.05 Release Notes (or backporting 22.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

#229766

pardon the bump: i saw discussion about a from-source build in this PR so if anyone wants to pursue that i've got a working version over here. its approach is to include all of KOreader's dependencies in srcs and then let KOreader build everything from source as it ordinarily would, just without net requests.
i suspect it needs an update script for that approach to be maintainable, and i haven't inspected the closure to make sure it's not holding onto any refs that it shouldn't. not sure i'll get around to those things anytime soon, but if anyone else has the drive to take it across the finish line i'm happy to assist/review/test.


Add severity to passed checks

Currently, severity is None for passed checks now. Can we add severity to passed checks as well?
https://github.com/tfsec/tfsec/blob/e5d9350ed9c01bac72aa6d0c0eefe6e26563f8d0/internal/app/tfsec/scanner/scanner.go#L69

Hey @knqyf263  - the Severity of the result is set on creation, there is nothing in the check rule which defines what the severity would be; this might be because a check rule could return different severities depending on what is found during testing. A good example of this is AWS085, which returns an error if you don't use aggregation at all, and a warning if you do use it, but the setting used is inadequate
https://github.com/tfsec/tfsec/blob/d8b8d646671d24de69c9d9736ee3909bb4576ece/internal/app/tfsec/rules/aws085.go#L85
When the passed check result is created, we don't know what the severity would have been for the rule so can't supply anything.

Thanks. Yes, that's what I want to discuss. In my opinion, the two check rules are essentially different.
https://github.com/tfsec/tfsec/blob/d8b8d646671d24de69c9d9736ee3909bb4576ece/internal/app/tfsec/rules/aws085.go#L70-L78
https://github.com/tfsec/tfsec/blob/d8b8d646671d24de69c9d9736ee3909bb4576ece/internal/app/tfsec/rules/aws085.go#L80-L98
The first one checks if a resource aws_config_configuration_aggregator has account_aggregation_source, then the second/third one checks if all_regions under account_aggregation_source is true. I understand the motivation to put them together since they are both about account_aggregation_source, but if the impacts are different, it seems like different checks.
Therefore, if the resource passed those two check rules, we might have two passed checks. One is Error and the other is Warning.
If it doesn't make sense, we might say this check has a maximum chance of detecting Error, so the severity of the entire check is Error.
In short, "we're trying to identify this security issue by this check, but we don't know the severity if it passes the check" might not be intuitive.
Any other suggestions?

Hey @knqyf263  - agree on this, I've started a change, hopefully have it done tomorrow

Amazing🎉  Thanks for the quick update!!!!


Unexpected behaviour when splitting MathTex strings

Description of bug / unexpected behavior
When using double braces to split a MathTex string, the index to subset it and retrieve the relevant substring becomes inconsistent.
Expected behavior
I assumed that a single MathTex string t with a single pair of double braces inside it would be subdivided in 3 submobjects (as is the case), and that retrieving the substring inside the double braces could be done via t[1] but the indices do not seem to follow the order of the submobjects list.
How to reproduce the issue

class MathTexUnexpectedBehaviour(Scene):
    def construct(self):
        t = MathTex("\\int{{_a}}^b dx = b - a")
        self.add(t)

        # print(t.submobjects)
        # [SingleStringMathTex('\\int'), SingleStringMathTex('_a'), SingleStringMathTex('^b dx = b - a')]

        # print(t[1])
        # SingleStringMathTex('_a')

        t[1].set_color(RED)
        # colours '^b', not '_a'

        # Alternatively
        # t.submobjects[1].set_color(RED)
        # colours '^b', not '_a'

Additional media files

Logs
Terminal output

PASTE HERE OR PROVIDE LINK TO https://pastebin.com/ OR SIMILAR

System specifications
System Details

OS (with version, e.g Windows 10 v2004 or macOS 10.15 (Catalina)):
RAM:
Python version (python/py/python3 --version):
Installed modules (provide output from pip list):

PASTE HERE

LaTeX details

LaTeX distribution (e.g. TeX Live 2020): TeX Live 2021
Installed LaTeX packages:

FFMPEG
Output of ffmpeg -version:
PASTE HERE

Additional comments

I am also a bit confused by the fact that the substring that gets coloured in red is just ^b instead of ^b dx = b - a, which is what actually correspond to one of t.submobjects. If t did not have any double braces at all, then t[0][1] would indeed correspond to ^b, so I'm wondering if t[1] in the example above pointing to the same substring is somehow related.

Hello, and sorry for the long wait.
There is, indeed, a bug, but it's different from what you think. Consider this scene:
class MathTexUnexpectedBehaviour(Scene):
    def construct(self):
        t = MathTex("\\int{{_a}}^b dx = b - a")
        self.add(t)

        self.wait(0.5)
        self.play(t[0].animate.move_to(4*LEFT).set_color(RED))
        self.play(t[2].animate.move_to(4*RIGHT).set_color(BLUE))
        self.play(t[1].animate.move_to(ORIGIN).set_color(GREEN))

https://github.com/user-attachments/assets/70e9d356-806f-469d-9ab7-2c70b1251388
So, the first submobject is correctly the integral symbol, but the second one corresponds to the upper bound b and the third one is the rest. It's as if the string you passed was "\\int{{^b}}_a dx = b - a" instead of "\\int{{_a}}^b dx = b - a".
Why? Consider this other scene:
class SSMTSubmobjects(ThreeDScene):
    def construct(self):
        self.camera.background_color = GRAY_E

        t = SingleStringMathTex(r"\int_a^b dx = b - a").scale(3)
        self.add(t)
        self.add(index_labels(t, label_height=0.5).set_color(RED))

Notice how I use SingleStringMathTex here, which corresponds to a submobject of MathTex. SingleStringMathTex's submobjects are the individual symbols.
When I call index_labels(t), it makes visual indices for the submobjects of t. Notice how the integral symbol is properly indexed as 0, but the upper bound is 1, the lower bound is 2, and so on.
The issue here is that the Tex mobjects first generate a TeX file, followed by an SVG file which describes how to draw the generated symbols. It seems like the process of creating the SVG file decided that the upper bound comes before the lower bound. Then, Manim grabs this SVG file and renders its contents. MathTex splits the substrings and creates a different SingleStringMathTex for each one of them, and the way it decides which characters belong to which submobject is via the string lengths. MathTex only sees that the 2nd substring is "_a" and it corresponds to a single character, so it fetches one character from the remaining ones, without realizing that the next one corresponds to "^b", not "_a". It has worked very well in general, but now I see that there can be exceptions to that depending on the order in which submobjects are rendered.
Honestly, I don't know if there is an easy fix for this which doesn't involve rewriting huge chunks of code, because I don't see any straightforward way for Manim to know that the next symbol in the sequence of submobjects maybe doesn't correspond to the intended character in the original string. However, maybe someone else well versed in these Manim internals might find a solution.
In the meantime, you can work around this issue by first specifying the upper bound and then the lower bound, like this: MathTex("\\int^b{{_a}} dx = b - a").

Thanks for the answer @chopan050, in the end that's what I did stick to back then (integral, then upper bound, then lower bound).
I see from what you said and from the related issue that it might not be realistically fixable (not without too much overhead at least). It's probably fine for most cases, perhaps a note in the documentation would help steering people in the right direction from the start?

perhaps a note in the documentation would help steering people in the right direction from the start?

I agree. If anyone wants to make a PR for this, they're welcome to do so!