strange behavior in reports

I am currently working on the following system. A gateway that acts as a zigbee network coordinator, a device (switch) that handles multiple outputs, and a sensor device for each of these outputs. The coordinator is in charge of performing the binding between the different endpoints of the switch and the sensors. and the switch establishes a binding between itself and the gateway to report a custom cluster each time an output is activated from the sensor
When analyzing the system, I found an error in the behavior of the switch reports to the gateway. After binding the switch to the gateway, the reports are configured as follows
static void bind_cb(esp_zb_zdp_status_t zdo_status, void *user_ctx)
{
if (zdo_status == ESP_ZB_ZDP_STATUS_SUCCESS) {
    ESP_LOGI(TAG, "bind_cb status:%d", zdo_status);
    /* configure report attribute command */
    esp_zb_zcl_config_report_cmd_t report_cmd;
    report_cmd.zcl_basic_cmd.dst_addr_u.addr_short=esp_zb_get_short_address();
    report_cmd.zcl_basic_cmd.dst_endpoint = 1;
    report_cmd.zcl_basic_cmd.src_endpoint = 1;
    report_cmd.address_mode = ESP_ZB_APS_ADDR_MODE_16_ENDP_PRESENT;
    report_cmd.clusterID = 0xFFFE;
    report_cmd.attributeID = 0;
    report_cmd.attrType = ESP_ZB_ZCL_ATTR_TYPE_U32;
    report_cmd.min_interval = 0;
    report_cmd.max_interval = 30;
    report_cmd.reportable_change =3;
    esp_zb_zcl_config_report_cmd_req(&report_cmd);
}

}
and the callback of the sensor device report is handle as follow:
static void esp_zb_dev_reporting_cb(esp_zb_zcl_addr_t *addr, uint8_t endpoint, uint16_t cluster_id, uint16_t attr_id, esp_zb_zcl_attr_type_t attr_type, void *value)
{
esp_zb_zcl_attr_t *value_r = esp_zb_zcl_get_attribute(1,0xFFFE,ESP_ZB_ZCL_CLUSTER_SERVER_ROLE,0);
*((uint32_t*) value_r->data_p)+=1;
esp_zb_zcl_set_attribute_val(1,0xFFFE,ESP_ZB_ZCL_CLUSTER_SERVER_ROLE,0,value_r->data_p);

}
then the expected behavior of the system would be that the switch reports to the gateway every 30 seconds and when the switch receives a report from the sensor it increases the value of attribute 0 of the custom cluster 0XFFFE by 1, if the value increases exceeds what is established in the reports configuration (in this case 3) a new report should be produced from the switch to the gateway.
The real behavior was the following, in principle the switch reported every 30 seconds to the gateway as expected, but upon receiving the command from a sensor the callback of said report was triggered and increased the custom attribute, in theory the switch should not report to the gateway since the increase of said attribute was less than 3 compared to its original value but contrary to what was expected, the switch generated a report to the gateway ignoring the configuration condition (also verify that this report did not correspond to the periodic report every 30 seconds). In addition to having generated the report, it would seem that he deleted the configuration because from that moment on, periodic reports were no longer generated, nor were reports generated when modifying that attribute of the customized cluster again.
after that i try to force the reports after writing the attribute ,by modifying the callback of the incoming reports from the sensors as follows.
static void esp_zb_dev_reporting_cb(esp_zb_zcl_addr_t *addr, uint8_t endpoint, uint16_t cluster_id, uint16_t attr_id, esp_zb_zcl_attr_type_t attr_type, void *value)
{
esp_zb_zcl_report_attr_cmd_t des;
des.zcl_basic_cmd.dst_addr_u.addr_short=0;   // gateway
des.zcl_basic_cmd.dst_endpoint = 1;
des.zcl_basic_cmd.src_endpoint = 1;
des.address_mode = ESP_ZB_APS_ADDR_MODE_16_ENDP_PRESENT;
des.clusterID = 0xFFFE;
des.attributeID = 0;
des.cluster_role=ESP_ZB_ZCL_CLUSTER_SERVER_ROLE;
esp_zb_zcl_attr_t *value_r = esp_zb_zcl_get_attribute(1,0xFFFE,ESP_ZB_ZCL_CLUSTER_SERVER_ROLE,0);
*((uint32_t*) value_r->data_p)+=1;
esp_zb_zcl_set_attribute_val(1,0xFFFE,ESP_ZB_ZCL_CLUSTER_SERVER_ROLE,0,value_r->data_p);
esp_zb_zcl_report_attr_cmd_req(&des);

}
The behavior was similar to the previous one, only this time every time a sensor report arrived, the switch modified the attribute and when forcing the report it was sent, but as in the previous case, the established configuration of the periodic report was ignored and the minimum value that said report will generate
I think writing the custom cluster attribute ignores and clears the report settings. I would like to know if this can be due to a bad behavior of the sdk or if I am doing the configuration wrong
thanks

Since you didn't get the period 30 seconds report and also didn't apply the rule of reportable change. It might be you didn't configure the report or bind correctly.
    report_cmd.zcl_basic_cmd.dst_addr_u.addr_short=esp_zb_get_short_address(); should this be the switch? should it be sending the configure report command from gateway to switch?

Maybe I am not explaining myself correctly, the code I show is the switch code, therefore esp_zb_get_short_address() obtains the switch address. It is also configured correctly because in principle periodic reports are sent, when modifying the attribute with the esp_zb_zcl_set_attribute_val function the report stops working

@diazmanuel Sorry for the late following up. If I understand correctly, you would like to set the configure report to switch and ask switch to send the report to gateway in period of 30 seconds or attribute change larger than 3. However, you got a report command which is less than 3 delta value nor in 30 seconds period first time, and later all future expected report command is stopped. Right?
Firstly, for the work around solution, you could use esp_zb_zcl_report_attr_cmd_req to directly call this function send report to gateway, with a timer alarm 30 seconds (esp_zb_scheduler_alarm) or based on the attribute change more than 3 to trigger.
Secondly, could you show me your code how do you register the custom attribute on switch side and how do you do the binding from switch to gateway, I'd like to see if there is any other issue. It might be some issue when we set esp_zb_zcl_set_attribute_val on customized attribute, I will try to duplicate your condition to fix it.

If I understand correctly, you would like to set the configure report to switch and ask switch to send the report to gateway in period of 30 seconds or attribute change larger than 3.
yes thats right but its stop working when i set that attribut. i change the increment the attribute by 1 and then the reports stop working. i will add the code so its more simple to understand.
here is the code of the switch
/*

SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD

SPDX-License-Identifier: CC0-1.0

Zigbee customized client Example

This example code is in the Public Domain (or CC0 licensed, at your option.)

Unless required by applicable law or agreed to in writing, this
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.
/
#include <string.h>
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_HA_customized_switch.h"
#include "nvs_flash.h"
/*
@note Make sure set idf.py menuconfig in zigbee component as zigbee end device!
*/
#if !defined ZB_ED_ROLE
#error Define ZB_ED_ROLE in idf.py menuconfig to compile light switch (End Device) source code.
#endif

