Implement Cancellable or interruptible setTimeout in javy

How can I implement Implement Cancellable or interruptible timeout in javy ?
I am right now polyfilling setTimeout like below -
fn set_timeout_api() -> impl FnMut(&JSContextRef, JSValueRef, &[JSValueRef]) -> Result<JSValue> {
    move |context: &JSContextRef, _this: JSValueRef, args: &[JSValueRef]| {
        let callback = args.get(0).unwrap();
        let default = to_qjs_value(context, &JSValue::Int(0)).unwrap();
        let timeout = args.get(1).unwrap_or(&default);
        thread::sleep(Duration::from_millis(
            timeout
                .as_f64()
                .expect("Unable to convert timeout to milliseconds") as u64,
        ));
        println!("timeout reached");
        if callback.is_function() {
            let mut argsvec: Vec<JSValueRef> = vec![];
            if args.len() > 2 {
                for i in 2..args.len() {
                    argsvec.push(args.get(i).unwrap().to_owned())
                }
            }
            let res = callback.call(
                &to_qjs_value(context.to_owned(), &JSValue::Undefined).unwrap(),
                &argsvec,
            );
        }
        Ok(JSValue::Undefined)
    }
}

But it is not cancellable it will only be cleared after timeout .

Please could you guys help ?

According to the setTimeout API, order to make the timeout cancellable, you'd need to use the clearTimeout API. So, roughly, you'd need to return an id from your implementation that can be later passed to clearTimeout. Have you tried this approach? Or is it something different what you're trying to achieve?
Regarding the snippet above, it's also worth noting that there's still work to be done when it comes to Wasm atomics/threads.

You may want to consider using a different implementation than thread::sleep. thread::sleep will block the JS event queue which will make canceling it from within JS impossible. You could have something on the host side cancel it.

@jeffcharles I was considering exposing a async function from host to guest ... but again wrap_callback takes a synchronous function as argument , so I won't be able to call that async function asynchronously from guest wasm in setTimeout polyfill method .
Could you please tell me more what I should do ? Or suggest me some alternatives .... I am fine with any implementation for polyfilling setTimeout , all I want is it to be cancellable .

You could take a look at how QuickJS implemented setTimeout in https://github.com/bellard/quickjs/blob/d378a9f3a583cb787c390456e27276d0ee377d23/quickjs-libc.c#L2034. You can see they have a recurring check for each timer in a poll function that's run inside of a loop to see if any timers have expired in https://github.com/bellard/quickjs/blob/d378a9f3a583cb787c390456e27276d0ee377d23/quickjs-libc.c#L2326.
We've also switched off of quickjs-wasm-rs and on to rquickjs in #618 for Javy. So it may be worth investigating if there's an API in rquickjs like Ctx.spawn that you can use.


fix: Horizontal axis sorting (column charts)

Fixes #1063.
This PR fixes broken horizontal axis sorting in column charts. It turns out that the sorting logic (makeDimensionSorters) was not connected to grouped & stacked bar charts – now this should work correctly, including sorting by measure.
How to test

Recreate the chart from #1063.
See that it's possible to sort by auto, measure and name (including reverse-sort).

Thanks @bprusinowski !


Pressable Trial

This PR is opened to test Pressable migration
Preview: https://deploy-preview-120--rne-playground.netlify.app/

I opened it to check if changes are working on web


Remove uses of Model._meta.description

Due to harsher restrictions on model Meta attributes in Django 1.6, it is no longer possible to add a description attribute. This commit removes any code in Wagtail that still tried to rely on a description attribute.
I found this while searching the code base for bare except: clauses, so this is semi-related to #1684

:+1:
One more reference to it here: https://github.com/torchbox/wagtail/blob/f8d2a9f456da859c801da8badc7d39e7f608ad0c/wagtail/wagtailadmin/templates/wagtailadmin/pages/add_subpage.html#L24

I'm happy for this to go. In future I definitely want this feature back in, but the reality is that we can't use it as it stands.

Updated the PR to remove the missed template filter, thanks @kaedroho


[Feature] Find a better solution for situations where a log_prefix is not provided for the S3 Bucket

