Is it "safe" to link to libChakra.Jsrt.a?

I'd like to link Chakra to use it via Rust, but Rust can't read headers so I need to get Symbols directly.
I see Symbols for all the APIs in the archive, but they all are prefixed by an underscore. Are these stable? Should I expect them to change or anything else?

We export a flat C API to make it easy for other technologies to link against ChakraCore. The flat C API also avoids the name mangling that you would see with C++ symbols. You can consider the symbols exported as of any official ChakraCore release (e.g. release/1.2) to be stable -- and they will be maintained into the future.
The following is not guaranteed, but we also try our best to make sure any APIs that are added to master are maintained into the future. So, the short answer to your question is that you can consider any APIs in master to be reasonably safe to develop against, but technically the APIs added are subject to change up until an official release.
Since we don't have an official ChakraCore release yet, or have official Linux binaries for the release/1.2 branch, the best proxy you can use for exported symbols in that release is the ChakraCommon.h exports from the release/1.2 branch, and you can extrapolate the mangled names from those API names. You can also use the JSRT Reference which contains documentation for APIs which will be maintained into the future.
Note that we haven't made an official release yet, but if you wanted official Windows preview builds of release/1.2 for example, you can extract the binaries from our MyGet preview packages. Those packages are built from branch release/1.2, and the APIs exported in those binaries are not expected to change at this point.
I'm not sure what you mean by symbols prefixed with an underscore. Our flat-C-API function symbols should not be mangled by the compiler. What command are you using to list the symbols? I used readelf -Ws libChakra.Jsrt.a | grep -P "FUNC.*\bJs" and I see all of the JSRT API symbols as the following (with no leading underscores):
   160:<PHONE_NUMBER>000760   366 FUNC    GLOBAL DEFAULT    2 JsAddRef
   161:<PHONE_NUMBER>001230   220 FUNC    GLOBAL DEFAULT    2 JsBoolToBoolean
   162:<PHONE_NUMBER>001310   102 FUNC    GLOBAL DEFAULT    2 JsBooleanToBool
   163:<PHONE_NUMBER>008330   958 FUNC    GLOBAL DEFAULT    2 JsCallFunction
   164:<PHONE_NUMBER>000550    27 FUNC    GLOBAL DEFAULT    2 JsCollectGarbage
   165:<PHONE_NUMBER>0086f0   952 FUNC    GLOBAL DEFAULT    2 JsConstructObject
   166:<PHONE_NUMBER>001380   828 FUNC    GLOBAL DEFAULT    2 JsConvertValueToBoolean
   167:<PHONE_NUMBER>001920   678 FUNC    GLOBAL DEFAULT    2 JsConvertValueToNumber
   168:<PHONE_NUMBER>002920   678 FUNC    GLOBAL DEFAULT    2 JsConvertValueToObject
   169:<PHONE_NUMBER>002090   689 FUNC    GLOBAL DEFAULT    2 JsConvertValueToString

Yes, I had written bindings for ChakraCore to Rust (sankha93/ChakraCore.rs) and can confirm the names are not mangled by the compiler and it works.

I was using nm BuildLinux/Test/lib/Jsrt/libChakra.Jsrt.a
Using wc -l on that, apparently there are 76756 symbols haha.
I do see a bunch of stuff like this in there, though only with the underscore.
0000000000001090 T _JsAddRef
0000000000001eb0 T _JsBoolToBoolean
0000000000002110 T _JsBooleanToBool
000000000000a630 T _JsCallFunction
0000000000000e10 T _JsCollectGarbage
000000000000a650 T _JsConstructObject
0000000000002180 T _JsConvertValueToBoolean
0000000000002850 T _JsConvertValueToNumber
0000000000003bd0 T _JsConvertValueToObject
0000000000003170 T _JsConvertValueToString
0000000000006e50 T _JsCreateArray

Also, it shows up twice.

I don't seem to have readelf on OS X though.

@Fishrock123 libChakra.Jsrt.a is not enough. See https://github.com/Microsoft/ChakraCore/blob/master/bin/ch/CMakeLists.txt#L41-L72

@obastemur Sorry, I don't really understand what that linked code means.
I am not hugely familiar with C code so my knowledge goes as far as "there should be a (bunch of) .a and/or .o file(s) I need to link to". :/

@obastemur @liminzhu It might be worth explicitly documenting in the Wiki how to link against the static or dynamic Linux libraries, since at the moment I think all of our instructions about linking are Windows-specific.

@Fishrock123 if you are comfortable with Makefile ?
https://github.com/Microsoft/Chakra-Samples/tree/master/ChakraCore Samples/Hello World/Linux_OSX

@obastemur Somewhat... are you saying what I need are these files?
LDIR=$(LIBRARY_PATH)/../pal/src/libChakra.Pal.a \
	 $(LIBRARY_PATH)/Common/Core/libChakra.Common.Core.a \
	 $(LIBRARY_PATH)/Jsrt/libChakra.Jsrt.a

Exactly + if you have /usr/local/opt/icu4c/include folder as an --icu argument, you also need the libs below;
/usr/local/opt/icu4c/lib/libicudata.a
/usr/local/opt/icu4c/lib/libicuuc.a
/usr/local/opt/icu4c/lib/libicui18n.a

It would definitely be helpful if this were better documented.
I may be able to (help) do that if someone can point me to where that documentation should go.

@Fishrock123 We take PRs to the Wiki :) https://github.com/Microsoft/ChakraCore-wiki
The new documentation would probably go here:
https://github.com/Microsoft/ChakraCore/wiki/Embedding-ChakraCore#linuxos-x

@Fishrock123 @liminzhu @obastemur I opened an issue re: the documentation at https://github.com/Microsoft/ChakraCore-wiki/issues/8.
Closing this question as answered.

@sankha93 & @obastemur I'm still having trouble linking it...
Getting this from cargo:
error: could not find native static library `ChakraCore`, perhaps an -L flag is missing?
error: Could not compile `rustyduk-nucleus`.

my Build.rs has the following instructions in it:
    let lib_path = "deps/ChakraCore/BuildLinux/Test/lib/";

    println!("cargo:rustc-link-search=native={}{}", lib_path,
             "../pal/src/libChakra.Pal.a");

    println!("cargo:rustc-link-search=native={}{}", lib_path,
             "Common/Core/libChakra.Common.Core.a");

    println!("cargo:rustc-link-search=native={}{}", lib_path,
             "Jsrt/libChakra.Jsrt.a");

    println!("cargo:rustc-link-lib=static=ChakraCore");

Note: cargo:rustc-link-search= tell rustc to pass the following statement to as -L ... so I must have the wrong name in cargo:rustc-link-lib=static=ChakraCore but I can't tell what it would be.
The previous Rust bindings are windows only and use ChakraCore .. but I'm on OS X...
Compile instructions:
deps/ChakraCore/build.sh --static --test-build --icu=/usr/local/opt/icu4c/include -j=8

Looks like that was a rustc linking problem.
e.g. this is the correct way:
println!("cargo:rustc-link-search=native={}{}", lib_path, "Jsrt/");
println!("cargo:rustc-link-lib=static=Chakra.Jsrt");

Now I'm getting a ton of Symbol errors from clang though, even though I've also linked the icu libraries... https://gist.github.com/Fishrock123/78cefc176bfc6f87bef99a32dd965fc1

Update, linked CoreFoundation and Security frameworks, took the Symbols errors down a bit but not completely: https://gist.github.com/Fishrock123/a91ae0cb85041d5ebf45b18d08a868b9

@Fishrock123 looks like it is because of std lib references.

@obastemur Is that something that needs to be fixed here?
I'll try on Linux in a day or two.
OS X 10.10.5 fwiw

@Fishrock123 OS X 10.10.5 should work, since we support 10.9+ but if we experience problems specifically because of that then I'd say there's a compat bug. For now let's assume it's not because of OS version.

The problem that I can see there is missing std lib references. This happens due to targeting different lib mostly. i.e. ChakraCore is built against your OS SDK while Rust targets a much older SDK.

@obastemur is it possible to build Rust with the newer SDK or ChakraCore with the Rust version of the SDK? (Which is harder?)

@dilijev IMO we will target a bit earlier version of macOS SDK (also for node-chakracore). Will work on this.

@obastemur @Fishrock123 can we open a separate work item to resolve this issue and close this Question?

@dilijev that's cool with me, so long as it is tracked whatever suits your workflow best.

Opened https://github.com/Microsoft/ChakraCore/issues/1492 to track SDK issue.


Implementing ethers middleware for Revm

I saw the comment here: https://github.com/primitivefinance/arbiter/blob/main/lib/simulate/src/environment/middleware.rs  about implementing a middleware approach and spent a bit of time trying to make it work (without success).  Middleware that can interact with SimulationEnvironment would be nice as you could use all of ethers-rs existing functionality (abigen, provider, etc...).
However, I'm not sure this will work without adding more logic to SimulationEnvironment to handle the calls.  For example, ethers::Provider middleware is the last in the middleware chain and will always be called.  Some of the calls (as far as I can tell) can't be handled by a base implementation of Revm.  For example, see: fill_transaction() it expects to calculate eip1559 gas.
Am I'm missing something here?  Or is the intention to extend SimulationEnvironment to support the above?
Thanks!

We have also been chatting with the Sorellus labs people who made ethers-reth and learning from their implementation which is pretty fast.

Thanks for the pointer to ethers-reth!  Looks very interesting.  They haven't tackled send_transaction() yet which is the one needed for contract writes.  I wonder if the additional complexity of adding what is needed to support middleware for Reth/Revm will be worth the trade off of just talking to an Anvil?

For arbiter 100% revm without anvil is like 200x speed up. You can use anvil but then you are kinda just the same as apeworkx

Thanks for the pointer to ethers-reth! Looks very interesting. They haven't tackled send_transaction() yet which is the one needed for contract writes. I wonder if the additional complexity of adding what is needed to support middleware for Reth/Revm will be worth the trade off of just talking to an Anvil?

send_transaction() shouldn't be too bad with an interface over revm. I might be crazy, but I will give this specific instance a shot today.
If you look at the latest PR #362, we now send txns via a channel to a running EVM instance. This should make middleware a bit more intuitive.


Support classType in CreateFromObjects/Tiles

createFromObjects/Tiles in the Tilemap API does not support a custom classType, which is quite unfortunate, as group for example supports classType
Would it be good to consider supporting this? Or is there a recommend approach to dynamically inject logic and data on runtime to an already created sprite
[Optional] Do you want to help provide this feature?
If the design and API is approved I'd be willing to make a PR 😊

In the meantime, I'm simply using mixins and a more ECS approach, but leaving this issue for discussion (as I searched and there doesn't seem to be one current about this)

This would be helpful.
As written the functions could be easily extended with, e.g.,
@param {string} [creator='sprite'] - The Game Object Creator method to call (on `scene.make`).

But people who have made custom game object classes without a creator method would need something else.

Thank you for submitting this feature request. We have implemented this and the feature has been pushed to the master branch. It will be part of the next release. If you get time to build and test it for yourself we would appreciate that.

This issue has been mentioned on Phaser. There might be relevant details there:
https://phaser.discourse.group/t/createfromobjects-classtype-and-typescript-extends/10239/5

this only works in javascript, not in typescript as the function doesn't provide type parameters to test if it can extend from GameObject.


