[Definition Request]: beacon chain

Context
Taken from bigger issue: https://github.com/narbs91/glosseta/issues/44
Term
beacon chain
Definition
TBD
List of category options
General (i.e. blockchain, fud, fomo, gm, etc...)
Additional Information
No response

Hello,
I'd like to work on this topic. Let me know the steps I need so I can get started. Thank you!

Hi @naftalimurgor thank you for taking the initiative and wanting to help add beacon chain to Glosseta's knowledge base!  I'll work on adding a wiki doc around the process of adding a definition and update this comment shortly after.  Essentially what your goal is to create a definition of the beacon chain in 2-3 sentences and add that to the master csv file.  The aim of these definition requests is to provide a concise yet informative definition of term at hand.  Anyhow, i'll assign this issue to you and get working on that documentation

Please find the aforementioned guide on how to work on a definition intake request issue in the following wiki page: https://github.com/narbs91/glosseta/wiki/How-to-guide:-Definition-intake-request
Please let me know if you have any questions/concerns

Hi @naftalimurgor just checking in, any questions or concerns wrt to your assigned issue?

Hello, @narbs91 no questions, my apologies. I've been quite busy. Will submit a PR this week.


Console output as json with a flag to control when the console output is free form text and when it's json

Need to have a global flag to control the console output mode (--json-output or something like that).

@kcq Could I take a stab at this?

Go for it @loganshamberger :) Let me know if you'd like to do a code walk through to learn about the execution context used for I/O and other things.

@kcq I think that would be helpful. I've pulled it down and am just trying to get the code built and run to start.

@kcq is someone still working on this?

still open and still TBD :)

Hi @kcq is someone still working on it?

Are you interested in contributing this enhancement :)

@kcq yeah I am interested.

@kcq yeah I am interested.

Let's chat then :)

hey @kcq, I am new to it, could you please suggest me where do we start with?

@akankshakumari393 when are you online? I can give you an overview.
A few notes to get you started in the meantime...
The docker-slim I/O happens using the ExecutionContext construct ( https://github.com/docker-slim/docker-slim/blob/master/pkg/app/execontext.go ). TheExecutionContext.Output.Info(), ExecutionContext.Output.State(), ExecutionContext.Output.Message() and ExecutionContext.Output.Error() calls are responsible for the actual console output and that's where we need to conditionally print using the standard formatting or json.
The docker-slim commands are here and that's where the ExecutionContext struct is used for I/O:
https://github.com/docker-slim/docker-slim/tree/master/pkg/app/master/commands
Example:
			xc.Out.Info("params",
				ovars{
					"target.type":   "image",
					"target":        targetRef,
					"continue.mode": continueAfter.Mode,
					"rt.as.user":    doRunTargetAsUser,
					"keep.perms":    doKeepPerms,
					"tags":          strings.Join(outputTags, ","),
				})

https://github.com/docker-slim/docker-slim/blob/master/pkg/app/master/commands/build/handler.go#L255
Also a couple of videos to watch:
https://www.youtube.com/watch?v=Y60g3Jz2Fg8&t=14s
https://www.youtube.com/watch?v=ioIG-oPg0pA&t=60s

Hey thanks, I will go through these and will let you know in case I have any doubt.

@kcq How is the globalflag --log-format different from the json-output that we are gonna add?

The log-format flag is for the logging data output. The standard output output data is different from the logging data, which is usually disabled and you enable it when you need additional debugging information. Both end up being printed to the screen, but they are independent of each other.

@akankshakumari393 let me know if you want to do an online session next week to go over the enhancements

@kcq I won't be available this week. I would be good if we can schedule it to next week.


Generate windows installer.

What
Create installer for Windows.

Why
This is a first step on making stellar-cli available on winget.
Known limitations
N/A

@leighmcculloch this is good to go! Just tested this installer and it worked! 🎉


[neon/sgemm] Partial accumulation using both fp16 and fp32 intrinsics

SGEMM modifications made:

Used mixed precision accumulations using both fp16 and fp32 intrinsics to enhance performance.
Modified function calls to inline calls to reduce register spilling.
Temporary fp32 storage used to enhance accuracy.

Self evaluation:

Build test:	 [X]Passed [ ]Failed [ ]Skipped
Run test:	 [X]Passed [ ]Failed [ ]Skipped

:memo: TAOS-CI Version: 1.5.20200925. Thank you for submitting PR #2327. Please a submit 1commit/1PR (one commit per one PR) policy to get comments quickly from reviewers. Your PR must pass all verificiation processes of cibot before starting a review process from reviewers. If you are new member to join this project, please read manuals in documentation folder and wiki page. In order to monitor a progress status of your PR in more detail, visit http://ci.nnstreamer.ai/.


Whether the T-MAC supports the RISC-V CPU？

I want to run T-MAC on RIAC-V hardware, what environment do I need to configure?

Sorry, but T-MAC hasn't supported risc-v.


D435i Motion Module Hardware Timestamps using LIBUVC

Required Info

Camera Model
D435i

Firmware Version
<IP_ADDRESS>

Operating System & Version
Ubuntu 18.04

Kernel Version (Linux Only)
Linux pop-os 5.3.0-20-generic

Platform
PC

SDK Version
2.30

Language
C++

Segment
Robots

I have installed the latest Realsense SDK 2.30 on my machine. Here is CMAKE commands for completeness:
cmake ../ -DFORCE_RSUSB_BACKEND=true -DCMAKE_BUILD_TYPE=release -DBUILD_EXAMPLES=true -DBUILD_GRAPHICAL_EXAMPLES=true -DBUILD_PYTHON_BINDINGS=true

My kernel just upgraded to 5.3 so I now need to use the libuvc backend. It installs and seems to work fine. I have already calibrated the IMU using intel procedures. Hardware timestamps seem to be working for RGB and depth. However I am not sure if they are working for the motion module. There are no errors about meta information in the terminal when running realsense-viewer.  There is this error but not sure if its relevant, they are few of them over the lifespan, and mostly in the beginning.
08/11 10:51:57,716 WARNING [139733166438144] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
 08/11 10:51:57,776 WARNING [139733166438144] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
 08/11 10:51:57,957 WARNING [139733166438144] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
 08/11 10:51:58,138 WARNING [139733166438144] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
 08/11 10:51:58,319 WARNING [139733166438144] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
 08/11 10:51:58,379 WARNING [139733166438144] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
 08/11 10:52:16,873 WARNING [139733166438144] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
 08/11 11:04:04,052 WARNING [139733166438144] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
 08/11 11:08:09,032 WARNING [139733166438144] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: Resource temporarily unavailable, number: 11

However when I click the meta information overlay for the motion I get the following picture.

As you can see the clock domain is showing Global Time, which should mean that hardware timestamps are working. However the backend timestamp is showing 0, making me think that its not working. The main question I have:

How do I know if the hardware timestamps are working?
And if they are not working what must be done to get libuvc to work with them?

A final question I have is a little general. I have searched for it but have not foudn the answer:

What are the advantages and disadvantages of using libuvc vs patched kernel modules?

Obviously ease of installation is for libuvc. But are there any tradeoffs? Like higher latency, more bugs, unsupported workflows? Any info on that would be great.
Thanks again for the great product and the support Intel provides.

same problem here...

@JeremyBYU hello, please see answers inlined:

My kernel just upgraded to 5.3 so I now need to use the libuvc backend

With all kernels v.416+ you get the standard HW timestamp for free (w/o kernel patches), You'd still need to apply the patches if you need the extended frame metadata - exposure, gain, laser poser, etc'. But if you're only interested in getting HW timestamps then using unmodified kernel should suffice.

As you can see the clock domain is showing Global Time, which should mean that hardware timestamps are working. However the backend timestamp is showing 0, making me think that its not working.

The backend_timestamp is host-generated attribute. Global timestamp does relies on HW timestamp and is not affected by backend ts. There is a minor issue with not all metadata attributes  being display in the viewer that we'll need to check.

How do I know if the hardware timestamps are working?

By checking the timestamp domain attribute of frame's timestamp. When HW timestamps are available then the SDK will automatically prefer them over the host-generated timestamps and you're expected to receive global ts or hw ts domain. (documentation). Also see related #4525.

And if they are not working what must be done to get libuvc to work with them?

The HW timestamps should be available with rsusb (libuvc is deprecated with v2.30.0) when that backend is configured in Cmake. No additional parameters are required.

What are the advantages and disadvantages of using libuvc vs patched kernel modules?

This questing is worth a topic of its own:), The following points in my estimation are valid to the discussion:
Libuvc advantages:

Cross-platform  (at least for Linux & MacOS).
User-space UVC implementation :

No kernel patches required
Easily to deploy (gcc + libusb dependencies only) - thus is the preferred choice of Librealsense for ARM/Jetsons/Mac platforms
Easier to Debug
Disadvantages/ Fundamental issues:

No official support/maintainers.
Most of the implementation is build around UVC 1.1, while most contemporary cameras (including realsense) are UVC 1.5 devices
User-space UVC implementation:

Power-management - In case an application crushes/get stuck the the underlying device is not being released and continues to run in orphan mode. This may require manual re-plugging to recover (reliability).

Single Consumer - most kernel drivers (Linux/Windows) allow to connect and communicate with device from multiple processes (except for streaming). With Libuvc only one application can get device handle. This is one of the limitations for multicam on MacOS, for instance. There are attempts to address this by community enthusiasts, so this may change one day.

Kernel patches:

The kernels are fast and (mostly) stable. Adding patched modules into kernel tree in controlled and pier-reviewed manner allows to get most of the benefits and also get the additional features.
All kernel patches should eventually get upstreamed into Linux of abandoned,
From the user's perspective the main obstacle in accepting the kernel patch model is the deployment scheme that requires certain engineering skills level.
We address this by by wrapping and redistributing the patches with DKMS Debian package, at least for Ubuntu LTS kernels.

Thank you for this thorough response. I will continue to use the libuvc/rsusb driver for now, since mostly all I care about is timestamps.  The only thing that you mentioned that I am a a little concerned with is this quote:

The kernels are fast and (mostly) stable.

Just wondering if this implies that there might be an issue with speed when using libuvc.  However that is something that I can determine myself through my own tests.

I think I just ran into an issue with something you just said:

Single Consumer - most kernel drivers (Linux/Windows) allow to connect and communicate with device from multiple processes (except for streaming). With Libuvc only one application can get device handle. This is one of the limitations for multicam on MacOS, for instance. There are attempts to address this by community enthusiasts, so this may change one day.

I have a program that is modified from rs-motion.  Two rs:pipelines are created

One pipeline that monitors motion data through a callback. e.g. pipeline.start(config, callback). This puts it in a seperate thread.
Another pipeline that gets aligned rgb, depth camera data.  This is on the main thread using the blocking wait for frames: rs2::frameset data = pipe_camera.wait_for_frames();