Is your feature request related to a problem? Please describe.
If you don't specify a log_prefix for the S3 logging bucket, each time the pipeline runs AWS generates a new prefix based on the pipeline name and SSM Execution hash, and the end result is that your logs go into unpredictably names prefixes that aren't easy to sort by date, and are maybe impossible to identify unless you get an error message from the pipeline explaining where the logs were sent.
Describe the solution you'd like
I don't know, maybe just override an empty log_prefix with the pipeline name? Anything is better than the default behavior I think.
Describe alternatives you've considered
I mean, we're technically taking away functionality by forcing a prefix, in case there's anyone out there who wants to do things the bad way?  We could leave it as is and rely on making logs more easy to access another way (cloudwatch? I don't know)
Additional context
you told me to make this issue in slack! so i did.

Would this be better handled in documentation?


Upgrade and add support to Azure Adventure Game

Upgrade to .net 6.0
Use Service Principal that score to one subscription.
Add project to generation Azure Adventure Game tasks.json by C# reflection.
Change to load Azure Test executable from file share.
Change to use CDK-TK for deployment as the deployment is not workable with ARM anymore.

@leestott
Please help merge it thanks.


Remote access

Has anyone got this working outside the network? I'm using nabu casa to access my HA...

You appear to be asking about integration with home assistant.
RTSPtoWeb supports everything needed to make remote access work, however, there are two missing pieces for use in home assistant:

Stun server configuration in the add-on (in flight https://github.com/allenporter/stream-addons/pull/59)
Improvements to frontend webrtc player (in flight https://github.com/home-assistant/frontend/pull/12084)

However, since these are not really about RTSPtoWeb server itself (which already supports everything we need) we should probably move this discussion to another place.  I've made https://github.com/allenporter/stream-addons/issues/62 to track this.

Also see https://github.com/deepch/RTSPtoWeb/issues/138
Duplicate issue #138


Auto-indent wrong after final keyword

Haxe code sample
	function foo()
		if (true)
		{
			final i = 1;
			|
		}

Note: "|" is the caret position.
Start typing at the caret position, the code is auto-indented at the same level as function.
If final i is replaced with var i then indentation is correct. I guess it's related to the final keyword used in this context.

This could be related to https://github.com/fdorg/flashdevelop/issues/1925


docs: fix links in index.mdx and refactor simple example page

@khuezy do we want double or single quotes? :) as it is live now theres a mix

Thanks for the PR, I don't know if we have a lint rule for the quotes. But personally, I use single quote for ts and double quotes for HTML.

Thanks for the PR, I don't know if we have a lint rule for the quotes. But personally, I use single quote for ts and double quotes for HTML.

same here :)


chef-client should use system CA store

Description
Currently chef-client ignores system-wide CA store. For example, when adding company CA certificate as trusted, one has to add it twice:

first into system store (dropping into /etc/pki/ca-trust/source/anchors/ and then invoking /usr/bin/update-ca-trust; on some distributions it's /usr/local/share/ca-certificates/ and update-ca-certificates or trust anchor CA.crt); this makes the CA trusted by most frameworks, including Java
second into node['chef_client']['conf_dir'] / 'trusted_certs' directory; this works only for chef-client

Using multiple location for the same data is cumbersome and error prone, system administrator can easily forget about private directories for each application. That's why system CA database is consolidated on Linux.
Windows platform also have system CA store, which should be used by chef-client, too.
More informations:
https://fedoraproject.org/wiki/Features/SharedSystemCertificates
https://p11-glue.freedesktop.org/sharing-trust-policy.html
Chef Version
12.4.3
Platform Version
RHEL 7.
Replication Case

Use remote_file resource pointing to HTTPS server with certificate signed by private CA
Make CA.crt trusted systemd-wide (see Description)
Run chef-client and observe OpenSSL error about untrusted certificate.

Workaround

Put CA.crt in /etc/chef/trusted_certs/

Then we're exposed to bugs caused by ancient system CA stores on old distros that we support like RHEL5.
We made a decision a long time ago to ship our own.

Seriously?
If there's a bug in RHEL5, it need to be reported and fixed anyway.

If you want to read the long explanation of why this isn't possible, check out https://github.com/kennethreitz/requests/issues/2966 (yes I know that's for a different project, most of the same issues apply).

Having to configure SSL for multiple services working around chef is extremely cumbersome - And to not use the System stores in windows also drives me mental... Especially as the documentation literally only works for the chef-client.
I have to say, there has been discussions internally at my work about how poor the documentation and also implementation of this. Regardless of how many bugs there are with the windows system ca store, getting all of the services working with SSL is also a tire fire that is putting of many of our devs... SSL implementation should not be as disjointed as it is in chef...


Is there a way to track the splats to the images?

Hello,
With COLMAP, it is possible to extract data to determine which images and keypoints correspond to specific 3D points and to identify which images have been matched.
I am wondering if it is possible to track which Gaussian splats correspond to which keypoints, along with their associated image files and pixel coordinates. Is there a way to "tap" into the code to keep track of this when using Nerfstudio?
Specifically, I want to identify the originating image and pixel coordinate for each Gaussian splat (with respect to the point cloud, not the splat itself). While COLMAP provides this information for 3D points, I would like to know if it is possible to extend this tracking to the exported PLY file for the splats.

https://github.com/nerfstudio-project/gsplat/blob/409bcd3cf63491710444e60c29d3c44608d8eafd/gsplat/project_gaussians.py#L51C7-L51C70
You can use the xys from the project_gaussians method to get the respective 2D pixel points from the point cloud with respect to that particular camera pose.

Thank you!!
Do you possibly have a small code snippet that I could use as a reference?

As of now, I don't have any. Refer to these issues; this will really help you.
https://github.com/nerfstudio-project/gsplat/issues/77#issue-2015727922
https://github.com/nerfstudio-project/gsplat/issues/87#issue-2047885540

So I tried to use that function, and take in both xyz, scale, rotation to produce the required input, as well as reading the ply file and transforms.json but for some reason why tensors of xys is very large, ranging from 0 to 150000... I did not expect them to be this large?
import numpy as np
import torch
from plyfile import PlyData
import json
import tkinter as tk
from tkinter import filedialog
import gsplat
import sys

def parse_ply(file_path):
    plydata = PlyData.read(file_path)
    vertices = plydata['vertex']
    xyz = np.vstack([vertices['x'], vertices['y'], vertices['z']]).T
    scale = np.vstack([vertices['scale_0'], vertices['scale_1'], vertices['scale_2']]).T
    rotation = np.vstack([vertices['rot_0'], vertices['rot_1'], vertices['rot_2'], vertices['rot_3']]).T
    return xyz, scale, rotation

def load_transform_json(file_path):
    with open(file_path, 'r') as file:
        data = json.load(file)
    return data

def normalize_quaternions(quats):
    norms = np.linalg.norm(quats, axis=1, keepdims=True)
    normalized_quats = quats / norms
    return normalized_quats

def progress_update(current, total):
    progress = (current / total) * 100
    sys.stdout.write(f"\rProgress: {progress:.2f}%")
    sys.stdout.flush()

def project_and_plot_frame(xyz3d, scales, quats, camera_params, frame):
    viewmat = torch.tensor(frame['transform_matrix'], dtype=torch.float32)
    fx = camera_params["fl_x"]
    fy = camera_params["fl_y"]
    cx = camera_params["cx"]
    cy = camera_params["cy"]
    img_height = camera_params["h"]
    img_width = camera_params["w"]
    glob_scale = 1.0
    block_width = 16
    clip_thresh = 0.1

    if torch.cuda.is_available():
        viewmat = viewmat.cuda()

    print("Projecting 3D Gaussians to 2D...")
    xys, depths, radii, conics, compensation, num_tiles_hit, cov3d = gsplat.project_gaussians(
        xyz3d, scales, glob_scale, quats, viewmat, fx, fy, cx, cy, img_height, img_width, block_width, clip_thresh
    )

    print("\nPrinting tensor content for comparison...")

    torch.set_printoptions(threshold=10)  # Set the print threshold to 10
    print(f"xys (2D projections):\n{xys[:10]}")
    print(f"depths (z-depths):\n{depths[:10]}")
    print(f"radii (2D gaussian radii):\n{radii[:10]}")
    print(f"conics (conic parameters):\n{conics[:10]}")
    print(f"compensation (density compensation):\n{compensation[:10]}")
    print(f"num_tiles_hit (tiles hit per gaussian):\n{num_tiles_hit[:10]}")
    print(f"cov3d (3D covariances):\n{cov3d[:10]}")
    print("\nProcessing complete.")

def main():
    # File selection dialog
    root = tk.Tk()
    root.withdraw()

    ply_file_path = filedialog.askopenfilename(title="Select PLY File", filetypes=[("PLY files", "*.ply")])
    transform_json_path = filedialog.askopenfilename(title="Select Transform JSON File", filetypes=[("JSON files", "*.json")])

    if not ply_file_path or not transform_json_path:
        print("File selection cancelled.")
        return

    print("Parsing PLY file...")
    xyz, scale, rotation = parse_ply(ply_file_path)
    print(f"Extracted {xyz.shape[0]} points from PLY file.")

    print("Loading transform JSON...")
    transform_data = load_transform_json(transform_json_path)
    camera_params = transform_data

    xyz3d = torch.tensor(xyz, dtype=torch.float32)
    scales = torch.tensor(scale, dtype=torch.float32)

    print("Normalizing quaternions...")
    normalized_quats = normalize_quaternions(rotation)
    quats = torch.tensor(normalized_quats, dtype=torch.float32)

    if torch.cuda.is_available():
        print("CUDA is available. Moving tensors to GPU.")
        xyz3d = xyz3d.cuda()
        scales = scales.cuda()
        quats = quats.cuda()
    else:
        print("CUDA is not available. Running on CPU.")

    for frame in camera_params['frames']:
        print(f"Processing frame: {frame['file_path']}")
        project_and_plot_frame(xyz3d, scales, quats, camera_params, frame)

if __name__ == "__main__":
    main()

xys (2D projections):
tensor([[35513.7109,   377.4275],
[32701.4141,  1122.3706],
[    0.0000,     0.0000],
...,
[    0.0000,     0.0000],
[67154.5703,  -507.2152],
[31027.0039,  1390.0424]], device='cuda:0')
depths (z-depths):
tensor([0.3947, 0.4317, 0.0000, 0.3716, 0.0000, 0.1823, 0.4330, 0.0000, 0.2000,
0.4450], device='cuda:0')
radii (2D gaussian radii):
tensor([153113, 120826,      0, 176440,      0, 373944, 164592,      0, 334831,
144265], device='cuda:0', dtype=torch.int32)
conics (conic parameters):
tensor([[5.7169e-10, 4.6618e-10, 1.5412e-09],
[8.2018e-10, 8.2071e-10, 3.9233e-09],
[0.0000e+00, 0.0000e+00, 0.0000e+00],
...,
[0.0000e+00, 0.0000e+00, 0.0000e+00],
[1.9080e-10, 1.3240e-10, 2.3889e-10],
[4.3249e-10, 7.9552e-12, 1.5409e-09]], device='cuda:0')
compensation (density compensation):
tensor([1.0000, 1.0000, 0.0000, 1.0000, 0.0000, 1.0000, 1.0000, 0.0000, 1.0000,
1.0000], device='cuda:0')
num_tiles_hit (tiles hit per gaussian):
tensor([47628, 47628,     0, 47628,     0, 47628, 47628,     0, 47628, 47628],
device='cuda:0', dtype=torch.int32)
cov3d (3D covariances):
tensor([[34.5615,  1.5018,  0.6180, 40.5671,  2.4734, 34.0930],
[30.7935,  2.2675,  1.0720, 34.1519, -4.6022, 17.5621],
[ 0.0000,  0.0000,  0.0000,  0.0000,  0.0000,  0.0000],
...,
[ 0.0000,  0.0000,  0.0000,  0.0000,  0.0000,  0.0000],
[38.9945,  6.2411,  7.7874, 42.0054,  4.3823, 52.2032],
[48.7078, -4.1139,  2.3271, 41.7742,  5.0261, 47.7809]],
device='cuda:0')

Any advice is appreciated and helpful. Thank you.
I plan to segment images for objects and see which gaussian 2D points ends up in specific areas in the images and then give those specific points an object ID.

I plan to segment images for objects and see which gaussian 2D points ends up in specific areas in the images and then assign those specific points an object ID. So when I click on a specific Point3D in space in ply file, I will know to what object segment it belongs to and to what image it comes from. This is important for example if I want to view the images that contributed to that point. In COLMAP, it is for example possible to select a single point in 3D space and see which images that contributes to it.

Yes, what you are trying to achive is possible, although you have sort out lot of logics to achive it,
All the best

I think the problem is with your camera extrinctis. Convert the camera from c2w to w2c
transform_matrix_viewmats = torch.tensor(frame['transform_matrix'], dtype=torch.float32).to(device)

R = transform_matrix_viewmats[:3, :3]  # 3 x 3
T = transform_matrix_viewmats[:3, 3:4]  # 3 x 1

R_edit = torch.diag(torch.tensor([1, -1, -1], device=device, dtype=R.dtype))
R = R @ R_edit

R_inv = R.T
T_inv = -R_inv @ T

viewmats = torch.eye(4, device=R.device, dtype=R.dtype)
viewmats[:3, :3] = R_inv
viewmats[:3, 3:4] = T_inv

Try it and let me know, if you are facing any issues

I tried this, and certainly worked a little better indeed! Thank you very much! However, it seems that the camera is being projected "outside" the whole point cloud. I assume tha camera is correctly rotated, but is placed well outside the intended viewpoint, instead of actual location we see in the Vizer when we train the Gaussian Splat with Nerfstudio.
import numpy as np
import torch
from plyfile import PlyData
import json
import tkinter as tk
from tkinter import filedialog
import gsplat
import sys
import matplotlib.pyplot as plt

def parse_ply(file_path):
    plydata = PlyData.read(file_path)
    vertices = plydata['vertex']
    xyz = np.vstack([vertices['x'], vertices['y'], vertices['z']]).T
    scale = np.vstack([vertices['scale_0'], vertices['scale_1'], vertices['scale_2']]).T
    rotation = np.vstack([vertices['rot_0'], vertices['rot_1'], vertices['rot_2'], vertices['rot_3']]).T
    print("Printing first 10 xyz values", xyz[:10])
    return xyz, scale, rotation

def load_transform_json(file_path):
    with open(file_path, 'r') as file:
        data = json.load(file)
    return data

def normalize_quaternions(quats):
    norms = np.linalg.norm(quats, axis=1, keepdims=True)
    normalized_quats = quats / norms
    return normalized_quats

def progress_update(current, total):
    progress = (current / total) * 100
    sys.stdout.write(f"\rProgress: {progress:.2f}%")
    sys.stdout.flush()

def project_and_plot_frame(means3d, scales, quats, camera_params, frame):
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    transform_matrix_viewmats = torch.tensor(frame['transform_matrix'], dtype=torch.float32).to(device)

    R = transform_matrix_viewmats[:3, :3]  # 3 x 3
    T = transform_matrix_viewmats[:3, 3:4]  # 3 x 1

    R_edit = torch.diag(torch.tensor([1, -1, -1], device=device, dtype=R.dtype))
    R = R @ R_edit

    R_inv = R.T
    T_inv = -R_inv @ T

    viewmats = torch.eye(4, device=R.device, dtype=R.dtype)
    viewmats[:3, :3] = R_inv
    viewmats[:3, 3:4] = T_inv

    fx = camera_params["fl_x"]
    fy = camera_params["fl_y"]
    cx = camera_params["cx"]
    cy = camera_params["cy"]
    img_height = camera_params["h"]
    img_width = camera_params["w"]
    glob_scale = 1.2
    block_width = 16
    clip_thresh = 0.01

    if torch.cuda.is_available():
        means3d = means3d.cuda()
        scales = scales.cuda()
        quats = quats.cuda()

    xys, depths, radii, conics, compensation, num_tiles_hit, cov3d = gsplat.project_gaussians(
        means3d.contiguous(), scales.contiguous(), glob_scale, quats.contiguous(),
        viewmats, fx, fy, cx, cy, img_height, img_width, block_width, clip_thresh
    )

    print("Checking projection results...")
    print(f"xys (2D projections):\n{xys[:10]}")
    print(f"depths (z-depths):\n{depths[:10]}")

    """Filter out invalid projections"""
    valid_indices = (xys[:, 0] > 0) & (xys[:, 1] > 0) & (xys[:, 0] < img_width) & (xys[:, 1] < img_height) & (depths > clip_thresh)
    xys_filtered = xys[valid_indices].cpu().numpy()

    print(f"Filtered xys (2D projections):\n{xys_filtered[:10]}")

    if xys_filtered.size == 0:
        print("No valid points to plot for this frame.")
        return

    """Plotting in 2D"""
    print("\nPlotting valid 2D projections...")
    plt.figure(figsize=(10, 8))
    plt.scatter(xys_filtered[:, 0], xys_filtered[:, 1], c='blue', s=1)
    plt.xlabel('X (pixels)')
    plt.ylabel('Y (pixels)')
    plt.title(f'Valid 2D Projections for {frame["file_path"]}')
    plt.gca().invert_yaxis()  # Invert Y axis to match image coordinates
    plt.show()

def main():
    # File selection dialog
    root = tk.Tk()
    root.withdraw()

    ply_file_path = filedialog.askopenfilename(title="Select PLY File", filetypes=[("PLY files", "*.ply")])
    transform_json_path = filedialog.askopenfilename(title="Select Transform JSON File", filetypes=[("JSON files", "*.json")])

    if not ply_file_path or not transform_json_path:
        print("File selection cancelled.")
        return

    print("Parsing PLY file...")
    xyz, scale, rotation = parse_ply(ply_file_path)
    print(f"Extracted {xyz.shape[0]} points from PLY file.")

    print("Loading transform JSON...")
    transform_data = load_transform_json(transform_json_path)
    camera_params = transform_data

    means3d = torch.tensor(xyz, dtype=torch.float32)
    scales = torch.tensor(scale, dtype=torch.float32)

    print("Normalizing quaternions...")
    normalized_quats = normalize_quaternions(rotation)
    quats = torch.tensor(normalized_quats, dtype=torch.float32)

    if torch.cuda.is_available():
        print("CUDA is available. Moving tensors to GPU.")
        means3d = means3d.cuda()
        scales = scales.cuda()
        quats = quats.cuda()

    for frame in camera_params['frames']:
        print(f"Processing frame: {frame['file_path']}")
        project_and_plot_frame(means3d, scales, quats, camera_params, frame)

if __name__ == "__main__":
    main()

xy_to_pix = torch.floor(xys).long()
valid_indices = (
    (xy_to_pix[:, 0] > 0)
    & (xy_to_pix[:, 0] < W)
    & (xy_to_pix[:, 1] > 0)
    & (xy_to_pix[:, 1] < H)
)

xy_to_pix = xy_to_pix[valid_indices]
valid_colors = colors[valid_indices]

u = xy_to_pix[: ,0]
v = xy_to_pix[: ,1]

image = np.zeros((H, W, 3), dtype=np.uint8)

u_int = u.long().cpu().numpy()
v_int = v.long().cpu().numpy()
for idx in range(len(u_int)):
    color_point = (valid_colors[idx] * 255).int().cpu().numpy()
    image[v_int[idx], u_int[idx]] = color_point

plt.imshow(image)
plt.axis('off')
plt.show()

Try plotting this verify your ouput

xy_to_pix = torch.floor(xys).long()
valid_indices = (
    (xy_to_pix[:, 0] > 0)
    & (xy_to_pix[:, 0] < W)
    & (xy_to_pix[:, 1] > 0)
    & (xy_to_pix[:, 1] < H)
)

xy_to_pix = xy_to_pix[valid_indices]
valid_colors = colors[valid_indices]

u = xy_to_pix[: ,0]
v = xy_to_pix[: ,1]

image = np.zeros((H, W, 3), dtype=np.uint8)

u_int = u.long().cpu().numpy()
v_int = v.long().cpu().numpy()
for idx in range(len(u_int)):
    color_point = (valid_colors[idx] * 255).int().cpu().numpy()
    image[v_int[idx], u_int[idx]] = color_point

plt.imshow(image)
plt.axis('off')
plt.show()

Try plotting this verify your ouput

I tried to plot it, looks a little better but it seems I am very zoomed out and I see the whole point cloud instead. I am not sure if the camera is in the right position because

I see the whole point cloud in the plot
No limit to the depth, so everything is rendered, even the farthest points.

Thanks a lot.

Hi, Are you successful with your work? did it worked ?

transform_matrix_viewmats = torch.tensor(frame['transform_matrix'], dtype=torch.float32).to(device)

R = transform_matrix_viewmats[:3, :3]  # 3 x 3
T = transform_matrix_viewmats[:3, 3:4]  # 3 x 1

R_edit = torch.diag(torch.tensor([1, -1, -1], device=device, dtype=R.dtype))
R = R @ R_edit

R_inv = R.T
T_inv = -R_inv @ T

viewmats = torch.eye(4, device=R.device, dtype=R.dtype)
viewmats[:3, :3] = R_inv
viewmats[:3, 3:4] = T_inv

Hello,
I skipped this one actually. :) I have however, sent you the code with explanations on how I tracked the guassians, since you have to add the code in different places to make it work. You might have to check your spam folder.