static const char *TAG = "ESP_HA_ON_OFF_SWITCH";
struct cluster_data_t cluster_data;
typedef struct zdo_info_ctx_s {
uint8_t endpoint;
esp_zb_ieee_addr_t long_addr;
} zdo_info_user_ctx_t;
static void bdb_start_top_level_commissioning_cb(uint8_t mode_mask)
{
ESP_ERROR_CHECK(esp_zb_bdb_start_top_level_commissioning(mode_mask));
}
static void bind_cb(esp_zb_zdp_status_t zdo_status, void user_ctx)
{
if (zdo_status == ESP_ZB_ZDP_STATUS_SUCCESS) {
ESP_LOGI(TAG, "bind_cb status:%d", zdo_status);
/ configure report attribute command */
esp_zb_zcl_config_report_cmd_t report_cmd;
report_cmd.zcl_basic_cmd.dst_addr_u.addr_short=esp_zb_get_short_address();
report_cmd.zcl_basic_cmd.dst_endpoint = 1;
report_cmd.zcl_basic_cmd.src_endpoint = 1;
report_cmd.address_mode = ESP_ZB_APS_ADDR_MODE_16_ENDP_PRESENT;
report_cmd.clusterID = 0xFFFE;
report_cmd.attributeID = 0;
report_cmd.attrType = ESP_ZB_ZCL_ATTR_TYPE_U32;
report_cmd.min_interval = 1;
report_cmd.max_interval = 30;
report_cmd.reportable_change = 1;
esp_zb_zcl_config_report_cmd_req(&report_cmd);
}
}
static void esp_zb_dev_reporting_cb(esp_zb_zcl_addr_t *addr, uint8_t endpoint, uint16_t cluster_id,
uint16_t attr_id, esp_zb_zcl_attr_type_t attr_type, void *value)
{
esp_zb_zcl_report_attr_cmd_t des;
des.zcl_basic_cmd.dst_addr_u.addr_short=0;
des.zcl_basic_cmd.dst_endpoint = 1;
des.zcl_basic_cmd.src_endpoint = 1;
des.address_mode = ESP_ZB_APS_ADDR_MODE_16_ENDP_PRESENT;
des.clusterID = 0xFFFE;
des.attributeID = 0;
des.cluster_role=ESP_ZB_ZCL_CLUSTER_SERVER_ROLE;
ESP_LOGI(TAG, "Switch got report attribute from address: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x, ID: %ld,cluster_id:0x%x,attr_id:0x%x,value:%d,attr_type:0x%x, endpoint:%d", addr->u.ieee_addr[7], addr->u.ieee_addr[6], addr->u.ieee_addr[5], addr->u.ieee_addr[4], addr->u.ieee_addr[3], addr->u.ieee_addr[2], addr->u.ieee_addr[1], addr->u.ieee_addr[0], addr->u.src_id , cluster_id, attr_id, *(uint8_t *)value, attr_type,endpoint);
esp_zb_zcl_attr_t *value_r = esp_zb_zcl_get_attribute(1,0xFFFE,ESP_ZB_ZCL_CLUSTER_SERVER_ROLE,0);
*((uint32_t*) value_r->data_p)+=1;
//when the incomming report from a end device arrives here i increment the attribut that reports to the gateway.
//when calling the funtion esp_zb_zcl_set_attribute_val below a report is generate (ignoring the configuration of reportable_change)
//but the periodic report stop working. also if they enter this cb again and call the funtion esp_zb_zcl_set_attribute_val this time the report dont generate.

//So the periodic report only works if i never call the funtion esp_zb_zcl_set_attribute_val ,
//and when i call this funtion they generate 1 report and the reports stop working, the only wait to force the report is calling the funtion esp_zb_zcl_report_attr_cmd_req.
esp_zb_zcl_set_attribute_val(1,0xFFFE,ESP_ZB_ZCL_CLUSTER_SERVER_ROLE,0,value_r->data_p);
//esp_zb_zcl_report_attr_cmd_req(&des);
ESP_LOGI(TAG,"value %lu ",aux);

}
static void ieee_cb(esp_zb_zdp_status_t zdo_status, esp_zb_ieee_addr_t ieee_addr, void *user_ctx)
{
if (zdo_status == ESP_ZB_ZDP_STATUS_SUCCESS) {
    // memcpy(&(on_off_light.ieee_addr), ieee_addr, sizeof(esp_zb_ieee_addr_t));
    ESP_LOGI(TAG, "ieee_cb address is:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
             ieee_addr[7], ieee_addr[6], ieee_addr[5], ieee_addr[4],
             ieee_addr[3], ieee_addr[2], ieee_addr[1], ieee_addr[0]);
    // /* bind the on-off light to on-off switch */
    esp_zb_zdo_bind_req_param_t bind_req;
    esp_zb_get_long_address(bind_req.src_address);
    bind_req.src_endp = 1;
    bind_req.cluster_id = 0xFFFE;
    bind_req.dst_addr_mode = ESP_ZB_ZDO_BIND_DST_ADDR_MODE_64_BIT_EXTENDED;
    memcpy(bind_req.dst_address_u.addr_long, ieee_addr, sizeof(esp_zb_ieee_addr_t));

    ESP_LOGI(TAG, "local address is:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
            bind_req.src_address[7], bind_req.src_address[6], bind_req.src_address[5],
           bind_req.src_address[4], bind_req.src_address[3], bind_req.src_address[2],
            bind_req.src_address[1], bind_req.src_address[0]);

    bind_req.dst_endp = 1;
    bind_req.req_dst_addr = esp_zb_get_short_address();
    static zdo_info_user_ctx_t test_info_ctx;
    test_info_ctx.endpoint = 1;
    memcpy(test_info_ctx.long_addr, ieee_addr, sizeof(esp_zb_ieee_addr_t));
    esp_zb_zdo_device_bind_req(&bind_req, bind_cb, (void *) & (test_info_ctx));
}else{
    ESP_LOGE("AAAA","XXXX");
}

}
static void esp_zb_read_resp_cb(esp_zb_zcl_status_t status, uint16_t cluster_id, uint16_t attr_id, esp_zb_zcl_attr_type_t attr_type, void *value)
{
ESP_LOGI(TAG, "Switch got read attribute response with status:%d,cluster_id:0x%x,attr_id:0x%x,value:%d,attr_type:0x%x", status, cluster_id, attr_id, *(uint8_t *)value, attr_type);
}
void esp_zb_app_signal_handler(esp_zb_app_signal_t *signal_struct)
{
uint32_t *p_sg_p       = signal_struct->p_app_signal;
esp_err_t err_status = signal_struct->esp_err_status;
esp_zb_app_signal_type_t sig_type = *p_sg_p;
switch (sig_type) {
case ESP_ZB_ZDO_SIGNAL_SKIP_STARTUP:
    ESP_LOGI(TAG, "Zigbee stack initialized");
    esp_zb_bdb_start_top_level_commissioning(ESP_ZB_BDB_MODE_INITIALIZATION);
    break;
case ESP_ZB_BDB_SIGNAL_DEVICE_FIRST_START:
case ESP_ZB_BDB_SIGNAL_DEVICE_REBOOT:
    if (err_status == ESP_OK) {
        ESP_LOGI(TAG, "Start network steering");
        esp_zb_bdb_start_top_level_commissioning(ESP_ZB_BDB_MODE_NETWORK_STEERING);
    } else {
        /* commissioning failed */
        ESP_LOGW(TAG, "Failed to initialize Zigbee stack (status: %d)", err_status);
        esp_zb_bdb_start_top_level_commissioning(ESP_ZB_BDB_MODE_NETWORK_STEERING);
    }

    break;
case ESP_ZB_BDB_SIGNAL_STEERING:
    if (err_status == ESP_OK) {
        esp_zb_ieee_addr_t extended_pan_id;
        esp_zb_get_extended_pan_id(extended_pan_id);
        ESP_LOGI(TAG, "Joined network successfully (Extended PAN ID: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x, PAN ID: 0x%04hx, Channel:%d)",
                 extended_pan_id[7], extended_pan_id[6], extended_pan_id[5], extended_pan_id[4],
                 extended_pan_id[3], extended_pan_id[2], extended_pan_id[1], extended_pan_id[0],
                 esp_zb_get_pan_id(), esp_zb_get_current_channel());

        esp_zb_zdo_ieee_addr_req_param_t ieee_req;
        ieee_req.addr_of_interest = 0;
        ieee_req.dst_nwk_addr = 0;
        ieee_req.request_type = 0;
        ieee_req.start_index = 0;
        esp_zb_zdo_ieee_addr_req(&ieee_req, ieee_cb, NULL);
    } else {
        ESP_LOGI(TAG, "Network steering was not successful (status: %d)", err_status);
        esp_zb_scheduler_alarm((esp_zb_callback_t)bdb_start_top_level_commissioning_cb, ESP_ZB_BDB_MODE_NETWORK_STEERING, 1000);
    }
    break;
case ESP_ZB_ZDO_SIGNAL_LEAVE:
    esp_zb_zdo_signal_leave_params_t *leave_params = (esp_zb_zdo_signal_leave_params_t *)esp_zb_app_signal_get_params(p_sg_p);
    if (leave_params->leave_type == ESP_ZB_NWK_LEAVE_TYPE_RESET) {
        ESP_LOGI(TAG, "Reset device");
    }
    break;
default:
    ESP_LOGI(TAG, "ZDO signal: %d, status: %d", sig_type, err_status);
    break;
}

}
void attr_cbxxx(uint8_t status, uint8_t endpoint, uint16_t cluster_id, uint16_t attr_id, void *value)
{
ESP_LOGI(TAG,"Callback aaaa");
}
void attr_cb(uint8_t status, esp_zb_zcl_attr_type_t data_type, void *value)
{
ESP_LOGI(TAG,"Callback value");
}
static void esp_zb_task(void pvParameters)
{
/ initialize Zigbee stack with Zigbee end-device config */
esp_zb_cfg_t zb_nwk_cfg = ESP_ZB_ZED_CONFIG();
esp_zb_init(&zb_nwk_cfg);
esp_zb_ep_list_t *esp_zb_ep_list = esp_zb_ep_list_create();

esp_zb_cluster_list_t *esp_zb_cluster_list = esp_zb_zcl_cluster_list_create();
esp_zb_attribute_list_t *FFFE = esp_zb_zcl_attr_list_create(0xFFFE);
esp_zb_custom_cluster_add_custom_attr(FFFE, 0x00, ESP_ZB_ZCL_ATTR_TYPE_U32, ESP_ZB_ZCL_ATTR_ACCESS_READ_WRITE | ESP_ZB_ZCL_ATTR_ACCESS_REPORTING,&cluster_data.FFFE_flag);
esp_zb_custom_cluster_add_custom_attr(FFFE, 0x01, ESP_ZB_ZCL_ATTR_TYPE_S16, ESP_ZB_ZCL_ATTR_ACCESS_READ_WRITE | ESP_ZB_ZCL_ATTR_ACCESS_REPORTING,&cluster_data.FFFE_away);
esp_zb_custom_cluster_add_custom_attr(FFFE, 0x02, ESP_ZB_ZCL_ATTR_TYPE_S16, ESP_ZB_ZCL_ATTR_ACCESS_READ_ONLY | ESP_ZB_ZCL_ATTR_ACCESS_REPORTING,&cluster_data.FFFE_hum);
esp_zb_custom_cluster_add_custom_attr(FFFE, 0x03, ESP_ZB_ZCL_ATTR_TYPE_S16, ESP_ZB_ZCL_ATTR_ACCESS_READ_ONLY | ESP_ZB_ZCL_ATTR_ACCESS_REPORTING,&cluster_data.FFFE_bat);
esp_zb_custom_cluster_add_custom_attr(FFFE, 0x04, ESP_ZB_ZCL_ATTR_TYPE_CHAR_STRING, ESP_ZB_ZCL_ATTR_ACCESS_WRITE_ONLY | ESP_ZB_ZCL_ATTR_ACCESS_REPORTING,cluster_data.FFFE_crono);

esp_zb_cluster_list_add_custom_cluster(esp_zb_cluster_list, FFFE, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
//esp_zb_cluster_list_update_custom_cluster(esp_zb_cluster_list, FFFE, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);

esp_zb_ep_list_add_ep(esp_zb_ep_list, esp_zb_cluster_list, 1, 260, ESP_ZB_HA_CUSTOM_ATTR_DEVICE_ID);

esp_zb_on_off_cluster_cfg_t on_off_cfg;
on_off_cfg.on_off = ESP_ZB_ZCL_ON_OFF_ON_OFF_DEFAULT_VALUE;
esp_zb_attribute_list_t *esp_zb_on_off_cluster = esp_zb_on_off_cluster_create(&on_off_cfg);
esp_zb_cluster_list = esp_zb_zcl_cluster_list_create();
esp_zb_cluster_list_add_on_off_cluster(esp_zb_cluster_list, esp_zb_on_off_cluster, ESP_ZB_ZCL_CLUSTER_CLIENT_ROLE);

esp_zb_ep_list_add_ep(esp_zb_ep_list, esp_zb_cluster_list, 9, 260, ESP_ZB_HA_CUSTOM_ATTR_DEVICE_ID);

esp_zb_attribute_list_t *FFFC;
for(int i=0;i<ZONAS;i++){
    esp_zb_cluster_list = esp_zb_zcl_cluster_list_create();
    FFFC = esp_zb_zcl_attr_list_create(0xFFFC);
    esp_zb_custom_cluster_add_custom_attr(FFFC, 0x00, ESP_ZB_ZCL_ATTR_TYPE_U32, ESP_ZB_ZCL_ATTR_ACCESS_READ_WRITE | ESP_ZB_ZCL_ATTR_ACCESS_REPORTING,&(cluster_data.FFFC_valve[i]));
    esp_zb_cluster_list_add_custom_cluster(esp_zb_cluster_list, FFFC, ESP_ZB_ZCL_CLUSTER_SERVER_ROLE);
    esp_zb_ep_list_add_ep(esp_zb_ep_list, esp_zb_cluster_list, 2+i, 260, ESP_ZB_HA_CUSTOM_ATTR_DEVICE_ID);
}

esp_zb_device_register(esp_zb_ep_list);

//esp_zb_add_custom_cluster_command_cb(1,0xFFFE,attr_cb);
//esp_zb_device_add_set_attr_value_cb(attr_cbxxx);
esp_zb_device_add_report_attr_cb(esp_zb_dev_reporting_cb);
esp_zb_add_read_attr_resp_cb(1, esp_zb_read_resp_cb);
esp_zb_set_primary_network_channel_set(ESP_ZB_PRIMARY_CHANNEL_MASK);

ESP_ERROR_CHECK(esp_zb_start(false));
esp_zb_main_loop_iteration();

}
void app_main(void)
{
esp_zb_platform_config_t config = {
.radio_config = ESP_ZB_DEFAULT_RADIO_CONFIG(),
.host_config = ESP_ZB_DEFAULT_HOST_CONFIG(),
};
ESP_ERROR_CHECK(nvs_flash_init());
ESP_ERROR_CHECK(esp_zb_platform_config(&config));
/* hardware related and device init */
//switch_driver_init(button_func_pair, PAIR_SIZE(button_func_pair), esp_zb_buttons_handler);
xTaskCreate(esp_zb_task, "Zigbee_main", 4096, NULL, 5, NULL);
}
In addition, the gateway makes a bind between the end device and the switch. when the end device reports to the switch, it increases the attribute and generates a report to the gateway

@diazmanuel Hi, I have tried to duplicate most of your code on my side. And here are some results.

I used level control cluster's attribute to do binding and config report. It worked fine. It can send the report to remote device in period of max interval seconds or do esp_zb_zcl_set_attribute_val attribute change larger than delta_change value.

I also tried to use the same customized cluster (0xfffe) with attribute (0x0) you created to do binding and config report. It could periodically send the report message (let's say 30 seconds). I also couldn't receive a report if attribute value is larger than the delta_change by using esp_zb_zcl_set_attribute_val. However, even I couldn't send the report by using esp_zb_zcl_set_attribute_val, I still can get the period report, it didn't stop. Yes, there is a bug, but strange behavior is different than yours.

The bug is that our structure defines esp_zb_zcl_config_report_cmd_t reportable_change as uint16_t. It should varies depends on the attrType. The fixes will be release either today or next week.

Again, for different behavior that you saw device stop reporting after esp_zb_zcl_set_attribute_val. It might be binding issue not report configuration.

@diazmanuel The latest release has been fixed the reportable_change type from uint16_t to void type. Please try it out.

@likunqiao097304 with this change the strange behavior that it had disappeared, now it works correctly thanks


Add item already exists error code to areas/{id} POST when user attempts to create duplicate area

From @dgutride on July 3, 2017 18:47
In order for PR https://github.com/fabric8-ui/fabric8-ui/pull/1616 to be merged and to fix https://github.com/fabric8-ui/fabric8-ui/issues/921, we need to be able to know definitively that a duplicate area was created.  Ideally, an application specific error code would be added to the JSON API in order to determine that an area already exists.  The current PR is looking at the human-readable description to infer this.
API: POST -> areas/{id}
Swagger link: http://swagger.goa.design/?url=github.com%2Falmighty%2Falmighty-core%2Fdesign#!/area/area_create_child
Copied from original issue: openshiftio/openshift.io#312

From @aslakknutsen on July 3, 2017 19:49
The backend should probably return HTTP 409 Conflict on the POST to the collection in these cases.

@aslakknutsen do you have an issue for working this or do you want me to copy this to fabric8-wit?


Choose testing framework for Widgets/API

DalekJS is dead. It prevents grunt and dependencies from upgrading. It also incomplete leaving these issues:

location of test server is hardcoded into test itself
there is no test discovery in dalek-cli - every test suite (.js file) should be passed explicitly

So we need another framework to testing grtp.co. Any recommendation, rationale, preferences?
It should be easy to install and run tests with single npm invocation - without manually instaling Selenium .jar and other prerequisites.

https://gratipay.com/Distilled/ ?

@mattbk asked if Distilled can help - https://gitlab.com/distilled/distilled/issues/13

It appears that JavaScript testing frameworks are actually a bunch of different components, which are not organized in any pipeline, so to understand this ecosystem, there should be a picture of that pipeline:
[ discovery ] --> [ execution ] --> [ reporting ]

              --> [ unit test ]
[ execution ] --> [ browser test ]

                     1. [ server control ]
[ browser test ] --> 2. [ browser control ]
                     3. [ test executor ]

DalekJS doesn't do [ discovery ] and [ server control ]. Discovery is now made by grunt (scanning test/**/*.js, and  [ server control ] is made by grunt-contrib-connect.
Still trying to figure out what are Distilled roles here.

Need to make a diagram for it. Later.

http://interactive.blockdiag.com/?compression=deflate&src=eJxLyslPzk7JTExXqOZSUEjJLE7OL0stqlTQtVNIrUhNLi3JzM8DcYpSC_KLSjLz0q25agHiGBIk

Some great explanations over at https://gitlab.com/distilled/distilled/issues/13.

Reading pretty fresh review - https://spin.atomicobject.com/2017/05/02/react-testing-jest-vs-mocha/


ChangeDetection After View Destroyed - Nav Item

Describe the bug
Our drawer has some asynchronous behavior when initializing new navigation items.  Sometimes an attempt to initialize happens when an item has already been destroyed.
What is the expected behavior?
No errors are thrown on destroy, ever.
What are the steps to reproduce?

Noticing odd behavior with drawer with footer story. Clicking down the the hierarchy of stories and reaching the "with a footer" story the drawer doesn't display and throws error....

Screenshots or links to minimum reproduction example

Environment

Chrome Windows
Anything else to add?

Fixed in #398


Fix ci

The tests breaking all the time makes it really hard to just quickly accept useful PRs. This runs tests using tape-run instead of zuul. We can manually run the browser tests when needed.

tape-run doesn't seem to support Linux. how about jsdom?

or, hmm. tape-run may be able to work with PhantomJS

I can't actually tell if the tests ran in Travis haha. They might not actually be working. The tape-run docs say you need to add some extra stuff to the travis config to get it to work. Only reason I'm preferring tape-run over jsdom is that it's just a command and we don't need another config :P

It seems to work, but for some reason GitBook is saying the build failed (not that it should concern itself of it, but whatevs).

I'll merge it and see what happens :D


[ListboxUnstyled] Implement text navigation

Summary
Support text navigation (highlighting options that begin with typed characters) in useListboxUnstyled hook.
closes #31012

[x] I have followed (at least) the PR section of the contributing guide.

Description
The behavior of text navigation follows that of MenuList implemented at  #15495.
Option Stringifier
A option stringifier function is passed into the useListboxUnstyled hook to get the string representation of the option object.
See https://github.com/mui/material-ui/issues/31012#issuecomment-1073860127
Reducer
A new action and corresponding reducer method is created to handle text navigation actions. The role of this reducer is to navigate through the options list until a match is found.

Match condition is passed as a function into the dispatcher,
startWithCurrentOption determines if the reducer starts its navigation from the currently highlighted option, or the option following the currently highlighted option.

Tests

[x] defaultListboxReducer
[x] SelectUnstyled
[x] MenuUnstyled

Live demo
Components depending on useListboxUnstyled:

SelectUnstyled https://deploy-preview-31940--material-ui.netlify.app/material-ui/react-select/#unstyled
MenuUnstyled https://deploy-preview-31940--material-ui.netlify.app/base/react-menu/

Possible Further Improvement
I donno if this is feasible or needed, but:
The text navigation feature of MenuList and useListbox shares a lot of similarity, perhaps a useTextNavigation hook can be refactored out and be reused across both components?

Thanks for your work so far! I'll try to do a final review later today


[BUG] Segmentation fault at 0x0000000000000000 in rb_fiber_transfer

Opening here first because I'm too unfamiliar with this to know whether it's a Ruby bug or a bug in io-event. All I can say is that rb_fiber_transfer expects rb_current_execution_context() to return something, but it's called from a thread that doesn't have a current execution context.
So I don't know if it's IO-event trying to resume a fiber from a wrong thread or wrong assumption in rb_fiber_transfer.
I unfortunately don't have a repro script, but this is happening on a fairly frequent basis (dozens of times a day).
/artifacts/bundle/ruby/3.4.0+0/gems/async-2.14.2/lib/async/scheduler.rb:167: [BUG] Segmentation fault at 0x0000000000000000
ruby 3.4.0dev (2024-08-27T14:45:53Z v3.4.0-pshopify-pr..<PHONE_NUMBER>) +YJIT [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0016 p:---- s:0100 e:000099 CFUNC  :resume
c:0015 p:0011 s:0095 e:000094 METHOD /artifacts/bundle/ruby/3.4.0+0/gems/async-2.14.2/lib/async/scheduler.rb:167
c:0014 p:0026 s:0089 E:001cf8 METHOD /artifacts/bundle/ruby/3.4.0+0/gems/async-2.14.2/lib/async/task.rb:421
c:0013 p:0018 s:0084 E:001c98 METHOD /artifacts/bundle/ruby/3.4.0+0/gems/async-2.14.2/lib/async/task.rb:189
c:0012 p:0033 s:0079 e:000078 METHOD /artifacts/bundle/ruby/3.4.0+0/gems/async-2.14.2/lib/async/task.rb:215 [FINISH]
c:0011 p:0024 s:0071 e:000070 METHOD /artifacts/bundle/ruby/3.4.0+0/gems/async-2.14.2/lib/kernel/async.rb:26
c:0010 p:0004 s:0061 E:0004c8 METHOD /artifacts/bundle/ruby/3.4.0+0/gems/runtime-engine-client-0.10.1/lib/runtime_engine/async_client.rb:370
c:0009 p:0008 s:0054 E:001c08 BLOCK  /artifacts/bundle/ruby/3.4.0+0/gems/runtime-engine-client-0.10.1/lib/runtime_engine/async_client.rb:156
c:0008 p:0012 s:0050 e:000049 METHOD /artifacts/bundle/ruby/3.4.0+0/gems/runtime-engine-client-0.10.1/lib/runtime_engine/instrumentation/timings.rb:67
c:0007 p:0021 s:0042 E:002398 METHOD /artifacts/bundle/ruby/3.4.0+0/gems/runtime-engine-client-0.10.1/lib/runtime_engine/async_client.rb:155
c:0006 p:0027 s:0031 e:000027 BLOCK  /artifacts/bundle/ruby/3.4.0+0/gems/runtime-engine-client-0.10.1/lib/runtime_engine/async_client.rb:129
c:0005 p:0012 s:0025 e:000024 METHOD /artifacts/bundle/ruby/3.4.0+0/gems/runtime-engine-client-0.10.1/lib/runtime_engine/instrumentation/timings.rb:67
c:0004 p:0015 s:0017 e:000016 BLOCK  /artifacts/bundle/ruby/3.4.0+0/gems/runtime-engine-client-0.10.1/lib/runtime_engine/async_client.rb:128
c:0003 p:0011 s:0013 e:000012 BLOCK  /artifacts/bundle/ruby/3.4.0+0/gems/async-2.14.2/lib/async/task.rb:190
c:0002 p:0004 s:0009 e:000007 BLOCK  /artifacts/bundle/ruby/3.4.0+0/gems/async-2.14.2/lib/async/task.rb:403 [FINISH]
c:0001 p:---- s:0003 e:000002 DUMMY  [FINISH]

-- Ruby level backtrace information ----------------------------------------
/artifacts/bundle/ruby/3.4.0+0/gems/async-2.14.2/lib/async/task.rb:403:in 'block in schedule'
/artifacts/bundle/ruby/3.4.0+0/gems/async-2.14.2/lib/async/task.rb:190:in 'block in run'
/artifacts/bundle/ruby/3.4.0+0/gems/runtime-engine-client-0.10.1/lib/runtime_engine/async_client.rb:128:in 'block (2 levels) in _process'
/artifacts/bundle/ruby/3.4.0+0/gems/runtime-engine-client-0.10.1/lib/runtime_engine/instrumentation/timings.rb:67:in 'measure'
/artifacts/bundle/ruby/3.4.0+0/gems/runtime-engine-client-0.10.1/lib/runtime_engine/async_client.rb:129:in 'block (3 levels) in _process'
/artifacts/bundle/ruby/3.4.0+0/gems/runtime-engine-client-0.10.1/lib/runtime_engine/async_client.rb:155:in 'make_request'
/artifacts/bundle/ruby/3.4.0+0/gems/runtime-engine-client-0.10.1/lib/runtime_engine/instrumentation/timings.rb:67:in 'measure'
/artifacts/bundle/ruby/3.4.0+0/gems/runtime-engine-client-0.10.1/lib/runtime_engine/async_client.rb:156:in 'block in make_request'
/artifacts/bundle/ruby/3.4.0+0/gems/runtime-engine-client-0.10.1/lib/runtime_engine/async_client.rb:370:in 'timeout'
/artifacts/bundle/ruby/3.4.0+0/gems/async-2.14.2/lib/kernel/async.rb:26:in 'Async'
/artifacts/bundle/ruby/3.4.0+0/gems/async-2.14.2/lib/async/task.rb:215:in 'async'
/artifacts/bundle/ruby/3.4.0+0/gems/async-2.14.2/lib/async/task.rb:189:in 'run'
/artifacts/bundle/ruby/3.4.0+0/gems/async-2.14.2/lib/async/task.rb:421:in 'schedule'
/artifacts/bundle/ruby/3.4.0+0/gems/async-2.14.2/lib/async/scheduler.rb:167:in 'resume'
/artifacts/bundle/ruby/3.4.0+0/gems/async-2.14.2/lib/async/scheduler.rb:167:in 'resume'

-- Threading information ---------------------------------------------------
Total ractor count: 1
Ruby thread count for this ractor: 16

-- Machine register context ------------------------------------------------
 RIP: 0x00005b77a8f4971f RBP: 0x00007fd19fa2c500 RSP: 0x00007fd23a74b970
 RAX: 0x00007fd25504d000 RBX: 0x00007fd1feb42800 RCX: 0x0000000000000000
 RDX: 0x00007fd255068280 RDI: 0x00007fd1febd44a0 RSI: 0x00007fd19fa3a7a0
  R8: 0x0000000000000001  R9: 0x00007fd207a14c40 R10: 0x00007fd16c93d0b0
 R11: 0x0000000000000002 R12: 0x00007fd19fa3a580 R13: 0x00007fd23a74b920
 R14: 0x00007fd23a74b920 R15: 0x00005b77a91b12a0 EFL: 0x0000000000010287

-- C level backtrace information -------------------------------------------
/usr/local/ruby/bin/ruby(rb_print_backtrace+0x14) [0x5b77a8dbe0c1] /tmp/ruby-build/ruby-3.4.0-pshopify-preview5/vm_dump.c:820
/usr/local/ruby/bin/ruby(rb_vm_bugreport) /tmp/ruby-build/ruby-3.4.0-pshopify-preview5/vm_dump.c:1151
/usr/local/ruby/bin/ruby(rb_bug_for_fatal_signal+0xfc) [0x5b77a8f768dc] /tmp/ruby-build/ruby-3.4.0-pshopify-preview5/error.c:1087
/usr/local/ruby/bin/ruby(sigsegv+0x46) [0x5b77a8d05be6] /tmp/ruby-build/ruby-3.4.0-pshopify-preview5/signal.c:929
/lib/x86_64-linux-gnu/libc.so.6(0x7fd255732520) [0x7fd255732520]
/usr/local/ruby/bin/ruby(rb_current_execution_context+0x0) [0x5b77a8f4971f] /tmp/ruby-build/ruby-3.4.0-pshopify-preview5/cont.c:2677
/usr/local/ruby/bin/ruby(fiber_current) /tmp/ruby-build/ruby-3.4.0-pshopify-preview5/cont.c:2067
/usr/local/ruby/bin/ruby(fiber_switch) /tmp/ruby-build/ruby-3.4.0-pshopify-preview5/cont.c:2771
/usr/local/ruby/bin/ruby(rb_fiber_transfer) /tmp/ruby-build/ruby-3.4.0-pshopify-preview5/cont.c:2795
/usr/local/ruby/bin/ruby(rb_ensure+0x10c) [0x5b77a8baa5ac] /tmp/ruby-build/ruby-3.4.0-pshopify-preview5/eval.c:1000
/artifacts/bundle/ruby/3.4.0+0/gems/io-event-1.6.5/lib/IO_Event.so(IO_Event_Selector_resume+0x9c) [0x7fd21526bf2c] ./io/event/selector/selector.c:234
/artifacts/bundle/ruby/3.4.0+0/gems/io-event-1.6.5/lib/IO_Event.so(IO_Event_Selector_resume) (null):0
[0x5b77aaae022f]

Thanks for your report, I will take a look tomorrow.
If I prepare a debug release, would you be able to test it?

Of io-event possibly yes. Of Ruby, no I'm afraid I can't.

I have a couple of questions to help me understand the nature of the problem.

Is this issue occurring inside Falcon or are you using Async{...} inside an existing server?
Can you please elaborate on the setup and/or organization of threads and if you know, the specific work/operation that is causing this error e.g. async-http client request, async-redis, some other native library.
Are you using connection pooling for the above, and if so, what library is doing that? e.g. async-pool, connection-pool, ActiveRecord's own connection pooling, etc.

I have a couple of questions to help me understand the nature of the problem.

Ok, but keep in mind I'm here with some sort of SRE hat. I don't know the code using async at all, I'm just seeing segfaults. And since it's async I don't even have a backtrace to see if there is a pattern in the code that trigger this.

Is this issue occurring inside Falcon or are you using Async{...} inside an existing (alternative) server? Can you provide any details?

Yeah, it's running inside Pitchfork, in a fairly gigantic application.

Can you please elaborate on the setup and/or organization of threads and if you know, the specific work/operation that is causing this error

Yeah, unfortunately I don't know that, and as mentioned I can't just rely on the backtrace to point me at the calling code like I usually do for this sort of issues. All I know is that it's in a generic /graphql endpoint, so it could be anything... All I can say is the gems used:
$ rg -F 'async-' Gemfile.lock
1905:      async-io (>= 1.41.0)
2368:      async-http (>= 0.67, < 0.70)
2604:    async-http (0.69.0)
2606:      async-pool (~> 0.7)
2613:    async-io (1.43.2)
2615:    async-pool (0.8.0)

So I think it's a pool of HTTP connections? If I grep for Async do I find a couple callsites:
        results = Async do |task|
          tasks = batch_entries.map do |batch_entry|
            task.async do
              run_with_cache(batch_entry.context, batch_entry.http_request)
            end
          end

          tasks.map(&:wait)
        end.wait

            Async do |task_scheduler|
              tasks = scope_key_to_missing_fetch_results.map do |scope_key, missing_fetch_results|
                task_scheduler.async do
                  perform_fetch(scope_key: scope_key, fetch_results: missing_fetch_results)
                rescue StandardError => e
                  missing_fetch_results.each do |fetch_result|
                    fetch_result.error_result = e.message
                  end
                  log_fetch_error(e, message: "[REDACTED]")
                end
              end
              tasks.map(&:wait)
            end.wait

That seems to be all what it's used for.
As for the organization of threads, as you can see in the crash report there's 16 Ruby threads, but also a whole lot of native threads started by gems like grpc.  But these are mostly all "service threads" AFAICT Async is only called from the main thread.

Are you able to clarify "happening on a fairly frequent basis (dozens of times a day)." - as in a percentage of total requests/operations

Well, I don't know how often this codepath is called, but probably quite a lot, dozens of times a day isn't a whole lot for us, probably 0.000001% or something like that, but this was to say it's not a once in a blue-moon issue.

Thanks, that's helpful.

The mention of /graphql makes me want to call attention to the new AsyncDataloader stuff in graphql-ruby, just in case that might be relevant. I'm not sure if @rmosolgo might be worth looping in, in case he has any ideas. I doubt Shopify is using AsyncDataloader yet, but you never know! (Apologies if this is unhelpful / a red herring...)

It's not specific to graphql, it's also failing on some non graphql endpoints.

I think I may have been missing some write barriers and GC marking.
https://github.com/socketry/io-event/commit/bef8e91a7370797b4c80bbad60a6c7f7214d0e79#diff-31f22093e996cbeba1998b1ac937570688b64c37f01a6f41a98586c83943683fR140-R145
I'm not sure if there is an easy way to confirm the fix, but I'll cut a release if everything looks good, and then maybe you can test it?

Thanks. I'll upgrade to 1.6.6 and report back next week.

Sorry, just realized the patch ain't in 1.6.6, I'll try the main branch.

Sorry I fell asleep before I could make a release. Thanks for your efforts.
I'm going to try to write an artificial test scenario that causes the write barriers/GC marking to fail. I'd like to try and actually make a repro.

Hum, I deploy this a few hours ago, and I think the original error might be solved (still want to let it run longer).
However I've just noticed what seem to be a new type of crash, and seem to be even more frequent:
(ruby) : SIGABRT Unhandled signal SIGABRT in `/usr/local/ruby/bin/ruby`
    [/usr/lib/x86_64-linux-gnu/libc.so.6] pthread_kill
    [/usr/lib/x86_64-linux-gnu/libc.so.6] raise
    [/usr/lib/x86_64-linux-gnu/libc.so.6] abort
    [/usr/local/ruby/bin/ruby] make_errno_exc_str
    /tmp/ruby-build/ruby-3.4.0-7387a0979158c50ca37884f14bad2b493d3e2f0a/gc.c:2059 gc_mark_internal
    io/event/selector/epoll.c:107 IO_Event_Selector_EPoll_Type_mark
    [/usr/local/ruby/bin/ruby] gc_start
    gc/default.c:6573 garbage_collect
    [/usr/local/ruby/bin/ruby] rb_gc_impl_malloc
    [/usr/local/ruby/bin/ruby] thread_create_core
    /tmp/ruby-build/ruby-3.4.0-7387a0979158c50ca37884f14bad2b493d3e2f0a/thread.c:948 thread_initialize
    [/usr/local/ruby/bin/ruby] vm_call0_body
    /tmp/ruby-build/ruby-3.4.0-7387a0979158c50ca37884f14bad2b493d3e2f0a/vm_eval.c:80 vm_call0_cc
    [/usr/local/ruby/bin/ruby] rb_call0
    /tmp/ruby-build/ruby-3.4.0-7387a0979158c50ca37884f14bad2b493d3e2f0a/vm_eval.c:1067 rb_funcallv_kw
    [/usr/local/ruby/bin/ruby] thread_s_new
    [/usr/local/ruby/bin/ruby] vm_call_cfunc_with_frame_
    /tmp/ruby-build/ruby-3.4.0-7387a0979158c50ca37884f14bad2b493d3e2f0a/vm_insnhelper.c:5932 vm_sendish
    [/usr/local/ruby/bin/ruby] vm_exec_core

It's also possible the new error is hiding/preventing the old error... I've made a new release, hopefully that fixes the above issue.

I've just released v1.7.0 which is fixing support for Windows, but also includes various fixes related to this discussion too.

I think the original error might be solved (still want to let it run longer).

So it wasn't actually solved, it happened a few more times this morning.

I updated io-event in our app, and I'm afraid it's still crashing. I'll try to see if I can figure something out with the core dump.

So the crash is a "try to mark T_NONE", and it seem the T_NONE is descriptor->io
#12 0x00007a4e5919a5b5 in IO_Event_Selector_EPoll_Descriptor_mark (_descriptor=0x7a4d86213390) at ./io/event/selector/epoll.c:99
99	./io/event/selector/epoll.c: No such file or directory.
(gdb) p descriptor
$1 = (struct IO_Event_Selector_EPoll_Descriptor *) 0x7a4d86213390
(gdb) p *descriptor
$2 = {list = {head = 0x7a4d86213390, tail = 0x7a4d86213390, type = 0x0}, io =<PHONE_NUMBER>45920, waiting_events = (IO_EVENT_READABLE | IO_EVENT_WRITABLE),
  registered_events = (IO_EVENT_READABLE | IO_EVENT_WRITABLE)}
(gdb) p *(struct RBasic *)134472390245920
$3 = {flags = 0, klass =<PHONE_NUMBER>79120}

@casperisfine thanks for all your contributions. I've merged them and released v1.7.1.

Alright, it seems this issue didn't happen over the week end, so I think it's fixed for good.

Thanks so much for your help fixing this bug and all the other contributions!


feat: auto-add key to wallet (start with test wallet)

Context

Closes https://github.com/interledger/web-monetization-extension/issues/615
Closes https://github.com/interledger/web-monetization-extension/issues/616
Part of https://github.com/interledger/web-monetization-extension/issues/613

Changes proposed in this pull request

Add new content script to automate key-addition to wallets.

The scripts are in content/keyAutoAdd/*
content/keyAutoAdd/lib/* contains script integration with background, along with some helper utils.
These content scripts are injected only to specific wallet URLs, and not to all URLs.
The content scripts are written as "steps" so we can track their breakage better, and show progress to user. Some steps can be marked as "skipped".
src/content/keyAutoAdd/testWallet.ts contains a sample automation for the test wallet, via API reverse engineering.

background/keyAutoAdd.js contains background service to orchestrate key-addition. It sends the BEGIN message to content script and monitors progress via Runtime.Port based messaging.
connectWallet in background/openPayments.ts handles key-addition, if needed.

Most other changes in background/openPayments.ts are to handle rejections, tab closes, and reusing tabs for further process.
More errors need to be handled as we now store connect state in background's transientPopupState to give user more info if they re-open popup during connect process.

Follow-up:

https://github.com/interledger/web-monetization-extension/issues/625
https://github.com/interledger/web-monetization-extension/issues/622

Oops forgot to add E2E tests.


Who defines supported variants?

I wonder if the job of listing supported variants should fall to singularity-eos or downstream consumers. Haven't thought through all the implications of the latter, but at first glance it seems like it might have some advantages.

Definitely a necessary discussion and the more I think about the more I lean towards requiring downstream apps to define this themselves.
Something that I think would be very nice (in the probably distant future) would be for us to provide functionality that enables us to JIT the model list after input file parsing and that is likely a capability we would own.

yeah, I like that idea.

It's still an issue, because I think it would still be nice to allow host codes to build their own variants. That's kind of already possible, so perhaps it's not urgent.

Essentially resolved by the plugin infrastructure.


TAF Updater On Linux Shouldn't Try To Execute

When a TAF update is available, TAF does the right thing by downloading the unix client, however the code after that assumes that the download is only for windows and attempts to run it like an executable:
2024-04-02 21:01:13.951  INFO 3458 --- [lication Thread] c.f.c.update.ClientUpdateServiceImpl     : Starting installer at /home/danny/.taforever/cache/update/tafclient_unix_2024_01_13.tar.gz
/home/danny/.taforever/cache/update/tafclient_unix_2024_01_13.tar.gz: /home/danny/.taforever/cache/update/tafclient_unix_2024_01_13.tar.gz: cannot execute binary file

I'm not sure if there's already code to untar archives in the codebase, but at the very least it's a security problem for it to be trying to execute a file which is just data.

Don't see how it is a security problem, no program loader would succeed in loading a tar.gz . Is the execute bit even set?

It's only a security problem in the broad sense of "trying to execute something that's supposed to purely be data is a bad practice." The theoretical problem would be someone hijacking the domain for TAF and putting something malicious in that says it's .tar.gz.


CITATION.cff and README recommend citing differently

Just flagging that CITATION.cff is out of sync with the citation recommendation in the README.  I'm assuming you prefer we cite the paper on the arxiv?
Btw, thanks for the nice package.

Yes we should update that.

Thanks for pointing it out. I have updated it!


[DO NOT MERGE] Tmp test modifications

@bowen-xu can you please take a look at utils_for_test.py. I added a function at the top that calls the reasoner directly for testing purposes. It seems to work but I wanted to get your take on it before I move further. I modified a few tests in test_NAL1.py just to see how it would work.
You can safely ignore all other files in this temporary PR, I will delete it afterwards.

ok. I'll do it this weekend.


Optimisation : return TextEdit instead of a String

If you want to tackle this, I suggest having dependent text edits that can be applied one after the other's (easy to create with a marker in the document) so they can be applied one after the other easily.

This topic is complicated, I'll fist focus on doing something that works and then we'll see about optimisations


How can I use this code to do mesh warping with user interaction?

Did you try to build and run this repo?
Most of the what you need to do a mesh warp is contained within this repo.
I do not understand what you mean by user interaction.

I mean that there will be MTIImageView and user can adjust MTIImage of MTIImageView by dragging on image.

I want it to work like photoshop liquify tool. SO my idea is when user do dragging on the image image will warp.


Implement Ads Api - Business Manager endpoints

Afternoon all,
Thanks for your work thus far on the project. I'm likely going to build in this functionality over the next week or few - pending on how much time I can allocate towards it. Is this something you'd be interested in merging in, or would you prefer to keep the Ads Api - Business Manager endpoints [0] out of the gem?

Unfortunately, my employer preferred that to keep the timeline slim and the scope small, I managed my own service objects etc. for this.

@momer alright, too bad :) if you still use the gem make sure to update it though, the it has changes relevant to the ads api updates


Printing in arabic is not working.

I'm trying to print Arabic text on a POS printer.
i have tried both "star" and "Epson" types
and i have tested on both wpc1256_arabic and pc864_arabic .
Printing in English is working fine. printing images using <Image src.. /> also works fine.
but when I try to print an Arabic text, it shows an unknown character. (not ???)
Printer function:
  const printer = async () => {

    if (!printerState) {
     // connecting to printer
       ....
           setPrinterState(() => characteristic);
       ....
    }

    printing();
  };

Printing function
  const printing = async () => {
    const data = await render(
      <Printer type="star" width={88} characterSet="wpc1256_arabic">
        <Text>مرحبا بك في رياكت</Text>
      </Printer>
    );
    // Print the data in chunks
    await printChunks(printerState, data);
  };

printChunks function:
  const sendChunk = async (printerState, chunk) => {
    try {
      await printerState.writeValueWithResponse(chunk);
    } catch (error) {
      console.error(`Error sending data chunk: ${error}`);
      throw error;
    }
  };

Printer trigger:
  <Button type="primary" onClick={printer}>
        PRINT
  </Button>

hi tawfek are u found any solution for handle text and  !

Hi @mustafa-altai77, unfortunately no.
but there is something I didn't try which is converting it to an image and printing it.
I think this would work but it will take more time to develop (which I didn't have).
Thanks.


prepare 0.1.2 release

add changelog
add badges for docs & pypi
bump version
force networkx >= 2.4

thanks @peteboyd , just released 0.1.2 on pypi


Resource specific metadata should not be editable for Geographic feature resource type

This has been fixed in release 1.11. So closing.


How to set the frequency_penalty?

Hi,
I want to set the frequency_penalty when calling gpt-3.5-turbo model via your code. How to do so? Is there a sample showing how to do this?
Thank you

Hi,
simply add the frequency_penalty parameter in your call as shown below

$yourApiKey = getenv('YOUR_API_KEY');
$client = OpenAI::client($yourApiKey);

$result = $client->chat()->create([
    'model' => 'gpt-3.5-turbo',
    'messages' => [
        ['role' => 'user', 'content' => 'Hello!'],
    ],
    'frequency_penalty' => 0,
]);

echo $result->choices[0]->message->content; // Hello! How can I assist you today?


Overload comparison operators

Overload == and != to make testing more easy

Hadn't written comparison operators for Vector


These potions are not blocked

Greetings, on my server with creativity, players can create potions like this on my server and Panilla is not fixing them for some reason. What to do?

Hi, are you using the latest version 1.11.1?

I've just put out another version, 1.11.2, which may address this issue if you're not using Minecraft 1.20.3/4.

Interesting, but the problem was solved (my server version is 1.20.4), but now another problem - Panilla stopped ignoring GUI menus (for example, I click on an enchanted enderpearl in a menu made via BetterGUI and it doesn't click).


🐛 Android Build Issue

Hi,
Thanks very much for this new library
I am experiencing a build issue on Android just after having installed react-native-vision-camera.
IOS build is working fine.
I am getting the following error message when building with "npx react-native run-android" command.

Configure project :react-native-vision-camera
Warning: The 'kotlin-android-extensions' Gradle plugin is deprecated. Please use this migration guide (https://goo.gle/kotlin-android-extensions-deprecation) to start working with View Binding (https://developer.android.com/topic/libraries/view-binding) and the 'kotlin-parcelize' plugin.

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.2/userguide/command_line_interface.html#sec:command_line_warnings
FAILURE: Build completed with 2 failures.
1: Task failed with an exception.

Where:
Build file '/Users/nm/Dev/MyApp/node_modules/react-native-vision-camera/android/build.gradle' line: 26

What went wrong:
A problem occurred evaluating project ':react-native-vision-camera'.

Failed to apply plugin [id 'org.jlleitschuh.gradle.ktlint']
Extension of type 'CommonExtension' does not exist. Currently registered extension types: [ExtraPropertiesExtension, DefaultArtifactPublicationSet, ReportingExtension, SourceSetContainer, JavaPluginExtension, JavaInstallationRegistry, NamedDomainObjectContainer, LibraryExtension, KotlinAndroidProjectExtension, KotlinTestsRegistry, AndroidExtensionsExtension, KtlintExtension]

Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
==============================================================================

2: Task failed with an exception.

What went wrong:
A problem occurred configuring project ':react-native-vision-camera'.

compileSdkVersion is not specified.

When opening the project on Android Studio I get the following message:
11:14 AM	Gradle sync failed: Could not run phased build action using Gradle distribution 'https://services.gradle.org/distributions/gradle-6.2-all.zip'.
Consult IDE log for more details (Help | Show Log) (1 s 252 ms)
For the first issue I found the following link if it may help:
https://stackoverflow.com/questions/65179275/the-kotlin-android-extensions-gradle-plugin-is-deprecated
Environment
React Native: 0.63.4
Android Studio: 4.0
Gradle Plugin: 3.5.3
Gradle: 6.2

Platform(s):

[X] Android

react-native version: 0.63.4

react-native-vision-camera version: 1.0.0

react-native-reanimated version: 1.13.1

My gradle-wrapper.properties file:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-6.2-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
My build.gradle file:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext {
buildToolsVersion = "29.0.2"
minSdkVersion = 16
compileSdkVersion = 29
targetSdkVersion = 29
googlePlayServicesVersion = "17.0.0"
}
repositories {
google()
jcenter()
}
dependencies {
classpath("com.android.tools.build:gradle:3.5.3")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenLocal()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
}
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
    google()
    jcenter()
    maven { url 'https://www.jitpack.io' }
}

}
Many thanks for your help.

Hm, it looks like ktlint is causing problems for you. Could you try removing it from the build.gradle and see if that makes a difference?

Thanks very much for your quick answer.
For your information I didn't remove for the moment Ktlint from the react-native-vision-camera build.gradle file .
What I did:
I updated Gradle version from 6.2 to 6.5 on my project Gradle-wrapper.properties file:
distributionUrl=https://services.gradle.org/distributions/gradle-6.5-all.zip
I also updated Gradle plugin version from 3.5.3 to 4.1.2 on my project  build.gradle file:
classpath("com.android.tools.build:gradle:4.1.2")
After these modification Ktlint error during building disappeared but I had a new error message telling me to update minSdkVersion from 16 to 21 (minSdkVersion 21 is used by react-native-vision-camera):
minSdkVersion = 21
After updating minSdkVersion, I have now these warnings and error messages concerning react-native-vision-camera:

Configure project :react-native-vision-camera
Warning: The 'kotlin-android-extensions' Gradle plugin is deprecated. Please use this migration guide (https://goo.gle/kotlin-android-extensions-deprecation) to start working with View Binding (https://developer.android.com/topic/libraries/view-binding) and the 'kotlin-parcelize' plugin.

e: /Users/nm/Dev/MyApp/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraViewModule.kt: (152, 74): Unresolved reference: R
e: /Users/nm/Dev/MyApp/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraViewModule.kt: (153, 53): Unresolved reference: CONTROL_ZOOM_RATIO_RANGE
e: /Users/nm/Dev/MyApp/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraViewModule.kt: (188, 46): Unresolved reference: lower
e: /Users/nm/Dev/MyApp/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraViewModule.kt: (189, 46): Unresolved reference: upper
e: /Users/nm/Dev/MyApp/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraViewModule.kt: (243, 51): Unresolved reference: upper
e: /Users/nm/Dev/MyApp/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/utils/CameraCharacteristicsUtils.kt: (73, 92): Unresolved reference: R
e: /Users/nm/Dev/MyApp/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/utils/CameraCharacteristicsUtils.kt: (74, 38): Unresolved reference: CONTROL_ZOOM_RATIO_RANGE
e: /Users/nm/Dev/MyApp/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/utils/CameraCharacteristicsUtils.kt: (77, 26): Unresolved reference: lower
e: /Users/nm/Dev/MyApp/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/utils/CameraCharacteristicsUtils.kt: (77, 46): Unresolved reference: upper
e: /Users/nm/Dev/MyApp/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/utils/CameraCharacteristicsUtils.kt: (77, 64): Unresolved reference: lower
FAILURE: Build failed with an exception.

What went wrong:
Execution failed for task ':react-native-vision-camera:compileDebugKotlin'.

I then also upgraded Android Studio from 4.0 to 4.1.2 but I had the same buildings errors.
Looking into the App example code in example folder I see that you have the following lines in the project build.gradle.
RNNKotlinVersion = "1.3.61"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.30"
I dont't know if I need them but I tried to add them in my build.gradle project file but I am still experiencing the same build errors.
Here is my updated build.gradle:
buildscript {
ext {
RNNKotlinVersion = "1.3.61"
buildToolsVersion = "29.0.2"
minSdkVersion = 21
compileSdkVersion = 29
targetSdkVersion = 29
googlePlayServicesVersion = "17.0.0"
}
repositories {
google()
jcenter()
}
dependencies {
classpath("com.android.tools.build:gradle:4.1.2")
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.30"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenLocal()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
}
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
google()
jcenter()
maven { url 'https://www.jitpack.io' }
}
}
And my updated gradle.wrapper.properties:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-6.5-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
I don't know what I am missing !

Getting the same problem
BUILD FAILED in 37s

   39 actionable tasks: 3 executed, 536 up-to-date
e: /home/afi/Documents/Project/Whale/whale/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraViewModule.kt: (152, 74): Unresolved reference: R
e: /home/afi/Documents/Project/Whale/whale/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraViewModule.kt: (153, 53): Unresolved reference: CONTROL_ZOOM_RATIO_RANGE
e: /home/afi/Documents/Project/Whale/whale/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraViewModule.kt: (188, 46): Unresolved reference: lower
e: /home/afi/Documents/Project/Whale/whale/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraViewModule.kt: (189, 46): Unresolved reference: upper
e: /home/afi/Documents/Project/Whale/whale/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/CameraViewModule.kt: (243, 51): Unresolved reference: upper
e: /home/afi/Documents/Project/Whale/whale/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/utils/CameraCharacteristicsUtils.kt: (73, 92): Unresolved reference: R
e: /home/afi/Documents/Project/Whale/whale/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/utils/CameraCharacteristicsUtils.kt: (74, 38): Unresolved reference: CONTROL_ZOOM_RATIO_RANGE
e: /home/afi/Documents/Project/Whale/whale/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/utils/CameraCharacteristicsUtils.kt: (77, 26): Unresolved reference: lower
e: /home/afi/Documents/Project/Whale/whale/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/utils/CameraCharacteristicsUtils.kt: (77, 46): Unresolved reference: upper
e: /home/afi/Documents/Project/Whale/whale/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/utils/CameraCharacteristicsUtils.kt: (77, 64): Unresolved reference: lower

Finally I found a way to build !!!! :)
I needed to update SDK version from 29 to 30 in my project build.gradle:
Now my build.gradle looks like:
uildscript {
ext {
buildToolsVersion = "30.0.0"
minSdkVersion = 21
compileSdkVersion = 30
targetSdkVersion = 30
googlePlayServicesVersion = "17.0.0"
}
repositories {
google()
jcenter()
}
dependencies {
classpath("com.android.tools.build:gradle:4.1.2")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenLocal()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
}
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
google()
jcenter()
maven { url 'https://www.jitpack.io' }
}
}
And my gradle.wrapper.properties:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-6.5-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

Oh, that should be a requirement. I've added that to the documentation, thanks for mentioning!

Thanks !
I think it may be good also to add in the troubleshooting page that it is also needed to update the following Gradle versions to avoid ktlint build issue (same versions as in your app example  :

update Gradle version to 6.5 on Gradle-wrapper.properties file:
distributionUrl=https://services.gradle.org/distributions/gradle-6.5-all.zip

update Gradle plugin version to 4.1.2 on build.gradle file:
classpath("com.android.tools.build:gradle:4.1.2")

Also minSdkVersion needs to be 21 "in build.gradle file in order to be able to build (we need at least the same minSdkVersion as react-native-vision-camera module):
minSdkVersion = 21


Clicking the text of a checkbox menuitem has no effect

Click the label "Text area" in the MenuItem below does not toggle the checkbox state, it just closes the menu.
You have to click in the icon area to toggle state.
<Menu>
  <MenuItem Header="Text area">
	<MenuItem.Icon>
	  <CheckBox IsChecked="{Binding State}"/>
	</MenuItem.Icon>
  </MenuItem>
</Menu>

I would expect a click anywhere in the menu item to toggle the state.

How would you handle a click then?

It would toggle the Checkbox IsChecked state.
I would expect it to work like a WPF menu
<MenuItem IsCheckable="true" IsChecked="{Binding State}>
As a workaround I have to add a command as well which is not very nice
<Menu>
  <MenuItem Header="Text area" Command="{Binding ToggleState}">
	<MenuItem.Icon>
	  <CheckBox IsChecked="{Binding State}"/>
	</MenuItem.Icon>
  </MenuItem>
</Menu>

Under WPF is the Command firing each time you click on the text when IsCheckable=true?

In the WPF example there is no Command, the IsChecked binding just toggles the "State" in the view model.
My "ToggleState" command just duplicates that binding (State = !State) to make the menu item work as expected.

Okay from the WPF source it looks like when IsCheackable=true IsChecked is toggled. Then a click event is raised. So Commands and Click event subscriptions are always executed.

And I suppose the Checkbox moves to the ControlTemplate.
The WPF implementation like a neater solution

Have there been any developments in this area?
The CheckBox Icon approach is now unusable with FluentAvalonia

Looks like this has still not been implemented. It would be nice if MenuItem's could have an IsCheckable behavior similar to WPF.

You can, however, implement it yourself.
MenuItem viewMenu = new() { Header = "View" };
var treeWindowMenuItem = new MenuItem
{
    Header = "Tree Window",
    Command = viewModel.ToggleTreeWindowCommand, // Bind to the RelayCommand
    Icon = new Path
    {
        Data = PathGeometry.Parse("M0 12.116l2.053-1.897c2.401 1.162 3.924 2.045 6.622 3.969 5.073-5.757 8.426-8.678 14.657-12.555l.668 1.536c-5.139 4.484-8.902 9.479-14.321 19.198-3.343-3.936-5.574-6.446-9.679-10.251z"), // Checkmark
        Stretch = Stretch.Uniform,
        Fill = Brushes.Black,
        StrokeThickness = 1,
        IsVisible = viewModel.IsTreeWindowChecked // Bind to ObserableProperty
    }
};


Missing some styles when install slick-carousel as bower component

Hi! I've noticed that slick.css is missing styles for arrows and dots (and doesn't matches the file from cdn - https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.3.15/slick.css

You have to add slick-theme.css as well
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick-theme.min.css" />


Space behavior QoL updates for Han shape-based layout

Separate the space behavior of the new nlp providers and the regular Latin ones, and expose setting nlp providers to the subtype editor. These allow Latin layouts and the new layout to coexist.
TODO: switching subtypes with different nlp providers currently does not reset suggestions, so you would still have suggestions from another language until you type or move your cursor.

Note: also included is avoiding suggestions when the composed text is empty (instead of suggesting characters for a, aa, aaa, etc.)

This would better as a separate PR

You mean the one where avoiding suggestions when composing text is empty?

This would better as a separate PR

You mean the one where avoiding suggestions when composing text is empty?

Sorry for not being clear. I'm new to GitHub's review process.
I meant the suggestion provider UI

Updated with suggested changes. The editor change will be another one, although I couldn't get it to work now that the db is dependent on primaryLocale.variant

Updated with suggested changes. The editor change will be another one, although I couldn't get it to work now that the db is dependent on primaryLocale.variant

Did you try with the zh-RC-zhengma layout?

Hello again Waelwindows, is there anything I can help with getting your PR merged? Would making a Chinese layout be helpful for example? I really appreciate your work and would love to see this update on the main repo soon!

Adding more layouts would be great!
Wish I could work more on FlorisBoard but as uni student, exam season never seems to be away for too long :sweat_smile:.
For now, I think it's good to get other tables from fcitx5-tables-extra as the data from there is from the public domain (or so they claim).
I should probably do that for zhengma as well, since I got that from ibus-zhengma which i'm not sure uses public domain tables

I have looked into the PR and it seems that we've forgotten to invert the condition :joy:.
Although there's another problem now, after committing the suggestion, a space is added when you write a letter. Gotta look into that.

Got it, kinda weird that I had to negate all uses of it, perhaps the meaning was flipped in my implementation?

Oops, sorry I didn't see this one, lol.
Yeah, it used to be isCJK which would indeed be !supportAutoSpace.

Adding more layouts would be great!
Wish I could work more on FlorisBoard but as uni student, exam season never seems to be away for too long sweat_smile.
For now, I think it's good to get other tables from fcitx5-tables-extra as the data from there is from the public domain (or so they claim).
I should probably do that for zhengma as well, since I got that from ibus-zhengma which i'm not sure uses public domain tables.
Perhaps the above as different PRs? Hopefully i'll respond to them on time

Got it, I'll try some of these when I have time.


Batch report - Add group Id

Add a column with group Id in Table 1.

group id replaces run id in Table 1 in the batch report. See issue #28


No failure when a javaType class already exists

Hi,
I just realised that two schemes of my project were referencing the same javaType class (with different properties) though no exception was raised during the generation of the classes. Is that expected ? If yes, how can I prevent a referenced javaType class to be generated if it's already been generated from another scheme.
Thanks.

What version of jsonschema2pojo are you using?

It's the 0.4.0 version.

If you use 1.0.0-alpha4, you will find that javaType has now been split into javaType and existingJavaType. If you want to influence the name of a new type, you use javaType, if you want to refer to an existing type from the classpath, you use existingJavaType. This should solve problems like the one you are having, because you explicitly choose which scenario is correct.
So if you use 1.0.0-alpha4, using javaType to refer to a class that has already been generated should be an error. I have not tried this but I believe it is how 1.0.0-alpha4 will function.

Does the last non-alpha version already include existingJavaType ?

Closing this as it's solved in the current alpha release and will be available in 1.0.0.


Idea: Add documentation for v-bind="options"

I found it non-obvious to use v-bind="options". It may be a good idea to add documentation for that.

This is the basic usage of the vue framework, can avoid writing too many properties on the template.
Related documents: https://vuejs.org/v2/api/#v-bind


refactor: use bundle id instead of app name user-agent

Closes: https://github.com/customerio/issues/issues/6983
Complete each step to get your pull request merged in. Learn more about the workflow this project uses.

[ ] Assign members of your team to review the pull request.
[ ] Wait for pull request status checks to complete. If there are problems, fix them until you see that all status checks are passing.
[ ] Wait until the pull request has been reviewed and approved by a teammate
[ ] After pull request is approved, and you determine it's ready add the label "Ready to merge" to the pull request. A bot will squash and merge the pull request for you after the label is added.

Pull request title looks good 👍. If this pull request gets merged, it will not cause a new release of the software.
Example: If this project's latest release version is 1.0.0. If this pull request gets merged in, the next release of this project will be 1.0.0.
To merge this pull request, add the label Ready to merge to this pull request and I'll merge it for you.

:tada: This PR is included in version 1.1.0-alpha.1 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

:tada: This PR is included in version 1.1.0-beta.1 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

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


is user name properly set

the field "user"
https://github.com/CMSCompOps/WmAgentScripts/blob/0c45578c1171700953e090b9ddc5345115e0b2e5/Unified/actor.py#L581
does not seem to be set @dabercro ; what is the alternative field ?

SSO hasn't been integrated yet. The plan was to get the user from there. For now, there is no user field set in the MongoDB.
If everything is otherwise working for you, we can make another push to wrap that part up.

the user has been set properly at some point, don't you have the user name registration in the console itself? being able to see who took the action is useful IMO
FYI @sharad1126

Ah, I got confused because of which repository this was opened for. I think
that was only set up for the old console. Are you reading actions from the
MongoDB or the old web API?
On Wed, Dec 4, 2019, 4:25 AM vlimant<EMAIL_ADDRESS>wrote:

the user has been set properly at some point, don't you have the user name
registration in the console itself? being able to see who took the action
is useful IMO
FYI @sharad1126 https://github.com/sharad1126
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/CMSCompOps/wtc-console/issues/32?email_source=notifications&email_token=AB4XBBXUDQ3BKXSNJ6UKAS3QW6ARHA5CNFSM4JNIBKNKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEF4PNGI#issuecomment-561575577,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AB4XBBRWBUHC27UZTIVFUKTQW6ARHANCNFSM4JNIBKNA
.

old api. this might indeed be against the wrong repo ; apologies for the confusion.

Ah okay. I'm traveling right now, but I'll take a look at the old API when
I get back.
On Wed, Dec 4, 2019, 10:21 AM vlimant<EMAIL_ADDRESS>wrote:

old api. this might indeed be against the wrong repo ; apologies for the
confusion.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/CMSCompOps/wtc-console/issues/32?email_source=notifications&email_token=AB4XBBSOL75FMAPDSDQJMSTQW7DHNA5CNFSM4JNIBKNKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEF5MAJA#issuecomment-561692708,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AB4XBBQLCGB3XWSCBHKN6TDQW7DHNANCNFSM4JNIBKNA
.

Okay, I found the problem. It should be fixed now, so actions submitted after today will have the user parameter again.

better


Fix typo in man/ocitools-generate.1.md

Fix the typo in the manual doc for --mount option inside man/ocitools-generate.1.md.

You're missing a Signed-off-by [1,2].  Otherwise afcb6018 looks good
to me.

@wking , thanks for your help.
Please give it a new look.

LGTM. Thanks!


A7P1 passing locally

Hi Dan, thanks for the feedback. I had added the oops analysis at https://github.com/cu-ecen-aeld/assignment-7-traptibalgi/blob/main/faulty-oops.md.
I missed the instructions where it needed specified the path to store it in, apologies!


Fix Linux errors

Package.swift file had wrong name for SpeechToTextV1Tests to be excluded
Random number generation in Linux

Resolves #533

 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.


std.traits now has hasAttribute to simplify checking for the presence…

… of UDAs

I was annoyed that the following didn't work, as it seems like it should just from the name of hasAttribute:
@("test")
void test() {}

void main()
{
	assert(hasAttribute!(test, "test"));
}

Perhaps a better name would be hasAttributeOfType.

I changed the name. The issue here is that I could have written a hasAttribute that accepted types or values, and it's not that hard. The issue is passing in a primitive type, because weirdly enough you can't pass an int as a template alias parameter.
The other alternative is a hasAttribute that takes parameters that are types or values, unless they're primitive types, and a hasPrimitiveAttribute for those.

The issue is passing in a primitive type...

template test(alias i)
{
	enum test = i == 0;
}

void main()
{
	assert(test!0);
}

This is similar to #3356

@MetaLang In your example, test!0 works, but test!int doesn't.

@jcrapuchettes It's nearly identical. This is what happens when we talk at DConf then the both of us submit pull requests. I think the other one is better actually, I'm closing this one.

Ah, I see what you mean. You need to do the following:
template test(T...)
if (T.length == 1)
{
    //T can be anything in here
}


How can I make a Python script standalone executable to run without ANY dependency

https://stackoverflow.com/questions/5458048/how-can-i-make-a-python-script-standalone-executable-to-run-without-any-dependen

Create a single executable from a Python project
https://stackoverflow.com/questions/12059509/create-a-single-executable-from-a-python-project


Feat: canteen user profile

Describe the feature
As we know when we goes in the login as a canteen user and after  login we get in section page but we want to store canteen user profile and make a profile page for canteen user.
So I am implementing the backend for this to store the canteen user profile after making api for this i will intergrade with frontend as well it takes some time to implement.
Add ScreenShots
canteen register page:

after login :

But we did not make a profile page from user by which he can update the things and check the breakfast,lunch and dinner info.
Record

[X] I agree to follow this project's Code of Conduct
[X] I'm a GSSOC'24 contributor
[X] I want to work on this issue

please assign me this issue 😁

Liked the solution , assigned you the issue


[Bug Report] Tokenization in test_prompt in utils.py sometimes causes IndexError when prompt+answer is tokenized differently together vs separately

in utils.py, function test_prompt the whole prompt+answer string is tokenized, then we get the tokens in string form from each part separately
tokens = model.to_tokens(prompt + answer, prepend_bos=prepend_bos)
prompt_str_tokens = model.to_str_tokens(prompt, prepend_bos=prepend_bos)
answer_str_tokens = model.to_str_tokens(answer, prepend_bos=False)

the issue is, later in the code we get lengths of the latter two
prompt_length = len(prompt_str_tokens)
answer_length = len(answer_str_tokens)

and these lengths are used to index over the tokens tensor:
for index in range(prompt_length, prompt_length + answer_length):
        answer_token = tokens[0, index]

so if prompt_length+answer_length happens to be longer, because the model tokenized them differently than it would the whole prompt+answer string, especially when we set prepend_space_to_answer to False, we get IndexError
e.g.
 IndexError: index 15 is out of bounds for dimension 1 with size 15

When I'll have more time I can check what approach would be better:

indexing using the length of tokens
tokenizing the sum of prompt_str_tokens and answer_str_tokens (feels weird)

@jknowak thanks for finding this!
I'd love you/a contributor to make a PR that:

[ ] Makes a failing test demonstrating this issue and expecting correct behavior.  (one commit)
[ ] Make a commit fixing the issue/making the test pass (one commit)
[ ] Explore whether there are any similar issues around this and if so fixing/documenting them.

If you have questions, can discuss more here. Existing tests should provide examples of the style we expect and I'll give feedback if needed.


geode binary unable to find shared library

when i try to run geode on ubuntu it gives the following error:
geode: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory
i didn't build from source i just used the linux.zip file

the issue was with my Ubuntu version, too old, after i updated to Ubuntu 22 and then updated openssl it worked


Scan the use of slug in decksite

I switched to deck_id in a lot of places but did not do an exhaustive sweep. I may have broken someting.
tappedout decks still have slugs which we should probably store.

We're good here now. That code got eradicated.


add a way to pass an input control to dynamic-tags (e.g. for autocomplete)

This function solves the problem (这个功能解决的问题)
being able to use dynamic-tags in more situations
Expected API (期望的 API)
probably an input slot?

You can use https://www.naiveui.com/zh-CN/os-theme/components/auto-complete.

yes but how do I pass it to n-dynamic-tags?

I get what you meant now.


Cache Erlang (OTP) to local instead of re-downloading everytime

Everytime I run MIX_ENV=prod mix release, it downloads OTP from github (for win64):
16:07:33.233 [info]  Downloading replacement ERTS: https://github.com/erlang/otp/releases/download/OTP-24.0.6/otp_win64_24.0.6.exe

which takes much time (in my location). Would it be better to cache it somewhere?

This is an excellent suggestion and is something that we should support. We have a story tracked internally for this, but haven't prioritized it yet because it hasn't been enough of an issue from our location. I'll chat with @ashea-code in the morning about it.
Thank you!

Hey there! +1 on this, I'm also keen on adding an option that allows the ERTS location to be passed in as a local path, so if you have a custom build you'd rather source, we can use that as well.

Hey there! we just merged in a local ERTS cache which should solve this for you!
If you run into any more issues feel free to re-open the issue/create a new one.

Just retried the last code and confirmed that the cache works great.


SSR friendly constants

Hey, just did some test with upcoming bootstrap 3.2 since it has fixed problems in their javascript with SSR node environment.
https://github.com/twbs/bootstrap/pull/34989
Noticed you're using HTMLElement as prop type in dropdown and it's not available on node environment so you need to override it:
export const HTMLElement = typeof window !== undefined
 ? window.HTMLElement
 : class HTMLElement extends Object {}

in bootstrapVue:
https://github.com/bootstrap-vue/bootstrap-vue/blob/1d59417df6869e2b04c651f6caeed9474cf14a84/src/constants/safe-types.js
btw. thanks for doing this. Gonna contribute something in the future.

resolved in #142

You don't have to import them to type typescript. HTMLElement is type in typescript, not an object (that is missing from node).


Fsutil behavior disablelastaccess

I am writing a script to optimize computers for a specific application, and the vendor recommends disabling last access updates on the volumes. However when I run the command "fsutil behavior set disablelastaccess 1", Which according to the docs should disable it, the output is "DisableLastAccess = 1 (User Managed, Enabled). The registry value is changed to 0x80000002. Is this command in fact disabling or enabling it? Which is correct, the system output or the documentation?

Met the same situation.

We hugely appreciate your contribution, feedback, and support to our technical documentation.
We’ve phased out GitHub Issues on this repository as the feedback mechanism for content and have replaced it with a new feedback system. For more information see, Content User Feedback. As part of this rollout, we are migrating your issue where our team will use your comments to improve the documentation experience. Unfortunately, this does mean you won't be able to access this issue after the migration is complete.
All issues will be migrated by Thursday 29th August 2024.
Once again, thank you for your valuable feedback, we hope you’ll continue to contribute using our new feedback system.


[4.0] weird focus behavior on window with child windows

Godot version
v4.0.stable.official [92bee43ad]
System information
Fedora Linux 37 x86_64, Kernel: 6.1.13-200.fc37.x86_64, Intel i7-4710HQ (with integrated GPU)), Wayland
Issue description
When focusing on the child window, then on a different app (e.g. firefox), and then on the main window, the main window is very laggy. I have to re-focus on the child window and then on the main window for it to return to normal.
Here's a short video showcasing the issue: https://cdn.discordapp.com/attachments/477544613511692358/1087312133408170024/Screencast_from_2023-03-20_11-48-28.webm
Steps to reproduce
Have a project with multiple windows,
Focus on a child window, then on a different app, and then back on the main window
Minimal reproduction project
https://github.com/OsakiTsukiko/lishogi-client
commit: 9f3fcd15550e992b02f4150c66524959c6679397
branch: main
(altho, you need an account on lishogi.org to use it)

I'll test later with a more generic project and send it here

I have to re-focus on the child window and then on the main window for it to return to normal.

This sounds like the FPS limiter going haywire. You may be able to work around this issue by setting Unfocused Low Processor Mode Sleep Usec to 6900 (same value as Low Processor Mode Sleep Usec).


How is packer.pkg made?

Could you provide steps for someone to recreate packer.pkg and setupsshlogin.pkg from scratch? I would like to be able to recreate as much of this as possible from scratch.

If you're wanting to use this packer template and change the username and password combo see this part of the readme. https://github.com/trodemaster/packer-macOS-11#customize-username-password-hostname--ssh-key
The packer.pkg is created using this tool https://github.com/gregneagle/pycreateuserpkg . Changing the username and password in this package will cause breakage with the packer to build as the user/pass combo is needed in other parts of the build process.
The setupsshlogin.pkg is an installer package with a post install script. Payload for that is https://github.com/trodemaster/packer-macOS-11/blob/main/scripts/setupsshlogin.sh
Building and debugging these packages is quite painful. I used this tool to create the setupsshlogin pkg. http://s.sudre.free.fr/Software/Packages/about.html


MSL: Add support for Vulkan 1.2 (SPIR-V 1.4 + SPIR-V 1.5)

Core Vulkan 1.2 requires support for SPIR-V 1.4 and SPIR-V 1.5, which require the capabilities listed below.
Capabilities below that are not crossed out require investigation and development.
Capabilities below that are crossed out are either already provided by SPIRV-Cross, or are associated with specific non-core or optional Vulkan extensions, and such functionality would be addressed when adding support for those extensions.
SPIR-V 1.4:

Add OpPtrEqual and OpPtrNotEqual to compare pointers.
Add OpPtrDiff to count the number of elements between two element pointers.
Add OpCopyLogical to copy similar but unequal types.
Add SignExtend and ZeroExtend image operands.
Add the UniformId decoration, which takes a Scope operand.
Allow OpCopyMemory and OpCopyMemorySized to have Memory Operands for both their Source and Target.
SPV_KHR_no_integer_wrap_decoration.

Already supported:

~SPV_KHR_float_controls (Vulkan VK_KHR_shader_float_controls).~

Non-core or Optional:

~SPV_GOOGLE_hlsl_functionality1 (Vulkan VK_GOOGLE_hlsl_functionality1).~
~SPV_GOOGLE_decorate_string (Vulkan VK_GOOGLE_decorate_string).~

SPIR-V 1.5:
Already supported:

~SPV_KHR_8bit_storage (Vulkan VK_KHR_8bit_storage)~
~SPV_EXT_descriptor_indexing (Vulkan VK_EXT_descriptor_indexing)~
~SPV_EXT_shader_viewport_index_layer (Vulkan VK_EXT_shader_viewport_index_layer)~
~SPV_EXT_physical_storage_buffer (Vulkan VK_KHR_buffer_device_address) and SPV_KHR_physical_storage_buffer (Vulkan VK_KHR_buffer_device_address)~

Non-core or Optional:

~SPV_KHR_vulkan_memory_model (Vulkan VK_KHR_vulkan_memory_model)~

A file of CTS tests for the corresponding Vulkan VK_KHR_spirv_1_4  extension is here:
spirv1p4.txt.zip

This enhancement is now functionally substantially complete. Closing now.
There are a few outstanding CTS failures to be fixed (including by PR #2027 and issue  #2026), but they can be dealt with separately through posting other issues and fixes.


Help resolve starting the dotnet console issue

Problem encountered on https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/create
Operating System: windows
After installing the dotnet-sdk-3.0.100-win-gs-x64.exe then i went to my command prompt and checked to be sure it installed properlu shich was ok the i issued the command
dotnet new console -o myApp
then i get an error message  failed to load the hostfxr.dll even though it was found but loading it failed
please help

@jeffschwMSFT

@judeabolo this sounds like you are trying to run a 32bit .NET Core application with only 64bit .NET Core installed.  The error message is not very helpful and we are aware of that.
Can you provide the exact step that failed and the output?
cc @vitek-karas

Closing out due to lack of response; please re-open if you're still hitting this issue and can provide more detail.


Remove deprecated method

Signed-off-by: Niels Thykier<EMAIL_ADDRESS>

Last usage is being removed as a part of https://github.com/dcsaorg/DCSA-Event-Core/pull/347


cmd/bosun: Limit unknown emails sent in a single check

This helps limit unknown spam when something goes bad. If there are more than Threshold email groups in a single check run, it will roll the remaining unknown emails into a single email that lists all the groups and their alert instances.

Note: Fixed spelling of "suppressed" in the code.


Testing both Python 2 and Python 3

Currently only Python 2 tests are running because tox and travis are misaligned.  Lessons learned in #137

Hey @cclauss thanks for that! I didn't realize we only tested for one single python version all the time.
Appreciate your contribution!


[PE-D][Tester B] Allows staff to be added with only 7 digits for contact number

Assuming the standard convention for singapore contact numbers, the addstaff function does not check for contact number length

Labels: severity.Medium type.FeatureFlaw
original: ncmathan/ped#6

Requires feature change, not a bug.


Model Weights

Thank you for sharing your work.
I've tried to download the models stored in the server: https://pjlab-gvm-data.oss-cn-shanghai.aliyuncs.com/internvideo/distill/
It seems that they are not available anymore. Would it be possible to have it stored on google drive, or another location?
Thank you.

Sorry, due to technical issues, the model is temporarily unavailable for download. We expect this to be resolved within a few weeks.

hello! is it possible to put them in some kinds of drive such as Google drive? I was in the middle of a project and unfortunately didn't saved the model weights considering I would have access later. I don't have resources to train it from scratch. It would be very helpful if you can provide them.

hello! is it possible to put them in some kinds of drive such as Google drive? I was in the middle of a project and unfortunately didn't saved the model weights considering I would have access later. I don't have resources to train it from scratch. It would be very helpful if you can provide them.

Unfortunately, I no longer have access to the model weights since I left my previous job. My former colleague is currently working on resolving this issue. It appears that the frequent downloads led to us running out of the bandwidth quota.

thank you for your reply!

Upload the weights to hugging face. Have updated the link in the model link sheet


Drop-down list with double entries

The items in the "Heavy Metal" list appear twice in following cube https://int.visualize.admin.ch/en/v/wKxC-xJfKevw.
Steps to reproduce :

Open: https://int.visualize.admin.ch/en/v/wKxC-xJfKevw
Show the "Heavy Metals" filter
Each item appears twice
Copy and edit the visualization
Edit Filter "Heavy Metal"
Each item appears twice

cube: https://int.cube-creator.lindas.admin.ch/app/cube-projects/cube-project!!ubd006601-bodenbelastung-durch-schwermetalle-r5zqggxxgl9/csv-mapping, which uses a Shared Dimension.
The following checks have already been performed:

Shape is present
The list of possible items in the dimension looks clean https://s.zazuko.com/NH4NYQ
The history of the individual versions looks clean https://s.zazuko.com/3sG141V

Screenshots or video

Environment (please complete the following information):

Visualize environment and version: v3.27.1 [8c3e7f9]
Browser and version [e.g. Chrome 107]

Additional context
Add any other context about the problem here.

Hi @ortnever, thanks for reporting the issue – it looks like a problem with the data, or a situation we haven't anticipated in Visualize yet.
Basically, we expect a dimension value to have up to one schema:identifier parameter, as otherwise we wouldn't know which one we should show in the application. Currently, in the dataset from the issue, we have two identifiers applied to every value, which leads to the duplication we see in the filters (see slightly adjusted SPARQL query here).
Is the double-identifier situation something expected? If so, we would need to think about how to handle such cases, also from the design side. If not, updating the data to only contain a single identifier would solve the situation.
Let me know what you think about this @ortnever 🙏
cc @sosiology

@bprusinowski, for the moment we're going to fix the Shared Dimension. We'll get back to you if this becomes a requirement for Visualize later on.
Thank you

Thanks for the feedback @ortnever! Let's keep this in mind for the future 👍

Please reopen the issue if the problem still appears after fixing the Shared Dimension 🙏

@bprusinowski once you switch to a query spanning over multiple dimensons and you receive a result w/o list i.e. cube > dimension > element > properties this issue would be gone...

Thanks for your input Thomas.
Does this mean that we don't necessarily need to solve the problem of 2 identifiers per element?
I thought it would be cleaner to modify the SD and use the CAS number as identifier and put the abbreviation in schema:alternateName, as we've done for other SDs. However, I noticed that there wasn't always a CAS number for each element.

@ortnever from my point of view it would be best to update the shared dimension, as the improvement @Rdataflow mentions would not be tackled before the PROD release 👀
Generally, we could also solve this right now, but having more than one identifier isn't something we expect, and the problem is more the conceptual approach to such situations, and not the technical "fix" of selecting e.g. the first identifier in case there are multiple 👍

@ortnever still prefer you go for 1 identifier.
A. You dont need to wait for a next release...
B. It is less duplicate information as the cemical element is in alternate Name still.


Add uniform compile error info

when a shader doesn't compile, shdr says so and points to where it failed. There should be similar functionality for the javascript eval()

Added some basic error messages. We need more robust error checking.


Standardizes documentation for cf-typography

Standardizes the documentation for cf-typography including how things are titled, how documentation is ordered and other fixes.
Removes unneeded documentation for branded bullets.
Removed unneeded screenshot from older documentation.
Adds a table of contents.
Many fixes to markup.

Testing

Preview the markup in your favorite markup previewer.

Review

@contolini
@jimmynotjim

Checklist

[ ] Changes are limited to a single goal (no scope creep)
[ ] Code can be automatically merged (no conflicts)
[ ] Code follows the standards laid out in the front end playbook
[ ] Passes all existing automated tests
[ ] New functions include new tests
[ ] New functions are documented (with a description, list of inputs, and expected output)
[ ] Placeholder code is flagged
[ ] Visually tested in supported browsers and devices
[ ] Project documentation has been updated (including the "Unreleased" section of the CHANGELOG)

:+1:

👍


⚠ Bofrost.de has degraded performance

In 05a7412, Bofrost.de (https://www.bofrost.de) experienced degraded performance:

HTTP code: 200
Response time: 1170 ms

Resolved: Bofrost.de performance has improved in 1e74a64.


Add Bookmark buttons gone

Latest testflight has no way to add either issues, prs or repos to bookmarks

Bug Report Dump (Auto-generated)

Version 1.15.0<PHONE_NUMBER>)
Device: iPad7,3 (iOS 11.1.2)
TestFlight: true

Working fine on my phone, same build 🤔
Sent with GitHawk

Checked on both phone and iPad, neither work

The little flag icon next to the triple dot is to bookmark! 😄
Sent with GitHawk

Can I completely remove an issue from existence? My brain...

iPad specific?
 We changed from button to bookmark navigation item

But the thing about it is that I was well aware of that. I’ve been using the bookmark button, but for some reason yesterday I totally overlooked it. 😅🤷♂

Re tips: that wouldn’t hurt, want to create a separate issue for that @Sherlouk?


Improvements on dbt2-pgsql-build-db

The new -f flag can be used to execute vacuumdb in FULL mode. The
default mode is now FREEZE: performing vacuum full requires a
huge amount of time and is not really necessary.
The -j option flag can be used to run the vacuumdb utility with N
parallel jobs. Default value is 1.

Sounds good.  Only question I have is whether we should default to the number of detected processors for parallelism.  Something similar to what is done here: https://github.com/osdldbt/dbt2/blob/main/src/scripts/pgsql/dbt2-pgsql-load-db#L76

I agree, enabling parallelism by default would be interesting.
vacuumdb parallelism triggers one VACUUM operation per table, in parallel. Knowing that the database contains 9 tables, setting the -j value to a higher value than the number of tables won't give any additional benefit. So, if we want to  go that way, we should limit the number of jobs to 9.
vacuumdb parallelism was introduced in Postgres 9.5. What do we want to do with previous versions?

Sounds good regarding limiting the parallelism.
I'm not sure about how best to handle vacuumdb...  Thinking outloud:
If we continue to use the cli, then it's trivial to check the cli's version.  But that requires the cli to be at least v9.5.
The scripts assume at this point it can connect to the database, so we could query the database server version and issue the vacuum with SQL.
The latter seems the smarter way to do it...
For what it's worth, the scripts were originally designed with the assumption that the installed binaries/libraries are matching the server version.
In this era of DBaaS, it seems like we should query the database instead of checking the installed binaries.

Merged with additional update to the Changelog. 70e43bba3d52c34d0c59e356c9850512fe7b57e8


Revert "Bug 2293257: [release-4.16-compatibility] DFBUGS-21: Fix CVE-2024-28863 for node-tar issue"

Reverts red-hat-storage/odf-console#1479

Missing acks hence the revert

/lgtm


Move to use prepared index file instead of runtime creation of index file

The index file is created at startup and then used in memory, but after scanning, we can create the index file and then use it "as is" within the code.

Deployed to glitch.com


Support for PICO-8 as Lua variant

Description
Treats PICO-8 fantasy console files (.p8) as Lua.
A search for pico8 extension:p8 on GitHub shows hundreds of repositories using this extension. Pico-8 stores information describing the code, graphics and sound for a game in a single .p8 text file. Due to the nature of Pico-8, the sound and graphics information is typically somewhat terse and also not particularly human readable - the main feature of reading a pico8 file is to examine Lua code. Therefore it makes sense to give .p8 files Lua syntax highlighting.

Checklist:

[X] I am associating a language with a new file extension.

[X] The new extension is used in hundreds of repositories on GitHub.com

Search results for each extension:

https://github.com/search?utf8=✓&q=pico8+extension%3Ap8&type=Repositories&ref=advsearch&l=&l=

[X] I have included a real-world usage sample for all extensions added in this PR:

Sample source(s):

treegen.p8

Sample license(s): MIT

[ ] I have included a change to the heuristics to distinguish my language from others using the same extension. No, not sure what I would do for this!

P.S. Technically, if I were to denote exactly which part of the .p8 file needs to be interpreted as Lua, I could use JavaScript and say:
// everything inside the __lua__ section
require('fs')
  .readFileSync('./file.p8')
  .toString()
  .split('__lua__\n')[1]
  .split('__gfx__')[0]

However I'm not sure what the point would be, since the remainder of the file is not a human-readable syntax.

@pchaigno Thanks! Do you mean like this?

Yep :-)

@lildude thank you! I was wondering, what sort of process happens before this change goes into production on GitHub?


Add Social Login - Like Facebook, Google

Motivation
To make Libra Wallet look & feel like real wallet I think we should have at least Social login or email login, but since we doesn't store any user datas on our server right now, so email login is not possible, may be the best choice is Facebook and Google login as it quite easy for user because other popular services have this feature as well.
Plan

Social login should be configured on/off (that allow forked project can disable this feature).
When social login config's on, we enforce everyone to sign in first before use this wallet.
User can login on another smart phones or devices with the same social id, but the mnemonic phrase user need to backup by themselves (that correctly don't have this feature yet).
May be if we done this feature we can use this for https://github.com/kulapio/libra-wallet-poc/issues/23

Still watching....but am working too...the right time to come in with the Nigerian narrative to all these...

I'm going to implement google sign in, any suggestions where to put google sign in button on the screen?

@suraneti no idea for now, just try put some and lets discuss after that