This setup works just fine on my Windows 10 computer (which I assume is using a good device driver that supports this setup). However on my Linux computer now using libuvc/rsusb, only the last pipeline started gets access to data (camera data). Code attached at bottom.
If you comment out the auto profile_camera = pipe_camera.start(cfg_camera); line and any references to it a few lines below, then motion data is now recorded.
I just want to make sure that this is not a bug, and this "issue" is what you were referring to in the above quote. If it is expected behaviour, do you have any solution for me to capture high frequency motion data on on thread, and separately capture a frame set of depth/rgb on another using rsusb? I think I have an idea on how to do that and will try it out: Capture all data in one pipeline, each callback gives back each sensor stream independently (gryo, accel, depht, rgb). But then I think I lose the ability to nicely use frameset alignment and such.
Thanks for your help @ev-mp.
// License: Apache 2.0. See LICENSE file in root directory.

// Copyright(c) 2019 Intel Corporation. All Rights Reserved.

#include <librealsense2/rs.hpp>

#include <mutex>

#include "example.hpp" // Include short list of convenience functions for rendering

#include <cstring>

#include <chrono>
#include <thread>

struct short3

{

    uint16_t x, y, z;
};

#include "d435.h"

void draw_axes()

{

    glLineWidth(2);

    glBegin(GL_LINES);

    // Draw x, y, z axes

    glColor3f(1, 0, 0);
    glVertex3f(0, 0, 0);
    glVertex3f(-1, 0, 0);

    glColor3f(0, 1, 0);
    glVertex3f(0, 0, 0);
    glVertex3f(0, -1, 0);

    glColor3f(0, 0, 1);
    glVertex3f(0, 0, 0);
    glVertex3f(0, 0, 1);

    glEnd();

    glLineWidth(1);
}

void draw_floor()

{

    glBegin(GL_LINES);

    glColor4f(0.4f, 0.4f, 0.4f, 1.f);

    // Render "floor" grid

    for (int i = 0; i <= 8; i++)

    {

        glVertex3i(i - 4, 1, 0);

        glVertex3i(i - 4, 1, 8);

        glVertex3i(-4, 1, i);

        glVertex3i(4, 1, i);
    }

    glEnd();
}

void render_scene(glfw_state app_state)

{

    glClearColor(0.0, 0.0, 0.0, 1.0);

    glColor3f(1.0, 1.0, 1.0);

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    gluPerspective(60.0, 4.0 / 3.0, 1, 40);

    glClear(GL_COLOR_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);

    glLoadIdentity();

    gluLookAt(1, 0, 5, 1, 0, 0, 0, -1, 0);

    glTranslatef(0, 0, +0.5f + app_state.offset_y * 0.05f);

    glRotated(app_state.pitch, -1, 0, 0);

    glRotated(app_state.yaw, 0, 1, 0);

    draw_floor();
}

class camera_renderer

{

    std::vector<float3> positions, normals;

    std::vector<short3> indexes;

public:
    // Initialize renderer with data needed to draw the camera

    camera_renderer()

    {

        uncompress_d435_obj(positions, normals, indexes);
    }

    // Takes the calculated angle as input and rotates the 3D camera model accordignly

    void render_camera(float3 theta)

    {

        glEnable(GL_BLEND);

        glBlendFunc(GL_ONE, GL_ONE);

        glPushMatrix();

        // Set the rotation, converting theta to degrees

        glRotatef(theta.x * 180 / PI, 0, 0, -1);

        glRotatef(theta.y * 180 / PI, 0, -1, 0);

        glRotatef((theta.z - PI / 2) * 180 / PI, -1, 0, 0);

        draw_axes();

        // Scale camera drawing

        glScalef(0.035, 0.035, 0.035);

        glBegin(GL_TRIANGLES);

        // Draw the camera

        for (auto &i : indexes)

        {

            glVertex3fv(&positions[i.x].x);

            glVertex3fv(&positions[i.y].x);

            glVertex3fv(&positions[i.z].x);

            glColor4f(0.05f, 0.05f, 0.05f, 0.3f);
        }

        glEnd();

        glPopMatrix();

        glDisable(GL_BLEND);

        glFlush();
    }
};

class rotation_estimator

{

    // theta is the angle of camera rotation in x, y and z components

    float3 theta;

    std::mutex theta_mtx;

    /* alpha indicates the part that gyro and accelerometer take in computation of theta; higher alpha gives more weight to gyro, but too high

    values cause drift; lower alpha gives more weight to accelerometer, which is more sensitive to disturbances */

    float alpha = 0.98;

    bool first = true;

    // Keeps the arrival time of previous gyro frame

    double last_ts_gyro = 0;

public:
    // Function to calculate the change in angle of motion based on data from gyro

    void process_gyro(rs2_vector gyro_data, double ts)

    {

        if (first) // On the first iteration, use only data from accelerometer to set the camera's initial position

        {

            last_ts_gyro = ts;

            return;
        }

        // Holds the change in angle, as calculated from gyro

        float3 gyro_angle;

        // Initialize gyro_angle with data from gyro

        gyro_angle.x = gyro_data.x; // Pitch

        gyro_angle.y = gyro_data.y; // Yaw

        gyro_angle.z = gyro_data.z; // Roll

        // Compute the difference between arrival times of previous and current gyro frames

        double dt_gyro = (ts - last_ts_gyro) / 1000.0;

        last_ts_gyro = ts;

        // Change in angle equals gyro measures * time passed since last measurement

        gyro_angle = gyro_angle * dt_gyro;

        // Apply the calculated change of angle to the current angle (theta)

        std::lock_guard<std::mutex> lock(theta_mtx);

        theta.add(-gyro_angle.z, -gyro_angle.y, gyro_angle.x);
    }

    void process_accel(rs2_vector accel_data)

    {

        // Holds the angle as calculated from accelerometer data

        float3 accel_angle;

        // Calculate rotation angle from accelerometer data

        accel_angle.z = atan2(accel_data.y, accel_data.z);

        accel_angle.x = atan2(accel_data.x, sqrt(accel_data.y * accel_data.y + accel_data.z * accel_data.z));

        // If it is the first iteration, set initial pose of camera according to accelerometer data (note the different handling for Y axis)

        std::lock_guard<std::mutex> lock(theta_mtx);

        if (first)

        {

            first = false;

            theta = accel_angle;

            // Since we can't infer the angle around Y axis using accelerometer data, we'll use PI as a convetion for the initial pose

            theta.y = PI;
        }

        else

        {

            /*

            Apply Complementary Filter:

                - high-pass filter = theta * alpha:  allows short-duration signals to pass through while filtering out signals

                  that are steady over time, is used to cancel out drift.

                - low-pass filter = accel * (1- alpha): lets through long term changes, filtering out short term fluctuations

            */

            theta.x = theta.x * alpha + accel_angle.x * (1 - alpha);

            theta.z = theta.z * alpha + accel_angle.z * (1 - alpha);
        }
    }

    // Returns the current rotation angle

    float3 get_theta()

    {

        std::lock_guard<std::mutex> lock(theta_mtx);

        return theta;
    }
};

bool check_imu_is_supported()

{

    bool found_gyro = false;

    bool found_accel = false;

    rs2::context ctx;

    for (auto dev : ctx.query_devices())

    {

        // The same device should support gyro and accel

        found_gyro = false;

        found_accel = false;

        for (auto sensor : dev.query_sensors())

        {

            for (auto profile : sensor.get_stream_profiles())

            {

                if (profile.stream_type() == RS2_STREAM_GYRO)

                    found_gyro = true;

                if (profile.stream_type() == RS2_STREAM_ACCEL)

                    found_accel = true;
            }
        }

        if (found_gyro && found_accel)

            break;
    }

    return found_gyro && found_accel;
}

int main(int argc, char *argv[]) try

{
    using namespace std::chrono_literals;

    // Before running the example, check that a device supporting IMU is connected

    if (!check_imu_is_supported())

    {

        std::cerr << "Device supporting IMU (D435i) not found";

        return EXIT_FAILURE;
    }

    // Initialize window for rendering

    // window app(1280, 720, "RealSense Motion Example");

    // // Construct an object to manage view state

    // glfw_state app_state(0.0, 0.0);

    // // Register callbacks to allow manipulation of the view state

    // register_glfw_callbacks(app, app_state);

    size_t gryro_iter = 0;

    size_t accel_iter = 0;

    size_t depth_iter = 0;

    size_t color_iter = 0;

    double ts_gyro = 0.0;

    double ts_accel = 0.0;

    double ts_depth = 0.0;

    double ts_color = 0.0;

    // Create pipeline for gyro and accelerometer. Run in seperate thread.

    // Declare RealSense pipeline, encapsulating the actual device and sensors

    rs2::pipeline pipe_motion;

    // Create a configuration for configuring the pipeline with a non default profile

    rs2::config cfg_motion;

    // Add streams of gyro and accelerometer to configuration

    cfg_motion.enable_stream(RS2_STREAM_ACCEL, RS2_FORMAT_MOTION_XYZ32F);

    cfg_motion.enable_stream(RS2_STREAM_GYRO, RS2_FORMAT_MOTION_XYZ32F);

    // Declare object for rendering camera motion

    camera_renderer camera;

    // Declare object that handles camera pose calculations

    rotation_estimator algo;

    double my_clock = std::chrono::duration<double, std::milli>(std::chrono::system_clock::now().time_since_epoch()).count();

    // Start streaming with the given configuration;

    // Note that since we only allow IMU streams, only single frames are produced

    auto profile = pipe_motion.start(cfg_motion, [&](rs2::frame frame)

                                     {
                                         // Cast the frame that arrived to motion frame

                                         auto motion = frame.as<rs2::motion_frame>();

                                         // If casting succeeded and the arrived frame is from gyro stream

                                         if (motion && motion.get_profile().stream_type() == RS2_STREAM_GYRO && motion.get_profile().format() == RS2_FORMAT_MOTION_XYZ32F)

                                         {

                                             // Get the timestamp of the current frame

                                             double ts = motion.get_timestamp();

                                             auto domain = motion.get_frame_timestamp_domain();

                                             // Get gyro measures

                                             rs2_vector gyro_data = motion.get_motion_data();

                                             // Call function that computes the angle of motion based on the retrieved measures

                                             algo.process_gyro(gyro_data, ts);

                                             gryro_iter++;

                                             ts_gyro = ts;
                                         }

                                         // If casting succeeded and the arrived frame is from accelerometer stream

                                         if (motion && motion.get_profile().stream_type() == RS2_STREAM_ACCEL && motion.get_profile().format() == RS2_FORMAT_MOTION_XYZ32F)

                                         {

                                             // Get accelerometer measures

                                             double ts = motion.get_timestamp();

                                             auto domain = motion.get_frame_timestamp_domain();

                                             rs2_vector accel_data = motion.get_motion_data();

                                             // Call function that computes the angle of motion based on the retrieved measures

                                             algo.process_accel(accel_data);

                                             accel_iter++;

                                             ts_accel = ts;
                                         }
                                     });

    // Create pipeline for depth and color. Run in this main thread.

    // Declare RealSense pipeline, encapsulating the actual device and sensors

    rs2::pipeline pipe_camera;

    // Create a configuration for configuring the pipeline with a non default profile

    rs2::config cfg_camera;

    // Add streams of gyro and accelerometer to configuration

    cfg_camera.enable_stream(RS2_STREAM_COLOR, 640, 480, RS2_FORMAT_BGR8, 30);

    cfg_camera.enable_stream(RS2_STREAM_DEPTH, 640, 480, RS2_FORMAT_Z16, 30);

    auto profile_camera = pipe_camera.start(cfg_camera);

    // Main loop

    // while (app)
    while (true)

    {

        rs2::frameset data = pipe_camera.wait_for_frames();

        rs2::frame depth = data.get_depth_frame();

        rs2::frame color = data.get_color_frame();

        depth_iter++;

        color_iter++;

        ts_depth = depth.get_timestamp();

        ts_color = color.get_timestamp();

        double new_clock = std::chrono::duration<double, std::milli>(std::chrono::system_clock::now().time_since_epoch()).count();

        if (new_clock - my_clock >= 1000)

        {

            my_clock = new_clock;

            std::cout << std::setprecision(0) << std::fixed << "FPS --- "
                      << "Gryo: " << gryro_iter << "; Accel: " << accel_iter

                      << "; Depth: " << depth_iter << "; RGB: " << color_iter << std::endl;

            std::cout << std::setprecision(0) << std::fixed << "Timing --- Now: " << my_clock << "; Gryo: " << ts_gyro << "; Accel: " << ts_accel

                      << "; Depth: " << ts_depth << "; RGB: " << ts_color << std::endl;

            std::cout << std::endl;

            gryro_iter = 0;

            accel_iter = 0;

            depth_iter = 0;

            color_iter = 0;
        }

        // auto domain = depth.get_frame_timestamp_domain();

        // Configure scene, draw floor, handle manipultation by the user etc.

        // render_scene(app_state);

        // Draw the camera according to the computed theta

        // camera.render_camera(algo.get_theta());
        std::this_thread::sleep_for(10ms);
    }

    // Stop the pipeline

    pipe_motion.stop();

    return EXIT_SUCCESS;
}