Hello, Thank you so much for sharing the code with me.
as for the rotation, if you are using Inria-trained gaussian splat, this rotation simply won't work because Inria uses OpenCV conversion and Nerf uses OpenGL conversion, So please apply your transformation accordingly

@hariharan1412 @abrahamezzeddine
can you please provide the updated code for this task, for Inria - 3D GS?

hello @abrahamezzeddine,
can you please provide your code with explanations for this task?
Thanks,
<EMAIL_ADDRESS>

hello @abrahamezzeddine, can you please provide your code with explanations for this task? Thanks<EMAIL_ADDRESS>
Hello,
The code I shared is not for this. It was for something else for Nerfstudio indexing and not gsplat.

I think the problem is with your camera extrinctis. Convert the camera from c2w to w2c
transform_matrix_viewmats = torch.tensor(frame['transform_matrix'], dtype=torch.float32).to(device)

R = transform_matrix_viewmats[:3, :3]  # 3 x 3
T = transform_matrix_viewmats[:3, 3:4]  # 3 x 1

R_edit = torch.diag(torch.tensor([1, -1, -1], device=device, dtype=R.dtype))
R = R @ R_edit

R_inv = R.T
T_inv = -R_inv @ T

viewmats = torch.eye(4, device=R.device, dtype=R.dtype)
viewmats[:3, :3] = R_inv
viewmats[:3, 3:4] = T_inv

Try it and let me know, if you are facing any issues

I tried this, and certainly worked a little better indeed! Thank you very much! However, it seems that the camera is being projected "outside" the whole point cloud. I assume tha camera is correctly rotated, but is placed well outside the intended viewpoint, instead of actual location we see in the Vizer when we train the Gaussian Splat with Nerfstudio.
import numpy as np
import torch
from plyfile import PlyData
import json
import tkinter as tk
from tkinter import filedialog
import gsplat
import sys
import matplotlib.pyplot as plt

def parse_ply(file_path):
    plydata = PlyData.read(file_path)
    vertices = plydata['vertex']
    xyz = np.vstack([vertices['x'], vertices['y'], vertices['z']]).T
    scale = np.vstack([vertices['scale_0'], vertices['scale_1'], vertices['scale_2']]).T
    rotation = np.vstack([vertices['rot_0'], vertices['rot_1'], vertices['rot_2'], vertices['rot_3']]).T
    print("Printing first 10 xyz values", xyz[:10])
    return xyz, scale, rotation

def load_transform_json(file_path):
    with open(file_path, 'r') as file:
        data = json.load(file)
    return data

def normalize_quaternions(quats):
    norms = np.linalg.norm(quats, axis=1, keepdims=True)
    normalized_quats = quats / norms
    return normalized_quats

def progress_update(current, total):
    progress = (current / total) * 100
    sys.stdout.write(f"\rProgress: {progress:.2f}%")
    sys.stdout.flush()

def project_and_plot_frame(means3d, scales, quats, camera_params, frame):
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    transform_matrix_viewmats = torch.tensor(frame['transform_matrix'], dtype=torch.float32).to(device)

    R = transform_matrix_viewmats[:3, :3]  # 3 x 3
    T = transform_matrix_viewmats[:3, 3:4]  # 3 x 1

    R_edit = torch.diag(torch.tensor([1, -1, -1], device=device, dtype=R.dtype))
    R = R @ R_edit

    R_inv = R.T
    T_inv = -R_inv @ T

    viewmats = torch.eye(4, device=R.device, dtype=R.dtype)
    viewmats[:3, :3] = R_inv
    viewmats[:3, 3:4] = T_inv

    fx = camera_params["fl_x"]
    fy = camera_params["fl_y"]
    cx = camera_params["cx"]
    cy = camera_params["cy"]
    img_height = camera_params["h"]
    img_width = camera_params["w"]
    glob_scale = 1.0
    block_width = 16
    clip_thresh = 0.01

    if torch.cuda.is_available():
        means3d = means3d.cuda()
        scales = scales.cuda()
        quats = quats.cuda()

    xys, depths, radii, conics, compensation, num_tiles_hit, cov3d = gsplat.project_gaussians(
        means3d.contiguous(), scales.contiguous(), glob_scale, quats.contiguous(),
        viewmats, fx, fy, cx, cy, img_height, img_width, block_width, clip_thresh
    )

    print("Checking projection results...")
    print(f"xys (2D projections):\n{xys[:10]}")
    print(f"depths (z-depths):\n{depths[:10]}")

    """Filter out invalid projections"""
    valid_indices = (xys[:, 0] > 0) & (xys[:, 1] > 0) & (xys[:, 0] < img_width) & (xys[:, 1] < img_height) & (depths > clip_thresh)
    xys_filtered = xys[valid_indices].cpu().numpy()

    print(f"Filtered xys (2D projections):\n{xys_filtered[:10]}")

    if xys_filtered.size == 0:
        print("No valid points to plot for this frame.")
        return

    """Plotting in 2D"""
    print("\nPlotting valid 2D projections...")
    plt.figure(figsize=(10, 8))
    plt.scatter(xys_filtered[:, 0], xys_filtered[:, 1], c='blue', s=1)
    plt.xlabel('X (pixels)')
    plt.ylabel('Y (pixels)')
    plt.title(f'Valid 2D Projections for {frame["file_path"]}')
    plt.gca().invert_yaxis()  # Invert Y axis to match image coordinates
    plt.show()

def main():
    # File selection dialog
    root = tk.Tk()
    root.withdraw()

    ply_file_path = filedialog.askopenfilename(title="Select PLY File", filetypes=[("PLY files", "*.ply")])
    transform_json_path = filedialog.askopenfilename(title="Select Transform JSON File", filetypes=[("JSON files", "*.json")])

    if not ply_file_path or not transform_json_path:
        print("File selection cancelled.")
        return

    print("Parsing PLY file...")
    xyz, scale, rotation = parse_ply(ply_file_path)
    print(f"Extracted {xyz.shape[0]} points from PLY file.")

    print("Loading transform JSON...")
    transform_data = load_transform_json(transform_json_path)
    camera_params = transform_data

    means3d = torch.tensor(xyz, dtype=torch.float32)
    scales = torch.tensor(scale, dtype=torch.float32)

    print("Normalizing quaternions...")
    normalized_quats = normalize_quaternions(rotation)
    quats = torch.tensor(normalized_quats, dtype=torch.float32)

    if torch.cuda.is_available():
        print("CUDA is available. Moving tensors to GPU.")
        means3d = means3d.cuda()
        scales = scales.cuda()
        quats = quats.cuda()

    for frame in camera_params['frames']:
        print(f"Processing frame: {frame['file_path']}")
        project_and_plot_frame(means3d, scales, quats, camera_params, frame)

if __name__ == "__main__":
    main()

@pknmax , The code you are looking for is already here

I tried to plot it, looks a little better but it seems I am very zoomed out and I see the whole point cloud instead. I am not sure if the camera is in the right position because

I see the whole point cloud in the plot
No limit to the depth, so everything is rendered, even the farthest points.

Thanks a lot.

I'm having this issue as well, what exactly was the root of the issue? Was it that the quaternions from the original 3DGS paper + code use a different system (left/right handedness) and or notation ([w,x,y,z] vs [x,y,z,w])?
I first thought it was a scaling issue as the splat scene produced by gsplat looked tiny by comparison to the output scene of the original 3DGS splatting process.

While Colmap provides W2C coordinated, Gsplat anticipates W2C world camera. Perform the conversion from c2w to w2c and retest

While Colmap provides W2C coordinated, Gsplat anticipates W2C world camera. Perform the conversion from c2w to w2c and retest

Sorry, I was not clear about the issue I'm facing (I misread the issue in this thread but the symptoms are similar) - I've run gsplat and original 3DGS splatting against the same colmap db and the the two output splat scenes are very different in terms of the size and rotation. If I render both splat scenes in the supersplat editor I find that the splat scene from gsplat is much smaller as well as being oriented differently:

GSplat is plotted in blue.

Please share me the command that you used to train gsplat