qt5.qtwebkit: update dependencies

hyphen: the sources in tarbals are identical, and hyphen from pkgs properly supports cross compilation.
woff2: qtwebkit will use the bundled woff2 lib if we don't provide a system one
dwz: "DWARF optimization and duplicate removal tool" is just nice to have, I guess

Built on platform(s)

[x] x86_64-linux
[x] aarch64-linux (cross)
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

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

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

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

[ ] Fits CONTRIBUTING.md.

@ofborg build qt5.qtwebkit

Welp, in the meantime some scope creep happened.

Use the attr path as the commit title, then ofborg will build it https://github.com/NixOS/ofborg#automatic-building

Speaking of lack of attention, dwz probably doesn't do us any good here.


modify  [ALLUXIO2803]

The preconditions check in LineageMasterClientServiceHandler(LineageMaster lineageMaster) can be chained to save a statement:
mLineageMaster = Preconditions.checkNotNull(lineageMaster);

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/14355/
Test PASSed.

Hey @kangzhaoliangbizdata, do you mind signing the CLA? You can sign it here: http://cla.alluxio.org/

@kangzhaoliangbizdata can you sign the CLA?

@kangzhaoliangbizdata  could you sign the contribution license agreement?

@kangzhaoliangbizdata feel free to reopen this PR after you sign the CLA.


Denoland deploy

Would it be possible to have this added to the denoland registry?
This would involve adding a webhook to this module, which would then publish the typescript source.
Details are listed here: https://deno.land/x

Using an import map, this polyfill can be utilised directly through GitHub:
{
  "imports": {
    "https://raw.githubusercontent.com/kenchris/urlpattern-polyfill/main/src/url-pattern": "https://raw.githubusercontent.com/kenchris/urlpattern-polyfill/main/src/url-pattern.ts",
    "https://raw.githubusercontent.com/kenchris/urlpattern-polyfill/main/src/url-utils": "https://raw.githubusercontent.com/kenchris/urlpattern-polyfill/main/src/url-utils.ts",
    "https://raw.githubusercontent.com/kenchris/urlpattern-polyfill/main/src/url-pattern.interfaces": "https://raw.githubusercontent.com/kenchris/urlpattern-polyfill/main/src/url-pattern.interfaces.ts",
    "https://raw.githubusercontent.com/kenchris/urlpattern-polyfill/main/src/path-to-regex-modified": "https://raw.githubusercontent.com/kenchris/urlpattern-polyfill/main/src/path-to-regex-modified.ts",
    "https://raw.githubusercontent.com/kenchris/urlpattern-polyfill/main/src/url-pattern-parser": "https://raw.githubusercontent.com/kenchris/urlpattern-polyfill/main/src/url-pattern-parser.ts",
    "urlpattern-polyfill": "https://raw.githubusercontent.com/kenchris/urlpattern-polyfill/main/src/index.ts",
  }
}

This would be similar if it was deployed to deno.land unless these typescript files were process further to include extensions for deployment.

Ignoring the later failing jobs in these actions, we can see this code running across deno, node, webkit, chrome, and firefox:
https://github.com/virtualstate/app-history/blob/7171f6aea0e26847525ff65796b96447a52e4169/src/tests/examples/url-pattern.ts#L12-L21
appHistory.addEventListener("navigate", ({ destination }) => {
        const identifiedTest = new URLPattern({
            pathname: "/test/:id"
        });
        if (identifiedTest.test({ pathname: destination.url })) {
            body.innerHTML = destination.getState<{ innerHTML: string }>().innerHTML;
        } else {
            throw new Error(unexpectedPage);
        }
    });

Running the tests we can see the matcher is working:
START  urlPatternExample
Updated window pathname to /test/1
Updated window pathname to /test/2
PASS   urlPatternExample

Node Test - Uses native node.js resolution + yarn/npm
Deno Test - Uses the above import map
Chrome Test - Uses skypack CDN variant of package)
WebKit Test - Uses rollup, no import map support
Firefox Test  - Uses rollup, no import map support

I don't know much about deno land or how to publish it there. Could you share instructions?

Now that your module that is published to npm with exports, it is also directly compatible with skypack (maybe it was before too?)
I found that I can now just use the import map:
{
  "imports": {
    "urlpattern-polyfill": "https://cdn.skypack.dev/urlpattern-polyfill"
  }
}

However some might still want to access from deno.land, here are steps to publish to the deno.land registry:

Go to https://deno.land/x
Click "Publish Module"

Add a module name

Add a subdirectory, src/ here is usable because your source is typescript, deno can directly utilise it

Follow these steps to add the webhook to this repository:

I think the problem here would be though... the import map still will be a bit messy because of deno's requirement for extensions to be present for exports, while this isn't common practice when writing typescript
Once deployed the import map would probably look something like:
{
  "imports": {
    "https://deno.land/x/urlpattern_polyfill/url-pattern": "https://deno.land/x/urlpattern_polyfill/url-pattern.ts",
    "https://deno.land/x/urlpattern_polyfill/url-utils": "https://deno.land/x/urlpattern_polyfill/url-utils.ts",
    "https://deno.land/x/urlpattern_polyfill/url-pattern.interfaces": "https://deno.land/x/urlpattern_polyfill/url-pattern.interfaces.ts",
    "https://deno.land/x/urlpattern_polyfill/path-to-regex-modified": "https://deno.land/x/urlpattern_polyfill/path-to-regex-modified.ts",
    "https://deno.land/x/urlpattern_polyfill/url-pattern-parser": "https://deno.land/x/urlpattern_polyfill/url-pattern-parser.ts",
    "urlpattern-polyfill": "https://deno.land/x/urlpattern_polyfill"
  }
}

Even then, I'm not sure how deno's resolution exactly works, and it might rely on the redirected to url for this individual mapping, meaning possibly this is the required import map with version pinning included:
{
  "imports": {
<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>    "urlpattern-polyfill"<EMAIL_ADDRESS>  }
}

TLDR seems like skypack is a better goto here, no additional steps required there.

Why do you need it in Deno? Deno supports URLPattern natively now

Ha! Well, I guess I could work a local polyfill file to detect globalThis.URLPattern exists!
I'm writing code that is compatible across all platforms, so using the polyfill is a must for others like node or the browser. I would have expected this polyfill to eventually provide the global where it is present.

I see. That is tracked in https://github.com/kenchris/urlpattern-polyfill/issues/47 so closing this one


There is no display of Spartan Weaponry Weaponry oil recipe (already installed jei)

There is no display of Spartan Weaponry Weaponry oil recipe (already installed jei)
Uploading 2024-08-15 17-27-28.mp4…

Did you forget to upload a video?

Uploading 2024-08-15 17-27-28.mp4…

https://github.com/user-attachments/assets/d0124c54-7e4d-4241-982b-0bdf405995a8

The recipe for the brewing of weapon oil is not shown.

The recipe for the brewing of weapon oil is not shown.

This video is unplayable, but if this is about brewing recipes, this is a duplicate of #557


Proofread the README file

Our README file was recently updated. There is a possibility of few grammatical errors. If you see one, fix it and raise a PR.

I created a PR with minor fixes to the spelling and grammar at #646


4.x version

what

Updates to 4.X

why

Latest TLS Provider

references

#20

anyone keen to review this? tls is fairly outdated and restricts us from upgrading the hashcorp/tls module to it's latest versions (esp. if we use cloudposse vpn ones).

/test all


add execute method for inference model to allow retrieve activation for any internal nodes

This change is

Review status: 0 of 1 files reviewed at latest revision, all discussions resolved.

src/types.ts, line 167 at r1 (raw file):

NamedTensorMap

Can we remove this option? The outputs will always be returned as a single Tensor or an Array of them. Otherwise it's unclear when the return value will be an array and when it'll be a dict (object).

src/types.ts, line 193 at r1 (raw file):

config: ModelPredictConfig,

Can we remove this? See my comment in the doc. I think batching is at a level higher than execute().

Comments from Reviewable

Thanks!

Review status: 0 of 1 files reviewed at latest revision, 2 unresolved discussions.

src/types.ts, line 178 at r2 (raw file):

 Optional.

This is not optional, right? Also, there is no default, right?

src/types.ts, line 183 at r2 (raw file):

multiple outputs.

Add that the order is the same as outputs.

Comments from Reviewable


discovery: Explicitly close opened files

What does this PR do?
A few code paths missed explicitly closing opened files; add this.

Motivation

Additional Notes

Possible Drawbacks / Trade-offs

Describe how to test/QA your changes

/merge


Chinese translation

@gz-c commented on May 17
Add the Chinese translation from the desktop wallet into here

@Senyoret1 commented on May 18
One thing to keep in mind is that the translation files of the web wallet are similar to those in the desktop wallet, but are not exactly the same. Also, I have to add the mechanisms for checking changes in the translation files, since they have not been added to the web wallet.


Not able to replicate the force control task with UR5 robot