catch (const rs2::error &e)

{

    std::cerr << "RealSense error calling " << e.get_failed_function() << "(" << e.get_failed_args() << "):\n    " << e.what() << std::endl;

    return EXIT_FAILURE;
}

catch (const std::exception &e)

{

    std::cerr << e.what() << std::endl;

    return EXIT_FAILURE;
}

To make a clarification on why I am actually still using rsusb. My final deployment will be on a Raspberry Pi4. This seems to the recommended way to install realsense. I have been switching between Linux x86_64 (personal PC) and RPI4 buster x64 (experimental new 64 bit kernel)  and testing code between the two. It seems to be working okay except with this new issue.

All my investigations have determined that it will not be possible to use Libuvc/rsusb to get high frequency motion data (200fps) at the same time of getting low frequency video data (30fps).  I must use kernel drivers.
It was previously said:

With all kernels v.416+ you get the standard HW timestamp for free (w/o kernel patches), You'd still need to apply the patches if you need the extended frame metadata - exposure, gain, laser poser, etc'. But if you're only interested in getting HW timestamps then using unmodified kernel should suffice.

My investigations are showing this not to be true.  I will open up a separate issue for that. Closing this now.

The following comment  is imho relevant to the discussion (#5315)

I believe this comment indicates that the libuvc/rsusb driver did not work for the customer. They highlight several issues and say they used the v4l2 (kernel) driver instead and the issues went away. this is what I am trying to do as well now. Unfortunately I have run into these issues with the kennel driver: #4505

I have found away to get high frequency motion data at the same time as low frequency video using the RSUSB (LIBUVC) drivers.  Below is code that demonstates this technique while reading bag file as well as live streaming.  The main technique that makes this possible is to NOT USE rs::pipeline, but to directly acess each sensor and configure the stream manually (as well as associated callbacks).
// License: Apache 2.0. See LICENSE file in root directory.
// Copyright(c) 2019 Intel Corporation. All Rights Reserved.
// After many many times of trial and error I have finally arrived on this technique to get multiple sensor streams from
// an intel realsense which have DIFFERENT FRAME RATES

// This technique works with RSUSB driver (LIBUVC) but should work with kernel drivers as well
// This example is meant for D435i, to get high frequency motion data at the same time of depth,rgb images
// Two examples are shown, one that read a bags file and another that does live streaming from the sensor. Activate bag reading with cmd line flag --bag=<file>
// The main technique that makes this possible is to NOT USE rs::pipeline, but to directly acess each sensor and
// configure the stream manually (as well as associated callbacks).

#include <cstring>
#include <chrono>
#include <thread>
#include <mutex>
#include <map>
#include <string>
#include <sstream>
#include <iostream>
#include <iomanip>

#include <librealsense2/rs.hpp>
#include <gflags/gflags.h>

using namespace std::chrono_literals;

// Command line flags
DEFINE_string(bag, "",
				"Path to bag file");

bool check_imu_is_supported()
{

	bool found_gyro = false;
	bool found_accel = false;
	rs2::context ctx;
	for (auto dev : ctx.query_devices())
	{
		// The same device should support gyro and accel
		found_gyro = false;
		found_accel = false;
		for (auto sensor : dev.query_sensors())
		{
			for (auto profile : sensor.get_stream_profiles())
			{
				if (profile.stream_type() == RS2_STREAM_GYRO)
					found_gyro = true;
				if (profile.stream_type() == RS2_STREAM_ACCEL)
					found_accel = true;
			}
		}
		if (found_gyro && found_accel)
			break;
	}
	return found_gyro && found_accel;
}

int bag_counter(std::string file_name)
{

	size_t gryro_iter = 1;
	size_t accel_iter = 0;
	size_t depth_iter = 0;
	size_t color_iter = 0;
	double ts_gyro = 0.0;
	double ts_accel = 0.0;
	double ts_depth = 0.0;
	double ts_color = 0.0;
	rs2_timestamp_domain gyro_domain;
	rs2_timestamp_domain accel_domain;
	rs2_timestamp_domain depth_domain;
	rs2_timestamp_domain color_domain;

	rs2::config config;
	rs2::device device;
	rs2::pipeline pipe;

	// enable file playback with playback repeat disabled
	config.enable_device_from_file(file_name, false);

	auto profile = config.resolve(pipe);
    device = profile.get_device();
    auto playback = device.as<rs2::playback>();
    playback.set_real_time(false);
	// DONT START THE PIPELINE, you will always get dropped frames from high frequency data if paired with low frequency images
	// pipeline_profile = pipe.start( config );

	auto sensors = playback.query_sensors();

	for (auto &sensor : sensors)
	{
		auto profiles = sensor.get_stream_profiles();
		for(auto &profile: profiles)
		{
			sensor.open(profile);
			std::cout << "Profile: " << profile.stream_name() <<std::endl;
		}
		// Sensor Callback
		sensor.start([&](rs2::frame frame){
			if (frame.get_profile().stream_type() == RS2_STREAM_COLOR)
			{
				color_iter +=1;
				ts_color = frame.get_timestamp();
				color_domain = frame.get_frame_timestamp_domain();
			}
			else if(frame.get_profile().stream_type() == RS2_STREAM_GYRO)
			{
				gryro_iter +=1;
				ts_gyro = frame.get_timestamp();
				gyro_domain = frame.get_frame_timestamp_domain();
			}
			else if(frame.get_profile().stream_type() == RS2_STREAM_ACCEL)
			{
				accel_iter +=1;
				ts_accel = frame.get_timestamp();
				accel_domain = frame.get_frame_timestamp_domain();
			}
			else if(frame.get_profile().stream_type() == RS2_STREAM_DEPTH)
			{
				depth_iter +=1;
				ts_depth = frame.get_timestamp();
				depth_domain = frame.get_frame_timestamp_domain();
			}
			std::this_thread::sleep_for( 1ms );

		});
	}

	while (true)
	{

		double my_clock = std::chrono::duration<double, std::milli>(std::chrono::system_clock::now().time_since_epoch()).count();
		std::cout << std::setprecision(0) << std::fixed << "FPS --- "
			<< "Gryo: " << gryro_iter << "; Accel: " << accel_iter

			<< "; Depth: " << depth_iter << "; RGB: " << color_iter << std::endl;

		std::cout << std::setprecision(0) << std::fixed << "Timing --- Now: " << my_clock << "; Gryo: " << ts_gyro << "; Accel: " << ts_accel
			<< "; Depth: " << ts_depth << "; RGB: " << ts_color << std::endl;

		std::cout << std::setprecision(0) << std::fixed << "Time Domain --- Now: " << my_clock << "; Gryo: " << gyro_domain << "; Accel: " << accel_domain
				<< "; Depth: " << depth_domain << "; RGB: " << color_domain << std::endl;

		std::cout << std::setprecision(0) << std::fixed << "Latency --- GyroToColor: " << ts_gyro - ts_color << std::endl;
		std::cout <<std::endl;
		if (gryro_iter == 0)
			break;
		gryro_iter = 0;
		accel_iter = 0;
		depth_iter = 0;
		color_iter = 0;

		std::this_thread::sleep_for( 1000ms );
	}

	return EXIT_SUCCESS;
}

void print_profiles(std::vector<rs2::stream_profile> streams)
{
	for (auto &stream: streams)
	{
		std::cout << "Stream Name: " << stream.stream_name() << "; Format: " << stream.format() << "; Index: " << stream.stream_index() << "FPS: " << stream.fps() <<std::endl;
	}
}

// This example demonstrates live streaming motion data as well as video data
int live_counter()
{
	// Before running the example, check that a device supporting IMU is connected
	if (!check_imu_is_supported())
	{
		std::cerr << "Device supporting IMU (D435i) not found";
		return EXIT_FAILURE;
	}

	size_t gryro_iter = 0;
	size_t accel_iter = 0;
	size_t depth_iter = 0;
	size_t color_iter = 0;
	double ts_gyro = 0.0;
	double ts_accel = 0.0;
	double ts_depth = 0.0;
	double ts_color = 0.0;
	rs2_timestamp_domain gyro_domain;
	rs2_timestamp_domain accel_domain;
	rs2_timestamp_domain depth_domain;
	rs2_timestamp_domain color_domain;

	// Declare RealSense pipeline, encapsulating the actual device and sensors
	rs2::pipeline pipe;
	// Create a configuration for configuring the pipeline with a non default profile
	rs2::config config;
	// Add streams of gyro and accelerometer to configuration
	config.enable_stream(RS2_STREAM_ACCEL, RS2_FORMAT_MOTION_XYZ32F);
	config.enable_stream(RS2_STREAM_GYRO, RS2_FORMAT_MOTION_XYZ32F);
	// Add dpeth and color streams
	config.enable_stream(RS2_STREAM_COLOR, 640, 480, RS2_FORMAT_BGR8, 30);
	config.enable_stream(RS2_STREAM_DEPTH, 640, 480, RS2_FORMAT_Z16, 30);

	auto profile = config.resolve(pipe); // allows us to get device
    auto device = profile.get_device();

	auto streams =  profile.get_streams(); // 0=Depth, 1=RGB, 2=Gryo, 3=Accel
	std::cout << "Profiles that will be activated: "<< std::endl;
	print_profiles(streams);

	// Create a mapping between sensor name and the desired profiles
	std::map<std::string, std::vector<rs2::stream_profile>> sensor_to_streams;
	sensor_to_streams.insert(std::pair<std::string, std::vector<rs2::stream_profile>>(std::string("Stereo Module"), {streams[0]}));
	sensor_to_streams.insert(std::pair<std::string, std::vector<rs2::stream_profile>>(std::string("RGB Camera"), {streams[1]}));
	sensor_to_streams.insert(std::pair<std::string, std::vector<rs2::stream_profile>>(std::string("Motion Module"), {streams[2], streams[3]}));

	auto sensors = device.query_sensors();
	for (auto &sensor : sensors)
	{
		auto sensor_name = std::string(sensor.get_info(RS2_CAMERA_INFO_NAME));
		std::cout << "Sensor Name: " << sensor_name << std::endl;
		bool make_callback = false;
		try
		{
			// get sensor streams that are mapped to this sensor name
			auto sensor_streams = sensor_to_streams.at(sensor_name);
			std::cout << "Opening stream for " << sensor_name << std::endl;
			sensor.open(sensor_streams);
			make_callback = true;

		}
		catch(const std::exception& e)
		{
			std::cout << "Sensor " << sensor_name << " has not configured streams, skipping..." << std::endl;
		}
		if (make_callback)
		{
			std::cout << "Creating callback for " << sensor_name << std::endl;
			sensor.start([&](rs2::frame frame){
				if (frame.get_profile().stream_type() == RS2_STREAM_COLOR)
				{
					color_iter +=1;
					ts_color = frame.get_timestamp();
					color_domain = frame.get_frame_timestamp_domain();
				}
				else if(frame.get_profile().stream_type() == RS2_STREAM_GYRO)
				{
					gryro_iter +=1;
					ts_gyro = frame.get_timestamp();
					gyro_domain = frame.get_frame_timestamp_domain();
				}
				else if(frame.get_profile().stream_type() == RS2_STREAM_ACCEL)
				{
					accel_iter +=1;
					ts_accel = frame.get_timestamp();
					accel_domain = frame.get_frame_timestamp_domain();
				}
				else if(frame.get_profile().stream_type() == RS2_STREAM_DEPTH)
				{
					depth_iter +=1;
					ts_depth = frame.get_timestamp();
					depth_domain = frame.get_frame_timestamp_domain();
				}
			});

		}
	}

	while (true)
	{
		double my_clock = std::chrono::duration<double, std::milli>(std::chrono::system_clock::now().time_since_epoch()).count();
		std::cout << std::setprecision(0) << std::fixed << "FPS --- "
			<< "Gryo: " << gryro_iter << "; Accel: " << accel_iter

			<< "; Depth: " << depth_iter << "; RGB: " << color_iter << std::endl;

		std::cout << std::setprecision(0) << std::fixed << "Timing --- Now: " << my_clock << "; Gryo: " << ts_gyro << "; Accel: " << ts_accel
			<< "; Depth: " << ts_depth << "; RGB: " << ts_color << std::endl;

		std::cout << std::setprecision(0) << std::fixed << "Time Domain --- Now: " << my_clock << "; Gryo: " << gyro_domain << "; Accel: " << accel_domain
				<< "; Depth: " << depth_domain << "; RGB: " << color_domain << std::endl;

		std::cout << std::setprecision(0) << std::fixed << "Latency --- GyroToColor: " << ts_gyro - ts_color << std::endl;
		std::cout <<std::endl;

		gryro_iter = 0;
		accel_iter = 0;
		depth_iter = 0;
		color_iter = 0;

		std::this_thread::sleep_for( 1000ms );
	}

	return EXIT_SUCCESS;
}

int main(int argc, char* argv[]) try
{
	gflags::ParseCommandLineFlags(&argc, &argv, true);
	if (FLAGS_bag == "")
	{
		live_counter();
	}
	else
	{
		bag_counter(FLAGS_bag);
	}

}
catch (const rs2::error & e)

{

	std::cerr << "RealSense error calling " << e.get_failed_function() << "(" << e.get_failed_args() << "):\n    " << e.what() << std::endl;

	return EXIT_FAILURE;
}

catch (const std::exception & e)

{

	std::cerr << e.what() << std::endl;

	return EXIT_FAILURE;
}

You'd still need to apply the patches if you need the extended frame metadata - exposure, gain, laser poser, etc

Which patch is about exposure, gain, laser poser?Could you please tell me the name? I carefully checked the files whose postfix is .patch, but I did not find it in the librealsense.


Test the player in a new react native application

Needs definition of "testing"
Distribute testing app in testflight or firebase

Followed up with https://github.com/livepeer/livepeer.js/issues/186 and added docs fixes for other points

I was able to integrate @livepeer/react-native package without any issues 🎉

Player

The player component doesn't show the controls, should I use any specific prop?

@0xcadams Should I test other hooks such as useCreateAsset, useStream or just the player component?


UNSAFE: Would you like to save the passphrase

The word UNSAFE is too strong. 'LESS SECURE' is better. Also it should default to 'N' (No) if the user quickly presses enter by accident.

fixed in ff68f4d459c5ce0aa404b038134f2d008159d375

additional features added in 1123d0232cf55aed959e8d9766792ce94670c841


Change all references of AliSoftware/SwiftGen links to SwiftGen/SwiftGen

In templates headers
In podspecs
In source file?
In documentation & README
In scripts (Rakefile, etc)

Also look it there are maybe still references to GenumKit in those places too and remove them

# All matches of AliSoftware/SwiftGen
$ grep -r -I --exclude CHANGELOG.md --exclude-dir build AliSoftware/SwiftGen .
# and of GenumKit
$ grep -r -I GenumKit --exclude-dir build .


Release v0.21.0

Added

Add functionality to deal with complex password requirements
Function to check whether an API error is caused by a resource not being found
Use the new authentication header format to connect to the API server

Changed

Use narrower interfaces to pass the credential to the client
Create the credential in the client when creating a new account (instead of passing a credential to the client)
Pass permissions (read, write, admin) as strings instead of api.Permission to the client

Removed

Removed billing from the API
Moved the server-side of authentication out of this repo

When closing the release PR, could you comment why @SimonBarendse?

@mackenbach We're waiting for some more changes to the way we initialize the client, before releasing this. That way, we reduce the number of breaking changes in the contract.


Preserve the order of displaying base layers group and overlays group in layers control as defined in the component: this.layersControl = { overlays: { ... }, baseLayers: { ... } } vs this.layersControl = { baseLayers: { ... }, overlays: { ... } }. Or provide other way to specify the order.

Before submitting an issue, please verify the following:
If this is a request for help, please use Stack Overflow and use the ngx-leaflet tag, or review the Getting Help section of the README. We watch the ngx-leaflet tag on Stack Overflow and will respond there. We will no longer be responding to help and 'how-to' requests on GitHub.
If this is a bug, issue, enhancement request, etc. verify the following before submitting your issue:

[ ] Review the README to see if your issue is covered, and pay particular attention to the Getting Help section.
[ ] Tell us what version of Leaflet, Angular, and ngx-leaflet you're using
[ ] Include code that reproduces your issue

Please edit your issue. You have the description in the title.

Are you asking for the ability to affect how these two things are arranged in the on-map layers control?
Does changing the order of the properties have any impact on this in regular Leaflet?

Too insignificant.


Allow use of fragment in urls

This allows the use of the url fragment for invite links and copypaste
strings.  This will not yet work for v2 invites, more design work on
that to come later.

This change is

My understanding is that browsers don't send fragments to the server - that sounds great for our purposes but doesn't the /invite handler on uproxy.org currently display the full URL?
I just want to make sure that continues to work well.

@trevj would you be willing to consider skipping the unit test for now?  I'd love to add it later but it's going to require either too much mocking or too much refactoring that I'm already looking at in other places

Sure, as long as you promise to add those later :-) Can you file an issue? Then, :+1:

I almost forgot: what about the /invite handler on uproxy.org? How well does it work with fragment-based URLs?


Add simple Jenkinsfile to catch mistakes in Dockerfile

Wondering if this is going to trigger a build from ci.jenkins.io. I've no access to the config there, so let's just try.

@oleg-nenashev PR build is now working, and green. Care to review again? Thanks

@oleg-nenashev TBH, reading your comment, I'm not 100% sure what you're requesting to be changed. Thanks


fix: wait for cloud init during packer gcp build to avoid apt race condition

Description
There is a race condition between cloud-init and the packer code which is causing the intermittent apt failures (hypothesis).
Research on this issue:
https://askubuntu.com/questions/663296/intermittent-apt-get-install-issues-when-creating-an-ami-using-packer
https://github.com/hashicorp/packer/issues/2639
suggested fix:
provisioners:
  - type: shell
    inline:
    - /usr/bin/cloud-init status --wait

error:
==> umee-node.googlecompute.final: Error waiting for image: googleapi: Error 409: The resource 'projects/umeedefi/global/images/umee-node-7c59ec26dab59c5acddc10446386c7bd7b36e3a9' already exists, alreadyExists

will tackle idempotency in a separate effort


How to rename contacts exhaustively

The contact name (vcard:fn) is not only present in the contact document, but also in several other documents:

the vcard:nameEmailIndex
the group documents of every group the contact is member of

Since there is no backlink from the vcard:Individual to the address books and groups it is part of, one can not fully rename a contact by just knowing it's URI. This would only allow to change the name in the contacts own document, but not in the other places.
I wonder if a solid client-to-client spec for contacts should require those backlinks, to make it easier to rename a contact. If not, how else should client applications ensure that those indexes get updated eventually?
How does SolidOS contacts-pane handle this problem?
The contacts pane loads an address book and all the groups to the local rdflib store initially, when opening an address book. Therefore at the time of a renaming all documents are present in the store and rdflib can update all statements with the contacts name.
However, if SolidOS renames an Individual outside of the contacts-pane, the address book indexes and group documents do not get updated.

What is the reason for duplicating the name in multiple places, rather than using a reference like WebID?

Those are index documents, so you can make a list of people's names without dereferencing all of the contact documents first

Generally: it is not that the WebID shouldn't be used directly to get a hold of the authoritative and most up to date name. That of course makes sense. There is value in having a copy/cache closer to the application with less trips, so cheaper. There is also a related case where the display name of a contact may be custom to the addressbook holder.

Those are index documents, so you can make a list of people's names without dereferencing all of the contact documents first

Why not have an indexing agent that subscribes to all the contacts and updates the relevant index when the source contact changes? It sounds messy to expect apps to update some indexes if they are present.
We had some presentations about indexing during the last few CG calls, as well as some work we'll be discussing with Solid Practicioners during their next meeting.

Generally: it is not that the WebID shouldn't be used directly to get a hold of the authoritative and most up to date name.