Sure thing, thank you in advance for your help :)
cfg.json:
{"disable_viewer": true, "ckpt": null, "data_dir": "../../dataset/indoor/milago_dark3", "data_factor": 1, "result_dir": "../../dataset/indoor/milago_dark3/gsplat/", "test_every": 8, "patch_size": null, "global_scale": 1.0, "port": 8080, "batch_size": 1, "steps_scaler": 1.0, "max_steps": 30000, "eval_steps": [7000, 30000], "save_steps": [7000, 30000], "sh_degree": 3, "sh_degree_interval": 1000, "init_opa": 0.1, "ssim_lambda": 0.2, "near_plane": 0.01, "far_plane":<PHONE_NUMBER>0.0, "prune_opa": 0.005, "grow_grad2d": 0.0002, "grow_scale3d": 0.01, "prune_scale3d": 0.1, "refine_start_iter": 500, "refine_stop_iter": 15000, "reset_every": 3000, "refine_every": 100, "packed": false, "sparse_grad": false, "absgrad": false, "antialiased": false, "random_bkgd": false, "pose_opt": false, "pose_opt_lr": 1e-05, "pose_opt_reg": 1e-06, "pose_noise": 0.0, "app_opt": false, "app_embed_dim": 16, "app_opt_lr": 0.001, "app_opt_reg": 1e-06, "depth_loss": false, "depth_lambda": 0.01, "tb_every": 100, "tb_save_image": false}

Do you think this could likely be caused using a left-handed quaternion system where a right-handed system is expected?

I first thought it was a scaling issue as the splat scene produced by gsplat looked tiny by comparison to the output scene of the original 3DGS splatting process.