I have seen Force_control_example.py with the Kuka-IIWa robot, which is working perfectly fine. But then I tried to implement the same with the UR5 robot, then it is not able to do the force tracking. Can you please let me know, what I am doing wrong here. Is it an issue with M/D/K parameter tunning?
Code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
The task is to track the force along z axis (vertical to the table) by employing admittance control, meanwhile tracking
a circle trajectory on the xy plane. And the end-effector's target position is visualized by a sphere.
Reference:
[1] SONG, Peng; YU, Yueqing; ZHANG, Xuping. A tutorial survey and comparison of impedance control on robotic manipulation
. Robotica, 2019, 37.5: 801-836.
"""

import numpy as np
from itertools import count

from pyrobolearn.simulators import Bullet
from pyrobolearn.worlds import BasicWorld
from pyrobolearn.robots import Body, sensors, UR10, UR5
from pyrobolearn.utils.transformation import *

from pyrobolearn.utils.plotting.end_effector_realtime_FT_plot import EeFtRealTimePlot

from threading import Thread

import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('TkAgg')

# Real-time plot the End-effector force and torque
def plotting_thread(plot):
    if not isinstance(plot, EeFtRealTimePlot):
        raise TypeError("Expecting to plot type is CartesianRealTimePlot, not ""{}".format(plot))
    while True:
        plot.update()

# Manipulate the whole process
# The sphere is used to visualize the reference trajectory, So I creat the sphere trajectory as the reference
def manipulator_thread(world, robot, sphere, FT_sensor):
    """
    First step: is to arrive the initial position
    """
    for t in count():
        # move sphere
        # sphere.position = np.array([0.36, 0, 0.8])
        sphere.position = np.array([0.5, 0.1, 0.94])

        # get current end-effector position and velocity in the task/operational space
        x = robot.get_link_world_positions(link_id)
        dx = robot.get_link_world_linear_velocities(link_id)
        o = robot.get_link_world_orientations(link_id)
        do = robot.get_link_world_angular_velocities(link_id)

        # Get joint positions
        q = robot.get_joint_positions()

        # Get linear jacobian
        if robot.has_floating_base():
            J = robot.get_jacobian(link_id, q=q)[:, qIdx + 6]
        else:
            J = robot.get_jacobian(link_id, q=q)[:, qIdx]

        # Pseudo-inverse: \hat{J} = J^T (JJ^T + k^2 I)^{-1}
        Jp = robot.get_damped_least_squares_inverse(J, damping)

        dv = kp * (sphere.position - x) - kd * dx
        dw = kp * quaternion_error(sphere.orientation, o) - kd * do
        # evaluate damped-least-squares IK
        dq = Jp.dot(np.hstack((dv, dw)))

        # set joint positions
        q = q[qIdx] + dq * dt
        robot.set_joint_positions(q, joint_ids=joint_ids)
        if t > 1000:
            break
        # step in simulation
        world.step(sleep_dt=dt)
    """
        Second step: From the initial pose, Move vertically downward
        until end-effector touches the desktop with a force of 10N
    """
    for t in count():
        Fz_desired = 5  # the threshold of the contact force with table
        # move sphere
        sphere.position = np.array([0.5, 0.1, 0.94-0.0005*t])

        # get current end-effector position and velocity in the task/operational space
        x = robot.get_link_world_positions(link_id)
        dx = robot.get_link_world_linear_velocities(link_id)
        o = robot.get_link_world_orientations(link_id)
        do = robot.get_link_world_angular_velocities(link_id)

        # Get joint positions
        q = robot.get_joint_positions()

        # Get linear jacobian
        if robot.has_floating_base():
            J = robot.get_jacobian(link_id, q=q)[:, qIdx + 6]
        else:
            J = robot.get_jacobian(link_id, q=q)[:, qIdx]

        # Pseudo-inverse: \hat{J} = J^T (JJ^T + k^2 I)^{-1}
        Jp = robot.get_damped_least_squares_inverse(J, damping)

        dv = kp * (sphere.position - x) - kd * dx
        dw = kp * quaternion_error(sphere.orientation, o) - kd * do
        # evaluate damped-least-squares IK
        dq = Jp.dot(np.hstack((dv, dw)))

        # set joint positions
        # robot.set_joint_velocities(dq, joint_ids=joint_ids)
        q = q[qIdx] + dq * dt
        robot.set_joint_positions(q, joint_ids=joint_ids)

        print('force:', FT_sensor.sense()[2])
        if FT_sensor.sense() is not None:
            if FT_sensor.sense()[2] > Fz_desired:
                print('reached desired F')
                break
        # step in simulation
        world.step(sleep_dt=dt)
    sp_z = []
    num = []
    detx = np.array([0.0, 0.0, 0.0])
    """
    Third step to keep the target force along z axis(vertical to the table),
    and complete circular motion trajectory on plane xy
    """
    circle_center = np.array([0.5, 0.1]) # the center of the trajectory
    for t in count():
        Fz_desired = 5  # desired force
        # move sphere
        if t == 0:
            z = robot.get_link_world_positions(link_id)[2]
            sphere.position = np.array([circle_center[0] - r * np.sin(w * t + np.pi / 2), circle_center[1] + r * np.cos(w * t + np.pi / 2), z])

        # get current end-effector position and velocity in the task/operational space
        x = robot.get_link_world_positions(link_id)
        dx = robot.get_link_world_linear_velocities(link_id)
        o = robot.get_link_world_orientations(link_id)
        do = robot.get_link_world_angular_velocities(link_id)

        # Get joint positions
        q = robot.get_joint_positions()

        # Get linear jacobian
        if robot.has_floating_base():
            J = robot.get_jacobian(link_id, q=q)[:, qIdx + 6]
        else:
            J = robot.get_jacobian(link_id, q=q)[:, qIdx]

        # Pseudo-inverse: \hat{J} = J^T (JJ^T + k^2 I)^{-1}
        Jp = robot.get_damped_least_squares_inverse(J, damping)
        # Apply the admittance control
        Fz_current = FT_sensor.sense()[2]  # record the current Fz
        print('Fz: ', Fz_current)
        Fz_error = Fz_current - Fz_desired  # record the current error

        # set the M\D\K parameters by heuristic method, these parameters may have a good result
        # M = 1
        # D = 9500
        # K = 500000
        M = 0.2
        D = 4250
        K = 100000
        # Refer the formula (33) in this article [1]
        # the formula is theta_x(k) = Fc(k)*Ts^2+Bd*Ts*theta_x(k-1)+Md*(2*theta_x(k-1)-theta_x(k-2))/(Md+Bd*Ts+Kd*Ts^2)
        numerator = Fz_error * np.square(dt) + D * dt * detx[1] + M * (2 * detx[1] - detx[2])
        denominator = M + D*dt + K*np.square(dt)
        detx_ = numerator / denominator
        print (detx_)
        detx[2] = detx[1]
        detx[1] = detx[0]
        detx[0] = detx_

        zzz = sphere.position[2] + detx[0]

        # circle_center the the centre of the circle trajectory on the table
        sphere.position = np.array([circle_center[0] - r * np.sin(w * t + np.pi / 2), circle_center[1] + r * np.cos(w * t + np.pi / 2), zzz])
        dv = kp * (sphere.position - x) - kd * dx  # compute the other direction tracking error term

        sp_z.append(sphere.position[2])
        num.append(t)

        dw = kp * quaternion_error(sphere.orientation, o) - kd * do
        # evaluate damped-least-squares IK
        dq = Jp.dot(np.hstack((dv, dw)))

        # set joint positions
        q = q[qIdx] + dq * dt
        robot.set_joint_positions(q, joint_ids=joint_ids)

        # print(Fz_error, dv[2])
        if t == 2000:
            break
        # step in simulation
        world.step(sleep_dt=dt)
    plt.plot(num, sp_z)  # plot the position on the z axis
    plt.xlabel("timesteps")
    plt.ylabel("vertical position")
    plt.title("The z axis position during the task")
    plt.show()

if __name__=='__main__':
    # Create simulator
    sim = Bullet()

    # create world
    world = BasicWorld(sim)

    # flag : 0 # PI control
    flag = 0
    # create robot
    robot = UR5(sim, position=[0,0,0.5])
    # robot = 'ur5'
    robot.print_info()
    world.load_robot(robot)
    world.load_table(position=np.array([1, 0., 0.]), orientation=np.array([0.0, 0.0, 0.0, 1.0]))
    # define useful variables for IK
    dt = 1. / 240
    link_id = robot.get_end_effector_ids(end_effector=0)
    print('link_id:',link_id)
    joint_ids = robot.joints  # actuated joint
    damping = 0.01  # for damped-least-squares IK
    wrt_link_id = -1  # robot.get_link_ids('iiwa_link_1')
    qIdx = robot.get_q_indices(joint_ids)
    print('qidx:', qIdx)

    # define gains
    kp = 500  # 5 if velocity control, 50 if position control
    kd = 5  # 2*np.sqrt(kp)

    # create sphere to follow
    sphere = world.load_visual_sphere(position=np.array([0.5, 0., 0.5]), radius=0.05, color=(1, 0, 0, 0.5))
    sphere = Body(sim, body_id=sphere)

    # set initial joint p
    # Positions (based on the position of the sphere at [0.5, 0, 1])
    robot.reset_joint_states(q=[0.0, -1.57, 1.57, -1.57, -1.57, -1.57])

    # define amplitude and angular velocity when moving the sphere
    w = 0.01
    r = 0.1

    # I set the reference orientation to a constant
    sphere.orientation = np.array([-0.49940256, 0.5001992, 0.50019888, 0.50019888])

    FT_sensor = sensors.JointForceTorqueSensor(sim, body_id=robot.id, joint_ids=5)
    # The plotting handle
    plot = EeFtRealTimePlot(robot, sensor=FT_sensor, forcex=True, forcey=True, forcez=True,
                            torquex=True, torquey=True, torquez=True, num_point=1000, ticks=24)
    # FT_ = np.zeros(6)

    plot_t = Thread(target=plotting_thread, args=[plot], name='plotting task')
    manipulator_t = Thread(target=manipulator_thread, args=(world, robot, sphere, FT_sensor), name='manipulator task')

    thread_pools = [plot_t, manipulator_t]
    for thread in thread_pools:
        thread.start()

    for thread in thread_pools:
        thread.join()

I request someone to look into this issue. It's very urgent. Thanks

@deepakraina99 Hi, Sorry to respond too late, because of the recent matter. I have tested you code using UR3 (because I have changed the original version of UR5 and UR10 urdf model), I found the coordinate of end- effector of  Kuka iiwa and UR series is different. I think you should change the urdf model or you can add the coodinate transformation to modify this mismatch.

Thanks @TFLQW for your response. I think I have already changed the desired orientation (i.e sphere.orienation) as per UR5 robot. Actually I noted down the orientation at the initial position and kept that as desired throughout the motion of robot. I am attaching code for your reference:
# I set the reference orientation to a constant
sphere.orientation = np.array([-0.49940256, 0.5001992, 0.50019888, 0.50019888])

While in Kuka IIWA, this has been kept as
# I set the reference orientation to a constant
sphere.orientation = np.array([1, 0, 0, 0])

So I think orientation will not be issue in this case. Please let me know if my thinking is right. Thanks!

@deepakraina99 In this force control example, I want to keep the force as a constant along the z axis of end-effector. So I choose the sphere.orientation = np.array([1, 0, 0, 0]), If you select sphere.orientation = np.array([-0.49940256, 0.5001992, 0.50019888, 0.50019888]) that mean the z axis of your robot end-effector is not vertical to the desk. The essential cause of the problem you are facing is the difference between the urdf model of iiwa and ur

@TFLQW I have changed UR5 end-effector frame by making changes in the URDF file. Youc can check the same in pictures below

But when I am loading UR5 using the examples/force_control/Force_control_example.py, it is still not able to do the appropriate force tracking. I am attaching the video, code and urdf file for your reference. Can you please guide me regarding this ? I shall be thankful to you.

code.zip

@deepakraina99 I am good to know that it has been solved, but I have not met this new problem, maybe you can modulate the M/D/K parameters or the stiffness of the table (in urdf model).

@TFLQW Thanks for your suggestion. PyRoboLearn is very useful library.
Also can you tell me where table urdf is located in package ? I could not find this.

@deepakraina99 You can find the table urdf model in pybullet package which address maybe : /lib/python2.7/site-packages/pybullet_data/table

@TFLQW I have been able to solve the issue by changing the object (table).
Thank you so much for your help with this.

@TFLQW and @deepakraina99 thank you so much for the interaction and communication for this issue! It's great to know that @deepakraina99 managed to solve the problem.
By the way @deepakraina99, would you like to share your code by integrating in Pyrobolearn? We welcome nice code like the one you are working on! As @TFLQW, you just need to create a PR in order for us to review your code and integrate it in this framework!

@lrozo I would be happy to share my code and contribute to Pyrobolearn. Let me know the process for the same.

@lrozo Hi~, I think this version code of the force control have no problem, maybe need add an attention to help the user set the  urdf model coordinate system to be the same as the example, or change the stiffness of the robot or the table.

@lrozo I agree with @TFLQW. I am planning to add a few more capabilities to this and then we can create a new PR.
@TFLQW Can the same code work for a wavy surface (picture below)?

@deepakraina99 I guess it could work in some other complex surface if you can get appropriate parameters (M/D/K), this example code in the package is used to prove the force control function feasibility in this package, if you want to develop more complex tasks, you can add more useful function, it is very thankful to create the pull request to improve this package.

@TFLQW I have noticed that robot is converging to desired force value but without making any contact with uneven surface. The video below will explain the issue. Any suggestions on this ? I have loaded the uneven surface using following code:
world.load_mesh(filename='examples/tele-ultrasound/wavy_table/wavy_table.stl', position=np.array([0.5, 0.05, 0.2]), orientation=(0, 0, 1, 1), mass=0., scale=(6., 6., 6.))

Attaching the model files for your reference.
wavy_table.zip


Prebuilding for multiple target does not work with 6.0.1

We use prebuildify to prebuild for the target environments that we use and execute it something like this:
prebuildify -t 18.20.3 -t 20.13.1 -t<EMAIL_ADDRESS>-t<EMAIL_ADDRESS>
With version 5.0.1 this resulted in 3 prebuilds with the names:

node.abi108.node
node.abi115.node
electron.abi121.node
electron.abi123.node

After upgrading to 6.0.1 we only get 1 prebuild with the name: my-package-name.node. This means the prebuild will only work in some environments and error in others. Prebuildify still runs three builds but I assume only the last one is available in the builds folder. Platform is Windows if that matters.

This also happens on linux, and not with 5.0.1
It seems, that what happens is:
In 5.0.1 it is called ${runtime}.${version}.node where runtime is electron or node, version is the node_module_version
And in 6.0.1 it is called ${name}.node Where name is the package name
It seems that they added the name, and forgot to add the other tags to the final name 🤷🏼♂

I just tested the fix in #91 and it worked as expected for me.


Store not being persisted at all

Hello, I'm currently using this plugin to persist some of my store to cookies in Nuxt/Vue 3. Here is my implementation:
import Cookies from 'js-cookie';
import cookie from 'cookie';
import { defineNuxtPlugin } from 'nuxt/app';
import { createPersistedStatePlugin } from 'pinia-plugin-persistedstate-2';

export default defineNuxtPlugin(({ $pinia, ssrContext }) => {
  $pinia.use(
    createPersistedStatePlugin({
      includePaths: [
        ['tracking.functional'],
        'auth.accessToken',
        'auth.expiresAt',
        'auth.user',
        'auth.permissions',
        'search.searchValues',
        'search.miles',
        'search.zipCode',
        'search.currentPosition',
        'player',
      ],
      storage: {
        getItem: (key) => {
          // See https://nuxtjs.org/guide/plugins/#using-process-flags
          if (process.server) {
            if (ssrContext.req.headers.cookie) {
              const parsedCookies = cookie.parse(ssrContext.req.headers.cookie);
              return parsedCookies[key];
            }

            return null;
          } else {
            return Cookies.get(key);
          }
        },
        // Please see https://github.com/js-cookie/js-cookie#json, on how to handle JSON.
        setItem: (key, value) => {
          // Remove expires to make cookies into session cookies
          Cookies.set(key, value, {
            expires: 365,
            // secure: !isDev,
            sameSite: true,
          });
        },
        removeItem: (key) => Cookies.remove(key),
      },
    })
  );
});

For some reason includePaths seems to be completely ignored (it is still persisting other stores that are not included in includePaths) and on top of that the tracking and player store are not stored in cookies at all. Here is what my tracking store looks like:
 import { defineStore } from 'pinia';

export const useTrackingStore = defineStore({
  id: 'tracking',
  state: () => ({
    hasResponded: false,
    strictlyNecessary: true,
    analytical: true,
    functional: true,
    targeting: true,
  }),
  actions: {
    setAcceptAll() {
      this.hasResponded = true;
      this.strictlyNecessary = true;
      this.analytical = true;
      this.functional = true;
      this.targeting = true;
    },
    setDeclineAll() {
      this.hasResponded = true;
      this.strictlyNecessary = true;
      this.analytical = false;
      this.functional = false;
      this.targeting = false;
    },
    setAnalytical(value) {
      this.analytical = value;
    },
    setTargeting(value) {
      this.targeting = value;
    },
    setFunctional(value) {
      this.functional = value;
    },
    setHasResponded(value) {
      this.hasResponded = value;
    },
  },
});

Is there a reason why this store would be completely ignored?

hi, @ssinno28 👋  , thanks for the feedback,

For some reason includePaths seems to be completely ignored ...

This problem is due to the includePaths is not a plugin option, but a store option:
https://github.com/iendeavor/pinia-plugin-persistedstate-2#store-options

... on top of that the tracking and player store are not stored in cookies at all ...

It should works 🤔.  Can you provide a reproducible demo using stackblitz or code sandbox? thanks

Close for now, feel free to reopen if the problem still exists. Thank you.


fix: ca and tls certificate based on alpine based container

It will fix the CA and TLS certs , as we have changed the base image from RHEL to Alpine , the existing way of updating the certificate was not working.

Closes #2117

:tada: This PR is included in version 3.0.1 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Styling with Markdown is supported

[Enter feedback here]

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 987ec16c-9456-93a4-177a-dbd563be7eb7
Version Independent ID: f41f0344-f7f6-f092-a6bf-fc4184a9b460
Content: Launch the Windows Settings app - UWP applications
Content Source: windows-apps-src/launch-resume/launch-settings-app.md
Product: uwp
Technology: processes-and-threading
GitHub Login: @GrantMeStrength
Microsoft Alias: jken

Hi - I can't work out what this issue is about? Please re-open with more details, thank you!


Umbral Mithrix Compatability Issue

Artifact of the phantom is affected by Umbral Mithrix.

What's happening is probably that Umbral Mithrix is directly modifying Mithrix himself, so whenever he shows up anywhere else (Phantom, Simulacrum events, etc.), he'll have those modifications applied.


How to move on with upgrade to v0.21.1

According to @bcumming the creation of a slightly different V6 sw-stack using stackinator is not possible, because an outdated
version of stackinator has been used to create V6. Also the requirements to come-up with a new production environment for MCH are too high to meet the needs of C2SM with respect to upgrade spack to v0.21.1 in a reasonable period of time.
Therefore there is no way around to split the spack-c2sm instance in two branches in order to allow more development towards ALPS and upgraded Euler. The following PRs are currently blocked :

https://github.com/C2SM/spack-c2sm/pull/949
https://github.com/C2SM/spack-c2sm/pull/955
https://github.com/C2SM/spack-c2sm/pull/956

The split of spack-c2sm would looks as follows:

spack v0.20.1 for Balfrin, corresponds to current branch main
spack v0.21.1 for Daint, Euler and ALPS, as outlined in #909.

In order to still test ICON builds on Balfrin, the following commit could be added to v0.21.1: https://github.com/C2SM/spack-c2sm/pull/909/commits/1d7a27a01464cc7e27997d74fa747acd7a32854f
This commit removes the conflict of xpmem-package that was not there in spack v0.19.1.
By doing so Icon builds fine with V6 and v0.21.1 on Balfrin. Since xpmem is an external packages this change only affects the concretization, but the underlying software remains identical.
Initially this was proposed as a solution by @jonasjucker that would prevent a divergence of spack-c2sm, but @dominichofer raised concerns with regard to maintainability, since none of us knows the xpmem package.
I propose that the branch with v0.21.1 will become the main branch, whereas the branch with v0.20.1 will live in a branch.
All required changes relevant for production at MCH should go into both branches, whereas infrastructure changes should only
go to main branch.
It is important to come up with a timeline how to bring these two branches together already now.

To test building the MCH software stack using Spack v0.21, I would recommend using a new version of the MCH stack that has been built using Spack v0.21.
The v6 stack is built using v0.19, and a custom version of stackinator that had v0.19 support back-ported.
But we could upgrade to v0.21.1 and use mainline stackinator.
All testing should be done using the uenv tools to mount the image dynamically at /user-environment, instead of using a permanent mount point like /mch-environmengt/v6. This allows us to iterate more quickly.

By doing so Icon builds fine with V6 and v0.21.1 on Balfrin

Is it this PR? https://github.com/C2SM/spack-c2sm/pull/958

@dominichofer No it is not, in #958 you still run into the issue that xpmem is concretized with %gcc, altough in V6 it is concretized with %nvhpc. And since the conflict is in v0.21.1 no way the concretizer will concretize to %nvhpc.
I put  https://github.com/C2SM/spack-c2sm/commit/1d7a27a01464cc7e27997d74fa747acd7a32854f into
branch  dev_v0.21.1 directly and subsequently ICON worked with V6 and v0.21.1.
See these tests:
https://github.com/C2SM/spack-c2sm/pull/909#issuecomment-2122474372
Is it clearer now?

Actually https://github.com/C2SM/spack-c2sm/commit/1d7a27a01464cc7e27997d74fa747acd7a32854f
simply deactivates the conflict, that was not present in v0.19.x:
# All compilers except for gcc are in conflict with +kernel-module:
requires("%gcc", when="+kernel-module", msg="Linux kernel module must be compiled with gcc")

to
# All compilers except for gcc are in conflict with +kernel-module:
#requires("%gcc", when="+kernel-module", msg="Linux kernel module must be compiled with gcc")

I have to do this by copying the package into our local repos to overwrite the defaults.

@dominichofer came up with a workaround for the concretizer in #961.
spack-c2sm main can now be updated to spack v0.21.1, since ICON can still be built with V6.

solved by #909


(PUP-5275) Evalutate capability mappings after evaluating site

This commit ensures that capability mappings are evaluated twice. Once
before evaluate_main since it eventually calls on evaluate_classes
which may require capability mappings, and then again after
evaluate_site since it may introduce new mappings.
I have tested this manually in my own local setup (based on input from
Nick Lewis in the JIRA) but there should be acceptance tests for this
too.

appveyor seems is hung - merging anyway.


Update bmp581.py correct altitude calc, and remove excessive rounding…

… of alt
In the Bosch Sensor guide (ex: in bmp180 they show a different formula page 16 of: https://cdn-shop.adafruit.com/datasheets/BST-BMP180-DS000-09.pdf).  Since you are raising the difference  in pressure & SLP to a power small differences can make a difference.

Thank you :)


Add SteelSeries Engine 3 to app list

We recently started using Electron in our Engine program with great results.

Awesome, thanks!


global: fix ILS deps temp solution

Not needed anymore: https://github.com/inveniosoftware/invenio-app-ils/commit/0d4fc3b488acf181be63bdf9ff5d0cc869b7f973
💯 🚀


VisualStudio's findBLAS.cmake fails to locate a precompiled libopenblas when building SuiteSparse

Hi all
I've been struggling with the combination Windows/OpenBLAS/Suitesparse/MS VisualStudio/CMake for several month already, so I finally decided to ask for help.

I build Suitesparse under Windowsx64 with MSVS. I download precompiled OpenBLASx64 binaries to a local directory and want to link Suitespase to it.

Suitesparse's CMakeLists.txt calls SuiteSparseBLAS.cmake, which it its turn calls find_package(BLAS). It translates to a call to findBLAS.cmake (shipped with MSVS).

findBLAS.cmake fails to locate OpenBLAS (actually, it can be verified directly, without Suitesparse)

I experimented a lot with different options (BLA_VENDOR/ALLOW_64BIT_BLAS etc) and debugged findBLAS.cmake. So I am pretty confident that something wrong with the findBLAS.cmake logic. For example, findBLAS.cmake expects "64" in lib names, whereas the precompiled binaries are named simply "libopenblas". However, I suspect that there are more serious problems in the logic.

5)The only solution I found is to edit Suitesparse's cmake files, remove find_package(BLAS) call,and set everything manually:
set(BLAS_FOUND ON);
set(BLAS_LABRARIES ..);
..

Which is ugly of course.

Note that the "Config.cmake" files shipped with OpenBLAS are of little help, because find_package() looks for findXXX.cmake files first - and the file is there.

The question: how to force findBLAS.cmake to locate precompiled OpenBLAS libraries, privided that find_package(BLAS) is called somewhere inside another library?

If the findBLAS.cmake really looks specifically for a libopenblas64, it probably expects a library built with the INTERFACE64=1 option to declare all integers as 64bit long rather than the standard 32bits to extend the range of numbers (addressable array elements) The provided binaries are built with standard 32bit integers only, I can see if I can find the time to build another package with INTERFACE64 for you.
However it appears to me that using a "64bit" BLAS in SuiteSparse is still entirely optional and depends on the settings made in/with SuiteSparse_config - the ALLOW_64BIT_BLAS option you saw.

No, x32/x64 is a different thing altogether - this is not about 32bit platform, but about using a larger than usual type for integral numbers - "long long" instead of "long" in MSVC syntax.
I wonder where  the "openblas64" in _blas_openblas_lib comes from - from the SuiteSparse docs I would expect it to search for this variant only when ALLOW_64BIT_BLAS is set in Suitesparse_config

No, x32/x64 is a different thing altogether - this is not about 32bit platform, but about using a larger than usual type for integral numbers - "long long" instead of "long" in MSVC syntax. I wonder where the "openblas64" in _blas_openblas_lib comes from - from the SuiteSparse docs I would expect it to search for this variant only when ALLOW_64BIT_BLAS is set in Suitesparse_config

Ok, now I see. I use ALLOW_64BIT_BLAS=ON, and then it translates into BLA_SIZEOF_INTEGER=8 somewhere inside Suitesparse cmake files. If I change ALLOW_64BIT_BLAS=OFF, then BLA_SIZEOF_INTEGER=4, then findBLAS.cmake searches for "openblas", and then fails anyway.
So the problem persists.

So this probably reduces to where did you install (unpack) the zip of OpenBLAS, and which locations does FindBLAS.cmake check - and problems finding BLAS appear to be quite a popular question on the Usage forum at discourse.cmake.org. Incidentally, which version of VisualStudio (one thread there suggested using at least VS 2017 15.0 to have detection work), and have you tried running the cmake build with --debug-find ?

@martin-frbg
You were right in that it boiles down to where find_library search for the libraries. After one another investigation I found the following solution.

Set BLA_VENDOR="OpenBLAS"  ALLOW_64BIT_BLAS="OFF" (it is also possible to set ALLOW_64BIT_BLAS="ON" AND ask @martin-frbg to compile openblas64.lib)
Specify additional CMake search directory by setting CMAKE_LIBRARY_PATH="C: ../OpenBLAS-0.3.24-x64/lib"  (path to the *.lib)
Rename precompiled binary by removing leading "lib" from file names ( "libopenblas.lib" ->"openblas.lib" )

If someone wants to debug it in the future, I extracted a piece of code from findBLAS.cmake that actually performs the search when find_package(BLAS) with BLA_VENDOR="OpenBLAS" is called.
        find_library(BLAS_openblas_LIBRARY #  or BLAS_openblas64_LIBRARY
          NAMES openblas  #<---  or "openblas64"
          ""
          PATHS "LIB;ENV"
          PATH_SUFFIXES ""
        )

Normally after the call it should be BLAS_openblas_LIBRARY="C:/.../openblas.lib"
PS I use Microsoft Visual Studio Community 2022 (64-bit) - Current Version 17.6.5

so the main problem on OpenBLAS' side is the unwanted Linux-like "lib" prefix on the library files ?  Not sure if we've alwayss had it (and nobody bothered to complain) or if it crept in during some rearrangement of the build files,  but if its only purpose is to cause trouble I'll remove it for future versions

"so the main problem on OpenBLAS' side is the unwanted Linux-like "lib" prefix on the library files" - yes. Not that serious:) I think that the issue can be marked as resolved. Thank you.

See the buttons below ....

I just noticed OpenCV changed their own version of  FindBLAS.cmake to add "libopenblas" as a name variant to look for. On the other hand, having the Windows libraries named with the Unix-style "lib" prefix appears to have been a (mis?)feature even in the original GotoBLAS2, and as far as I can tell, distributors like MSYS2 do not appear to patch that out(?)


Trying to create a new Design Document with options parameter included in a database Returns: "AttributeError: 'dict' object has no attribute 'to_dict'"

Describe the bug
Can not create a Design Document in a database with function: put_design_document if you include the options parameter, despite if the value is True or False
To Reproduce
Code snippet slightly different from: Api Docs
from ibmcloudant.cloudant_v1 import (
    DesignDocument,
    CloudantV1,
    DesignDocumentViewsMapReduce,
    SearchIndexDefinition,
)

try:
    from dotenv import load_dotenv, find_dotenv

    load_dotenv(find_dotenv())
except ModuleNotFoundError as e:
    print("ERROR")

service = CloudantV1.new_instance(service_name="ADMIN")

product_map = DesignDocumentViewsMapReduce(
    map="function(doc) { emit(doc.productid, [doc.brand, doc.name, doc.description]) }"
)

price_index = SearchIndexDefinition(
    index='function (doc) {  index("price", doc.price);}'
)

partitioned_design_doc = DesignDocument(
    views={"byApplianceProdId": product_map},
    indexes={"findByPrice": price_index},
    options={"partitioned": True},
)

response = service.put_design_document(
    db='products',
    design_document=partitioned_design_doc,
    ddoc="appliances",
).get_result()

print(response)

Expected behavior
Should return: {'ok': True, 'id': '_design/appliances', 'rev': '1-**************************************'}
Traceback
Traceback (most recent call last):   File "/home/**/bug1.py", line 31, in <module>     response = service.put_design_document(   File "/home/**/venv/lib/python3.8/site-packages/ibmcloudant/cloudant_v1.py", line 2628, in put_design_document     design_document = convert_model(design_document)   File "/home/**/venv/lib/python3.8/site-packages/ibm_cloud_sdk_core/utils.py", line 215, in convert_model     return val.to_dict()   File "/home/**/venv/lib/python3.8/site-packages/ibmcloudant/cloudant_v1.py", line 10779, in to_dict     _dict['options'] = self.options.to_dict() AttributeError: 'dict' object has no attribute 'to_dict'

SDK Version [Installed with pip install --upgrade "ibmcloudant>=0.0.34"]
Python Version [e.g. Python 3.8.6]
Create a New Design Document

Additional context
Knowing that this design_document = convert_model(design_document) returns a Dict..
I was able to avoid this problem by changing this line:
https://github.com/IBM/cloudant-python-sdk/blob/cc169b21832b3db8c2f898edf7dd12c4c91a15ab/ibmcloudant/cloudant_v1.py#L10779
with: _dict["options"] = self.options

Hello @aanagnostou, you'll either need to use all model classes or use all dictionaries.  The options model class for this endpoint is DesignDocumentOptions:
...
design_document_options = DesignDocumentOptions(
    partitioned=True
)
partitioned_design_doc = DesignDocument(
    views={"byApplianceProdId": product_map},
    indexes={"findByPrice": price_index},
    options=design_document_options,
)
...

Here's an example if you want to do all dictionaries:
...
product_map = {'map':"function(doc) { emit(doc.productid, [doc.brand, doc.name, doc.description]) }"}
price_index = {'index': 'function (doc) {  index("price", doc.price);}'}
partitioned_design_doc = {
    'views': {"byApplianceProdId": product_map},
    'indexes': {"findByPrice": price_index},
    'options': {"partitioned": True},
)
...

Screenshot of options for PUT /{db}/_design/{ddoc} in API Docs:

Hi @emlaver ,
Thanks for clarifying that.
As you can imagine it's working as it should.
Thank you for your time


master branch to main

change the default branch to be main instead of master
Expected Behaviour

Current Behaviour

Possible Solution

Steps to Reproduce (for bugs)

Context

Your Environment

Operating System and version (e.g. Linux, Windows, MacOS):

How are you running Tinkerbell? Using Vagrant & VirtualBox, Vagrant & Libvirt, on Packet using Terraform, or give details:

Link to your project or a code example to reproduce issue:

duplicate of https://github.com/tinkerbell/pbnj/issues/82


can't find font file

os: macOs 10.15.3
node: 8.9.4
Error: ENOENT: no such file or directory, open '/fonts/Standard.flf'
change another font type also get this error message

Got the same issue on github-pages

I got  the same issue while using webpack to bundle my  package

same issue on cloudflare pages


Unable to send ETH

What happened?
I'm going through your README file and I'm stuck on Send ETH section.
I'm getting the 🛑 -> Error clientError(code: 400)
Your code snippet says:
let transaction: CodableTransaction = .emptyTransaction
transaction.from = from ?? transaction.sender // `sender` one is if you have private key of your wallet address, so public key e.g. your wallet address could be interpreted
transaction.value = value
transaction.gasLimitPolicy = .manual(78423)
transaction.gasPricePolicy = .manual(20000000000)
web3.eth.send(transaction)

I'm trying to use that - not working.
I've also tried to sign the transaction, I'm getting the same error.
var transaction: CodableTransaction = .emptyTransaction
transaction.from = walletAddress
transaction.to = recipientAddress
transaction.value = value
transaction.gasLimit = 78423
transaction.gasPrice =<PHONE_NUMBER>0
try transaction.sign(privateKey: key)
let result = try await web3.eth.send(transaction)
Logger.log(message: "Sending transaction: \(result.hash)", type: .success)

What are the steps to reproduce?
My code for testing this:
Task {
	do {
	    try await CryptoService.shared.transfer(
	        wallet: AppData.wallet,
		value:<PHONE_NUMBER>0,
		toAddress: "0x8cb00730181B2d80c3B4068ECD0095C5Dd994700"
	    )
	    Logger.log(message: "Sent", type: .success)
	} catch {
	    Logger.log(message: "Error \(error)", type: .error)
	}
}

What is the expected behavior?
I expect that I successfully send ETF from my wallet address to the recipient's wallet address.
What is the error thrown?
clientError(code: 400)
What's the stack trace said?
Just that error above, nothing more.
OS version
iOS 16
Library version
3.1.2

As discussed on discord, most likely the missing chainId on transaction was the problem.


Test Micropub editing feature

All post types that support editing need to be tested to ensure they work given new changes made to the posting logic.
The RSVP editing feature needs particular attention as new fields have been added to the creation form that need to be replicated and tested on the editing form.

Issue created in wrong repository.


cleaning up import style

Since (as mentioned when doing fuze.py) the preferred method is to explicitly list libraries instead of using "from prpy.tsr.tsr import *" or "from prpy.tsr.tsrlibrary import TSRFactory" I made that correction across the rest of the library.

Deleted in favor of more updated pull request at #38


Dolphin release candidate testing - OneDrive Product Assessment Sanity Testing

💡 Summary
In preparation of releasing the Dolphin or v0.3.0 of ScubaGear code, conduct sanity testing of the OneDrive product. Objective and Scope of the task are provided below.
Objectives:

There are no regression issues in the OneDrive product assessments with Dolphin Release
Additional sanity testing to ensure that: each policy assessment result is shown in the report, assessment works against all available tenants (G5/E5, G3/E3)
OneDrive product assessment works both in interactive and non-interactive (service principal) modes.

Scope

Detailed functional testing of each policy statement result is out of scope
Consistent results between interactive/non-interactive modes and no operational issues in running the test against all tenant types are within the scope.

Motivation and context
This would be useful to ensure that Dolphin release is stable
Implementation notes
Before the test, ensure that test user has minimum user role on a given tenant to assess the OneDrive (look into README). Then, execute the OneDrive product assessment on all available tenants – first in interactive mode and then in non-interactive mode. After the test verify the following:

Verify that all tests run without errors and results reports are generated. Each policy has a result (no empty results)
Ensure that there are no regressions from Coral release – for the tested tenant compare the result report from current assessment against saved Coral release results - ensure that any different result is consistent with code change (provide a detailed explanation on any observed diff in results)

Acceptance criteria

OneDrive product assessment works in both interactive and non-interactive mode against G5, E5, G3 and E3 tenants.
There are no crashes and/or empty results
Results are consistent with Coral release assessment results - any diff is consistent with code changes

Ran the OneDrive product tests on G5, E5 and G3 tenants. Tests on G5 were ran in both interactive and non-interactive modes. Tested with Config file option. Results:
Unit tests (i.e., Rego) passed 21/21.
Report generated with expected results.


support startupTaints without exact value match

Tell us about your request
our startup script updates the value of the startuptaint, leading to new nodes getting started while the previous is not finished
logic is here
result looks like this: (false column is our internal "ready" label that gets set once the taint is gone)
ip-172-30-225-58.us-west-2.compute.internal   Unknown   <none>   44s                              us-west-2a
ip-172-30-227-25.us-west-2.compute.internal   Ready     node     4m53s   v1.23.7   false          us-west-2b

so what I'd need is some way to either declare the taint an ephemeralTaints (but without a value) or some way to make a startuptaint ignore the value, for example by setting a fake any value
Are you currently working around this issue?
not updating the taint value

Community Note

Please vote on this issue by adding a 👍 reaction to the original issue to help the community and maintainers prioritize this request
Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request
If you are interested in working on this issue or have submitted a pull request, please leave a comment

Can you explain a little more about how the startup script is updating the value of the startup taint and how this is causing an issue with the current Karpenter startup taint logic?
Currently, we don't consider a node initialized until the startupTaint is removed, and we consider whether the startupTaint is removed based off of the key:effect pair, the value is not considered in this logic.

hmm yeah, this codepath seems to go by key:effect as per docs but the issue I see is that a new node gets created as soon as the taint value is changed

After repro-ing, I can see why this is happening. The [original link] you had was correct. When the node is updated, we attempt to re-schedule the pods and since the taint's value doesn't match, we try to launch a new node.
So an exact value match is currently required.

our startup script updates the value of the startuptaint, leading to new nodes getting started while the previous is not finished

Can I ask, why don't you just break the phases of your node startup into pieces by introducing multiple taints that handle the multiple phases of startup?

Our workaround is to never update the value.
If there is no downside to changing the logic I'd still prefer it to be
key+effect only like the other taint compares.
On Tue, Sep 13, 2022, 11:43 AM Jonathan Innis @.***>
wrote:

After repro-ing, I can see why this is happening. The [original link] you
had was correct. When the node is updated, we attempt to re-schedule the
pods and since the taint's value doesn't match, we try to launch a new node.
So an exact value match is currently required.
our startup script updates the value of the startuptaint, leading to new
nodes getting started while the previous is not finished
Can I ask, why don't you just break the phases of your node startup into
pieces by introducing multiple taints that handle the multiple phases of
startup?
—
Reply to this email directly, view it on GitHub
https://github.com/aws/karpenter/issues/2484#issuecomment-1245818189,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAACYZ7TLJOCW4RRIZ5C6C3V6DDLLANCNFSM6AAAAAAQI6JC6I
.
You are receiving this because you authored the thread.Message ID:
@.***>

There is a downside, which is that we should honor the taint exactly as it is state in the Provisioner spec. We can't really change this behavior without breaking existing functionality. Unfortunately a taint is a combination of the key/value/effect together and an "empty" value in a taint just means the matching toleration should be "".
I'm not really in favor of expanding this logic as a feature if there is a workaround for the use-case.

let's close this then ... easy enough to work around and not worth the trouble if nobody else ran into this


⚠ Bofrost.be has degraded performance

In 4a1162a, Bofrost.be (https://www.bofrost.be) experienced degraded performance:

HTTP code: 200
Response time: 1416 ms

Resolved: Bofrost.be performance has improved in 40f6f6b.


Error: That item is unavailable for purchase. [android]

Please use the Discussion board if you want to get some help. Please use issues to report bugs.

Description
I am trying to upgrade from react-native-iap v.7 to 10.1.3.
IAP.getSubscriptions({ skus: subscriptionIds }) returns the subscriptions.
But when I call:
IAP.requestSubscription({
sku: skuObj.sku,
...(skuObj.offerToken && {
subscriptionOffers: [{ sku: skuObj.sku, offerToken: skuObj.offerToken }],
}),
})
I am getting the following Google Play error:
react native iap message:That item is unavailable.,debugMessage:,code:E_ITEM_UNAVAILABLE,responseCode:4
Expected Behavior
I expect the purchase to complete successfully.
Environment:

react-native-iap: 10.1.3
react-native: 0.71.1
Platform: android real device.

Why not update to the latest?

https://github.com/dooboolab-community/react-native-iap/issues/2455 Can anyone please suggest on this issue Please ?

Have you got any solutions @Prathameshlabde

Any update ?
In my case is sporadically error, sometime appears and other one not.
Maybe its related to this ticket ?
https://github.com/dooboolab-community/react-native-iap/issues/1593

I can replicate the error with consumable items, in iOS & Android.

Yes i received error like   Purchase error: {"code": "E_ITEM_UNAVAILABLE", "debugMessage": "", "message": "That item is unavailable.", "responseCode": 4}
any solution for these error ?

Anyone ever managed to fix this one? I'm currently testing on an Android device and I have ensured that my Google account is added in the "License testing"-part of the Developer platform. I'm just getting
{"code": "E_ITEM_UNAVAILABLE", "debugMessage": "", "message": "That item is unavailable.", "responseCode": 4}
It's working just fine on iOS.

Yes it is working fine in ios and now it's working in android also

Yes it is working fine in ios and now it's working in android also

Did you need to do any additional setup of your Google Developer account to get it working? Or perhaps there's some setup of the library I'm missing?

Yes it is working fine in ios and now it's working in android also

Did you need to do any additional setup of your Google Developer account to get it working? Or perhaps there's some setup of the library I'm missing?

New Lib having some method changes like
const products = await getSubscriptions({skus:itemSkus});
const offerToken = product.subscriptionOfferDetails[0].offerToken
await requestSubscription({
sku: this.state.selectSubscription,
...(offerToken && {
subscriptionOffers: [
{
sku: this.state.selectSubscription,
offerToken: offerToken,
},
],
}),
})
.catch(err => {
console.log('error buying product', err);
})


Add column no of assigned mentees column into mentor

Purpose

The purpose of this PR is to fix #272
Goals

To let the users know how many mentees are assigned to a mentor

Approach

Introduced a new column to keep the number of of assigned mentees
Updated the business logics to increment and decrement the count as new mentees are assigned and unassigned

Checklist

[x] This PR doesn't commit any keys, passwords, tokens, usernames, or other secrets.
[x] I have read and understood the development best practices guidelines ( http://bit.ly/sef-best-practices )
[x] My code follows the style guidelines of this project
[x] I have performed a self-review of my own code
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have made corresponding changes to the documentation

Related PRs

Test environment

osX Monterey 12.0.1
Java adoptjdk zulu 11

Learning

Looks good to me.
As I understood, we are using the noOfAssignedMentees column to keep the number of assigned mentees during the FILTRATION state. And during the WILDCARD state, we are using the same column to keep the number of APPROVED mentees. Am I right? @Gravewalker666

Yup, didn't wanna overcomplicated

Looks good to me.
As I understood, we are using the noOfAssignedMentees column to keep the number of assigned mentees during the FILTRATION state. And during the WILDCARD state, we are using the same column to keep the number of APPROVED mentees. Am I right? @Gravewalker666

Yup, didn't wanna overcomplicated


Support isWellFormed and toWellFormed in lib.esnext.d.ts

🔍 Search Terms
NodeJS 20, isWellFormed, toWellFormed
✅ Viability Checklist

[x] This wouldn't be a breaking change in existing TypeScript/JavaScript code
[X] This wouldn't change the runtime behavior of existing JavaScript code
[X] This could be implemented without emitting different JS based on the types of the expressions
[X] This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)
[X] This feature would agree with the rest of our Design Goals: https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals

⭐ Suggestion
NodeJS 20 introduces new features that are not supported by the TypeScript compiler yet.
As an example node version 20 introduces String.prototype.isWellFormed and String.prototype.toWellFormed. Using these functions causes error TS2339: Property 'isWellFormed' does not exist on type 'string'.
Current environment:

Node version: 20.5.1
TypeScript version: 5.2.2

📃 Motivating Example
This update will enable developers to fully use all features available in the latest major version of NodeJS.
💻 Use Cases
This would allow the usage of ECMAScript features such as isWellFormed and toWellFormed.
The only current workaround is to use // @ts-ignore to let the project compile.

NodeJS 20 introduces new features that are not supported by the TypeScript compiler yet.

How do these types require support by the TypeScript compiler? Sounds to me that it just needs updated @types/node definitions.

Because even with<EMAIL_ADDRESS>installed the error keeps occurring.

isWellFormed and toWellFormed are ES features, so they belong in the lib defs, not @types/node—the title is just misleading :)

I think usually we don't create a new target/library combo until the spec edition is ratified. I think esnext is probably the place for now.

Ah, I missed that https://tc39.es/ecma262/ shows the draft state. Is there a handy link that shows all spec versions and their statuses?

@andrewbranch https://github.com/tc39/ecma262/releases
Every release is cut at around April–June, and new features are always mentioned in the introduction.


Competency questionnaires should be rendered based on category id

Expected behaviour
When user clicks into a questionnaire, that id is used to fetch the associated cards and present them one by one.
Checklist

[x] This issue is linked to the appropriate project.
[x] This issue has appropriate labels.

From my understanding, in the agreed upon routes:

Questionnaire Pages —> /questionnaires/categories/:categoryId

this ticket deals with the questionnaire pages and looks to be related to #372 and the getQuestionnaireFromCategoryId function

will use the result of this function and present it on the front end(?) through a service file

Features implemented in ticket #380 - no separate PR needed


New Device Request: for Smart Curtain Switch with OPEN/STOP/CLOSE BUTTONS (unbranded)

Log Message

This error originated from a custom integration.

Logger: custom_components.tuya_local.config_flow
Source: custom_components/tuya_local/config_flow.py:45
Integration: Tuya Local (documentation, issues)
First occurred: 1:06:16 PM (2 occurrences)
Last logged: 1:06:16 PM

Device matches None with quality of 0%. DPS: {"updated_at":<PHONE_NUMBER>.3120847, "2": "2", "101": "03"}
Report this to https://github.com/make-all/tuya-local/issues/

Information about DPS mappings

Device Specification Attribute
{
  "result": {
    "category": "cl",
    "functions": [
      {
        "code": "control",
        "dp_id": 101,
        "type": "Enum",
        "values": "{\"range\":[\"open\",\"stop\",\"close\",\"continue\"]}"
      }
    ],
    "status": [
      {
        "code": "control",
        "dp_id": 101,
        "type": "Enum",
        "values": "{\"range\":[\"open\",\"stop\",\"close\",\"continue\"]}"
      }
    ]
  },
  "success": true,
  "t":<PHONE_NUMBER>145,
  "tid": "072585e7bffa11edbcdaea52450d735d"
}```

<!--
DP ID : STATUS (OPEN,STOP,CLOSE) -CODE :2
DP ID : POWER(OPEN,STOP,CLOSE)  -CODE :101

Code | Type | Values

control | Enum | {   "range": [     "open",     "stop",     "close",     "continue"   ]

![Curtain Switch Panel](https://user-images.githubusercontent.com/79641326/224484235-9940cda6-c8e2-4e7a-a4b5-a25220417111.jpg)

# Product ID

<!--
"category": "cl",
    "category_name": "Curtain",
    "id": "0088250084f3ebecee37",
    "model": "CcSmartCurtain1",
    "name": "Smart Curtain",
    "product_id": "dy1jPRPGVR9G7PWY",
    "product_name": "Smart Curtain1",
    "sub": false,
    "uuid": "0088250084f3ebecee37"
-->

# Information about how the device functions
<!-- Its a three button WIFI Switch with OPEN/STOP/CLOSE BUTTONS
-->

Both these dp seem to be using cryptic codes instead of the obvious "open", "close", "stop" strings.  To add support, it will need some more investigation to figure out what each value corresponds to.

Both these dp seem to be using cryptic codes instead of the obvious "open", "close", "stop" strings. To add support, it will need some more investigation to figure out what each value corresponds to.

any addition info required from my side?

Yes, what the actual values used for OPEN, STOP and CLOSE actually are.  In the logs, there are "2" for status and "03" for control, but it isn't clear what those mean.
Probably it is easier to start with a config that surfaces these as sensors, and observe while playing around from the control panel or with the Tuya app via a mobile connection with WiFi switched off (as opening the Tuya app with WiFi on may prevent other local connections from working).
save to custom_components/tuya_local/devices/test.yaml:
name: Information gathering
primary_entity:
  entity: sensor
  name: status
  dps:
    - id: 2
      type: string
      name: sensor
secondary_entities:
  - entity: sensor
    name: control
    dps:
      - id: 101
        type: string
        name: sensor

Yes, what the actual values used for OPEN, STOP and CLOSE actually are. In the logs, there are "2" for status and "03" for control, but it isn't clear what those mean.
Probably it is easier to start with a config that surfaces these as sensors, and observe while playing around from the control panel or with the Tuya app via a mobile connection with WiFi switched off (as opening the Tuya app with WiFi on may prevent other local connections from working).
save to custom_components/tuya_local/devices/test.yaml:
name: Information gathering
primary_entity:
  entity: sensor
  name: status
  dps:
    - id: 2
      type: string
      name: sensor
secondary_entities:
  - entity: sensor
    name: control
    dps:
      - id: 101
        type: string
        name: sensor

This is what i found by pressing on TUYA app.
Attributes:
OPEN- RAW state :02
STOP- RAW state :01
CLOSE- RAW STATE :03

thankyou for your time

hi today i changed instruction set  the from standard to DP instructions on Tuya IOT platform site
results
Get Device Specification Attribute
{
"result": {
"category": "cl",
"functions": [
{
"code": "Power",
"dp_id": 1,
"type": "Boolean",
"values": "{}"
},
{
"code": "mode",
"dp_id": 101,
"type": "Enum",
"values": "{"range":["01","02","03"]}"
}
],
"status": [
{
"code": "Power",
"dp_id": 1,
"type": "Boolean",
"values": "{}"
},
{
"code": "status",
"dp_id": 2,
"type": "Enum",
"values": "{"range":["1","2","3"]}"
},
{
"code": "mode",
"dp_id": 101,
"type": "Enum",
"values": "{"range":["01","02","03"]}"
}
]
},
"success": true,
"t":<PHONE_NUMBER>474,
"tid": "09a97e84c70c11eda717d63f1fabdb28"
}
Get the specifications and properties of the device:
{
"result": {
"category": "cl",
"functions": [
{
"code": "Power",
"desc": "{}",
"name": "开关",
"type": "Boolean",
"values": "{}"
},
{
"code": "mode",
"desc": "{"range":["01","02","03"]}",
"name": "开关",
"type": "Enum",
"values": "{"range":["01","02","03"]}"
}
],
"status": [
{
"code": "Power",
"name": "开关",
"type": "Boolean",
"values": "{}"
},
{
"code": "status",
"name": "窗帘",
"type": "Enum",
"values": "{"range":["1","2","3"]}"
},
{
"code": "mode",
"name": "开关",
"type": "Enum",
"values": "{"range":["01","02","03"]}"
}
]
},
"success": true,
"t":<PHONE_NUMBER>751,
"tid": "4f96127dc70c11eda717d63f1fabdb28"
}


Deployment automation

I've started having a look at out deployment options.
What I know works without any further research is the following:

mirror repo to Gitlab
instrument Linode box as a runner
drive deployment to it via .gitlab-ci.yml
run docker-compose up on the runner (the Linode box)

I'm doing this for several projects and it works well. The downside is that deployment runs separate-ish. While .gitlab-ci.yml could happily live inside the repo, what it triggers happens elsewhere. (Although arguably it has to happen elsewhere by definition - the Linode box - it's just a question of how much of it does.)
For Github actions I believe we can go the following:

build docker image as we do now
push to docker hub
set up ssh action that runs on Linode box
pull docker image
run docker-compose up

The slight issue I'm seeing right now is that there's no built in ssh action (AFAICT) and I'm not excited to use a 3rd party one that handles private keys as an input. However, I think it shouldn't be too hard to either fork one and use a version we control or just run the key handling inline.
Or maybe I'm to sensitive about the key? B/c unless we host our own runner (which we easily could, I'm doing it for three other GH projects) we'll always be passing our private key to some machine we don't control.

Both of these sound reasonably complicated! As someone who hasn't deployed via Docker before I'm not sure I can really be much help here.
I do think that keeping the SSH key protected is important though. Yes, it's an open-source project that collects publicly available data, but the issues someone could cause on the server are not trivial.

So variant 1) is simple - I'd just need to mirror existing setup to our situation. I'm using this on a number of projects and know how to set this up quickly.
Variant 2) should be equally possible, it's just something that needs a bit more research and elbow grease.
I'll do a little more digging into setting up GH today but if you don't have a strong preference I'd go for tried and true unless I come up with something soon, ok?

Simple sounds better, and more things will become simple in the future. It's not ideal to have the project mirrored on GitLab, but if it's only used for deployment (could it even be a private mirror?) then I think it's the best solution.

Yeah, I was thinking it could actually be beneficial to have that in a private repo, segregated away. I'll start there then 👍


Excludes option should honor js and css assets in addition to html imports

The excludes option appears to only apply to html imports and folders containing those imports.  It needs to honor js and css assets as well.

@freshp86

Isn't this a duplicate of #530?

Yep, duplicate of https://github.com/Polymer/polymer-bundler/issues/530


Documentation?

Is there any documentation available?

We don't have any yet--we are working to build more recognizers to add, but we do have some resources to add documentation.  Were you looking for documentation on how to write new ones or use the existing ones?

You could look up the unit test files for how to use it.

Hi @KarimJedda,
are the unit tests as example enough for what you need? Or are you looking for documentation on how to add new features?
We'll publish a spec soon that will help in the later case.

Hello,
I ended up reading the code and porting some of it to Python. :3
Thanks for the help people <3

OK. Closing this issue then.
Please share the link to your python code. :)


Some remarks

Hi,
I'm trying to implement a SMS request manager without messing too much with your code.
Currently the send() method of TrackingControlle is called each time a new position is available. If the sending fails, a postDelayed is used to retry 30s later. The successful update of the server with the position trigger the position deletion from the DB.
Would it be possible that you change a bit your code so that you don't remove the position from the DB as soon as it is sent ? (Like create a houskeeping job started every X hours to delete of positions)
It would be a good reason to start using the AlarmManager class. Even for the retry, contrary to the Alarmanager, the  postDelayed function of Handler is not started when CPU is in deep sleep.)
I need this because I need to send the X last position in a SMS if the last X position could not be sent by HTTP.
I could do it but I don't really want to mess with your code as it would make my fork un-maintainable.
More generally, can you try to make your code easier to interface with ? Like with the  PositionProvider abstract class that make it easy to create new providers.
I would understand if you don't want to modify too much your code because most of the forks created so far did not last very long.
But maybe it was also because it is very hard to maintain a fork when the original project change and you were forced to modify it heavily for your fork.
Redge

Do you think you can move completeWakefulIntent and startForeground of  TrackingService.onStart to the oncreate function ? I think they should be called only once.

I remove data from the database as soon as it's sent to avoid re-sending it again. If I keep it, there would be no way to tell which positions has been sent already.
As for making the code easier to interface, I want to keep it as simple as possible for easier maintenance, but if you are free to send me pull request with some re-factorings.
I think we need to keep completeWakefulIntent in the start method.

completeWakefulIntent  yes... Sorry for that I wrote this comment before making my pull request where  I left it in onstart.
As for not removing data from the DB, of course each request manager would have to store which position was already sent.
I will try to propose some thing in a pull request.

It would mean that we need to store index of the last sent position in the database as well.


Update I2C_eeprom.cpp (#1)

Fixes eternal loop when calling I2C_eeprom::setPageSize(128) (eg: 24LC512).

I think nobody ran into this because I use smartcard eeproms and have to determine it's size when a new card is detected. I2C_EEPROM::setDeviceSize doesn't update _pageSize by the way. I don't know if that is on purpose, and didn't want to potentially break existing code.

I forgot to accually set _pageSize to the correct size after it exits the while loop in the first commit. All good now.

Thanks for this PR.
Hope to look into it coming week.

Had a first look and that function has a bug and needs investigation. Thanks for pointing that out.
Your solution does not solve it for all scenarios, so it needs to be rewritten.
Failing scenario set the param to 129..255 and the internal var size will overflow in the loop and become zero. This makes the loop endless. (Please verify).

Yeah your right. How do you feel about this solution that rounds the value to the next power of two (if not a power of two). It can't go into an eternal loop if there isn't a loop. ;)

I squashed my last three commits into one.

Interesting code, however not trivial to understand what happens.
A simple list of 4 if statements would be more clear and maintainable.
If (pagesize >= 128) _pagesize =128;
else if (pagesize >= 64) _pagesize = 64;
else if (pagesize >= 32) _pagesize = 32;
else if (pagesize >= 16) _pagesize =16;
else _pagesize = 8;
...

I feel it's not to complicated. Lets say you start with 0b0101. After -1 it's 0b0100. That gets or'd with itself that has been shifted one step to the right till you get 0b0111. The final +1 results in 0b1000. But I agree that readability at first glance could be an issue.
I don't see an issue with using if/then instead. You're code, your call.

The 24c1024 has its own library, I need to check if the same/similar problem exists.

I don't see an issue with using if/then instead. Your code, your call.

If you have time please do.

There ya go, my pleasure.
I also quickly looked over your other 24c1025 library and it doesn't have a setPageSize, also did a quick search for while loops and didn't find anything related to this. But if you don't mind me asking, why a separate library?

Don't recall all detailed rationales but footprint was one of them.

Sorry for the inconvenience,
Other priorities take my time so several things are delayed including this PR.

No issue at all, we all have lives and you merged it pretty fast to be
honest.
Een beetje vroeg maar alvast fijne feestdagen en een gelukkig nieuwjaar
gewenst.
Op ma 20 nov. 2023 17:20 schreef Rob Tillaart @.***>:

Sorry for the inconvenience,
Other priorities take my time so several things are delayed including this
PR.
—
Reply to this email directly, view it on GitHub
https://github.com/RobTillaart/I2C_EEPROM/pull/59#issuecomment-1819380508,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AS5U7IBUKOTE43QZE4PSICLYFN7LBAVCNFSM6AAAAAA7QSGXLSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMJZGM4DANJQHA
.
You are receiving this because you authored the thread.Message ID:
@.***>

Thanks, same to you!
Do you have Dutch / Belgian roots?


Update Pull app graphic and readme

Checklist

[x] If you're adding a listing for your app, be sure your app is in the /_apps/ folder before opening this Pull Request.
[x] All comments in frontmatter need to be removed.
[x] Performs a useful action through the GitHub API that solves an existing problem for developers: Keep forks up-to-date with automated PRs
[x] Is original: for example, it does something not already done by an existing Probot app
[x] Has tests
[x] Has documentation
[x] Is open source
[x] Has a license
[x] Has a code of conduct
[x] Has someone willing to at least minimally maintain them for the near future: @wei

View rendered _apps/pull.md

New graphic 🎉

How many installations does pull have?

I'm pretty sure it does not have as many as stale ;) The numbers on the app gallery page are unreliable because the /probot/stats endpoint is disabled for apps with too many installations. And the endpoint was removed for v10. We might as well remove the data from the gallery

@gr2m I see, I ran your action last night and it came out to be 4607 installations and 108656 repositories. It took over an hour to run.
I'm using your action to update https://github.com/pull-app/stats/blob/master/stats.json and serving cached version at /probot/stats. My server is very happy 😄 .

Maybe I can claim most repositories?

I don't know. the latest from stale, but I'm sure no other github app is even close. Let me merge this in and see if I can get stats for stale, I'll let you know

actually stale has "only" 7647 installations, not sure about repositories. Maybe we could add number of repositories as output to https://github.com/gr2m/app-stats-action?

@gr2m great! I'll make a PR shortly.

I'm sorry to say, but https://slack.github.com and https://lab.github.com are by far the two most installed Probot apps (with Slack being way more still). I'm not sure if I can share specifics, but I promise you they both have more installations and repositories than any other Probot app, including Stale.

Wow didn't know they were based on probot too. That's awesome! I guess I need to add more qualifiers like the # 1 probot app that is unaffiliated with GitHub, open-source, starts with 'P', runs on a smoky server in Amsterdam, likes to brain-fart, etc 🤣

Stale has 327,569 repositories right now


fix #3122

The code was actually ignoring the "raw" analysis artifacts, now it doesn't.

@ElDeveloper By mistake I also pushed the fix for #3124 here; the changes for both issues are pretty small but let me know if you want me to split them.

Looks great to me, thanks so much @antgonza!


Statistics (service functions, Ski statistics) - Max Speed(Kilometer per hour) on a particular date

Describe briefly your feature.
This feature aimed at implementing a UI component to showcase the max speed per hour covered along with the date. It depends on the functionality developed by Groups# 4 - 6, related issue link #56.
Describe the solution you'd like
Members of Groups # 4-6 will work on the methods for creating the statistics(service functions, Ski statistics) and provide a function for the max speed per run(Km/h). Once these methods are established, additional code can be integrated to compute max speed per hour along with a date of that day. The computed data will then be utilized by an XML file, configurable with necessary attributes to present the max speed along with the date at the ski chairlift.
Describe alternatives you've considered
Should the initially proposed method prove ineffective, an alternative approach involves allowing users to manually input speed of the run out of which maximum will be calculated and displayed along with the date associated with that speed. However, this method may be less reliable due to potential inaccuracies in user-provided data.
Additional context

Added method to calculate max speed for ski


Add poh burner timerbox

Adds a burnertimer. works with the current infobox.
first pull request so gimme feedback and please check whether it all checks out lol :).
adds 2 options in the config, one to disable it all together and, as the burner timers aren't 100% consistent, the other option so one could set it slightly higher than the default 2 minutes bottom line if they have a higher firemaking level.

Aren't there two of these with independent times? It might be better to just render it overtop of the burners in the game scene.

yea that should be possible. that was what i was working on originally but had forgotten. ima try ;)


Connect via SSH

Hi,
Thank a lot for the docker-image, looks great!
Sorry for the possibly newbie question, but I'm new to docker and not very familiar with linux. I want to have SSH session to the container, usually I would to that via the docker command "docker attach [NAME_OF_CONTAINER]", however this won't work in the provided image, since after I connect I cannot write any commands. I've tried connecting with putty but so far unsuccessfully (I use the same host IP as the one I use to open the web browser gateway)
Thanks in advance!

nevermind, I managed to get it working with the following command:
sudo docker exec -it  bash


MeanEstimator should be able to ignore NANs in training

Description
I created a simple random dataset, added a single NAN value in the first instance at the start of the last window before forecast, and compared evaluation metrics of 3 trivial estimators: Mean, Constant and Identity (code below). The ConstantEstimator is not affected at all - all metrics are normal. IdentifyPredictor ends up with NA for the metrics on the first instance and normal values elsewhere. This is not surprising, though one could argue whether that's the best handling of the missing value. However, MeanEstimator ends up with all metrics for all instances as NAN - I found this surprising. I think it would make more sense for MeanEstimator to ignore NANs in training data rather than have a single NAN mess up the predictor.
Another thought is that it'd be interesting to have a variant that computes and applies means separately on each instance, rather than over the whole training data.
To Reproduce
import pandas as pd
import numpy as np
from gluonts.evaluation import Evaluator
from gluonts.evaluation import backtest
from gluonts.dataset.common import ListDataset, TrainDatasets
from gluonts.evaluation import make_evaluation_predictions

# f=following gluonTS tutorial: https://ts.gluon.ai/stable/tutorials/forecasting/quick_start_tutorial.html#Custom-datasets
N = 10  # number of time series
T = 24*7  # number of timesteps
prediction_length = 24
freq = "1H"
custom_dataset = np.random.normal(size=(N, T))

start = pd.Timestamp("01-01-2019", freq=freq)  # can be different for each time series

### add NANs: 1st point in the last training window
custom_dataset[0,121]=np.nan

train_ds = ListDataset(
    [{'item_id': i,'target': x, 'start': start} for (i,x) in enumerate(custom_dataset[:, :-prediction_length])],
    freq=freq
)
test_ds = ListDataset(
    [{'item_id': i,'target': x, 'start': start} for (i,x) in enumerate(custom_dataset[:, :])],
    freq=freq
)

# Fit MeanEstimator
from gluonts.model.trivial.mean import MeanEstimator
predictorM = MeanEstimator(prediction_length=24, freq='1H', num_samples=100).train(train_ds)
from gluonts.model.trivial.constant import ConstantValuePredictor
predictorC = ConstantValuePredictor(prediction_length=24, freq='1H', value=0, num_samples=100)
from gluonts.model.trivial.identity import IdentityPredictor
predictorI = IdentityPredictor(prediction_length=24, freq='1H', num_samples=100)

for predictor in [predictorC, predictorI, predictorM]:
    print(type(predictor))
    evaluator=Evaluator(quantiles=[0.1, 0.5, 0.9], num_workers=None)
    agg_metrics, item_metrics = backtest.backtest_metrics(test_ds, predictor, evaluator)
    print([agg_metrics[x] for x in ['MSE', 'RMSE', 'NRMSE', 'ND']])
    print(item_metrics[['item_id','MSE','abs_error']])

Error message or code output
(Paste the complete error message, including stack trace, or the undesired output that the above snippet produces.)
<class 'gluonts.model.trivial.constant.ConstantValuePredictor'>
[1.1721360819194713, 1.082652336588007, 1.2891094480276746, 1.0000000025297278]
   item_id       MSE  abs_error
0      NaN  1.646284  25.712500
1      NaN  1.810231  25.060539
2      NaN  0.934014  17.689958
3      NaN  1.138792  18.325633
4      NaN  0.868155  18.164898
5      NaN  1.123610  17.956955
6      NaN  0.759920  16.268135
7      NaN  1.408551  21.661034
8      NaN  1.134947  22.545605
9      NaN  0.896856  18.177583

<class 'gluonts.model.trivial.identity.IdentityPredictor'>
[2.263645772580747, 1.5045417151347937, 1.7914513037901383, 1.2935801589632892]
   item_id       MSE  abs_error
0      0.0       NaN        NaN
1      1.0  2.201055  28.548775
2      2.0  1.534184  25.064253
3      3.0  3.204268  32.571938
4      4.0  1.617391  25.096828
5      5.0  1.972552  26.592113
6      6.0  2.252131  31.927937
7      7.0  2.406640  28.842175
8      8.0  2.678541  31.139656
9      9.0  2.506050  30.954016

<class 'gluonts.model.trivial.constant.ConstantPredictor'>  -- this is because MeanEstimator produces ConstantPredictor
[nan, nan, nan, 0.0]
   item_id  MSE  abs_error
0      0.0  NaN        NaN
1      1.0  NaN        NaN
2      2.0  NaN        NaN
3      3.0  NaN        NaN
4      4.0  NaN        NaN
5      5.0  NaN        NaN
6      6.0  NaN        NaN
7      7.0  NaN        NaN
8      8.0  NaN        NaN
9      9.0  NaN        NaN

Environment

Operating system: linux
Python version: 3.7.10
GluonTS version: 0.9.4
MXNet version: 1.7.0

Thanks for raising the issue!
Agreed, we should ignore nans when calculating the mean of the training dataset.

Another thought is that it'd be interesting to have a variant that computes and applies means separately on each instance, rather than over the whole training data.

There is a MeanPredictor which more or less does it. It takes the mean and std of the time-series and then produces a forecast using these settings.

Thanks, @jaheba. I didn't realize MeanPredictor was already there!


Scourge Strike Doesn't Have Rank 7

Only went to 6 in the data, but the add-on thinks there's a Rank 7.
https://www.wowhead.com/wotlk/spell=49921/plague-strike

Some how this got included in the Plague Strike group.

This group of Glyphed Death Coil seems to have gotten left out, but one of the spells incorrectly got added to the Plague Strike group. May be worth checking the groupings, but that's the only one I found that was odd for DKs.

That is not the right GSheet, per README. https://docs.google.com/spreadsheets/d/1jtx1WyfChzACzh0WBWANtrqkRtS3D-zPWqs3eOnyVvY/edit

But that did indeed get lumped into { 45462, 49917, 49918, 49919, 49920, 49921, 62904 }, Plague Strike which is confusing.

Probably fixed by this change.

v2.0.5c