This can lead to security issues. The user should control how they name others in their social graph. If I change my name to "Sarven Capadisli" in my WebId Document and use a copy of your avatar, it shouldn't just change automatically in everyone's address books. This is a separate topic.

Why not have an indexing agent that subscribes to all the contacts and updates the relevant index when the source contact changes?

Can you explain what an indexing agent is? Is it described somewhere? Is it something on the server side, or something a client side data-module could implement?

It sounds messy to expect apps to update some indexes if they are present.

That's why we are providing data-modules to keep track of all such things

Since we want to keep the resource server simple and generic, I see a need for various bots that act as solid clients but run independently from it. One could be an indexing bot, which would manage all kinds of different indexes.
This repo has no spec draft; it only has some shapes. It is hard to know what requirements this index is supposed to address. How can we even evaluate if the approach taken by SolidOS isn't a premature optimization?

These are good questions and I cannot answer them. Perhaps @timbl can help us out, I think SolidOS implements his ideas so far. I would like to see a a draft spec coming up, clarifying those questions and see what we actually need.


proxy upstream

I'd like to proxy the upstream request through a service mesh like linkerd. Is there any support for proxy environment variables? Whenever i try dns lookup does not resolve. Is there a way to disable it since dns resolution should be handled by the upstream proxy?
EX:
http_proxy=http://service-mesh:4140 curl http://hello-world-app
error returned using a dns entry that resolves in the proxy
2017/05/18 21:57:16 reverseproxy.go:275: http: proxy error: dial tcp: lookup hello-world-app on <public ip>:53: no such host

@sammerry did you find a workaround? I am facing a similar issue with this fork https://github.com/openshift/oauth-proxy/issues/71#issuecomment-412434356


Revert part of "Makefile: Generate crypto objects only as far as needed"

This reverts the adaptations to generate_crypto_objects that were done by commit 89c39bd8f6528ad268c1c0d0c9e196ba4396941b in #15224.
This is supposed to fix #19087.

Ping @openssl/committers for 2nd approval -
this is somewhat urgent because it fixes occasional build hick-ups.

CI failure is unrelated.

What makes you think that the problem found in #19087 can't happen with the other header files that were moved around by #15224?

Well, I hope that it does not happen with them, but the only indication that I have in this direction is that I am not aware of any issue reported in this regard.

Unfortunately, we found new cases where having a dependency based make update doesn't get the job done right.  This time, it has to do with timestamps that a git checkout produces.  See https://github.com/openssl/openssl/pull/19197#issuecomment-1243965112

To be on the safe side,
I've extended this PR to revert all adaptations by commit 89c39bd8f6528ad268c1c0d0c9e196ba4396941b
on Configurations/unix-Makefile.tmpl except for additions to .PHONY.

Would you please add as a separate commit the update of openssl-vms.cnf that the check-update CI build reports? So the CI would be green after this is merged?

Done.
Shall we mark this PR urgent?

I've labeled this urgent.
@t8m, re-approve?

Oh, a nit: drop "(most of)" from the commit message, since you have now reverted all of it

Merged - thanks @levitte and @t8m for the swift handling.


cleanup: rename spanner::internal to spanner_internal

This change is

I guess I lied, I have one more comment which is I think tests should be in the spanner namespace not spanner_internal. Ideally tests should only use the public API of the class so I'd rather have the places where that's not true stand out.

Question: Do you mean that tests should always be in the public namespace, or that tests should be in the same namespace as the thing they're testing? For example, the tests for spanner::Value should be in the spanner namespace, but the tests for spanner_internal::ConnectionImpl should be in spanner_internal?

yeah, what you said - same namespace as the thing they're testing. thanks for the clarification, i wasn't considering internal tests.