Yes, this is true; Splatfacto won't give you a true scale; it'll only give you  -1 to 1 scale (possibly I'm wrong too).

I first thought it was a scaling issue as the splat scene produced by gsplat looked tiny by comparison to the output scene of the original 3DGS splatting process.

Yes, this is true; Splatfacto won't give you a true scale; it'll only give you -1 to 1 scale (possibly I'm wrong too).

I can confirm that splatfacto will normalize the values between -1 to 1 due to better performance with CUDA as I understand.

Thank @hariharan1412  and @abrahamezzeddine that context helps a lot!


[Feature Request] Add Snippet for Feed  Elements

It would be super handy if the plugin also included a snippet that we could include in the <head> of the page that automatically adds the needed <link> elements for the feeds. Every time I do a blog I have to go back and search for the syntax, so something like snippet('feed') would be really helpful!

i would like to keep it super basic. since setting up the route is not handled by the plugin nor will it provide help creating the link to it. the snippet would need params for title, link and mime which is pretty much same length as the required html. i updated the readme instead.


Can't use ActiveJob by default

I need to enqueue all sidekiq-cron jobs through ActiveJob, i.e. set the active_job config option to true, in order for them to work with other parts of my system. Of course I can set active_job: true on every item in my schedule.yml file, but I would prefer to set a config option somewhere and then not have to remember it when adding a new cron job. AFAICT there is no way to do that in the current implementation. Am I wrong?

Hello @maxfurman
Currently, this global option doesn't exist, but maybe it makes sense 🤔? Happy to discuss or review any pull request in this direction.

My idea here is to add support for an additional key in Sidekiq::Options, maybe Sidekiq::Options[:cron_job_defaults], that would be a hash matching the options that Sidekiq::Cron::Job already accepts. Then we could merge that into the input args when a new Job instance is initialized.
It's a pretty small change overall, I can put together a PR if this direction is acceptable.

Not sure about this solution 🤔 maybe it's a bit confusing to allow defaults for all properties?
To be honest, I don't know why we need a flag (I wasn't maintaining this project at that time), it seems we already have code for "autodetection":
https://github.com/sidekiq-cron/sidekiq-cron/blob/78eb493adbfeb908861ec9b3a76e5e7a01adf339/lib/sidekiq/cron/job.rb#L81-L85
Maybe we can explore this path? I mean, automatically use Active Job if possible.

There does seem to be autodetection there. For my use case I also need to set the queue_name_prefix for all jobs. I can do this through YAML labels but that feels sloppy to me, and requires me to add an invalid "defaults" job to schedule.yml. I understand why you're hesitant to allow overrides of, say, the enabled/disabled flag. Maybe an allowlist of overridable properties would be useful.


CJK languages for issues search

Since issues search have been implemented via #530, but it only supports English or non-CJK languages. We need a PR to support to CJK languages.

---
Want to back this issue? **[Post a bounty on it!](https://www.bountysource.com/issues/41316693-cjk-languages-for-issues-search?utm_campaign=plugin&utm_content=tracker%2F47456670&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F47456670&utm_medium=issues&utm_source=github).

Bleve seems to support it if I look at https://github.com/blevesearch/bleve/tree/master/analysis/lang/cjk

Yes, it supports but needs some codes.

This should have been resolved.


Warning: getDefaultProps

Summary:
Error in console:
Warning: getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.

Steps to reproduce:

Render any modal with<EMAIL_ADDRESS>and<EMAIL_ADDRESS>
Expected behavior:
Should be using defaultProps statics - not sure why it compiles down to using getDefaultProps.

@AndersDJohnson It seems to be fixed on v1.7.7. Can you validate?

@AndersDJohnson This should be fixed on our new version v2.0+.
If the problem persist, please, feel free to open this issue again. Thank you.

It is still happening for me.

@bcuicn Hi, which version are you using? react-modal and react


Create an optional (on/off) debug endpoint on OSM pod which outputs SMI graph

We need to create an endpoint on the OSM pod, which will output the list of SMI policies observed and the config (graph) constructed based on these policies.

[ ] The endpoint must be disabled by default. We need to be able to turn this on for debugging when necessary.
[ ] document the new endpoint

@draychev has this been resolved?

@SanyaKochhar this indeed it has been resolved.
This was implemented by https://github.com/openservicemesh/osm/pull/861


Spider: Creve Coeur Horticulture, Ecology and Beautification Committee

URL: https://crevecoeurcitymo.iqm2.com/Citizens/Calendar.aspx?From=1%2F1%2F1900&To=12%2F31%2F9999
Spider Name: cc_horticulture
Agency Name: Creve Coeur Horticulture, Ecology and Beautification Committee
See the contribution guide for information on how to get started

I can work on this one.


fix: Support other DType output

Add support other DType output

Hi, I saw you had some idea on improving the package, but then you closed it
If that will help people let me know or reopen the pr


Inferno Drainer Phishing Unlimited Token Access Contract

Name
Inferno Drainer Phishing Unlimited Token Access Contract
Description
I realialized my fund was drained immediately after connecting to a blur.io evil twin Dapp/website. I have tried to revoke accress but I have been unsuccessful. It gets worse as other scammers on social try to kick you while you're down, offerring to further expoit. Revoking token access is nearly impossible. Are there ways to recover from this? What other token revokation tool would work for Torus Wallet?

Addresses
1: 0xda3e258539f6727c583ec0f14291c63c69b8f35a  Torus Wallet  EthMainNet
2: 0x000038F1e0c4417a3650c3F9A9A920B2e52e0000 Malicious Wallet
Meta Article URLs
https://www.bitdefender.com/blog/hotforsecurity/inferno-drainer-crypto-phishing-service-extracts-6-million-from-nearly-5-000-victims/
https://phishingtackle.com/articles/inferno-drainer-is-the-alias-of-a-popular-phishing-scam-that-targets-cryptocurrencies-and-nfts/
https://decrypt.co/140877/inferno-drainer-scam-scammer-phishing-crypto-nfts
https://finance.yahoo.com/news/inferno-drainer-phishing-scam-pilfering-232321301.html
https://cointelegraph.com/news/inferno-drainer-scam-as-a-service-has-stolen-5-9m-since-march-report
https://www.cnbctv18.com/cryptocurrency/inferno-drainer-cryptocurrency-phishing-service-all-you-need-to-know-16755431.htm

Hey, the best place for debugging these issues is in our Discord. Could you send a message in there with the issue that you're running into when trying to revoke the malicious approval? Then I can help you there.


fix: remove duplicate keydown enter

Overview
This PR is related to #638.
I saw ToggleRoot emitted an event twice, @click and @keydown.enter. This made pressed was mutated twice too.
Then, I removed @keydown.enter, an event was still emitted after pressing Enter but only once from @click.
@click works with pressing Space too.
Scope of work
I have removed @keydown.enter from ToggleRoot.

If you have any feedback or suggestion, please let me know.

@zernonia Thank you for reviewing my code.
Actually, I've followed you from Vue.js Nation 2024 yesterday.
Your talk and demo were so great. 😁


fix typedoc setup

#4792  👈
main

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @jnsdls and the rest of your teammates on  Graphite


Monitor on Status Page is not identical in edit mode

📑 I have found these related issues/pull requests
I have not found a similar issue.
🛡 Security Policy

[X] I agree to have read this project Security Policy

Description
The Uptime Monitor shows incorrect values while editing the Status Page. Compare the two attachments.
For a newly created monitor where the first ping fails, the uptime status is displayed as UP when the status page is being edited. These should actually be grayed out, as with a status page that is not being edited.
The time range also does not match. During editing it shows a wrong range.

👟 Reproduction steps
Create a new monitor, add it to a status page. Compare the monitor on the Status Page with the monitor when the Status Page is being edited.
👀 Expected behavior
The status bars should look the same.
😓 Actual Behavior
The status bars are different.
🐻 Uptime-Kuma Version
1.23.11
💻 Operating System and Arch
Ubuntu 22.04 x64
🌐 Browser
Microsoft Edge Version 121.0.2277.106
🖥 Deployment Environment

Runtime: Docker 25.0.2
number of monitors: 53

📝 Relevant log output
No response

Cannot reproduce.
Your time range gap was so big too (11m vs 30m). Do you have any caching service in front of Uptime Kuma?

I also tried to reproduce it again, but I didn't succeed either. We use nginx in front of Uptime Kuma.

I also tried to reproduce it again, but I didn't succeed either. We use nginx in front of Uptime Kuma.


[BUG] Upload not possible: no or no valid ext_conf.php

Summary / Description
When I try to upload an extension using tailor I get "No or invalid ext_emconf.php found in the folder."
Version
tailor 1.1.1
Steps to reproduce
Command:
vendor/typo3/tailor/bin/tailor ter:publish 2.0.6 poll --artefact=/my/path/poll.zip
Extension is attached
Expected behaviour
The extension is published to TER.
Actual behavior
The error message "No or invalid ext_emconf.php found in the folder." appears.
Additional
After unpacking and packing the zip archive the upload works.
Uploading via GUI and t3xutils is possible.
Extension file
poll.zip

I'm closing this, the issue seems to be on our side.
I worked around it extracting the zip and using --path instead of --artefact.


[Feature]  Add Pre-Chat Tiles for Direct Input Start, Similar to ChatGPT Interface

Description
I would like to add tiles at the beginning of the chat interface, similar to those in ChatGPT, before the chat session starts. These tiles should function such that when a user clicks on one, the chat session begins directly with that input.
Screenshots

Checklist

[X] I have checked the existing issues
[X] I have read the Contributing Guidelines
[ ] I am willing to work on this issue (optional)

Can  i work on this issue , i have worked on similar project before.

Can i work on this issue , i have worked on similar project before.

you may work on this issue, but please ensure to adhere to the contribution guidelines as well.

any update @ShreyashKathade

@avayyyyyyy Do you want to work on this issue ?

Yup sure! I'm happy to work on this issue! @Nishitbaria

Yup sure! I'm happy to work on this issue! @Nishitbaria but tomorrow is my interview so I can only make the pull request by tomorrow evening.

Yea sure


Use RemoveSafeDeltaCounterCell for PerWorker counters

Dataflow Streaming harness's metrics container will store per worker counters in a new RemoveSafeDeltaCounterCell.
For the new PerWorkerMetrics we want to support dynamically creating metrics that may not live the lifetime of the job, therefore we need to implement garbage collection for stale metrics.
E.g. We want to support BigQuery Metrics on a per-bigquery-table basis. If the pipeline uses dynamic destinations to write to 100 tables at 12:00 and at 15:00 is only writing to a few tables, the underlying MetricsContainer should not hold on to metrics for all 100 tables.
InRemoveSafeDeltaCounterCell metric updates and deletions are handled atomically - using ConcurrentHashMap::compute and ConcurrentHashMap::remove respectively - ensuring safe garbage collection.

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Mention the appropriate issue in your description (for example: addresses #123), if applicable. This will automatically add a link to the pull request in the issue. If you would like the issue to automatically close on merging the pull request, comment fixes #<ISSUE NUMBER> instead.
[ ] Update CHANGES.md with noteworthy changes.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

See the Contributor Guide for more tips on how to make review process smoother.
To check the build health, please visit https://github.com/apache/beam/blob/master/.test-infra/BUILD_STATUS.md
GitHub Actions Tests Status (on master branch)

See CI.md for more information about GitHub Actions CI or the workflows README to see a list of phrases to trigger workflows.

assign to next reviewer

Java PreCommit failing test due to https://github.com/apache/beam/issues/28957#issuecomment-1871410640


update #622 - remove loading spinner from curriculum page

What does this PR do?
It removes loading spinner from curriculum page. But such simple change requires quite a lot of work.
Curriculum can finally use Next.js data fetching methods. Currently user needs to wait for getApp query which takes time. With these changes Next will add lessons and alerts data at build time.
The bulk of work here is handling transitions between loading and loaded states. Previously we had unauthorized (lesson 0 is selected, progress is 0) and authorized states (your current lesson is selected, your current progress is shown), everything else was hidden behind loading spinner. I added new 'initial' state which doesn't have any selected lessons (and your progress is loading). So originally curriculum page is at 'initial' state, client sends new session query and rerenders the page after it gets the data.
I didn't change any logic in Curriculum page. I just refactored it a bit because I need to run this code twice. TO-DO we need find a better way to store user data. So much effort for simply calculating current user lesson.
Go to vercel, disable javascript and reload the page. Data is already there, no need to wait for query. Enable js back and login as usual. You'll see initial->loaded transition. Refresh the page (transition is fast because it's loaded from persistent localStorage cache).

Login is not working on the preview.

Login works now (this PR was using old schema). Preview.


Papr: Rename TAGS -> BUILDTAGS

This changed long ago in the Makefile.  Updating script to match.
Signed-off-by: Chris Evich<EMAIL_ADDRESS>

@baude waiting to see how papr handles this change.  Maybe we can simply remove BUILDTAGS (and just use the Makefile default)?  That would simplify things a lot.

rebased from 19c150be and --force pushed.

rebased and --force pushed.

sigh...maybe this is not worth fixing.


Update SoCal Lightning Meetup Name & Website to BitDevsLA

SoCal Lightning Meetup changed name to BitDevsLA
https://twitter.com/BitDevsLA/status/1226983153136353280

Thanks!


Cleanup Logging

This PR makes a series of changes to clean up print logging, specifically in the evaluate/teleprompt folders.
This should not change any functionality, instead it is to remove individualized logging handling, to favour centralized logging.

Additionally, there is one api change to Copro, in which I removed the 'verbose' argument on initialization.
To combat this, I moved all the verbose print calls to debug log messages. I believe for simplicity given this scenario, I have added the following DeprecationMessage.

Would be interested in seeing how the team thinks about introducing messages such as this.
@okhat @CyrusOfEden @thomasahle @isaacbmiller

@KCaverly Thanks for cleaning the logging! The DeprecationWarning makes sense to me until we complete the refactor to remove the respective args. Quick note before merging: I noticed you left some comments and just wanted to check if those were still in pending for this PR or to be addressed later on?

@KCaverly Thanks for cleaning the logging! The DeprecationWarning makes sense to me until we complete the refactor to remove the respective args. Quick note before merging: I noticed you left some comments and just wanted to check if those were still in pending for this PR or to be addressed later on?

Thats a good catch, ill remove these comments before we merge.

I've cleaned up the comments, should be good to merge.

Thanks @KCaverly !

Thanks for this PR! I tend to be more on the pragmatic side: Centralized logging is cool, but we must prioritize understanding the downstream effect of a PR before merging.
We've received a lot of complaints/questions on observability during optimization, and I only recently understood why they increased. This PR makes them all "info" level, so now optimization is practically fully opaque.

Let's think of the best way to fix this:

Raise the default logging level so info things are always shown. What are the implications here?
Modify a whole lot of the info logs to be something louder.
Switch back to print statements for any important streams of information.


UP-4771: Label radio buttons in User Locales Selector Portlet - master

https://issues.jasig.org/browse/UP-4771
Issue
This radio input element does not have a name available to an accessibility API. Valid names are: label element, title attribute.
Code Snippet
<input type="radio" name="locale" value="en_US">

...all radio button instances.
label element (either with a "for" attribute or wrapped around the form field), or "title", "aria-label" or "aria-labelledby" attributes as appropriate.
When a form control does not have a name exposed to assistive technologies, users will not be able to identify the purpose of the form control. The name can be provided in multiple ways, including the label element. Other options include use of the title attribute and aria-label which are used to directly provide text that is used for the accessibility name or aria-labelledby which indicates an association with other text on a page that is providing the name. Button controls can have a name assigned in other ways, as indicated below, but in certain situations may require use of label, title, aria-label, or aria-labelledby.
Code Snippet
<input type="radio" name="locale" value="en_US">

...all radio button instances.
Resolution
Add <label> for <input type="radio"/>

Coverage decreased (-0.007%) to 22.993% when pulling 697a4167bc889dbb3a87ecf966f0c974a2107088 on ChristianMurphy:UP-4771-user-locales-wcag-master into a2ab1988b1b4dec22efadf6751af40913aadb762 on Jasig:master.


fix: reconnect to sas content on 401 error

Summary
This fixes an issue where session invalidation caused issues with displaying files and folders (see https://github.com/sassoftware/vscode-sas-extension/issues/163). This addresses the issue by triggering a reconnect when a 401 (Unauthorized) error is encountered.
Testing

Tested using SAS content as one normally would
Left the extension unattended for several hours, and made sure SAS content was refreshed

Unit tests?

Verified that leaving the extension for several hours maintains connection.  Tested SAS Explorer pane and found no regressions.

This should now be taken care of, @smorrisj . I'm curious if we're able to use this for things w/n compute 🤔

This should now be taken care of, @smorrisj . I'm curious if we're able to use this for things w/n compute 🤔
Also, this broke all the tests 😢

Seems it would be valid for connections where we have to make use of the viya apis that deal with auth tokens. Not sure about other connections (such as direct where we dont have viya in the mix).


Top  half is cut off

I encounter the following result of the css-layout example in all three Chrome Canary, Safari and Firefox. The same happens to my own images.

I noticed that too but haven't had a chance yet to look at it. I suspect it's related to a recent change I made to better animate images with transparency, which added an opaque background layer.  now has 2 children: the background and the actual image. Guessing the flexbox styles are assigning them equal weight so they are stacked.

I have to admit I either could not reproduce or did not understand the problem described in #16. So I added this quick fix for my own use. One would have to layer the background layer and image properly to fix this issue, but this would involve calculating the position for absolute positioning manually.
Could the additional background layer be removed from the virtual dom and only be added when actually drawing on the canvas? I guess this would solve both problems?

I fixed this directly in the canvas drawing layer. Gonna submit the PR today after work.


Add Ability to Add First and Last Name fields via the az ad user create Command

== Feature Description==
Customer would like to add the First and Last Name as Optional Parameters to set programmatically when executing the az ad user create command
== Context ==
Currently, the az ad user create command has some required and optional parameters. The closest parameter to a First Name and Last Name is Display Name, however in the Azure Portal, First Name and Last Name are entries that can be set if a user is created within the Portal GUI.
Customer wants to programmatically have these options available during user creation
== Business Justification ==
Customer creates many new users programmatically via Az CLI. The inability to add the First and Last Name programmatically requires additional steps to set these parameters which is time consuming
== Use Case ==

Customer leverages document: az ad user command
Customer executes programmatic creation of a new user
Customer sets the Display Name but unable to set the User's First and Last Name
Customer has to set the First and Last Name via Portal GUI method as it is not available as a parameter option

== Workaround ==
Customer would have to create a new user programmatically and go into the Azure Portal to update the user entry. This is not desired as it is time consuming as new users are frequently created in their Azure AD Tenant

Customer executes programmatic creation of a new user3. Customer sets the Display Name but unable to set the User's First and Last Name4. Customer has to set the First and Last Name via Portal GUI method as it is not available as a parameter option
Workaround | Customer would have to create a new user programmatically and go into the Azure Portal to update the user entry.  This is not desired as it is time consuming as new users are frequently created in their Azure AD Tenant

Feature Description	Customer would like to add the First and Last Name as Optional Parameters to set programmatically when executing the az ad user create command
Context	Currently the az ad user create command has some required and optional parameters. The closest parameter to a First Name and Last Name is Display Name, however in the Azure Portal, First Name and Last Name are entries that can be set if a user is created within the Portal GUI.
Customer wants to programmatically have these options available during user creation
Business Justification	Customer creates many new users programmatically via Az CLI. The inability to add the First and Last Name programmatically requires additional steps to set these parameters which is time consuming
UseCase

Customer leverages document: az ad user | Microsoft Docs

Customer executes programmatic creation of a new user

Customer sets the Display Name but unable to set the User's First and Last Name

Customer has to set the First and Last Name via Portal GUI method as it is not available as a parameter option

Workaround
Customer would have to create a new user programmatically and go into the Azure Portal to update the user entry.

This is not desired as it is time consuming as new users are frequently created in their Azure AD Tenant

@jiasli for awareness


'No magic number found' when flashing to devkit.

Followed the steps here without VM on Ubuntu 18. This worked perfectly for the past month but stopped working today.
https://forums.balena.io/t/jetson-nano-2gb-not-showing-up-on-dashboard/350033/10
Any idea what may be causing it ?
Here's the trace :
(base) alex@alex-XPS-15-9560:~/Vizzia/jetson-flash$ sudo ./bin/cmd.js -f /home/alex/Vizzia/jetson-flash/balena-cloud-VizziaDev2-jetson-nano-2.88.4+rev1-dev-v12.11.0.img -m jetson-nano-qspi-sd
Consistency check done for /tmp/15210/Linux_for_Tegra
| Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6./ Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.- Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.\ Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.| Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6./ Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.- Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.\ Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.| Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6./ Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.- Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.\ Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.| Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6./ Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.- Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.\ Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.| Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6./ Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.- Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.\ Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.| Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6./ Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.- Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.\ Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.| Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6./ Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.- Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.\ Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.| Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6./ Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.- Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.\ Downloading and extracting https://developer.nvidia.com/embedded/l4t/r32_release_v6.1/t210/jetson-210_linux_r32.6.1_aarch64.tbz2
internal/streams/legacy.js:61
throw er; // Unhandled stream error in pipe.
^
Error
at new Bzip2Error (/home/alex/Vizzia/jetson-flash/node_modules/unbzip2-stream/lib/bzip2.js:31:19)
at Object.Error (/home/alex/Vizzia/jetson-flash/node_modules/unbzip2-stream/lib/bzip2.js:36:37)
at Object.bzip2.header (/home/alex/Vizzia/jetson-flash/node_modules/unbzip2-stream/lib/bzip2.js:152:39)
at decompressBlock (/home/alex/Vizzia/jetson-flash/node_modules/unbzip2-stream/index.js:18:29)
at decompressAndQueue (/home/alex/Vizzia/jetson-flash/node_modules/unbzip2-stream/index.js:48:20)
at Stream.end (/home/alex/Vizzia/jetson-flash/node_modules/unbzip2-stream/index.js:83:17)
at _end (/home/alex/Vizzia/jetson-flash/node_modules/through/index.js:65:9)
at Stream.stream.end (/home/alex/Vizzia/jetson-flash/node_modules/through/index.js:74:5)
at Request.onend (internal/streams/legacy.js:46:10)
at Request.emit (events.js:326:22)
at IncomingMessage. (/home/alex/Vizzia/jetson-flash/node_modules/request/request.js:1076:12)
at Object.onceWrapper (events.js:420:28)
at IncomingMessage.emit (events.js:326:22)
at endReadableNT (_stream_readable.js:1241:12)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
message: 'No magic number found'

I think its because NVIDIA is having issues with their download server

Hi @AlexandreLeboucher , Jetson Flash downloads the Nvidia BSP archive in order to use the tegra flashing tools. Looks like there has been a problem with the Nvidia servers but now they seem to be back online. If the problem occurs again, you can use this method of loading the BSP archive from a local web server: https://github.com/balena-os/jetson-flash/issues/69#issuecomment-1085622264

Great thanks for the support !


Create a Rails 5 demo app

Create or find a Rails 5 demo app.
We can use this to compare against the Roadmap code.

Estimating 2 days worth of work


Sell after a certain period of time

Compared the last 12 listings on Binance to the price right before launch versus the price right before the first drop off. My quick comparison shows that the average coin is up 27% after roughly 2 hours before dropping off or correcting. A nice feature to have would be the ability to set a time to sell a coin right after purchasing. For example: TTS(time to sell): 2 would be sell after 2 hours of purchasing a new listing.

just add pic from https://discord.com/channels/900656563805642753/900658642750173234/929204536525082744 for further discussion


dev-cmd/unbottled: add new command.

Add a new command to list formulae that aren't bottled for a given OS.
Marking critical as review period already passed.
Replaces https://github.com/Homebrew/brew/pull/9300 and https://github.com/Homebrew/brew/pull/9162

Review period skipped due to critical label.


Unrecognized option '--permanent-peer-ids' / can't compile test branch

/root/telegram-bot/tg/bin/telegram-cli:` unrecognized option '--permanent-peer-ids'
Traceback (most recent call last):
  File "anlage.py", line 8, in <module>
    tg = Telegram(telegram='/root/telegram-bot/tg/bin/telegram-cli', pubkey_file='/root/telegram-bot/tg/t        g-server.pub')
  File "/usr/local/lib/python2.7/dist-packages/pytg/__init__.py", line 52, in __init__
    raise AssertionError("CLI Process died.")
AssertionError: CLI Process `died.

I Need your Help. i can´t start my script.
import pytg
from pytg import Telegram
from pytg.sender import Sender
from pytg.receiver import Receiver
receiver = Receiver(host="localhost", port=4458)
sender = Sender(host="localhost", port=4458)

tg = Telegram(telegram='/root/telegram-bot/tg/bin/telegram-cli', pubkey_file='/root/telegram-bot/tg/tg-server.pub')
receiver = tg.receiver
sender = tg.sender

sender.send_msg('*******', "Hello World!")

Sorry for my Bad English
I want to Send a Message, when a sensor is false. i only Need the code to send the Message.

The failing part is the --permanent-peer-ids parameter (introduced in bca30085a8a34a3363b278b65261afcd013013c2)
This requires the telegram CLI from the test branch
git clone -b test --recursive https://github.com/vysheng/tg.git tg-dev
cd tg-dev
# Now follow the normal compiling instructions.

If you want instead to use the normal CLI,
the last compatible pytg release seems to be v0.4.5,
You can install that either from source (zip) or with pip install pytg==0.4.5

Time of writing this: [pytg@`ed8d62`, v0.4.8](https://github.com/luckydonald/pytg/tree/ed8d622a06fd24ec75c0c301984fa6d58ebd6e61) and [tg@`160231`](https://github.com/vysheng/tg/tree/160231bdd7887316b544412e8b97bcdd86ac25a4) (test)

If you just want to send a message, the 2nd option is probably easier.

thx

change_user_group: can't find the user telegramd to switch to
Traceback (most recent call last):
File "anlage.py", line 13, in
sender.send_msg('Constantin_Breuer', "Hello World!")
File "/usr/local/lib/python2.7/dist-packages/pytg/sender.py", line 570, in command_alias
return self.execute_function(command_name, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/pytg/sender.py", line 250, in execute_function
command_name, new_args = self._validate_input(function_name, arguments)
File "/usr/local/lib/python2.7/dist-packages/pytg/sender.py", line 355, in _validate_input
function_name=function_name, number=i, type=func_type.class.name, param=str(func_type), error=str(err)))
ValueError: Error in function send_msg: parameter #1  is not type UnicodeString. (Not a string.)

Iam a very bad programmer pls help me agian

can't find the user telegramd to switch to
It tries to run with unix user telegramd, but doesn't find such user.

But why Telegramd? Where i can Change it?

Huh, I was assuming you set it.
Can you post the output of your program when you turn on logging?
# add this to the first lines in your file
import logging
logging.basicConfig(level=logging.DEBUG)

INFO:pytg:Starting Telegram Executable: "/root/telegram-bot/tg/bin/telegram-cli -R -W -P 4458 -k /root/telegram-b                                                                                ot/tg/tg-server.pub --json"
DEBUG:pytg.sender:Parsing raw: Argument help -  (needed)
DEBUG:pytg.sender:Sending command > [disable_preview]  help
<
INFO:pytg:CLI did not responde.
change_user_group: can't find the user telegramd to switch to
DEBUG:pytg.sender:Parsing raw: Argument help -  (needed)
DEBUG:pytg.sender:Sending command > [disable_preview]  help
<
DEBUG:pytg.sender:Socket Connected.
DEBUG:pytg.sender:All Sent.
INFO:pytg:CLI available.
DEBUG:pytg.sender:Parsing send_msg: Argument Constantin_Breuer -  (needed)
DEBUG:pytg.sender:Parsing send_msg: Argument Hello World! -  (needed)
DEBUG:pytg.sender:Got error
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/pytg/sender.py", line 348, in _validate_input
arg_value = func_type.parse(arg)
File "/usr/local/lib/python2.7/dist-packages/pytg/argument_types.py", line 60, in parse
raise ArgumentParseError("Not a string.")
ArgumentParseError: Not a string.
Traceback (most recent call last):
File "anlage.py", line 17, in
sender.send_msg('Constantin_Breuer', "Hello World!")
File "/usr/local/lib/python2.7/dist-packages/pytg/sender.py", line 570, in command_alias
return self.execute_function(command_name, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/pytg/sender.py", line 250, in execute_function
command_name, new_args = self._validate_input(function_name, arguments)
File "/usr/local/lib/python2.7/dist-packages/pytg/sender.py", line 355, in _validate_input
function_name=function_name, number=i, type=func_type.class.name, param=str(func_type), error=str(err                                                                                )))
ValueError: Error in function send_msg: parameter #1  is not type UnicodeString. (Not a string.)
INFO:pytg.sender:Quit Sending. Not allowing sending anymore.
WARNING:pytg.sender:Terminating currently sending request.
INFO:pytg.sender:Currently not Sending.
INFO:pytg:Closing Connections.
DEBUG:pytg:Closing sender.
DEBUG:pytg.sender:Already did quit Sending. Not allowing sending.
WARNING:pytg.sender:Terminating currently sending request.
INFO:pytg.sender:Currently not Sending.
DEBUG:pytg:Closing sender.
DEBUG:pytg.receiver:receiver thread existing: Not created.
INFO:pytg:Asking to CLI to stop.
DEBUG:pytg:Sender already stopped. Unable to issue safe_quit or quit to exit via socket.
INFO:pytg:CLI did stop (0).
DEBUG:pytg.sender:Already did quit Sending. Not allowing sending.
INFO:pytg.sender:Quit Sending. Not allowing sending anymore.
WARNING:pytg.sender:Terminating currently sending request.
INFO:pytg.sender:Currently not Sending.

It gets the -k /root/telegram-b parameter, that is the problem.
That is the Public Key.
# location
tg/server.pub
tg/bin/telegram-cli

In your case probably located in /root/telegram-bot/tg/server.pub.
You can verify yourself, if the cli will run, by executing the stuff directly behind Starting Telegram Executable:.
Also please wrap the code in code blocks, that improves readability even more.

```python
YOUR CODE
```

The pubkey_file file parameter of Telegram( ... )

After trying too start it with this Parameters,

-R -W -P 4458 -k /root/telegram-b

it stuck at this Point.

Loading plugin  location
Loading plugin  media
Loading plugin  plugins
Loading plugin  channels
Loading plugin  set
Loading plugin  stats
Loading plugin  time
Loading plugin  version
Loading plugin  weather
Loading plugin  xkcd
Loading plugin  youtube
Data loaded from file   data/google.lua

That certainly is not coming from pytg or the telegram-cli.
What bot are you using?
Also, google.lua indicates you are using lua, but this is using python.

i didnt use any bot

You are loading plugins, that was your log said.
both pytg and the cli have no such plugins.
You need to find where they come from, they are not part of pytg.

I get the same errors too.

Maybe it is the CLI then... Strange...
Did you disable lua support while running configure?

I moved on to Ubuntu, and downgraded the version  of pytg to make it work.

@ziban What was your system before?

@ziban please help me locate that issue.
What was your system before?
Did you disable liblua?

I was on mac. To reproduce the error, use Python 2.7.10, and install it using the standard instructions. I downgraded and also installed the test version but it did not work. The only thing I did not do was disable liblua. I will try to do that tomorrow during the day

It seems ou already tried https://github.com/vysheng/tg/issues/1014 and https://github.com/vysheng/tg/issues/996
Yeah, timezones are a stange invention...

@ziban you could try my compiled binary. tg binaries

I could not make the binaries to work too. The error I got was dyld: Library not loaded: /usr/local/lib/libreadline.6.dylib   Referenced from: /Users/collo/Desktop/Classwork/COMP150INT/project/tg/bin/telegram-cli   Reason: image not found Trace/BPT trap: 5. Let me try to disable liblua

I still get the initial error when I disable liblua.

@ziban I think that is libreadline as seen in https://github.com/vysheng/tg/issues/199#issuecomment-66763098

This issue is no longer relevant because the dev branch of telegram-cli have been merged to master.

@Nanoseb thanks for the note.

Did you guys solved this problem? same problem plz help :(
I started this
from pytg.sender import Sender
sender = Sender(host="localhost",port=4458)
sender.send_msg("youngeun_kwon","hello")
and here is the error.
Traceback (most recent call last):
File "msgtest.py", line 5, in
sender.send_msg("youngeun_kwon","hello")
File "build/bdist.linux-armv7l/egg/pytg/sender.py", line 630, in command_alias
File "build/bdist.linux-armv7l/egg/pytg/sender.py", line 274, in execute_function
File "build/bdist.linux-armv7l/egg/pytg/sender.py", line 414, in _validate_input
ValueError: Error in function send_msg: parameter #1  is not type UnicodeString. (Not a string.)

You need unicode.
You have 3 options:

use python 3
use unicode strings sender.send_msg(u"youngeun_kwon",u"hello")
use unicode strings automatically from __future__ import unicode_literals

from pytg.sender import Sender
sender = Sender(host="localhost",port=4458)
sender.send_msg(u"youngeun_kwon",u"hello")
u mean like this?
Traceback (most recent call last):
File "msgtest.py", line 5, in
sender.send_msg(u"youngeun_kwon",u"hello")
File "build/bdist.linux-armv7l/egg/pytg/sender.py", line 630, in command_alias
File "build/bdist.linux-armv7l/egg/pytg/sender.py", line 318, in execute_function
File "build/bdist.linux-armv7l/egg/pytg/sender.py", line 485, in _do_send
pytg.exceptions.ConnectionError: Could not establish connection to the cli port, failed after 3 tries.
I got this :(

@youngeunkwon This means, you don't have a CLI connected. Did you run telegram from the code?
Like in the Documentation: https://github.com/luckydonald/pytg#start-telegram

I know I have to start telegram-cli in json mode port 4458, but I don't know how

@youngeunkwon You can let it run on default, and turn on logging. to see how it will be launched: https://github.com/luckydonald/pytg#in-case-of-errors

from pytg import Telegram
tg = Telegram(
telegram="/home/pi/tg/bin/telegram-cli",
pubkey_file="/home/pi/tg/tg-server.pub")
receiver = tg.receiver
sender = tg.sender
from pytg.sender import Sender
sender = Sender(host="localhost",port=4458)
sender.send_msg(u"youngeun_kwon",u"hello")
start Telegram-cli like this?
I got
Traceback (most recent call last):
File "msgtest.py", line 11, in
sender.send_msg(u"youngeun_kwon",u"hello")
File "build/bdist.linux-armv7l/egg/pytg/sender.py", line 630, in command_alias
File "build/bdist.linux-armv7l/egg/pytg/sender.py", line 354, in execute_function
pytg.exceptions.FailException: Error 38: u'can not parse arg #1' (command u"[disable_preview] msg youngeun_kwon 'hello'\n")

@youngeunkwon If you start the CLI manually again, with the command arguments as seen in the debug mode, does sending it manually in the CLI work?
So msg youngeun_kwon "hello"?

bin/telegram-cli -k tg-server.pub --json -P 4458 -W Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type show_license'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show_license' for details.
Telegram-cli uses libtgl version 2.1.0
Telegram-cli includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit. (http://www.openssl.org/)
I: config dir=[/home/pi/.config/telegram-cli]

msg youngeun_kwon "hello?"
 Yeah this works

You can probably try to replace youngeun_kwon with chat#281895569 (id of peer) or @ yskwon (username).

`from pytg import Telegram
tg = Telegram(
telegram="/home/pi/tg/bin/telegram-cli",
pubkey_file="/home/pi/tg/tg-server.pub")
receiver = tg.receiver
sender = tg.sender
from pytg.sender import Sender
sender = Sender(host="localhost",port=4458)
sender.send_msg(u"chat#281895569",u"hello")
`
u mean this? I got this
Traceback (most recent call last):   File "msgtest.py", line 11, in <module>     sender.send_msg(u"chat#281895569",u"hello")   File "build/bdist.linux-armv7l/egg/pytg/sender.py", line 630, in command_alias   File "build/bdist.linux-armv7l/egg/pytg/sender.py", line 354, in execute_function pytg.exceptions.FailException: Error 38: u'can not parse arg #1' (command u"[disable_preview] msg chat#281895569 'hello'\n")

Could you try [disable_preview] msg chat#281895569 'hello' manually again?

msg chat#28185569 'hello'
{"error": "can not parse arg #1", "result": "FAIL", "error_code": 38}

like this?

huh. maybe it is chatid#28185569 now.
Try [disable_preview] msg youngeun_kwon 'hello'

msg youngeun_kwon 'hello'
{"event": "message", "id": "010000009162cd10890000000000000006a4c20e3fb5f96c", "from": {"id": "$010000009162cd1006a4c20e3fb5f96c", "peer_type": "user", "peer_id": 281895569, "print_name": "youngeun_kwon", "first_name": "youngeun", "flags": 720897, "last_name": "kwon", "phone": "821029061008", "username": "yskwon"}, "flags": 16643, "text": "hello", "to": {"id": "$010000009162cd1006a4c20e3fb5f96c", "peer_type": "user", "peer_id": 281895569, "print_name": "youngeun_kwon", "first_name": "youngeun", "flags": 720897, "last_name": "kwon", "phone": "821029061008", "username": "yskwon"}, "out": true, "unread": true, "service": false, "date":<PHONE_NUMBER>}
{"result": "SUCCESS"}

weird. it works

Traceback (most recent call last):
File "msgtest.py", line 11, in
sender.send_msg(u"youngeun_kwon",u"hello")
File "build/bdist.linux-armv7l/egg/pytg/sender.py", line 630, in command_alias
File "build/bdist.linux-armv7l/egg/pytg/sender.py", line 354, in execute_function
pytg.exceptions.FailException: Error 38: u'can not parse arg #1' (command u"[disable_preview] msg youngeun_kwon 'hello'\n")

but this doesn't hmm... I can't understand

This means something in the cli might have changed, rendering [disable_preview] unusable.
Please open a new issue with that.

It actually still seems to exist in the cli. interface.c:2248

Then you mean I can't make it work?

I don't know.
As I am not using the CLI anywhere anymore (switched to using the bot api with pytgbot) I can't really help in detail, sorry.
Still, maybe you can keep us updated on your findings?

Sure.
I'm a highschool student and I'm doing a little project
I want to talk with bot messenger to send me some pictures of my house or text me for gas stove alarms.
can you recommend me some other ways to make my project work?

And thx for your advise though.

@youngeunkwon Yeah, if the bot api is available to you, try that instead. The mentioned pytgbot library. If you need help with that, just join me on telegram: https://telegram.me/pytg_group

change_user_group: can't find the user telegramd to switch to
#81


LiveView Input Validation

Any plans to make pow_routes() work with liveview?

pow_routes/0 would only be for regular REST though there are plans to implement LiveView capabilities into Pow starting with socket integration: https://github.com/danschultzer/pow/issues/271


Periodic fails to get list of clients from TeamSpeak

A strange issue has cropped up over the past year.
Periodically, while people are connected to the TeamSpeak server, the monitor will get empty lists of clients and thus scroll a message that everyone has logged out then comes back again with a full list saying they have all logged in again.
Once it has started doing this it will continue until either everyone actually logs out or the M5StickC is restarted. It's annoying because it makes the screen come on a lot, not good for battery use (not that it lasts long on battery due to constant use of the WiFi), and the LED flashes off then on again which is more distracting than the screen scrolling a message.
I was going to debug this issue but another issue has cropped up where I can not compile the code anymore! Without having made any changes to the code, other than to enable serial output (line 27), the LovyanGFX LGFX type is not recognised (Display.h, line 11) yet example code for the LovyanGFX library still compile fine even though they also use that same LGFX line! I have put in an issue with the LovyanGFX GitHub about this, though I suspect it could also be some change to the Arduino IDE compiler that does not like the way I have laid out my project.

Ok, compile issue solved. I will make the change to fix that issue in the GitHub version of the project.
Now to figure out what is going on with the client list!

this may be caused by insufficient error handling.
If some network issue occurs during the exchange, it may produce an empty response (i.e. response.length()==0).
The current logic does not handle this situation, instead it sets numClients/clientCount to zero, which could explain the behaviour you described earlier.
response = sendCommand("clientlist");

if( response.length() == 0 )
{
      // empty response, temporary network glitch? check Webserver/WiFi/Router!
      errorCount++;
}
else if (response.substring(0,5) == "error")
// .....

The response comes from my function sendCommand() at the top of TeamSpeakFunctions.h which if you look at all the return states from that there is no possible zero length response as long as the server is behaving like it should.
First it sends a command to the server with telnet.println(command);
Then it waits until there is a response from the server by checking the telnet stream for any characters to be read. If there is nothing back from the server within 1500 milliseconds it will return with a response string of "error msg-timeout". I am not getting that occurrance as that would trigger an error message on the display.
Then it reads what was sent back from the server and returns that in the response. Which should have content because of the wait above.
Unless the server is responding with "\n", which it should not according to the documentation, then the response string will have some sort of content.
This is where I need to check what it is getting back from the server when I request the client list. But I guess I can add code there to give an error response if the server returned an empty line (I.E. "\n"), just in case.
It does not help that the issue is random when it starts! I will basically have to wait until it starts doing it then watch the serial output from then on.
Thanks for looking though, you have given me some thoughts on what to look for.


Include test data in source package

Another way to go about this would be to use the setuptools-scm plugin.

Connect to #2


Translation: wording/translation of "window" and "pane" to Dutch is...difficult

Description
In Settings > General > Context menu, there are four options. Two of them are in English and two are in Dutch. Number 2 = "Show option to open folders in a new window" and number 3 = "Toon optie om mappen in nieuw venster te openen". Considering the translation, the words window and venster are basically identical. The significant difference is between "window" and "pane", but in Dutch, the second word/meaning is close to the first.

Comparing to Windows Explorer: the words "detailvenster" and "voorbeeldvenster" are used (for details en preview, respectively)

Steps To Reproduce
Not a real bug
Requirements
Translation that reflects the different meanings, to be unambiguous. The actual menu entry uses "deelvenster", which is correct. For example: https://www.interglot.com/dictionary/en/nl/search?q=pane
Files Version
2.4.71
Windows Version
Windows 11
Log file
debug.log

If you guys need more help with translating to Dutch, I could do that :)

At the moment 76% of the app is translated to Dutch.
If you want to help, here's the link: https://crowdin.com/project/files-app

Also noticed that the word "new" pane might not be 100% accurate, it implies that everything that will be opened in a new pane, will be shown in a pane. But (from what I see) it all opens in one and the same pane?

Yep. But I understand if that is unrelated to the translation stuff

Yep. But I understand if that is unrelated to the translation stuff

The fact is that you can only open two panes, but there's an open feature request to improve that number.
I think we should leave the translation as is

@yaira2 (imo) translation issues are very different from actual (functionality) bugs. Would you rather create a issue form or link to Crowdin's repo?
https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository#configuring-the-template-chooser:~:text=If you prefer to receive certain reports outside of GitHub%2C you can direct people to external sites with contact_links.

@yaira2 (imo) translation issues are very different from actual (functionality) bugs. Would you rather create a issue form or link to Crowdin's repo? https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository#configuring-the-template-chooser:~:text=If you prefer to receive certain reports outside of GitHub%2C you can direct people to external sites with contact_links.
My suggestion would be to include (something like) the following in config.yml
  - name: Translation issues
    url: https://crowdin.com/project/files-app
    about: Please send in translation improvements here.

A link would be nice, I didn't know you could do that.

Is that something you want to do yourself or want somebody to make a pr..?

@Jay-o-Way would you be interested in opening a PR?


fix(ocm): updates version of @backstage/plugin-catalog to 1.7.2 as in app

Tracks: https://github.com/janus-idp/backstage-plugins/issues/267
Before:

➜  backstage-plugins git:(main-test-1) ✗ find . -name d3-selection.js
./node_modules/d3-selection/dist/d3-selection.js
./node_modules/d3-drag/node_modules/d3-selection/dist/d3-selection.js
./node_modules/d3/node_modules/d3-selection/dist/d3-selection.js
./node_modules/d3-transition/node_modules/d3-selection/dist/d3-selection.js
./node_modules/d3-brush/node_modules/d3-selection/dist/d3-selection.js
After:
➜  backstage-plugins git:(main-test-1) ✗ find . -name d3-selection.js
<EMAIL_ADDRESS><EMAIL_ADDRESS>./node_modules/d3-zoom/node_modules/d3-selection/dist/d3-selection.js
./node_modules/d3-selection/dist/d3-selection.js

OCM dev setup is not impacted

Test setup:

rm -rf node_modules
yarn install
yarn workspace @janus-idp/backstage-plugin-topology run start
click on workload node

cc @jeff-phillips-18


Update VariantLocation hierarchy to Association hierarchy, using GenomicLocationAssociation

Requirements: merge or otherwise reuse core:GenomicLocationAssociation in Variant schema.

VariantLocation becomes a mixin
Variant[Genomic|Transcript|Protein]Location -> Variant[Genomic|Transcript|Protein]LocationAssociation
added VariantDTO and test data (updated basic Variant test data and added test data for the LocationAssociations above).
because I added variant-specific entities, I needed to loosen the requirements for the generic GenomicLocationAssociation class (e.g. genomic_entity_curie is no longer required in the base class, but variant_entity_curie is_a: genomic_entity_curie and is required).

I also had to remove 'required' from has_assembly, but no classes were using that GenomicLocationAssociation yet as far as I could tell.  I also decided to make this abstract to help promote using it as a base class and further restricting the content in individual subclasses.

Thanks for the review @gildossantos!  Lots of good stuff in the review; will add to this PR.


Commit problem

It will make the commit fail. I use -n -m to commit before. But I still think it is something wrong with my commit.

https://stackoverflow.com/questions/68261650/strange-error-when-attempting-to-commit-subject-empty
The stac for this problem which I used

Must follow the https://www.conventionalcommits.org/en/v1.0.0/


Error: Module for policy 'EntitySynonymMapper' could not be loaded.

Rasa version: 1.4.5
Rasa X version (if used & relevant):  0.22.2
Python version: 3.7.5 AND 3.6.9
Operating system (windows, osx, ...): Ubuntu 18.04.3 LTS
Issue:
I've added EntitySynonymMapper to my config.yml in the RasaX UI. When I click Train, I get an error message.
I've tested this in a fresh docker container in both python 36 and 37.
Error when I press Train in UI:
Error (including full traceback):
Training Core model...
2019-11-22 09:49:57 ERROR    rasax.community.api.blueprints.models  - 500, Internal Server Error, body='b'{"version":"1.4.5","status":"failure","message":"An unexpected error occurred during training.
Error: Module for policy \'EntitySynonymMapper\' could not be loaded. Please make sure the name is a valid policy.","reason":"TrainingError","details":{},"help":null,"code":500}''

Error when I train from the command line:
Command or request that led to error:
rasa train

Error (including full traceback):
2019-11-22 09:57:39 INFO     rasa.model  - Data (core-config) for Core model changed.
Training Core model...
2019-11-22 09:57:44 INFO     absl  - Entry Point [tensor2tensor.envs.tic_tac_toe_env:TicTacToeEnv] registered with id [T2TEnv-TicTacToeEnv-v0]
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/rasa/core/policies/ensemble.py", line 319, in from_dict
    constr_func = registry.policy_from_module_path(policy_name)
  File "/usr/local/lib/python3.6/site-packages/rasa/core/registry.py", line 21, in policy_from_module_path
    module_path, lookup_path="rasa.core.policies.registry"
  File "/usr/local/lib/python3.6/site-packages/rasa/utils/common.py", line 191, in class_from_module_path
    return getattr(m, module_path)
AttributeError: module 'rasa.core.policies.registry' has no attribute 'EntitySynonymMapper'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/rasa", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.6/site-packages/rasa/__main__.py", line 76, in main
    cmdline_arguments.func(cmdline_arguments)
  File "/usr/local/lib/python3.6/site-packages/rasa/cli/train.py", line 76, in train
    kwargs=extract_additional_arguments(args),
  File "/usr/local/lib/python3.6/site-packages/rasa/train.py", line 45, in train
    kwargs=kwargs,
  File "uvloop/loop.pyx", line 1456, in uvloop.loop.Loop.run_until_complete
  File "/usr/local/lib/python3.6/site-packages/rasa/train.py", line 96, in train_async
    kwargs,
  File "/usr/local/lib/python3.6/site-packages/rasa/train.py", line 182, in _train_async_internal
    kwargs=kwargs,
  File "/usr/local/lib/python3.6/site-packages/rasa/train.py", line 217, in _do_training
    kwargs=kwargs,
  File "/usr/local/lib/python3.6/site-packages/rasa/train.py", line 346, in _train_core_with_validated_data
    kwargs=kwargs,
  File "/usr/local/lib/python3.6/site-packages/rasa/core/train.py", line 43, in train
    policies = config.load(policy_config)
  File "/usr/local/lib/python3.6/site-packages/rasa/core/config.py", line 28, in load
    return PolicyEnsemble.from_dict(config_data)
  File "/usr/local/lib/python3.6/site-packages/rasa/core/policies/ensemble.py", line 327, in from_dict
    "".format(policy_name)
rasa.core.policies.ensemble.InvalidPolicyConfig: Module for policy 'EntitySynonymMapper' could not be loaded. Please make sure the name is a valid policy.

Content of configuration file (config.yml) (if relevant):
language: en
pipeline: supervised_embeddings
policies:
  - name: MemoizationPolicy
  - name: KerasPolicy
  - name: MappingPolicy
  - name: EntitySynonymMapper

The Dockerfile I used:
(only change the first line, FROM python:3.7-stretch to FROM python:3.6-stretch)
FROM python:3.7-stretch
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN pip install --upgrade pip
RUN pip install rasa-x --extra-index-url https://pypi.rasa.com/simple

RUN useradd --create-home appuser
WORKDIR /home/appuser
USER appuser

RUN rasa init --no-prompt
CMD ["rasa","x","--no-prompt","--log-file","log"]

@Krogsager EntitySynonymMapper is part of the NLU pipeline, not a policy. It is actually already part of the [supervised_embeeddings](https://rasa.com/docs/rasa/nlu/choosing-a-pipeline/#section-supervised-embeddings-pipeline) pipeline, so you don't need to add it. Simply remove it from the policies list and it should work.


Visual Studio 2012 Release broken

Visual Studio 2012 Release mode - decompress data (which generated in HC mode) is broken again... Debug - is OK :)
Seems like a bug as in 0.2 version...

Running "fullbench" in release mode (MSVC 2012) enters in infinite loop in decompress mode too...

Thanks for notification,
:( something went wrong during branch merge...

Use huff0 from issue #52 :))

This should be fixed into "dev" branch now

Fix released : https://github.com/Cyan4973/zstd/releases/tag/zstd-0.3.2


Incorrect hyperlinks in documentation

Describe the bug
There appears to be an issue with the hyperlinks on the documentation

To Reproduce

Go to https://kubevela.io/docs/end-user/workflow/overview/ for example
At the bottom, select any link
Current issue:

It is worth noting that the navigation links at the bottom of the page, under Next, appear to be working:

It seems that the hyperlinks add an extra element in the url path, in this case it adds overview

Fixed in https://github.com/kubevela/kubevela.github.io/issues/1268


Add zoom to lunchbox args

<lunchbox ortho :zoom="0.5"> should work - cumbersome to set manually currently

Added in bb63c25


[5.1] Sema: Use GSB to build the signature for opaque result type decls.

Our ad-hoc mechanism for building the signature did not always produce requirements in the order
expected by the rest of the system; using the GSB should ensure we build a valid generic signature.
Fixes rdar://problem/50309983.

@swift-ci Please test

Build failed
Swift Test Linux Platform
Git Sha - 3cb35182b79d8c72e65ffcae6ab14b973c477684

@swift-ci Please test Linux


Bundle grpc/protobuf curl zlib ssl in release-5.4  (#3896) (#3901) (#3974)  (#3987)

What problem does this PR solve?
Issue Number: close #4196
Problem Summary:
What is changed and how it works?
Reference: https://github.com/grpc/grpc/issues/23144
Change to use boringssl.

cherry-pick (#3896) (#3901) (#3974) (#3987)
update ci/cd process

use cmake-3.22
optimize integration tests process

Check List
Tests

[x] Unit test
[x] Integration test
[ ] Manual test (add detailed scripts or steps below)
[ ] No code

Side effects

[ ] Performance regression: Consumes more CPU
[ ] Performance regression: Consumes more Memory
[ ] Breaking backward compatibility

Documentation

[ ] Affects user behaviors
[ ] Contains syntax changes
[ ] Contains variable changes
[ ] Contains experimental features
[ ] Changes MySQL compatibility

Release note

Fix the potential crash issue that occurs when TLS is enabled

/rebuild

Close because of illegal base branch. Reopen in #4689.


Login Fails (suspicious login attempt)

Login attempt fails ,I also click on "It was me" from the mobile app, and when I try to login again it still fails.
Instagram requires verification each time, even after logining in and verifying from browser.

#414


String stats always increments max value

The string statistics always increments the max value, regardless of whether it is truncated:
https://github.com/lancedb/lance/blob/4f7fb490c6b36a659b2c40b3945b4d533356acf2/rust/lance-core/src/io/writer/statistics.rs#L278
This should only be necessary if max value is longer than the limit.
This is problematic because we want to maintain the property that if all values are equal to X, then the min and max are both X (assuming X is within the binary size limit).

Nevermind, false alarm.


add ldconfig to install target

I think it would be good to add ldconfig after make install, so as to update the cache (tested in Ubuntu 14.04.5)

libtool is supposed to be calling ldconfig when appropriate.  Is this not happening?  Are you “make install”ing as root?
Thanks,
Phil

On Oct 6, 2016, at 6:37 PM, germanbecker<EMAIL_ADDRESS>wrote:
I think it would be good to add ldconfig after make install, so as to update the cache (tested in Ubuntu 14.04.5)


Feat/gpio: Add basic GPIO support

Implements functions:

pinMode()
digitalWrite()

Example:
includes a working and tested blinky example that blinks on board LED.

I feel like is relatively lowkey to also add implementation for the digitalRead method using Zephyr under the hood. Zephyr has gpio_pin_get that can be used for that.

I feel like is relatively lowkey to also add implementation for the digitalRead method using Zephyr under the hood, especially since the pinMode method is allowing to set the pin as INPUT. Zephyr has gpio_pin_get that can be used for that.
https://docs.zephyrproject.org/latest/hardware/peripherals/gpio.html#c.gpio_pin_get

Thanks for the suggestion, will try this right away

@alvarowolfx Please review again, Tested code using following example:
#include <ArduinoAPI.h>

/* 1000 msec = 1 sec */
#define SLEEP_TIME_MS 1000

const int buttonPin = D9;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:

  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

//   // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
}

Thus verified GPIO read, write and pinMode