google/cloud/spanner/bytes.h, line 30 at r3 (raw file):
Previously, coryan (Carlos O'Ryan) wrote…
I do not disagree, but I think somebody else could make a pass fixing these *Internal helpers.  BTW, we could.

Argh.  What I mean to say is "We cloud save more than 4 lines."  If FooInternal is not part of the API, then we can just forward declare them in the body of the class.

google/cloud/spanner/bytes.h, line 30 at r3 (raw file):
Previously, coryan (Carlos O'Ryan) wrote…
I do not disagree, but I think somebody else could make a pass fixing these *Internal helpers.  BTW, we could.

Argh.  What I mean to say is "We cloud save more than 4 lines."  If FooInternal is not part of the API, then we can just forward declare them in the body of the class.


Design matrix debug

Reference issue

What does this implement/fix?

Additional information

Can you please fill in the template of the PR? Same for your other PR.


Create project structure

"Create project structure for the python package and push it as a public repository in the UBC-MDS organization on Github.com.
The name of the repository should be relevant to the package/project topics."

Completed by https://github.com/UBC-MDS/pokehelpyer/pull/1.


drift_network_bridge_dev

drift.network_bridge
Considering some scenarios where different database (especially sqlite, but not limited to) has to be synced or checked remotely with other databases. Likewise, cases where the devices should be able to work offline. An additional custom layer is usually introduced. I believe it would be better if this is integrated into the drift package removing the necessity for a custom layer.
Experimental bridge that will allow for network connectivity.
Comes with an out-of-the-box mqtt implementation.
On the host device
  final db = Database(DatabaseConnection(NativeDatabase.memory(logStatements: true)));
  final gate = MqttDatabaseGateway('<IP_ADDRESS>', 'unit_device', 'drift/test_site');
  await gate.serve(db);

On the client's device
  final gw = MqttDatabaseGateway('<IP_ADDRESS>', 'unit_device', 'drift/test_site');
  final remoteDb = Database(await gw.createRemoteConnection());

Areas of assistance required
If this package is introduced. I think it will help if contributions can be made

On the network side, making the connection more robust and better error handling
Other network protocols
Syncing and comparison of local to remote tables.

Syncing drift databases over the network is an awesome idea, thanks for sharing this!

Likewise, cases where the devices should be able to work offline

The communication protocol in package:drift/remote.dart has not been designed with this use-case in mind, the idea is to provide a live database connection. This is also a very challenging problem to solve, especially when considering things like conflict resolution.

I believe it would be better if this is integrated into the drift package removing the necessity for a custom layer.

If there's something that needs to change in the drift package to facilitate this, then that's definitely something worth considering. But I don't see how this fits into the core drift package, which is a essentially a database client.
Since your network implementation only imports public drift APIs and didn't require changes in drift, I think it would be a great contribution to have this as a standalone package. If that requires support from my side I'm happy to look at ways this could be made easier in drift, but I don't think it falls into the things that drift is trying to solve.

Wow that's really interresting! Is this also working with multiple clients reading and writing to the same database at the same time (1-n)?

Hi @FaFre, the design is set up so that each client should create its own channel, making it technically feasible. I'll update you once we have a production-ready version. If issues arise, we're considering the use of mutexes as a fallback.


Request for supporting following forked/child processes, or attaching to process

Thank you for writing this tool.
In some use cases, the actual executable to be profiled is forked by another process.
In that case, unless we can attach to a process id or follow child processes, it is impossible to profile.
Please consider adding support for this.

What's the use case for this?

Like I said, the actual executable to be profiled is forked by another process. In that case I'm not sure I can profile it without attaching to process id, or MTuner following each child process and creating a separate MTuner file for each.

Again, it what scenario does this happen? Anyway, I don't see this as something that is worth my time but feel free to contribute - it's open source for a reason.


Issues #38 and #39 fixes - Work in progress

Hi pongstylin,
I've been working on this off and on and I got stuck after I stopped getting errors. Classic up seems to be back in working order. I am no longer getting console errors for face-off and chaos apps, but those two are still wonky.
Overall, my goal was to per our discussion to bring the "data" property concept to the local transport and have the apps match it. This took care of the errors but I am still having some issues getting the bots to talk to the human player properly (and the worker sometimes just stops receiving messages).
Of course, I want everything to be back in 100% working order but I decided it would be best to show you what I have and get some guidance on what I'm missing. Heck, you might even see one or two lines of code that would get them back in order. -El Cid

@latin-programmer I finished reviewing the code changes.  So, when you're ready, please resolve the comments I had.

@pongstylin Thank you for the review. I addressed all the issues in the code review changes. The apps are still in the same state with the new changes (so more work will need to be done), but overall I'm still good with sending what I have so far as it fixes the classic app and removes the errors I reported for the other two apps. The problems remaining are:

Face off app loads but does not work (the bot may start a turn or may not, but then you cannot play after)
Chaos app is missing the egg and you cannot play after.


teste

exemplo

exemplo

@catarinacf @FilipaRodrigues @hershaw (or whoever is admin) can you delete this issue, so that it doesn't show up in search?
Students will be searching closed issues for answers.


Enable reporting from Gitlab CI to Github PR

Implements env interface for communication mentioned in the title
///////////////////⚡///////////////////
🚫 AWESOME A PR!

You can just delete all of this and start your PR text anytime -

Hello there, just a quick pre-warning of some of the Danger rules we run on Danger PRs.
The big one is we request that every code change to Danger include a CHANGELOG entry,
this is so that:

People know what changes are between versions
Orta doesn't get all the credit for other people's work

Danger will look for a modification to the CHANGELOG.md when there are changes including
lib/* - if you're fixing unreleased code, or doing a simple typo change, you can
include #trivial in the title or the body of the PR and this is skipped.
We also request that you fill in the body of your PR, a title should be tweet length, but
ideally you can explain the PRs reasoning in the body. We look that it's longer than 5 chars.
Other than that, a lot of the other Danger rules are trickier to trigger so we can address
them as they come up!
❤ THANKS FOR HELPING OUT :D
///////////////////⚡///////////////////

          1 Error

:no_entry_sign:
Tests have failed, see below for more information.

          1 Warning

:warning:
Tests were not updated

Tests:

File
Name

gitlab_ci_spec.rb
Danger::GitLabCI valid environment given PR made on github hosted repository .validates_as_ci? is valid

gitlab_ci_spec.rb
Danger::GitLabCI valid environment given PR made on gitlab hosted repository .validates_as_ci? is valid

environment_manager_spec.rb
Danger::EnvironmentManager.pr? loads GitLab CI

environment_manager_spec.rb
Danger::EnvironmentManager.local_ci_source loads GitLab CI

executor_spec.rb
Danger::Executor#validate! NOT a PR raises error on GitLab CI

executor_spec.rb
Danger::Executor#validate! with CI + is a PR not raises error on GitLab CI

dangerfile_gitlab_plugin_spec.rb
Danger::DangerfileGitLabPlugin#mr_author sets the correct mr_author

dangerfile_gitlab_plugin_spec.rb
Danger::DangerfileGitLabPlugin#mr_title sets the correct mr_title

dangerfile_gitlab_plugin_spec.rb
Danger::DangerfileGitLabPlugin#mr_labels sets the correct mr_labels

dangerfile_gitlab_plugin_spec.rb
Danger::DangerfileGitLabPlugin#branch_for_merge sets the correct branch_for_merge

dangerfile_gitlab_plugin_spec.rb
Danger::DangerfileGitLabPlugin repository_web_url should request the project

dangerfile_gitlab_plugin_spec.rb
Danger::DangerfileGitLabPlugin#mr_json has the expected keys

dangerfile_gitlab_plugin_spec.rb
Danger::DangerfileGitLabPlugin#mr_json is set

dangerfile_gitlab_plugin_spec.rb
Danger::DangerfileGitLabPlugin#branch_for_head sets the correct branch_for_head

dangerfile_gitlab_plugin_spec.rb
Danger::DangerfileGitLabPlugin#mr_diff sets the mr_diff

dangerfile_gitlab_plugin_spec.rb
Danger::DangerfileGitLabPlugin#mr_body sets the correct mr_body

dangerfile_gitlab_plugin_spec.rb
Danger::DangerfileGitLabPlugin#html_link should render a html link to the given file

dangerfile_gitlab_plugin_spec.rb
Danger::DangerfileGitLabPlugin#branch_for_base sets the correct branch_for_base

dangerfile_danger_plugin_spec.rb
Danger::Dangerfile::DSL#scm_provider GitLab is :gitlab

dangerfile_danger_plugin_spec.rb
Danger::Dangerfile::DSL#import_dangerfile Gitlab gitlab: 'repo/name'

dangerfile_danger_plugin_spec.rb
Danger::Dangerfile::DSL#import_dangerfile Gitlab gitlab: 'repo/name', branch: 'custom-branch', path: 'path/to/Dangerfile'

ci_source_spec.rb
Danger::CI.available_ci_sources returns list of CI subclasses

  Generated by :no_entry_sign: Danger

Sorry, this was a mistake 🤦


Go to Admin > Security and select the APIs tab - There is no such area; Admin > Security does not exist in the CI interface

[Enter feedback here]

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

ID: 968a61b9-0400-1b8a-7c18-011267ccb3cb
Version Independent ID: 968a61b9-0400-1b8a-7c18-011267ccb3cb
Content: Manage Customer Insights APIs - Dynamics 365 Customer Insights
Content Source: ci-docs/apis-manage.md
Service: customer-insights
GitHub Login: @wimohabb
Microsoft Alias: wimohabb

Thanks for your comment, @semberley. This issue has been assigned to the doc author for review.

@semberley thank you for sharing. I'll get the outdated click paths updated. API usage is under System > Settings and API permissions under System > Permissions.
When I merge the PR with the changes, this issue gets closed automatically. Please open new issues if you spot other doc issues.
Thanks,
Michael


[2pts] Navigation (Student A)

Create a navigation menu that allows users to open all of the pages you created

Here you will find the link to the PR.


pre-commit hook doesnt always run

:wrench: Summary
I have a git alias which evaluates to : !git add . && git commit -v
The hooks runs most of the time, but if I commit something, the next commit, there is no hook.
Lefthook version
v1.7.18
Steps to reproduce
pre-commit:
  commands:
    rubocop:
      tags: backend style
      run: bin/rubocop

lefthook install
sync hooks: ✔ (pre-commit)

Expected results
Hook should always run.
Actual results
Often hook doesnt run, there is not output from lefthook.
Possible Solution
running lefthook install again fixes the issue.
la .git/hooks/ does not have any hooks except samples, - I would expect to see the hook somewhere.
Something else weird. I did try to use Husky before lefthook.
I keep deleting the .husky dir. It keeps coming back.
Logs / Screenshots
+ '[' '' = 0 ']'
+ call_lefthook run pre-commit
+ test -n ''
+ lefthook -h
+ lefthook run pre-commit
│ [lefthook] cmd:    [git rev-parse --show-toplevel]
│ [lefthook] stdout: /Users/brent/projects/assessments/confab

│ [lefthook] cmd:    [git rev-parse --git-path hooks]
│ [lefthook] stdout: .husky/_

│ [lefthook] cmd:    [git rev-parse --git-path info]
│ [lefthook] stdout: .git/info

│ [lefthook] cmd:    [git rev-parse --git-dir]
│ [lefthook] stdout: .git

│ [lefthook] cmd:    [git hash-object -t tree /dev/null]
│ [lefthook] stdout: 4b825dc642cb6eb9a060e54bf8d69288fbee4904

╭───────────────────────────────────────╮
│ 🥊 lefthook v1.7.18  hook: pre-commit │
╰───────────────────────────────────────╯
│ [lefthook] cmd:    [git status --short --porcelain]
│ [lefthook] dir:    /Users/brent/projects/assessments/confab
│ [lefthook] stdout: A  .husky/_/pre-commit
A  .husky/_/prepare-commit-msg
M  Gemfile
M  Gemfile.lock
M  lefthook.yml

│ [lefthook] cmd:    [git diff --name-only --cached --diff-filter=ACMR]
│ [lefthook] dir:    /Users/brent/projects/assessments/confab
│ [lefthook] stdout: .husky/_/pre-commit
.husky/_/prepare-commit-msg
Gemfile
Gemfile.lock
lefthook.yml

│ [lefthook] files before filters:
[.husky/_/pre-commit .husky/_/prepare-commit-msg Gemfile Gemfile.lock lefthook.yml]
│ [lefthook] files after filters:
[.husky/_/pre-commit .husky/_/prepare-commit-msg Gemfile Gemfile.lock lefthook.yml]
┃  rubocop ❯

Inspecting 32 files
................................

32 files inspected, no offenses detected

│ [lefthook] cmd:    [git stash list]
│ [lefthook] dir:    /Users/brent/projects/assessments/confab
│ [lefthook] stdout:

  ────────────────────────────────────
summary: (done in 1.19 seconds)
✔  rubocop
+ '[' '' = 0 ']'
+ call_lefthook run prepare-commit-msg .git/COMMIT_EDITMSG
+ test -n ''
+ lefthook -h
+ lefthook run prepare-commit-msg .git/COMMIT_EDITMSG
│ [lefthook] cmd:    [git rev-parse --show-toplevel]
│ [lefthook] stdout: /Users/brent/projects/assessments/confab

│ [lefthook] cmd:    [git rev-parse --git-path hooks]
│ [lefthook] stdout: .husky/_

│ [lefthook] cmd:    [git rev-parse --git-path info]
│ [lefthook] stdout: .git/info

│ [lefthook] cmd:    [git rev-parse --git-dir]
│ [lefthook] stdout: .git

│ [lefthook] cmd:    [git hash-object -t tree /dev/null]
│ [lefthook] stdout: 4b825dc642cb6eb9a060e54bf8d69288fbee4904

╭───────────────────────────────────────────────╮
│ 🥊 lefthook v1.7.18  hook: prepare-commit-msg │
╰───────────────────────────────────────────────╯
│ [lefthook] skip: Hook prepare-commit-msg doesn't exist in the config
hint: Waiting for your editor to close the file...

Hmmm, it seems that my the hook is being saved under .husky - is this project a fork of husky?
that dir name is not intuitive.

and - core.hookspath=.husky/_ is set in git config.

Hey! Lefthook is not a husky fork. It uses git rev-parse --git-path hooks command to detect where you store git hooks and looks like you have .husky/_ configured.
Do you have both lefthook and husky in the project?

Husky was removed - ie I deleted its files in the project.
but I just ran git config --unset core.hooksPath
and then lefthook install
and now my hooks are in .git/hooks/


refactor ucall to accommodate cc requirement

Why would this series have a update tool chain to 2023-12-11 commit? isn't already merged into main? Perhaps rebase against main first?


Petition to rename to "mov-cli-jellyplex"

What do you think about a rename to something like "jellyplex".

🪼🐬 Jellyfin + 📺 Plex


Loading icons freeze in Safari while requests are handled

The icons are definitely loaded completely. I verified this by setting a timeout of 10 s before sending a request. This leads to the icon moving for 10 s and then freezing, once the form is submitted.

This could probably solved by moving to inertia
https://laracasts.com/series/build-modern-laravel-apps-using-inertia-js


rsync between two remotes?

rsync can't handle two remotes. Alas. So here are some other options:

BAD: two hop rsync: remoteA -> local -> remoteB. Wastes disk on local, and for every person that does a deploy.
BAD: scp with two remotes. Blah: Will be really slow with AAPB.
BAD: put private keys on servers so remoteA <-> remoteB can connect to each other directly.
MAYBE: rsyncd? rsync can run as its own daemon, instead of relying on ssh. Not impossible: could imagine opening up the firewall on both to allow them only to talk with each other on that port. This just seems like a whole lot more setup on the server, when I'd like to encapsulate it in one line.
MAYBE: ssh tunneling: http://unix.stackexchange.com/questions/183504 or http://superuser.com/questions/179412 Still two hops, so all the data is coming through the local machine, and that could be a bottle neck.
HOPEFULLY: ssh agent forwarding? http://serverfault.com/questions/411552 The idea is that successive connections from the remote machine can use credentials from the original connection.

agent forwarding is working.


Bump spring boot version

Upgrade spring boot release version.

:+1:

:+1:

@wreulicke Thanks for the contribution! :tada:


Update app-patterns-landingpage.md

Docs Build status updates of commit 134e7db:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

mixed-reality-docs/app-patterns-landingpage.md
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


fix: Changed the display hint name

What

This PR include the hint name changed to "Name" from "Display Name"

Screenshot

Before
After

Fixes bug(s)

#1297

Part of

https://github.com/openfoodfacts/smooth-app/issues/561

Hi, @teolemon  @M123-dev Changed the hint name could You please review it. Or if any other changes required do let me know.


fix:关于文档显示不全的bug #562

close #562

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


proto: bump to 1.6.x 2f6f381

Updated Mesos protos to 1.6.x, which adds a new master call for GET_OPERATIONS, and new agent calls for GET_OPERATIONS, GROW_VOLUME and SHRINK_VOLUME. For the latter two, only agent-local volumes are supported.

Coverage increased (+0.2%) to 58.153% when pulling 381eadef8c21cdb35f38654488d0c12e1eeabb7a on chhsia0:bump-1.6.x-2f6f381 into 29de6ff97b48c29cb5ac07029ed75186e5ba0eed on mesos:master.

Coverage increased (+0.2%) to 58.153% when pulling 381eadef8c21cdb35f38654488d0c12e1eeabb7a on chhsia0:bump-1.6.x-2f6f381 into 29de6ff97b48c29cb5ac07029ed75186e5ba0eed on mesos:master.

Thanks, left some feedback. Surprised that schedulerpb_test.go didn't have any changes

I'm fine w/ GrowVolume/ShrinkVolume
On Thu, Jul 19, 2018 at 1:56 PM Chun-Hung Hsiao<EMAIL_ADDRESS>wrote:

@chhsia0 commented on this pull request.
In api/v1/lib/master/calls/calls.go
https://github.com/mesos/mesos-go/pull/354#discussion_r203818174:

+// GrowLocalVolume grows a persistent volume on an agent's ROOT or PATH disks. The request is forwarded asynchronously
+// to the Mesos agent where the persistent volume is located.
+func GrowLocalVolume(a mesos.AgentID, volume mesos.Resource, addition mesos.Resource) *master.Call {

return &master.Call{

Type: master.Call_GROW_VOLUME,

GrowVolume: &master.Call_GrowVolume{

	AgentID:  &a,

	Volume:   volume,

	Addition: addition,

},

}
+}

+// ShrinkLocalVolume shrinks a persistent volume on an agent's ROOT or PATH disks. The request is forwarded
+// asynchronously to the Mesos agent where the persistent volume is located.
+func ShrinkLocalVolume(a mesos.AgentID, volume mesos.Resource, subtract mesos.Value_Scalar) *master.Call {
I'll make it a pointer. Then should I just rename it to GrowVolume/
ShrinkVolume? Currently it supports only local volumes but me may extend
it to support external volumes in the future.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/mesos/mesos-go/pull/354#discussion_r203818174, or mute
the thread
https://github.com/notifications/unsubscribe-auth/ACPVLNWkO781DWvBzb6AXsMFyIrFHC3Xks5uIMhSgaJpZM4VVail
.

@jdef Done. PTAL.


Local pprof example returns Incorrect Usage

Running the "local pprof example" from the readme returns incorrect usage.
$ go-torch --binaryfile app.pprof --binaryname app.test
Incorrect Usage.

NAME:
   go-torch - go-torch collects stack traces of a Go application and synthesizes them into into a flame graph

USAGE:
   go-torch [global options] command [command options] [arguments...]

...

My example was wrong, it should be "--binaryinput" not "--binaryfile". I'll fix it.

Thanks! :smile:


Update Go to 1.14.2

Build of the cilium-runtime image is currently blocked by the Go 1.14.2 image not being published yet due to docker-library/golang#322

Coverage decreased (-0.02%) to 46.679% when pulling c9aed3ca43aa1c452da713f1101fe591e711a742 on pr/tklauser/update-go-1.14.2 into f5425fec71bff6762a5bcc5dc3f3078728020141 on master.

test-me-please

This PR conflicts with open PR #10819 in case one is merged the other needs to be rebased

test-me-please

restart-ginkgo

restart-ginkgo

test-me-please

restart-ginkgo

restart-ginkgo

test-me-please

test-gke


Publish to npm

The latest version on npm is still 1.2.3, but GitHub already has 2.2.1 as of right now.

2.2.1, which was the latest, was already on NPM. We update patches/bugs on the 1.x branch and publish to NPM too. I tagged 2.2.1 as the latest so it should be good again!


"<" character not being encoded

At least on Firefox the following code:
[c]if (a < 10) {}[/c]

Generates this HTML output:
if (a < 10) {}[/c]

Which obviously doesn't highlight the code. However, the ">" character works as expected:
[c]if (a > 10) {}[/c]

Generates:
if (a > 10) {}

Dear dartg,
thanks for your report.
i'm currently not sure whats going wrong - maybe it's a bug within WordPress' shortcode handler - i will analyze it.
maybe you can use the "Visual Editor Mode" - it will avoid such problems.
best regards, Andi

Dear dartg,
it seems to be a bug/feature of Wordpress to interpret it as opening html tag - this will break the used Shortcode API
Generally this issue only occures under the following conditions

Text Editor Mode is used instead of "Visual Editor Mode" AND
With shortcodes AND
Unescaped HTML characters

If you're only working in Text-Mode you should use the HTML escape sequences (< >) instead


PostgreSQL Support

Are there any plans to support PostgreSQL Databases? If so, when can we expect it?

The library is very flexible and you can even use postgres as a cache adapter, see: https://github.com/sunspikes/php-ratelimiter#extending


wrong error message in case of custom authentication_keys

Setup:
Devise.setup do |config|
  config.authentication_keys = [ :username ]
end

Bug:
If the user types in wrong credentials, devise shows the I18n key 'devise.failure.invalid' => 'Invalid email or password.'. It should be Invalid credentials. or Invalid username and password.

This seems to be close but there is a scenario when it doesn't work:

In devise.rb: config.authentication_keys = [ :username ]
In second auth model Admin (the first one is User): devise :database_authenticatable, :rememberable, :trackable, :authentication_keys => [ :email ]

So when admin fails to login, the error message says: Invalid username or password. — while email should be used instead of username.

Yes, @carlosantoniodasilva found already found that problem in https://github.com/plataformatec/devise/pull/3218#discussion_r17965071. But I don't have the time to work on that.


Generalize setup_engine of apps/apps.c to allow specific crypto methods

The function ENGINE *setup_engine(const char *engine, int debug), defined in apps/apps.c, is used by many OpenSSL apps. So far it unconditionally sets all the crypto methods of the given engine as the application-wide default. This is likely what  is needed for most (simple) use cases, in particular if an application uses just one private key (and related set of algorithms) or just one engine (corresponding to one type of key store) for all its key material.
Yet when several implementations for the same type of algorithm need to be used where, for instance, one of them is taken from an engine and others should be the standard ones defined in the crypto lib or taken from a different engine, it is not appropriate to make (all) the methods of one engine the default for all crypto algorithms. This holds in particular for a new app I am currently enhancing for later inclusion with OpenSSL. CMPforOpenSSL is a CMP client that can use signatures for protecting messages both at application and at TLS level, where for example the private key for CMP-level protection is held in a smart card (and accessed via an engine) and the private key for the (optional) TLS channel is stored in a password-protected file (and the keys may even be of different type, say, RSA and ECC).
I tried to make use of the given implementation of setup_engine() and to unregister any conflicting crypto methods, but this does not work. The only (clean) solution is to use a variant of setup_engine() that does not automatically call ENGINE_set_default with argument ENGINE_METHOD_ALL. Then for each private key one has full flexibility which crypto engine and methods (or the default OpenSSL crypto lib implementation) to use.
Therefore I propose to generalize setup_engine() by adding an extra argument, unsigned int flags, to be handed to ENGINE_set_default. This allows to decide if ENGINE_set_default() has any effect at all and to choose for which types of methods the implementation given by the engine is taken as the default.
Backward compatibility with existing code can be achieved easily by providing a macro that uses ENGINE_METHOD_ALL as value for the flags.

I wonder, how does that change benefit the openssl command?

@levitte, basically all openssl apps that (now or in the future) use more than one private key and thus potentially more than one set of crypto methods or storage types can benefit. This is the case for s_server and the proposed cmp app. Also the ocsp app could benefit as soon as engine support is enabled for it, because it also has the options to use two keys: -signkey and -rkey.

I could easily have missed something after a long and hectic day, but I don't see how this helps.  The OpenSSL engine framework doesn't distinguish between different engines that support the same algorithm or between an engine and the built in implementation -- if I remember the code sequences correctly, it will choose the default then the first engine that says: "yes, I do that."  To avoid this, the calling application needs to specify which engine it wants to use.  I don't think there is a way to say to use the built in software implementation.  That is, changing the default isn't going to provide the flexibility you want by itself.
Would some manner of per engine capability list be more appropriate?  That is, each engine specifies more precisely what it does and the application can request exactly what it wants.

I think this highlights a limitation in the command line app and engine. If you specify an engine on the command line an attempt is then made to use it for all crypto algorithms it supports. Sometimes you don't want that and just want to use the ENGINE to load a private key. You might want to specify different keys in different engines. An engine might implement a crypto algorithm that is only for use with its keys and not general purpose crypto: setting ENGINE_FLAGS_NO_REGISTER_ALL in the engine partly helps but is has limitations.

Hmmm, if an engine is used solely for loading keys, said engines should be set to add no default algos...  so ok, that's a point.

Stephen has given a very good summary of the main problem: once the methods of an engine have been set as the default, the superseded built-in methods cannot be used any more for key material not related to that engine.
Moreover, one cannot use multiple engines (unless they happen to provide the same set of methods, i.e., their only distinction could be the key storage location/mechanism they provide).
While the idea given by Pauli might to provide even more flexibility, the very simple generalization I propose would already be a major gain. In particular, it allows to load and use keys from any number of different engines and from software/file storage. It also allows to specify exactly which methods, if any, of which engine are taken as the default.

I still don't understand how this fixes the problem.  I don't see why not having a default engine is the sole problem.  What am I missing?
When there are two (or more) engines that implement the same algorithm, the code that decides if an engine should be used or not will always pick the same engine.  It only knows about the algorithm wanted and cannot distinguish based on the data being processed.  Likewise, if any engine implements an algorithm, it will always be chosen in preference to the built in implementation.  Setting the default forces the result but it doesn't change the fact that a predetermined engine will be used.
That's not the whole story.  Some calls have an optional engine argument.  If this is specified, then yes you can choose which specific engine you want.  The internal software implementation is unavailable.  Additionally, some operations carry the engine used with them (EVP_PKEY) and this is chosen if possible, overriding the engine argument if specified.  Again, the internal implementation cannot be used.
How does disabling the default engine help?  An application needs to specify the engine used for each operation if it wants to use more than one and if this is done the default is ignored.

On 01.09.2017 01:53, Pauli wrote:

I still don't understand how this fixes the problem. I don't see why
not having a default engine is the sole problem. What am I missing?

Not setting a default engine is not the problem, but solves the problems
I mentioned.

When there are two (or more) engines that implement the same
algorithm, the code that decides if an engine should be used or not
will always pick the same engine. It only knows about the algorithm
wanted and cannot distinguish based on the data being processed.

Yes, in this case, there are less problems. Yet if engines have
conflicting algorithms, setting one of them as the default can even lead
to crashes because for key material of other engines they typically make
no sense.

Likewise, if any engine implements an algorithm, it will always be
chosen in preference to the built in implementation. Setting the
default forces the result but it doesn't change the fact that a
predetermined engine will be used.

The problem here (which actually is my main problem) is that when an
engine's algorithms are set as default, these are typically inadequate
for key material not held by this engine (in particular keys held in SW
for which the built-in algorithms should be used). This also can easily
lead to crashes.

That's not the whole story. Some calls have an optional /engine/
argument. If this is specified, then yes you can choose which specific
engine you want. The internal software implementation is unavailable.
Additionally, some operations carry the engine used with them
(|EVP_PKEY|) and this is chosen if possible, overriding the /engine/
argument if specified. Again, the internal implementation cannot be used.

When I load a key from SW, its EVP_PKEY structure has a NULL engine
reference, which as what I want. Yet when in addition an engine has been
loaded, setting its algorithms as the default, these wrong algorithms
are applied to the key (although its EVP_PKEY structure does not
reference any engine).

How does disabling the default engine help?

As just detailed, it helps by leaving keys alone that are incompatible
with the engine.

An application needs to specify the engine used for each operation if
it wants to use more than one and if this is done the default is ignored.

Even when no algorithms of any engine(s) are set as the default, the
EVP_PKEY structure of any key loaded via some engine will carry a proper
reference to this specific engine, such that the right algorithms are
chosen for this key automatically.
To conclude, I can see no advantage for setting the algorithms of an
engine as the default, but just disadvantages.
(And even if it does have advantages, the little fix I propose does not
prevent making use of them, and in fact it is conservative in the sense
that for existing code nothing changes.)

I think that in the end, what we're talking about here is a conflict between two quite separate engine usage:

the engine as an accelerator of calculations.
the engine as a store of keys.

The trouble is that when both usages are activated, the same functions are used for them, since there is no distinction at a higher level between, say, RSA functions for keys with all parameters exposed and for keys with private parameters hidden.  In the end, it requires that the different engines must be able to distinguish between "normal" keys and keys hidden in a device and act accordingly.
By turning off the installation of defaults, we essentially lose acceleration.  It can, however, be argued that this particular usage has lost its importance these days, compared to when the ENGINE API was first designed, back in around 2000.  These days, it seems that the more important usages are to store keys and to bring new algorithms that aren't build into libcrypto...

Thanks for the explanation, I understand why you're trying to do this.
@levitte I'm not convinced that the engine as an accelerator is gone.  Small embedded CPUs often have cryptographic accelerations.  Intel CPUs have the RDRAND engine which is an accelerator but only tangentially related to this.
Some of the code paths upon seeing a NULL engine reference try to locate a suitable engine. Other's don't.  EVP_CipherInit_ex will always go looking for a suitable engine, default or not.  EVP_PKEY_CTX_new will go looking if no engine is already defined or passed in.
Using EVP_PKEY_CTX_dup after first creating a context with the correct engine might be a viable approach.  I've not tracked down if copying a NULL engine field will later get replaced or not.  Gaining access to the default crypto algorithms when an engine implements them seems like the major underlying concern.
It seems to me that a special internal engine setting that forces the libcrypto implementations to be used might be a more comprehensive solution.

There are also two additional uses of defaults which are not associated with crypto acceleration.

Implementation is only supplied by an ENGINE and not OpenSSL itself. This applies to GOST currently.
Policy dictates that a certain "approved" implementation is used. This would apply to FIPS validated algorithms in FIPS mode for example. We don't currently do this but it's a mechanism I'm planning to use for the next validation.

@snhenson is the first related to the default engine?  Won't it be discovered regardless as the only engine that implements GOST?
The second is more interesting, it needs to not only be the default but also mandatory -- i.e. no other engine is permitted to supply the came algorithms.
I keep circling back to capability lists for engines which can be specified by the using application.  I should pull my finger out and implement something to see what folks think.

Are there any new thoughts on this topic?
While more fundamental issues with the engine mechanism touched here may take more time to be solved, can we pragmatically do the pretty small change that I proposed, which would already make the engine setup function more generally useful?

I think that the only point where I can see the clash is if you load two engines that both implement the same default algo FOO (and assuming that those engines also implement other desirable stuff that differ from each other or there would be no point loading them both).  Am I correct?
Note that the openssl app doesn't really support loading more than one engine, with a few exceptions where you can have a separate engine for key storage (i.e. that shouldn't be made to provide any default algos).

No, as I tried to explain above the issue also arises when using just one engine, namely when loading and using private keys from both the engine and from other source(s), such as a from a file or from memory.

Well, this PR doesn't really change that much, it only moves the exact same flags to another spot and gives the possibility to change them if that would be desired...
I'm curious how you want to move forward...  how do you see those flags being changed?

Right, the code change I proposed does not change anything for use with the current apps.
Yet the CMP client app of the CMP extension we are currently preparing will make use of it, and also any other apps that use more than one private key can benefit.
For instance, both x509 and s_server can use more than one private key. I just extended them to take advantage of the given generalization to setup_engine().
Doing so, I rebased the branch, added two checks for potential error conditions that were missing in setup_engine(), and fixed a minor bugs in s_server.c (engine debugging was on unconditionally). I also made sure that all their key format options may include ENGINE and corrected/extended their documentation accordingly.

Thanks a lot @levitte for having a look again at this PR.
I've just rebased it and did the requested fix.

Included two further small fixups, also of the documentation.

@levitte, I've meanwhile fixed all the minor build issues reported by the CI.
Can this now be approved, such that I can merge this into #11470?

Rebased and mostly squashed.
@levitte, is there anything else to do here?

@levitte, hope you can approve this now?
A wee ago I fulfilled the small change request you gave.

Pinging again @levitte - this should be a low-hanging fruit.

I've also rebased this PR and made use of the new/extended setup_engine_methods() function in the meanwhile merged app/cmp.c.

Please check the CI status before merging.

24 hours has passed since 'approval: done' was set, but as this PR has been updated in that time the label 'approval: ready to merge' is not being automatically set.  Please review the updates and set the label manually.

Merged - thanks!

Wow - note the date of the first commit of this PR:
Mon Aug 28 19:14:47 2017 +0200

@DDvO   https://github.com/openssl/openssl/issues/11818


refactor+fix: configurable deployer / lib regularizer fix

Description
deployer's job template file is hard-coded, which makes it hard to use different template file at deployment time. Using different different template file is useful when underlying infrastructure is different (e.g., k8s vs knative). To support that, template folder and file is fed as config variables.
Also, deployer's config info is fed as command argument, which is cumbersome. So, the config parsing part is refactored such that the info is fed as a configuration file.
During the testing of deployer change, a bug in the library is identified. The fix for it is added here too.
Finally, the local dns configuration in flame.sh is updated so that it can be done correctly across different linux distributions (e.g., archlinux and ubuntu). The tests for flame.sh are under archlinux and ubuntu.
Type of Change

[x] Bug Fix
[ ] New Feature
[x] Breaking Change
[x] Refactor
[ ] Documentation
[ ] Other (please describe)

Checklist

[ ] I have read the contributing guidelines
[ ] Existing issues have been referenced (where applicable)
[ ] I have verified this change is not present in other open pull requests
[ ] Functionality is documented
[ ] All code style checks pass
[ ] New code contribution is covered by automated tests
[ ] All new and existing tests pass

Codecov Report

Merging #351 (7ad2ffe) into main (a7ea2a2) will decrease coverage by 0.66%.
The diff coverage is 13.04%.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
@@            Coverage Diff             @@
##             main     #351      +/-   ##
==========================================
- Coverage   15.04%   14.39%   -0.66%
==========================================
  Files          48       48
  Lines        2824     2771      -53
==========================================
- Hits          425      399      -26
+ Misses       2381     2354      -27
  Partials       18       18

Impacted Files
Coverage Δ

cmd/deployer/cmd/root.go
17.30% <13.04%> (-16.03%)
:arrow_down:

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.


c# 8.0 'var' pattern matching not presented

Hi, i don't see reference to new pattern matching presented in latest version of C#:
for example:
state = (state, transition) switch
{
(State.Running, Transition.Suspend)     => State.Suspended,
(State.Suspended, Transition.Resume)    => State.Running,
(State.Suspended, Transition.Terminate) => State.NotRunning,
(State.NotRunning, Transition.Activate) => State.Running,
_ => throw new InvalidOperationException()
};
and some other examples with this syntax would be very helpful on this page

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

ID: d1f2a2fe-8279-e6b3-93e8-33398167655f
Version Independent ID: 35191215-988f-3700-1f85-4751711f692e
Content: Pattern Matching - C# Guide
Content Source: docs/csharp/pattern-matching.md
Product: dotnet-csharp
Technology: csharp-fundamentals
GitHub Login: @BillWagner
Microsoft Alias: wiwagn

Thanks for writing this @CodeIsLie
There are a few examples like this in this tutorial  The best plan is to add a link to that article here.
I've added the "up for grabs" label for any community members to make this addition.


How to get url in nuxtServerInit?

Hi everyone.
Actually i have a dynamic website. So i don't have any static domain in my website. Really i want to get URL but i can't.
I mean, when i use from req.headers.referer or req.headers.referrer, they may not respond. And finally i can't detect the URL.
My nuxt project version:
"@nuxtjs/axios": "^5.6.0",
"nuxt": "^2.0.0",
"nuxt-i18n": "^6.2.1",

I spent a lot of time on my website and i'm very tired about it.
In what way can I use to get an URL_-(for example: http://www.example.com)-_ in Side Server mode?

This question is available on Nuxt community (#c9937)

Hi, I have a project like yours...
I'm doing like this.
  async nuxtServerInit({ commit }, { req }) {     if (process.server) {       if (req.headers !== undefined) {         let host = _.split(req.headers.host, ":");         await axios           .get(http://my-domain-api/config/${host[0]}`)
.then(response => {
let config = response.data;
commit("setConfig", config);
});
}
}
}`
How do you are change route dynamically?

@leosantoscunha Thanks for your guidance.
We use IIS webServer and alos use reverse proxy.
We run nuxtjs project in localhost:3000 with npm run  start. And After each request I want to know which domain was requested. Because I don't have the domains. And by Reverse Proxy in IIS webServer  I redirect requested url on localhost:3000


[v2.7] Fixed styling issues with resource quota integration tests.

Issue:
  https://github.com/rancher/qa-tasks/issues/557
Problem
 This integration test got merged in not following our PR guidelines that we had set for testing. Including several sleeps in the test instead of using proper waits and polls, and extensions not in the correct place.
Solution
 Moved resourcequota to the kubeapi package, and removed the sleeps and added polls and a wait.
Testing
 Tests pass drone CI checks
Engineering Testing
Manual Testing

Automated Testing

QA Testing Considerations

Regressions Considerations

@maxsokolovsky @caliskanugur @izaac I used the wrong namespace in one of the test cases when refactoring the typo, and was failing the test. I fixed it now and it's working as expected. One more review would be much appreciated


Refactor Godwoken Bridge UI with TailwindCSS

The Godwoken Bridge UI could use some time to do the refactor work, such as refactoring from using StyledComponents to using TailwindCSS. But before this, there are actually tons of UI/CSS frameworks to be selected:

TaildwindCSS
Maintine
RedwoodJS
Charkra

Sorry about mixing them together, I will take some time to look these frameworks out.
Aside with these UI/CSS frameworks, we also have @ricons that can be used as our SVG icon library.
Also, the version of React can be updated to Vite+React18.

This feature has been removed from the development planning, therefore closing the issue.


Feature: A user can see their score update in real-time as they select answers

When the user selects the answers, he should immediately see his progress (the number of correct answers)

Done with #16


Create parallel storage2 crate

Closes #1488

Ah, looks like this broke the docker files, and hence the smoke test?

Oops, will fix


feat: add function to create all clients

Stack:

#311
#310
#309
#308
#307
#262 ⬅
#261

⚠ Part of a stack created by spr. Do not merge manually using the UI - doing so may have unexpected results.

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 80.86%. Comparing base (e4eff05) to head (682e7c1).

Additional details and impacted files
@@                        Coverage Diff                         @@
##           pr/lev-starkware/lev_dev/4cc36c62     #262   +/-   ##
==================================================================
  Coverage                              80.86%   80.86%
==================================================================
  Files                                     25       25
  Lines                                   1155     1155
  Branches                                1155     1155
==================================================================
  Hits                                     934      934
  Misses                                   172      172
  Partials                                  49       49

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

✓ Commit merged in pull request #308