beginPublish - maximum size

I would like to send a message about 120KB. However, I noticed that buildHeader function takes length as uint16_t which limits the maximum size. I believe there are other areas such as MAX_HEADER_SIZE need to change to accommodate a larger message size. Any recommendations/ hints on all the changes required?

This bug makes it impossible to send anything above 64K messages, even with beginPublish/write/endPublish

This bug makes it impossible to send anything above 64K messages, even with beginPublish/write/endPublish

It looks as though it's enough to change the parameter to uint32_t as in
size_t PubSubClient::buildHeader(uint8_t header, uint8_t* buf, uint32_t length)

It looks as though it's enough to change the parameter to uint32_t as in
size_t PubSubClient::buildHeader(uint8_t header, uint8_t* buf, uint32_t length)

michaelotto - could you explain me how are you using different buffer instead of internal? I plan to send json formatted payloads from esp8266 to mosquitto broker (on RB Pi4) containing ca 50 different values and its tags so i'm affraid buffer size issues:/ Thank you!

With the beginPublish/write/endPublish, you're automatically not using the internal buffer, but writing the MQTT message yourself. Don't worry if you're just updating values and not sending binary data, 64KB is plenty for those kinds of messages.

thanks! however it think now the problem is not in PubSubClient lib but ArduinoJson lib - trying to figure out how to work out json object buffer limitation. Still mystic for me:/ the bigget issue is breaking connection with broker. Tested today - 1000 times in 7 hours:/

If you're just sending JSON via Arduino, why not just build the strings with the data yourself (if you know how JSON is structured). No need for the pain to construct this with ArduinoJson IMHO. I just use ArduinoJson for parsing JSON in the MQTT callback.

hi @michaelotto
thanks for your trick .
I changed the parameter to uint32_t as in (in PubSubClient.cpp and PubSubClient.h)
size_t PubSubClient::buildHeader(uint8_t header, uint8_t* buf, uint32_t length)
And I used the following function to send large messages
void PublishMessage(String TopicName , String json_str){

  //Split string and send
  int cut = 128;  //To split the actual size sent
  int json_str_len = json_str.length();  //Total data length

  if (json_str_len > cut){
    //Start sending long file parameters are subject, length, whether to continue
    mqtt.beginPublish(TopicName.c_str(), json_str_len, true);
    int count = json_str_len / cut;
    for (int i = 0; i < (count-1); i++){
      String Temp = json_str.substring(i * cut, (i * cut + cut));
      mqtt.print(Temp);
    }
    mqtt.print(json_str.substring(cut * (count - 1)));
    //End sending text
    mqtt.endPublish();
  }
  else{
    mqtt.publish(TopicName.c_str(), json_str.c_str());
  }
}

But no change was made and large messages Can not be sent

Here's my code for sending large binary blobs over MQTT (the global MQTT client variable is named mqtt_client here):
`/* publish binary data over MQTT

ATTENTION! IN ORDER TO SEND IMAGES >64KB, PATCH buildHeader
in /libraries/PubSubClient/src/PubSubClient.cpp LIKE THIS

BEFORE:
size_t PubSubClient::buildHeader(uint8_t header, uint8_t* buf, uint16_t length)
ATFER:
size_t PubSubClient::buildHeader(uint8_t header, uint8_t* buf, uint32_t length)
*/

void publish_mqtt(char* channel, uint8_t *data, uint32_t len) {
unsigned long start_ts = millis();
mqtt_client.beginPublish(channel, len, false);
size_t res;
uint32_t offset = 0;
uint32_t to_write = len;
uint32_t buf_len;
do {
buf_len = to_write;
if (buf_len > 64000)
buf_len = 64000;
res = mqtt_client.write(data+offset, buf_len);

offset += buf_len;
to_write -= buf_len;

} while (res == buf_len && to_write > 0);
mqtt_client.endPublish();
Serial.printf("Published in MQTT channel %s: (binary data of length %d bytes, %d bytes written in %ld ms)\n", channel, len, len-to_write, millis()-start_ts);
}`

first of all sorry for my noob question .
for example I have this string message and topic :
String Message = "my message to send ";
String TopicName = "mytopic";

How can I pass these values as a parameter to the publish_mqtt function ?

void publish_mqtt(char* channel, uint8_t *data, uint32_t len);

You would have to convert the String object to a char* buffer with c_str() like this (untested):
publish_mqtt(TopicName.c_str(), (uint8_t *)Message.c_str(), (uint32_t)Message.length());
But all of this only makes sense if you're trying to send Messages with over 64KB! Shorter messages already work with the unmodified ordinary functions (.publish).

thanks @michaelotto
I did everything.
If the number of characters in the message is less than 128, everything will work fine.
But if the message length is more than 128 characters, the message will not be sent and the connection will be disconnected.
In addition, I called the following function to increase the buffer.
mqtt.setBufferSize(5000);
But the result was the same;
What do you think about this problem?

check my pull request https://github.com/knolleary/pubsubclient/pull/841

Here's my code for sending large binary blobs over MQTT (the global MQTT client variable is named mqtt_client here):
/* publish binary data over MQTT
* ATTENTION! IN ORDER TO SEND IMAGES >64KB, PATCH buildHeader
* in <Arduino-directory>/libraries/PubSubClient/src/PubSubClient.cpp LIKE THIS
*
* BEFORE:
* size_t PubSubClient::buildHeader(uint8_t header, uint8_t* buf, uint16_t length)
* ATFER:
* size_t PubSubClient::buildHeader(uint8_t header, uint8_t* buf, uint32_t length)
*/

void publish_mqtt(char* channel, uint8_t *data, uint32_t len) {
 unsigned long start_ts = millis();

 mqtt_client.beginPublish(channel, len, false);

 size_t res;
 uint32_t offset = 0;
 uint32_t to_write = len;
 uint32_t buf_len;
 do {
   buf_len = to_write;
   if (buf_len > 64000)
     buf_len = 64000;

   res = mqtt_client.write(data+offset, buf_len);

   offset += buf_len;
   to_write -= buf_len;
 } while (res == buf_len && to_write > 0);

 mqtt_client.endPublish();

 Serial.printf("Published in MQTT channel %s: (binary data of length %d bytes, %d bytes written in %ld ms)\n", channel, len, len-to_write, millis()-start_ts);
}

Thankyou very much! This helped me alot.

check my pull request #841

Hello @mirecta ,
I tried to follow this whole thread but it seems that you gave up due to a limitation?
So >64kb MQTT Messages are not possible by all your uint32_t enhancements? I tried all, but had no success. Or is the information you could send 120kb jpegs still valid? I had no success!
It seems, that boolean "setBufferSize(uint32_t size) " is always not successful.
If you could solve it with the hint of @michaelotto it would be good if you can make a rough summary. With the little hints I still can not come to a solution.
I also tried the code of @michaelotto but there are compiler errors and I also could not come to a full implementation understanding.
working for < 64 kb pictures in a .ino Arduino IDE code:
taking picture from ESP32-CAM:
fb = esp_camera_fb_get();
then sending via MQTT:
sendMQTT(fb->buf, fb->len, test);
sendMQTT, where the sending is with "client.publish(topic_PUBLISH_TEST, buf, len, false)":
void sendMQTT(const uint8_t * buf, uint32_t len,String test){
  Serial.println("Sending picture...");
  if(len>MAX_PAYLOAD){
    Serial.print("Picture too large, increase the MAX_PAYLOAD value");
  }else{
    Serial.print("PBuffer size: ");
    Serial.println(len);
    Serial.print("Picture sent ? : ");
    if (test == "TEST")
    Serial.println(client.publish(topic_PUBLISH_TEST, buf, len, false));
    else
    Serial.println(client.publish(topic_PUBLISH, buf, len, false));
  }
}

But how to change, that "fb->buf" with > 64kb is working?

Thanks Joerg

Hello all,
after some testing here is a working summary from the @michaelotto code and some hints coming from the ESP32-CAM example to send bigger pictures via MQTT. For me the hint from @mirecta was more confusing, as only 3 locations need to be adapted.
A) The code was changed with some more details about the changes in PubSubClient.cpp and .h:
/* publish binary data over MQTT
* ATTENTION! IN ORDER TO SEND IMAGES >64KB, PATCH buildHeader
* in <Arduino-directory>/libraries/PubSubClient/src/PubSubClient.cpp and PubSubClient.h LIKE THIS
*
* BEFORE:
* .cpp: size_t PubSubClient::buildHeader(uint8_t header, uint8_t* buf, uint16_t length)
* .cpp: uint16_t len = length;
* .h:   size_t buildHeader(uint8_t header, uint8_t* buf, uint16_t length);
* ATFER:
* .cpp: size_t PubSubClient::buildHeader(uint8_t header, uint8_t* buf, uint32_t length)
* .cpp: uint32_t len = length;
* .h:   size_t buildHeader(uint8_t header, uint8_t* buf, uint32_t length);
*/
void publish_mqtt(const char* channel, uint8_t *data, uint32_t len) {  //JoP
 unsigned long start_ts = millis();

 client.beginPublish(channel, len, false); //JoP mqtt_client.beginPublish(channel, len, false);

 size_t res;
 uint32_t offset = 0;
 uint32_t to_write = len;
 uint32_t buf_len;
 do {
   buf_len = to_write;
   if (buf_len > 64000)
     buf_len = 64000;

   res = client.write(data+offset, buf_len); // JoP res = mqtt_client.write(data+offset, buf_len);

   offset += buf_len;
   to_write -= buf_len;
 } while (res == buf_len && to_write > 0);

 client.endPublish(); //JoP mqtt_client.endPublish();

 Serial.printf("Published in MQTT channel %s: (binary data of length %d bytes, %d bytes written in %ld ms)\n", channel, len, len-to_write, millis()-start_ts);
}

due to the ESP32-CAM compatibility I changed:
void publish_mqtt(char* channel, uint8_t *data, uint32_t len)
to
void publish_mqtt(const char* channel, uint8_t *data, uint32_t len)
This should be added to the .ino part of your project.
B)
In the ESP32-CAM example I tuned:
const long int MAX_PAYLOAD = 256000; //for UXGA 1600*1200 pictures  //JoP default was 60000  - const int
const long int KB64_PAYLOAD = 64000; //remains for smaller MQTT message size

using
client.setBufferSize(KB64_PAYLOAD); //This is the maximum payload length (MAX_PAYLOAD)
in the SETUP - MQTT part, as the buffer remains the same for smaller MQTT messages.
and added in sendMQTT(...):
void sendMQTT(const uint8_t * buf, uint32_t len){
  #ifdef DEBUG
  Serial.println("Sending picture...");
  #endif
  if(len>MAX_PAYLOAD){
    #ifdef DEBUG
    Serial.print("Picture too large, increase the MAX_PAYLOAD value");
    #endif
  }else{
    #ifdef DEBUG
    Serial.print("PBuffer size: ");
    Serial.println(len);
    Serial.print("Picture sent ? : ");
    #endif
    bool mqtt_stat = false;
    if(len <= 64000){
        mqtt_stat=client.publish(topic_PUBLISH, buf, len, false);  // use standard send MQTT method
    }else{
       publish_mqtt(topic_PUBLISH, (uint8_t *) buf,  len);  //use new routine for  >64kb
       mqtt_stat = true;
      }
    }
    #ifdef DEBUG
    if(mqtt_stat)
    Serial.println("successful");
    else
    Serial.println("error");
    #endif
  }
}

so the new MQTT sending method is only used for the messages >64 KB.
I  hope this helps other ESP32-CAM users with their attempt to send the 1600*1200 UXGA pictures via MQTT.
Good luck
Joerg

Changing to AsyncMqtt_ESP usage
Hi,
normally I would ask Khoi Hoang in https://github.com/khoih-prog/AsyncMQTT_ESP32, but all is archived and read only now.
As this is related to the same basis of the discussion here, just a migration question.
I used the pubsubclient basis:
fill buffer with jpeg picture:
camera_fb_t * fb = NULL;
fb = esp_camera_fb_get();

using function:
sendMQTT(fb->buf, fb->len, test);
void sendMQTT(const uint8_t * buf, uint32_t len,String test){
containing:
client.publish(topic_PUBLISH_TEST, buf, len, false);
pubsubclient:
boolean publish(const char* topic, const char* payload);
 boolean publish(const char* topic, const char* payload, boolean retained);
 boolean publish(const char* topic, const uint8_t * payload, unsigned int plength);
 boolean publish(const char* topic, const uint8_t * payload, unsigned int plength, boolean retained);
 boolean publish_P(const char* topic, const char* payload, boolean retained);
-->   boolean publish_P(const char* topic, const uint8_t * payload, unsigned int plength, boolean retained);

---------------now async-------
now I want to replace
client.publish(topic_PUBLISH_TEST, buf, len, false);  (pubsubclient)
with
mqttClient.publish(topic_PUBLISH_TEST, 1, false, buf)  (AsyncMqtt_ESP32)
AsyncMQTT_ESP definition:
uint16_t publish(const char* topic, uint8_t qos, bool retain, const char* payload = nullptr,
                   size_t length = 0, bool dup = false, uint16_t message_id = 0);

Can somebody help me, how to convert the byte buffer (const uint8_t * payload) to the String (onst char payload)?
Or a better idea where and whom to ask?*
Thanks Joerg

solution: maybe it helps someone else:

Changing to AsyncMqtt_ESP usage

---------------now async-------
now I want to replace client.publish(topic_PUBLISH_TEST, buf, len, false); (pubsubclient) with mqttClient.publish(topic_PUBLISH_TEST, 1, false, buf) (AsyncMqtt_ESP32)
AsyncMQTT_ESP definition:
uint16_t publish(const char* topic, uint8_t qos, bool retain, const char* payload = nullptr,
                   size_t length = 0, bool dup = false, uint16_t message_id = 0);

after picture is taken in buffer fb:
const char* pic_buf = (const char*)(fb->buf);
 size_t length = fb->len;
 mqttClient.publish( topic_PUBLISH_TEST, 0, false, pic_buf, length );

Joerg


CHIPTool iOS app can't connect to examples/bridge-app/linux

I download the connectedhomeip source code on ubuntu and mac, and build on both successfull.
On ubuntu site, i go to examples/bridge-app/linux, reference documentation compilation successfull, then i run ./chip-bridge-app successfull.
Step1: i use macOS examples/chip-tool to run ./out/debug/chip-tool pairing onnetwork 0 20202021 3840 <IP_ADDRESS> 11097,
it connected to my ubuntu bridge-app, then i also can run ./out/debug/chip-tool onoff toggle 2 to control.
Step2: i use xcode to build chip-tool for iOS, then run to my iphone12pro, when i scan the qrcode from ubuntu bridge app SetupQRCode: [MT:YNJV7PF100KA0648G00], output the log:
2021-06-18 15:26:44.521104+0800 CHIPTool[1294:312895] Found an existing keypair in the keychain
2021-06-18 15:26:44.521276+0800 CHIPTool[1294:312895] Deserializing the key
2021-06-18 15:26:44.521581+0800 CHIPTool[1294:312895] CHIPOperationalCredentialsDelegate::init returning 0
2021-06-18 15:26:44.521652+0800 CHIPTool[1294:312895] PersistentStorageDelegate Sync Get Value for Key: com.zigbee.chip.commissioner.device_id
2021-06-18 15:26:44.521820+0800 CHIPTool[1294:312895] CHIPPersistentStorageDelegate Get Value for Key: com.zigbee.chip.commissioner.device_id, value 5c1qFRwcBZA=
2021-06-18 15:26:44.521918+0800 CHIPTool[1294:312895] Found 90051c1c156acde5 node ID for the controller
2021-06-18 15:26:44.522676+0800 CHIPTool[1294:312895] [all] 🟢 [1624001204522] [0x4c63f] CHIP: [DL] _Init
2021-06-18 15:26:44.522772+0800 CHIPTool[1294:312895] [all] 🔴 [1624001204522] [0x4c63f] CHIP: [DL] Chip stack locking error at '../../../../../../../../../../../connectedhomeip/src/inet/InetLayer.cpp:620'. Code is unsafe/racy
2021-06-18 15:26:44.523019+0800 CHIPTool[1294:312895] [all] 🔴 [1624001204523] [0x4c63f] CHIP: [DL] Chip stack locking error at '../../../../../../../../../../../connectedhomeip/src/inet/InetLayer.cpp:620'.  UserInfo={NSLocalizedDescription=Undefined error:4072.}, Failure while trying to retrieve a paired device
2021-06-18 15:26:44.525175+0800 CHIPTool[1294:312895] Got back error retrieve device with deviceId 0
2021-06-18 15:27:09.440411+0800 CHIPTool[1294:312895] Payload vendorID 9050
2021-06-18 15:27:09.440781+0800 CHIPTool[1294:312895] Rendezvous BLE
2021-06-18 15:27:09.441266+0800 CHIPTool[1294:312895] PersistentStorageDelegate Sync Get Value for Key: ListPairedDevices0
2021-06-18 15:27:09.441440+0800 CHIPTool[1294:312895] CHIPPersistentStorageDelegate Get Value for Key: ListPairedDevices0, value (null)
2021-06-18 15:27:09.441639+0800 CHIPTool[1294:312895] [all] 🟢 [1624001229441] [0x4c63f] CHIP: [SC] Assigned local session key ID 1
2021-06-18 15:27:09.442726+0800 CHIPTool[1294:312895] [all] 🔴 [1624001229442] [0x4c63f] CHIP: [IN] RETAINED IN SESS: 0x10601f860 0
2021-06-18 15:27:09.443143+0800 CHIPTool[1294:312895] [all] 🔴 [1624001229443] [0x4c63f] CHIP: [EM] Failed to send message with err OS Error 2065 (0x00000811): No route to host
2021-06-18 15:27:09.443337+0800 CHIPTool[1294:312895] PersistentStorageDelegate Set Key StartKeyID
2021-06-18 15:27:09.445236+0800 CHIPTool[1294:312895] Error(2065): Error Domain=CHIPErrorDomain Code=1 "Undefined error:2065." UserInfo={NSLocalizedDescription=Undefined error:2065.}, Failure while pairing the device

i confirm my iphone and mac on the same WIFI network.
where i modified is when scan QRCode success,
- (void)handleRendezVous:(CHIPSetupPayload *)payload
{
    switch (payload.rendezvousInformation) {
    case kRendezvousInformationOnNetwork:
    case kRendezvousInformationAllMask:
        NSLog(@"Rendezvous Unknown");
        [self handleRendezVousWiFi:payload.discriminator.unsignedShortValue setupPINCode:payload.setUpPINCode.unsignedIntValue];
        break;
    case kRendezvousInformationSoftAP:
        NSLog(@"Rendezvous Wi-Fi");
//        [self handleRendezVousWiFi:[self getNetworkName:payload.discriminator]];
        [self handleRendezVousWiFi:payload.discriminator.unsignedShortValue setupPINCode:payload.setUpPINCode.unsignedIntValue];
        break;
    case kRendezvousInformationNone:
    case kRendezvousInformationBLE:
        NSLog(@"Rendezvous BLE");
//        [self handleRendezVousBLE:payload.discriminator.unsignedShortValue setupPINCode:payload.setUpPINCode.unsignedIntValue];
        [self handleRendezVousWiFi:payload.discriminator.unsignedShortValue setupPINCode:payload.setUpPINCode.unsignedIntValue];
        break;
    }
}

- (void)handleRendezVousWiFi:(uint16_t)discriminator setupPINCode:(uint32_t)setupPINCode
{
    NSError * error;
    uint64_t deviceID = CHIPGetNextAvailableDeviceID();
    if ([self.chipController pairDevice:deviceID<EMAIL_ADDRESS>port:11097 discriminator:discriminator setupPINCode:setupPINCode error:&error]) {
        deviceID++;
        CHIPSetNextAvailableDeviceID(deviceID);
    }
}

i see chip-tool on MacOS also use the method to pairing with device. on the file PairingCommand.app
CHIP_ERROR PairingCommand::RunInternal(NodeId remoteId)
{
    CHIP_ERROR err = CHIP_NO_ERROR;

    mRemoteId = remoteId;

    InitCallbacks();

    //
    // Set this to true first BEFORE we send commands to ensure we don't
    // end up in a situation where the response comes back faster than we can
    // set the variable to true, which will cause it to block indefinitely.
    //
    UpdateWaitForResponse(true);

    //
    // We're about to call methods into the stack, so lock
    // appropriately. None of the following calls below before the unlock are, nor should be,
    // blocking.
    //
    {
        chip::DeviceLayer::StackLock lock;

        switch (mPairingMode)
        {
        case PairingMode::None:
            err = Unpair(remoteId);
            break;
        case PairingMode::Bypass:
            err = PairWithoutSecurity(remoteId, PeerAddress::UDP(mRemoteAddr.address, mRemotePort));
            break;
        case PairingMode::Ble:
            err = Pair(remoteId, PeerAddress::BLE());
            break;
        case PairingMode::OnNetwork:
        case PairingMode::SoftAP:
            err = Pair(remoteId, PeerAddress::UDP(mRemoteAddr.address, mRemotePort));
            break;
        case PairingMode::Ethernet:
            err = Pair(remoteId, PeerAddress::UDP(mRemoteAddr.address, mRemotePort));
            break;
        }
    }

    WaitForResponse(kWaitDurationInSeconds);
    ReleaseCallbacks();

    return err;
}

CHIP_ERROR PairingCommand::Pair(NodeId remoteId, PeerAddress address)
{
    RendezvousParameters params =
        RendezvousParameters().SetSetupPINCode(mSetupPINCode).SetDiscriminator(mDiscriminator).SetPeerAddress(address);

    return GetExecContext()->commissioner->PairDevice(remoteId, params);
}

so my qustion is whether i can use the same function to pairing with my chip-bridge-app?
if i can, what should i do?

We're in progress of reviewing older issues. Is this still an issue given how old the SDK this was tested against? Please re-open if so. Thanks!


Fixes

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

-2 of 17 (88.24%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.09%) to 84.292%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

src/hooks/useConfig.ts
15
17
88.24%

Totals

Change from base Build<PHONE_NUMBER>:
0.09%

Covered Lines:
2507

Relevant Lines:
2880

💛  - Coveralls


iOS 6 Compatibility

Fixed the display issue that the label's default white background will cover the whole red circle.
Changed the s.platform to 6.0 since it is working on iOS 6. In this way this library can be integrated to those project with 6.0 deployment target using CocoaPods.

Hey! thanks for you input, sorry for my late response.  The PR looks simple enough.  Do you mind describing the first issue (the white label thing) a little bit more?  A screenshot would be super helpful too.  Thanks!

Hi,
In iOS 6, the default backgroundColor of a UILabel is white color. In the code, the frame of the countLabel is the same as redCircle, and on top of it. As a result, the redCircle is covered by a white background countLabel. Screenshot is as follows

sweet.  Thanks!

Please consider to publish an update to CocoaPods so that others can use this library for projects targeting iOS 6.
Thanks.

done! thanks again


feat: query onError & onComplete callbacks

Fixes / Enhancements
Added onError & onCompleted callbacks to the Query widget and useQuery hook. They work pretty much exactly as the same callbacks for Mutations.
Fixes: https://github.com/zino-hofmann/graphql-flutter/issues/954
Let me know if anything needs changing, I'm new to the Dart & Flutter ecosystem, but I'll try my best!

In addition, can rename the commit header to feat: added onError&onComplete callbacks, we use this message to generate the CHANGELOG.md file

@vincenzopalazzo @budde377 hi, thanks for your comments! i've resolved all of the issues you had commented about

LGTM, and again great job! Let's see what the CI says.
In addition, sorry if my comments can sound frustrating, but it is not I'm only a person that care to the elegance of a programming language :)

i've fixed the remaining issues :)

The CI was saying that there is some test to update
00:14 +0 -1: loading /home/runner/work/graphql-flutter/graphql-flutter/packages/graphql_flutter/test/widgets/query_test.dart
00:14 +0 -1: loading /home/runner/work/graphql-flutter/graphql-flutter/packages/graphql_flutter/test/widgets/subscription_test.dart [E]
  Exception: the Dart compiler exited unexpectedly.
  package:flutter_tools/src/base/common.dart 10:3  throwToolExit
  package:flutter_tools/src/compile.dart 784:9     DefaultResidentCompiler._compile.<fn>
  dart:async/zone.dart 1434:47                     _rootRunUnary
  dart:async/zone.dart 1335:19                     _CustomZone.runUnary

test/widgets/query_test.dart:57:9: Error: Type 'OnQueryComplete' not found.
  final OnQueryComplete? onQueryComplete;
        ^^^^^^^^^^^^^^^

test/widgets/query_test.dart:60:9: Error: Type 'OnQueryError' not found.
final OnQueryError? onQueryError;
^^^^^^^^^^^^
test/widgets/query_test.dart:57:9: Error: 'OnQueryComplete' isn't a type.
final OnQueryComplete? onQueryComplete;
^^^^^^^^^^^^^^^
test/widgets/query_test.dart:60:9: Error: 'OnQueryError' isn't a type.
final OnQueryError? onQueryError;
^^^^^^^^^^^^
test/widgets/query_test.dart:114:9: Error: No named parameter with the name 'onComplete'.
onComplete: widget.onQueryComplete,
^^^^^^^^^^
/opt/hostedtoolcache/flutter/2.10.4-stable/x64/.pub-cache/hosted/pub.dartlang.org/graphql-5.1.1/lib/src/core/query_options.dart:13:3: Context: Found this candidate, but the arguments don't match.
QueryOptions({
^^^^^^^^^^^^
lib/src/widgets/hooks/query.dart:37:7: Error: Method not found: 'QueryCallbackHandler'.
QueryCallbackHandler(options: options).callbacks,
^^^^^^^^^^^^^^^^^^^^
lib/src/widgets/hooks/query.dart:38:7: Error: No named parameter with the name 'removeAfterInvocation'.
removeAfterInvocation: false,
^^^^^^^^^^^^^^^^^^^^^

@vincenzopalazzo i can't verify because I can't re-run the CI action, but locally it seems that the dart pub get in the test command undoes the symlink between the packages and breaks everything. i've pushed in changes with that pub get call removed

i can't verify because I can't re-run the CI action, but locally it seems that the dart pub get in the test command undoes the symlink between the packages and breaks everything. i've pushed in changes with that pub get call removed

Yeah! right this now is tricky, we should split the PR in two, but maybe I will test it locally and after I merge a will fix the CI

@vincenzopalazzo how should i proceed here?

how should i proceed here?

Nothing from your side, I need to split the PR in two, but this required time, and now there are Italian holidays.
I will try to find some time for the end of the week
The problem here is that the breaking chain needs to be divided into two PRs because we want that graphql and graphql_flutter live as two different packages.
This was my missing during the review, sorry!


Add position metrics to maker

Looks like this :
# HELP positions_quantity Total quantity of positions on ItchySats.
# TYPE positions_quantity gauge
positions_quantity{position="long",status="closed"} 0
positions_quantity{position="long",status="failed"} 0
positions_quantity{position="long",status="open"} 100
positions_quantity{position="long",status="refunded"} 0
positions_quantity{position="long",status="unknown"} 0
positions_quantity{position="short",status="closed"} 100
positions_quantity{position="short",status="failed"} 0
positions_quantity{position="short",status="open"} 0
positions_quantity{position="short",status="refunded"} 0
positions_quantity{position="short",status="unknown"} 0
# HELP positions_total Total number of positions on ItchySats.
# TYPE positions_total gauge
positions_total{position="long",status="closed"} 0
positions_total{position="long",status="failed"} 0
positions_total{position="long",status="open"} 1
positions_total{position="long",status="refunded"} 0
positions_total{position="long",status="unknown"} 0
positions_total{position="short",status="closed"} 1
positions_total{position="short",status="failed"} 0
positions_total{position="short",status="open"} 0
positions_total{position="short",status="refunded"} 0
positions_total{position="short",status="unknown"} 0

Thanks for reworking this!
I think similar to projection, we could have a local cache here where we store all aggregates, only update the one that changes every time something runs through the process manager and then re-compute the metrics every time based on all CFDs. That would remove the need for doing it on an interval.
What do you think?

Done. The downside of this is that now the metrics logic gets executed for the taker as well because we have the same process manager.

Done in c9aa83b (#1921). The downside of this is that now the metrics logic gets executed for the taker as well because we have the same process manager.

We could either plug in a dummy actor or make the message channel optional if we don't want that. I don't see it as a big issue though.
Just on Friday I had locally added a metrics endpoint to the taker because I wanted to inspect the ping latency stats gathered by the new xtra-libp2p-ping protocol so maybe we will just end up exposing metrics on the taker as well at some point?

We could either plug in a dummy actor or make the message channel optional if we don't want that. I don't see it as a big issue though.

We could do that. Don't you think this could confuse devs?

Just on Friday I had locally added a metrics endpoint to the taker because I wanted to inspect the ping latency stats gathered by the new xtra-libp2p-ping protocol so maybe we will just end up exposing metrics on the taker as well at some point?

Fair point. It might not be bad idea after all ...

We could either plug in a dummy actor or make the message channel optional if we don't want that. I don't see it as a big issue though.

We could do that. Don't you think this could confuse devs?

Borderline trade-off for me.
Now that I think of it, if we don't want metrics in the taker daemon, we should probably introduce a metrics feature-flag in daemon and not activate it in the taker binary.

We could either plug in a dummy actor or make the message channel optional if we don't want that. I don't see it as a big issue though.

We could do that. Don't you think this could confuse devs?

Borderline trade-off for me.
Now that I think of it, if we don't want metrics in the taker daemon, we should probably introduce a metrics feature-flag in daemon and not activate it in the taker binary.

I think the metrics can come handy for our testnet setup so I created a follow-up ticket for this: #1946 .

bors r+


Updated iOS Object Detector to Use Delegates for Async Callbacks

@schmidt-sebastian Raised a PR for changing the pattern of iOS Object Detector async callbacks. I closed the previous PR which incorporated these changes for both image classifier and object detector because I felt there were changes across lot of files.


Replace display:none with .hidden

The main reason I'm suggesting this change is to better facilitate using RecurrenceWidget with a style reset (e.g., cleanslatecss) to get around collisions with other stylesheets.

Seems reasonable to me - but I'm curious, what collisions would the current approach (i.e. effectively inline styles) cause?

The style reset uses !important rules to set (among other things):
div {
  display: block !important;
}

Then to get the widget css to work again you set all those rules to also be !important to override the reset styles. I do that using less to process the original stylesheet:
#makeRecurrenceImportant() {
    @import (less) "recurrence.css";
}

& {
    #makeRecurrenceImportant() !important;
}

But that does not effect any inline styles.
Also, everyone knows classes are better than inline styles ;)

That seems pretty crazy to me - doesn't that mean having !important all over the place?
Regardless - this seems like a reasonable change, and you are of course right that classes are better than inline styles, so I'm happy for this to go in.

It is slightly crazy, but the !important rules of the reset and widget are restricted by containing classes which I didn't include in the example for simplicity.


feat(jit): extend field tag (WIP)

 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.duanyi.aster seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.


Copying of .git into Dockerfile

https://github.com/datalad/datalad-registry/blob/8a998bb0cc39bbbf10134c080b9f8f52b3f6f445/Dockerfile#L54
As illustrated above, currently, the .git directory is copied to the docker image of the project because versioningit, the versioning system, requires it to build the project. Look in to whether this can be circumvented or avoided.
This issue is related to https://github.com/datalad/datalad-registry/issues/334 to some degree.

while doing full "source distribution" all needed version placeholders are provided somewhere, thus avoiding need for carrying .git around, right @jwodder ?

@yarikoptic If you're installing from an sdist (assuming that's what you're referring to), then versioningit doesn't need (or use) .git/.

yes, that is what I mean.   so instead of all the manual individual COPY steps there should just be an sdist step in https://github.com/datalad/datalad-registry/blob/8a998bb0cc39bbbf10134c080b9f8f52b3f6f445/Dockerfile#L49 with pip following installation from it, to make it all clean, right?

@yarikoptic

If you mean a step that copies an sdist into the Dockerfile, that would obviously require building the sdist outside of Docker.  How would that be added to the current automation?

If you do get this to work, I think it'd be a better idea to use a wheel instead of an sdist, as a wheel is more "installation-ready."

@yarikoptic @jwodder Thanks for your inputs. In light of your ideas, I think we can approach this problem by using the multi-stage build feature in Docker/Podman. Essentially, using this feature, we can separate the build environment from the runtime environment and include only the runtime environment in the container image for the project.


Fix "must be str, not bytes" exception

I have tested this fix with python 2.7 and python 3.6

Hi @cgsecurity
Thanks for the PR!
It has been merged.
Can you please add more details about the reason/situation this odd exception was occurring? as I have never encountered this bug before on this code.
I assume it's a valid bug.

I have encountered this bug while exploiting a VM on hackthebox.
In Python 3 there are two different types:

The bytes type. This is just a sequence of bytes, Python doesn't know anything about how to interpret this as characters.
The str type. This is also a sequence of bytes, but Python knows how to interpret those bytes as characters.
The separate unicode type was dropped. str now supports unicode.

A better fix may be
try:
        output = requests.get(url, headers=headers, verify=False, timeout=timeout, allow_redirects=False).text

    except requests.exceptions.ChunkedEncodingError:
        print("[!] ChunkedEncodingError Error: Making another request to the url.")
        print("Refer to: https://github.com/mazen160/struts-pwn/issues/8 for help.")
        try:
            output = b""
            with requests.get(url, headers=headers, verify=False, timeout=timeout, allow_redirects=False, stream=True) as resp:
                for i in resp.iter_content():
                    output += i
        except requests.exceptions.ChunkedEncodingError as e:
            print("EXCEPTION::::--> " + str(e))
            print("Note: Server Connection Closed Prematurely\n")
        except Exception as e:
            print("EXCEPTION::::--> " + str(e))
            output = 'ERROR'

    except Exception as e:
        print("EXCEPTION::::--> " + str(e))
        output = 'ERROR'

    return(output.decode('utf-8'))

Hi @cgsecurity
I made a small review on the code today, along with a vulnerable box that reproduces this bug:
Here is the changes I made: https://github.com/mazen160/struts-pwn/commit/11f9059eaec2fdaaab910ea9f1865a19621c24e1
It's a mix of my code and yours. It should handle exceptions on Python vs. Python3 with datatype handling.


Challenge status banner

https://www.figma.com/design/gOAxvspLAvJfjsb5zoEyDk/Kevin---UXR-Recommendations-(2024Q4-)?node-id=108-58219&node-type=section&t=g2mf3h5iVnV4QP9S-0

Top challenge status banner

Render different status depending on active date

We'll need the start and end dates of the ML challenge

this should not go live before Nov 6th @ 12 PST

@codemonkey800 i added a note in the ticket description saying "this should not go live before Nov 6th @ 12 PST"


Correction for raw affiliation CHU Saint Etienne, University of Rennes, INSERM, LTSI -UMR 1099, Rennes (K.B.).

Correction needed for raw affiliation CHU Saint Etienne, University of Rennes, INSERM, LTSI -UMR 1099, Rennes (K.B.).
raw_affiliation_name: CHU Saint Etienne, University of Rennes, INSERM, LTSI -UMR 1099, Rennes (K.B.).
new_rors: 015m7wh34;02vjkv261;04pn6vp43;01f1amm71
previous_rors: 015m7wh34;02vjkv261;04pn6vp43
works_examples: W4321378036
contact: e39c77cc2f14dae0966d29af96cdd37d:3a4c9e1a27aab1875bedbb119d7e8757 @ univ-rennes.fr

This issue was accepted and ingested by the OpenAlex team on 2024-10-10. The new affiliations should be visible within the next 7 days.


fix a bug of rendering transparent object when using GLTFIO_LITE/gltfresources_lite.bin

The macro GLTFRESOURCES_LITE_LIT_BLEND_DATA is not defined anywhere, it should be GLTFRESOURCES_LITE_LIT_FADE_DATA. This solves the issue of rendering transparent objects using GLTFIO_LITE macro, i.e. using gltfresources_lite.bin. If we don't change this macro, the transparent objects will be rended using lit_opaque material instead of lit_fade material.
I think this issue recorded is also caused by this bug. It should be fixed after this macro change.

@ShoutTree Thanks for the contribution but before we can merge it we need you to accept the CLA (https://github.com/google/filament/pull/5024/checks?check_run_id=4747492292 for details).

@ShoutTree Thanks for the contribution but before we can merge it we need you to accept the CLA (https://github.com/google/filament/pull/5024/checks?check_run_id=4747492292 for details).

I've accepted the CLA. Please tell me if there's any other thing that I should do. Thanks.


Error to get Tenant ID

Hi, I follow this link to start office add-on. When I try to get the Tenant ID, it shows error with:

Unable to complete due to service connection error, please try again later.

I  also tried this link to get Tenant ID and it failed, too.
The screenshot is attached below:

@scorpiozj thank you for submitting feedback.
I think the best way forward is if you open a service ticket in your tenant so this can get resolved ASAP. Based on the outcome let me know if it is something that can be called out in the docs.
Please follow this link to contact support for business products:https://docs.microsoft.com/office365/admin/contact-support-for-business-products
Please keep us posted here on the resolution so we can feed whatever information you discover into the content.
@officedocsbot close

@officedocsbot close


Refactor Phalcon\Cli

Refactor Phalcon\Cli

Resolved in https://github.com/phalcon/phalcon/pull/289


Update README.md

Your link to the (Background and motivation) header anchor is broken

Thanks! This is what happens when you trust the Markdown plugin's ability to check link validity 😅

Haha yea I hate that it doesn't validate internal links

Btw sick library, really looking forward to it


Operators needed to lerp a FractionalOffset.

Without this, you can't use AnimatedValue, because its
lerp() function uses the operators.

LGTM
You can subclass AnimatedValue, but this is certainly easier.


Add quora link

It would be great if we can able to add quora link in the _config.yml just like other social media applications..

Theme supports adding your own "author" links now.


On Android it receives notifications but they don't appear on Firebase Analytics

Expected Behaviour
Send notification via Firebase Console.
On the Firebase Console on Analytics should show evidence that the push notification was received on iOS and Android.
Actual Behaviour
Send notification via Firebase Console.
On the Firebase Console on Analytics it shows only for iOS the evidence that the push notification was received, Android is receving push notifications but it does not show on Firebase console.
Reproduce Scenario (including but not limited to)
Sending notifications from Firebase Console to Android and also just for a specific device by the device id.
Steps to Reproduce
Platform and Version (eg. Android 5.0 or iOS 9.2.1)
Android 6.0.1
(Android) What device vendor (e.g. Samsung, HTC, Sony...)
Samsung Galaxy J7
Cordova CLI version and cordova platform version
Cordova CLI : 9.0.0<EMAIL_ADDRESS>Cordova Platforms : android 8.1.0
Plugin version
"phonegap-plugin-push": "^2.3.0",
Sample Push Data Payload
I'm using the firebase console to send push notifications.
Sample Code that illustrates the problem
export class PushNotificationsProvider {
  private pushObject: PushObject;

  constructor(
    private push: Push,
    private platform: Platform,
    private alertCtrl: AlertController,
  ) {

  }

  showNotification() {
    this.platform.ready().then(() => {
      if (this.platform.is("cordova")) {
        if (this.platform.is("android") || this.platform.is("ios")) {
          this.push.hasPermission().then((res: any) => {
            if (res.isEnabled) {
              console.log("We have permission to send push notifications");
            } else {
              console.log(
                "We do not have permission to send push notifications"
              );
            }
          });

          const options: PushOptions = {
            android: {
              vibrate: true,
            },
            ios: {
              alert: "true",
              badge: "true",
              sound: "false",
            },
          };

          const pushObject: PushObject = this.push.init(options);

          pushObject.on("notification").subscribe((notification: any) => {
            this.alertCtrl
              .create({
                title: notification.title,
                message: notification.message,
                cssClass: "cssClass",
                buttons: ["Ok"],
              })
              .present();
          });

          pushObject.on("registration").subscribe(
            (registration: any) =>
              console.log("Device registered " + registration.registrationId)
          );

          pushObject.on("error").subscribe((error: any) => {
            console.log("Error with Push plugin " + error);
          });
        }
      }
    });
  }
}

our dependencies on package.json
"dependencies": {
    "@angular/animations": "5.2.11",
    "@angular/common": "5.2.11",
    "@angular/compiler": "5.2.11",
    "@angular/compiler-cli": "5.2.11",
    "@angular/core": "5.2.11",
    "@angular/forms": "5.2.11",
    "@angular/http": "5.2.11",
    "@angular/platform-browser": "5.2.11",
    "@angular/platform-browser-dynamic": "5.2.11",
    "@ionic-native/app-center-analytics": "^4.20.0",
    "@ionic-native/app-version": "^4.20.0",
    "@ionic-native/barcode-scanner": "^4.9.1",
    "@ionic-native/contacts": "^4.9.1",
    "@ionic-native/core": "4.7.0",
    "@ionic-native/device": "^4.8.0",
    "@ionic-native/keyboard": "^4.20.0",
    "@ionic-native/network": "^4.8.0",
    "@ionic-native/push": "^4.20.0",
    "@ionic-native/social-sharing": "^5.26.0",
    "@ionic-native/splash-screen": "4.7.0",
    "@ionic-native/status-bar": "4.7.0",
    "@ionic/storage": "^2.2.0",
    "@pluritech/ion-currencymask": "^1.0.4",
    "chart.js": "^2.7.2",
    "com.pylonproducts.wifiwizard": "https://github.com/hoerresb/WifiWizard",
    "cordova-android": "^8.1.0",
    "cordova-browser": "5.0.4",
    "cordova-ios": "5.1.1",
    "cordova-plugin-app-version": "^0.1.9",
    "cordova-plugin-appcenter-analytics": "^0.5.1",
    "cordova-plugin-appcenter-crashes": "^0.5.1",
    "cordova-plugin-appcenter-shared": "^0.5.1",
    "cordova-plugin-compat": "^1.2.0",
    "cordova-plugin-contacts": "^3.0.1",
    "cordova-plugin-contacts-phonenumbers": "0.0.12",
    "cordova-plugin-device": "^2.0.2",
    "cordova-plugin-inappbrowser": "^3.2.0",
    "cordova-plugin-ionic-keyboard": "^2.1.2",
    "cordova-plugin-ionic-webview": "^1.2.1",
    "cordova-plugin-network-information": "^2.0.1",
    "cordova-plugin-splashscreen": "^5.0.2",
    "cordova-plugin-whitelist": "^1.3.3",
    "cordova-plugin-wkwebview-engine": "^1.2.1",
    "cordova-plugin-x-socialsharing": "^5.6.8",
    "cordova-sqlite-storage": "^5.0.0",
    "cordova-support-google-services": "^1.3.2",
    "es6-promise-plugin": "^4.2.2",
    "font-awesome": "^4.7.0",
    "ionic-angular": "3.9.2",
    "ionicons": "3.0.0",
    "mx.ferreyra.callnumber": "0.0.2",
    "phonegap-plugin-barcodescanner": "git+https://github.com/jrontend/phonegap-plugin-barcodescanner.git",
    "phonegap-plugin-multidex": "^1.0.0",
    "phonegap-plugin-push": "^2.3.0",
    "rxjs": "5.5.11",
    "sw-toolbox": "3.6.0",
    "wifiwizard": "git+https://github.com/hoerresb/WifiWizard.git",
    "zone.js": "0.8.26"
  },
  "devDependencies": {
    "@ionic/app-scripts": "3.1.10",
    "@ionic/lab": "1.0.9",
    "typescript": "~2.6.2"
  },
  "cordova": {
    "plugins": {
      "com.pylonproducts.wifiwizard": {},
      "phonegap-plugin-barcodescanner": {
        "ANDROID_SUPPORT_V4_VERSION": "27.+"
      },
      "cordova-plugin-contacts": {},
      "cordova-plugin-contacts-phonenumbers": {
        "CONTACTS_USAGE_DESCRIPTION": "This app needs contacts access"
      },
      "cordova-plugin-inappbrowser": {},
      "cordova-sqlite-storage": {},
      "cordova-plugin-wkwebview-engine": {},
      "mx.ferreyra.callnumber": {},
      "cordova-plugin-x-socialsharing": {
        "ANDROID_SUPPORT_V4_VERSION": "24.1.1+"
      },
      "cordova-plugin-device": {},
      "cordova-plugin-network-information": {},
      "cordova-plugin-ionic-keyboard": {},
      "cordova-plugin-splashscreen": {},
      "cordova-plugin-whitelist": {},
      "cordova-plugin-appcenter-analytics": {},
      "cordova-plugin-appcenter-crashes": {},
      "call-number": {},
      "cordova-plugin-app-version": {},
      "phonegap-plugin-push": {
        "ANDROID_SUPPORT_V13_VERSION": "27.+",
        "FCM_VERSION": "11.6.2",
        "SENDER_ID": "OUR_SENDER_ID"
      },
      "cordova-plugin-ionic-webview": {}
    },

Logs taken while reproducing problem
06-29 10:51:33.406 29299 29299 D FirebaseApp: com.google.firebase.auth.FirebaseAuth is not linked. Skipping initialization.
06-29 10:51:33.416 29299 29299 D FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
06-29 10:51:33.416 29299 29299 I FirebaseInitProvider: FirebaseApp initialization successful
06-29 10:51:33.416 29289 29289 D FirebaseApp: com.google.firebase.auth.FirebaseAuth is not linked. Skipping initialization.
06-29 10:51:33.416 29289 29289 D FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
06-29 10:51:33.416 29289 29289 I FirebaseInitProvider: FirebaseApp initialization successful
06-29 10:51:33.446 29275 29275 D FirebaseApp: com.google.firebase.auth.FirebaseAuth is not linked. Skipping initialization.
06-29 10:51:33.446 29275 29275 D FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
06-29 10:51:33.446 29275 29275 I FirebaseInitProvider: FirebaseApp initialization successful

06-29 10:51:33.976 29299 29343 I FA      : Collection disabled with firebase_analytics_collection_enabled=0
06-29 10:51:33.976 29275 29348 I FA      : Collection disabled with firebase_analytics_collection_enabled=0
06-29 10:51:33.976 29299 29343 I FA      : App measurement is starting up, version: 14710
06-29 10:51:33.976 29275 29348 I FA      : App measurement is starting up, version: 14710
06-29 10:51:33.976 29299 29343 I FA      : To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
06-29 10:51:33.976 29275 29348 I FA      : To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
06-29 10:51:33.976 29299 29343 I FA      : To enable faster debug mode event logging run:
06-29 10:51:33.976 29299 29343 I FA      :   adb shell setprop debug.firebase.analytics.app com.microsoft.office.word
06-29 10:51:33.976 29275 29348 I FA      : To enable faster debug mode event logging run:
06-29 10:51:33.976 29275 29348 I FA      :   adb shell setprop debug.firebase.analytics.app com.microsoft.office.powerpoint
06-29 10:51:33.996 29289 29345 I FA      : Collection disabled with firebase_analytics_collection_enabled=0
06-29 10:51:33.996 29289 29345 I FA      : App measurement is starting up, version: 14710
06-29 10:51:33.996 29289 29345 I FA      : To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
06-29 10:51:33.996 29289 29345 I FA      : To enable faster debug mode event logging run:
06-29 10:51:33.996 29289 29345 I FA      :   adb shell setprop debug.firebase.analytics.app com.microsoft.office.excel
06-29 10:51:34.016  4457  4821 D ActivityManager: removeProcessNameLocked mProcessNames.remove pid=27215 ,hash=259887401 ,name=com.samsung.android.SettingsReceiver

06-29 10:51:36.276 29309 29309 D FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
06-29 10:51:36.346 29309 29309 I FirebaseInitProvider: FirebaseApp initialization successful
06-29 10:51:36.346 29309 29437 W DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
06-29 10:51:36.376 29309 29437 I FirebaseAuth: [FirebaseAuth:] Loading module via FirebaseOptions.
06-29 10:51:36.376 29309 29437 I FirebaseAuth: [FirebaseAuth:] Preparing to create service connection to gms implementation
06-29 10:51:36.426 29309 29438 I FA      : App measurement is starting up, version: 14711
06-29 10:51:36.426 29309 29438 I FA      : To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
06-29 10:51:36.426 29309 29438 I FA      : To enable faster debug mode event logging run:
06-29 10:51:36.426 29309 29438 I FA      :   adb shell setprop debug.firebase.analytics.app com.microsoft.skydrive

06-29 11:10:06.346  1045  2709 W FirebaseMessaging: Unable to log event: analytics library is missing
06-29 11:10:06.346  1045  2709 W FirebaseMessaging: Unable to log event: analytics library is missing
06-29 11:10:06.356  1045  2709 D Push_FCMService: onMessage - from: SENDERID
06-29 11:10:06.356  1045  2709 D Push_FCMService: sender id = SENDERID
06-29 11:10:06.356  1045  2709 D Push_FCMService: normalize extras
06-29 11:10:06.356  1045  2709 D Push_FCMService: key = icon
06-29 11:10:06.356  1045  2709 D Push_FCMService: replace key icon with icon
06-29 11:10:06.356  1045  2709 D Push_FCMService: key = color
06-29 11:10:06.356  1045  2709 D Push_FCMService: replace key color with color
06-29 11:10:06.356  1045  2709 D Push_FCMService: key = sound
06-29 11:10:06.356  1045  2709 D Push_FCMService: replace key sound with sound
06-29 11:10:06.356  1045  2709 D Push_FCMService: key = title
06-29 11:10:06.356  1045  2709 D Push_FCMService: replace key title with title
06-29 11:10:06.366  1045  2709 D Push_FCMService: no locale found for key = title, error Value Thanks of type java.lang.String cannot be converted to JSONObject
06-29 11:10:06.366  1045  2709 D Push_FCMService: key = message
06-29 11:10:06.366  1045  2709 D Push_FCMService: replace key message with message
06-29 11:10:06.366  1045  2709 D Push_FCMService: no locale found for key = message, error Value Welcome of type java.lang.String cannot be converted to JSONObject
06-29 11:10:06.366  1045  2709 D Push_FCMService: foreground
06-29 11:10:06.366  1045  2709 D Push_Plugin: convert extras to json
06-29 11:10:06.366  1045  2709 D Push_Plugin: key = title
06-29 11:10:06.366  1045  2709 D Push_Plugin: key = message
06-29 11:10:06.366  1045  2709 D Push_Plugin: key = coldstart
06-29 11:10:06.366  1045  2709 D Push_Plugin: key = foreground
06-29 11:10:06.366  1045  2709 V Push_Plugin: extrasToJSON: {"title":"Welcome","message":"Thanks for installing our app.","additionalData":{"coldstart":false,"foreground":true}}

When sending the notification you can add the firebase analytics label, in PHP Kreait/Firebase I did this with FcmOptions::create()->withAnalyticsLabel('offers');


New post - Continuous Stuff with Github Actions

This is a transcription of a talk that I have at a few meetups. Had planned to made a written version for a while now
Pedro already gave me feedback on the equivalent PR for my personal blog (I'll be publishing this there as well, a few days later)
TODOs:

Get more feedback
Adjust image sizes

@pfac looking at the preview for this one, I'd say I don't need to have that HalfWidthImage thing after all. Since the width here is smaller, it looks much better than my original one.
Can I haz your opinion?

@pfac francisco wanted me to move the drop cap to the second paragraph (which is actually the first one of the actual post, since the initial text is just a prefix/notice)
do you have any better suggestion than what I did on this latest commit?

FYI, converted to draft, because mendes is suposed to be publishing another post before mine

@naps62 Mendes' post is live with ID 147. Yours is the next in line with ID 148.

are those IDs being used at all, btw?

are those IDs being used at all, btw?

Yes, in the URL. There wouldn't be any clashing, but it would be weird. There's a plan to phase them out but involves redirect rules and I'm lazy.

wait, the URL? I know we have that on the old posts, for backward-compatibility reasons, but doesn't the url come solely from the path given?
Or is posts/148 also a valid url? and if so, why?

wait, the URL? I know we have that on the old posts, for backward-compatibility reasons, but doesn't the url come solely from the path given?
Or is posts/148 also a valid url? and if so, why?

Because old posts had the ID in the URL, we're preserving the same URLs to keep the old links alive;
We're keeping the old format until we move to something new;
If we have so many posts with ID, it makes no sense (IMO) to change midway, better to keep things consistent and when we change we change them all together;
Yes, the URL comes only from the path given.
Which means you SHOULD choose an unique ID, and add it in the frontmatter fields, and use it in the path. But this is just so we keep things consistent until we change everything. Nothing breaks if you don't.

| Because old posts had the ID in the URL, we're preserving the same URLs to keep the old links alive;
this is only valid for those old posts, and only means that we need to keep the number in the URL, not keep the ID field itself
| If we have so many posts with ID, it makes no sense (IMO) to change midway, better to keep things consistent and when we change we change them all together;
This seems to be the only "real" reason.
But I don't really see a point in keeping that, nor do I see a necessity of migrating (by implementing a redirect) the old posts to the new format. Having:
/posts/123-old-post
/posts/new-post-without-id
works perfectly. We can later think about adding /post/old-post as an option as well, but I don't see why that needs to be in place before discarding ids for new posts

this only means that we need to keep the number in the URL, not keep the ID field itself

True, however it would break consistency between past posts and new ones.

This seems to be the only "real" reason.
But I don't really see a point in keeping that, nor do I see a necessity of migrating (by implementing a redirect) the old posts to the new format. Having:
/posts/123-old-post
/posts/new-post-without-id
works perfectly. We can later think about adding /post/old-post as an option as well, but I don't see why that needs to be in place before discarding ids for new posts

I'm aware it works, but it breaks consistency. It is a lot easier to mass clean these many files if all have the exact same format, than it is to deal with edge cases. But as I said, you can exclude the ID from your own post if you want.
Since this obviously bothers you, I'm bumping the priority of changing the posts paths. I'm already working on it. In the meantime, I'll leave it up to you whether you want to include the ID or not. I do prefer if you keep things consistent and since it makes the task easier.

#318 submitted to address the ID issue.


Saved CCSequence state is corrupted if one of the actions was used twice.

Subj. IMHO using actions twice is bad idea.

Changing branch label to "feature-amc branch" from actions branch - it will be merged soon.


debian: Updated debian control file to match upstream Debian Pkg

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

Comparison is base (fa285b0) 58.08% compared to head (c688376) 58.08%.

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@           Coverage Diff           @@
##             main     #417   +/-   ##
=======================================
  Coverage   58.08%   58.08%
=======================================
  Files          16       16
  Lines        2627     2627
=======================================
  Hits         1526     1526
  Misses       1101     1101

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


Threading question

Looking over the program.cs in the starter code, my assumption is that everything is running off the same blocking thread.
If user A sends in a message that my bot starts to process, and user B sends in a second message, my assumption is that this is very open to collisions. Will user B's request be lost if the thread is still busy? or will it all be processed in order once User A's request has been resolved?

User A sends message --> processing, thread blocks
User B sends message while processing --> socket hasn't yet received it
Processing completes --> thread updates --> message is received.
Just don't do anything too intensive inside this thread because you could
lose connection due to keepalives not firing off. Generally, I just run
connect in a separate thread but the creator of this project has chosen not
to do that.
On Thu, Apr 7, 2016, 2:54 PM Ryan Fletcher<EMAIL_ADDRESS>wrote:

Looking over the program.cs in the starter code, my assumption is that
everything is running off the same blocking thread.
If user A sends in a message that my bot starts to process, and user B
sends in a second message, my assumption is that this is very open to
collisions. Will user B's request be lost if the thread is still busy? or
will it all be processed in order once User A's request has been resolved?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub
https://github.com/NaamloosDT/DiscordSharp_Starter/issues/3

At first i didn't really see a reason to run connect in a separate thread. I'm working on it :)

client.Connect is now executed in a separate thread.

Wasn't fully necessary to do that but it doesn't hurt to anyway ;)

Exactly as you say, wouldn't hurt :)

Excellent, thank you very much. I'll defitely review the additions and pull this into my project a little later once DiscordSharp becomes more stable. :+1:

No problem


data-background-image stopped working on new installation of markdown-slides

After re installing on top of python 3.10.8 on a different machine (Windows WSL2 ubuntu terminal) my presenstation has stopped working. Normal comment: # '!!!' seperates slides. but
Doesn't separate slides and background image is not rendered.

Thanks for reporting! Can you provide an example so that I can reproduce the error?  I was unable to reproduce it on Python 3.10.6.

Hi dadoomer thx for responding. I have pasted minimal example here. image is supposed to reside in a subfolder named media. I suspect its an issue with  reveal.js
comment]: # "THEME = black"
Let's explore the universe!
Stellar Solutions
Singularity
Stellar Solutions

Thanks for providing the example. I believe it is an issue with our regex-based slide delimitation parsing.
The example you provided has the following line, which does not work as you pointed out:
[comment]: # '!!! data-background-image="media/example.png", data-background-size="cover", data-background-opacity="0.8"'

It looks perfectly reasonable, and it should work. But currently the parser expects double quotes or parenthesis, so the following should work:
[comment]: # "!!! data-background-image="media/example.png", data-background-size="cover", data-background-opacity="0.8""

Another alternative is:
[comment]: # (!!! data-background-image="media/example.png", data-background-size="cover", data-background-opacity="0.8")

I will push a fix soon, thanks for reporting!

Hi! I've fixed the issue and submitted a merge request. :+1: :)

Awesome, thanks @AdrianGutierrezGomez! The merge is on commit 7b6f19b3.
I will close this issue, but if the issue is not resolved feel free to reopen.

Thanks for providing the example. I believe it is an issue with our regex-based slide delimitation parsing.
The example you provided has the following line, which, as you pointed out, does not work:
[comment]: # '!!! data-background-image="media/example.png", data-background-size="cover", data-background-opacity="0.8"'

It looks perfectly reasonable, and it should work. But currently the parser expects double quotes or parenthesis. So, the following should work:
[comment]: # "!!! data-background-image="media/example.png", data-background-size="cover", data-background-opacity="0.8""

Another alternative is:
[comment]: # (!!! data-background-image="media/example.png", data-background-size="cover", data-background-opacity="0.8")

I will push a fix soon, thanks for reporting!

Awesome thx for explaining the work around and for fixing the issue


Few error codes in POSIX API implementation is not supported

I referred IEEE Std 1003.1-2017 documentation and figured out that some of the POSIX API implementation doesn't support all the return values and error codes. Are these listed error codes are optional to support? If so have we documented it somewhere?

POSIX API
Inconsistency observed in Zephyr implementation

pthread_create
Return values,   EAGAIN and EPERM are not supported.

pthread_join
Return value -   EDEADLK not supported. pthread_join(self) should return EDEADLK.

pthread_getschedparam
Return value -   only success scenario return code is implemented. Error codes    are not   implemented.

pthread_attr_setstack
Return value -   [EINVAL] is not supported.

pthread_attr_setschedpolicy
Return value   ENOTSUP is not supported.

pthread_attr_getschedparam
Return value error   code ENOTSUP is not supported.

clock_gettime
EOVERFLOW is not   supported.

clock_settime
EPERM is not   supported.

pthread_rwlock_init
EAGAIN, ENOMEM,   EPERM are not supported.

pthread_rwlock_rdlock
EDEADLK is not   supported.

pthread_rwlock_timedrdlock
EAGAIN and EDEADLK   are not supported.

pthread_rwlock_wrlock
EDEADLK is not   supported.

pthread_key_create
EAGAIN is not   supported.

sem_getval
EINVAL is not   supported.

sem_init
ENOSPC and EPERM   are not supported.

sem_timedwait
EDEADLK and EINTR   are not supported.

sem_trywait
EDEADLK and EINTR   are not supported.

timer_create
EAGAIN and ENOTSUP   are not supported.

FYI: @ramakrishnapallala @nashif

@spoorthik @ManojSubbarao This is not bug. To support each error code, unsupported or todo may need to added or rearrange some of the code.

@punitvara @ramakrishnapallala: Shouldn't we document the error codes which are unsupported somewhere?

@spoorthik is right. Do we have documentation for this anywhere? If not, we need to have it, and also explanation for why they are unsupported. What do you think @nashif @andyross
I have a patch fixing few error codes at #10173
Here's my two cents on the pthread.c functions (from the table above):

pthread_create
I've separated the EINVAL check and added EAGAIN for limit on number of threads.
EINVAL, according to doc is only for

Invalid settings in attr

Now, we're only missing EPERM, which is for

No permission to set the scheduling policy and parameters specified in attr.

AFAIK, this error code doesn't make sense for us, since pthreads are created as kernel threads only, and so there's no question of permissions unless we plan to support USERSPACE in our POSIX implementation. Is there any plan for that?

pthread_join
In the newer revision (Issue 7), EDEADLK seems to be deprecated with the following reason

The [EDEADLK] error for the calling thread is removed; this condition results in undefined behavior.

Do we still need to support this?

pthread_getschedparam
I've added the ESRCH error code return. The other error codes are valid only for setschedparam.

pthread_attr_setstack
Okay, so here the EINVAL is when either the stack is greater or lesser than a limit, and when alignment is not met. Both of these are done extensively in the k_thread_create call in our kernel, but there's no explicit return for them as we return only the thread ID after creation. And so this error code was not added in POSIX, I think. Do we still need to add a superficial check here, just for supporting the error code?

pthread_attr_setschedpolicy
ENOTSUP is when

An attempt was made to set the attribute to an unsupported value.

I don't get this, since when we do the EINVAL check, we include for the case when

The priority specified in param does not make sense for the current scheduling policy of attr.

Do we detect an attempt to set for this error? Well, doc also says this error is optional (and unrelated, Linux doesn't support it).
Anyway, I have removed this error return from pthread_attr_setschedparam, since EINVAL is the right error for the policy/priority invalid check and ENOTSUP is an operation error.

pthread_getschedparam
ENOTSUP is only for setschedparam and setschedpolicy; not for this API.

I don't know why this issue is at all exists.

Are these listed error codes are optional to support?

Of course, the spec just lists typical error codes which can happen for each call. That doesn't mean that they all should be used in a particular implementation. Nor it even means that an implementation can't return some other error. (However, it means that if an implementation faces and handles some error condition described in the spec, then the error code described by the spec should be returned, not something else).

yes I agree @pfalcon  However I will try to add where it is possible to add error code if functionality exist at the moment

sem_init - We are already checking whether we are trying to init more than max value or not. Then I dont know what ENOSPC makes sense as it is also checking if semaphore limit. It is not possible to whether any resource exhausted or not because there are no function with return value. As @nniranjhana said we are spawning kernel thread so EPREM also doesn't make sense as of now.
sem_timedwait, sem_trywait - I think we can't check because in semaphore we don't have ownership concept as mutex. EDEADLK can't be supported please support if there is otherway to return this @pfalcon .


Update docs for webdriver.io file uploads

WebdriverIO V5 changed how you need to do file uploads slightly so the example in the documentation here is now out of date.
See https://webdriver.io/docs/api/browser/uploadFile.html for their new format (represented in this change, and working in my test suite).

@thaffenden thank your for contribution!


Add footer

I have noticed that the website doesn't contain footer
It is important to include a footer which contains various elements like contact us, reach out, important links section in it.
@GVishnudhasan
I would like to work on this issue.
Thank you

you can assign this task to me...


[5.4] Some refactoring on Eloquent builder

Extracted a new method that'll create a new model instance and set the connection to the same connection of the Builder instance:
public function newModelInstance($attributes = [])
{
    return $this->model->newInstance($attributes)->setConnection(
        $this->query->getConnection()->getName()
    );
}

Refactored the areas where this logic used to happen to call the method instead.

some minor docblock fixes.

Thanks

@themsaid This commit introduced something a bug in my tests, if I create a model just using new Model() and save(), the connection is null, so all my comparisons using $model->is(...) doens't work anymore. Maybe we should use this new method in save() too? I don't know.

@gabrielkoerich I don't think this commit made a change to the code, we just extracted part of the code in a method.

@themsaid Yeap, that's weird. It was something between 5.4.18 and 5.4.19, and the only commit that changed something with connections was this one... Do you know what else could it be? Thanks.

@themsaid I end up calling fresh() after creating the model and it's working.


contrib: Add environment variable to script  to control K8s namespace

This updates the script to allow the user to specify which namespace Cilium is
deployed in.

Only changes the script inside contrib, no need to run CI.

Coverage increased (+0.008%) to 37.037% when pulling a544b8b5ae4e16e38bf240c79716c719089b1f4d on christarazi:pr/christarazi/contrib-add-k8s-namespace-cilium-exec into fe4e456dab68b0de2262ecad0cf28d67334e0036 on cilium:master.

Travis failed with:
Build finished.
Starting key-value store containers...
docker rm -f "cilium-etcd-test-container" 2> /dev/null
Makefile:167: recipe for target 'start-kvstores' failed
make: [start-kvstores] Error 1 (ignored)
docker run -d \
	-e ETCD_UNSUPPORTED_ARCH=amd64 \
	--name "cilium-etcd-test-container" \
	-p 4002:4001 \
	quay.io/coreos/etcd:v3.3.20 \
	etcd -name etcd0 \
	-advertise-client-urls http://<IP_ADDRESS>:4001 \
	-listen-client-urls http://<IP_ADDRESS>:4001 \
	-listen-peer-urls http://<IP_ADDRESS>:2380 \
	-initial-cluster-token etcd-cluster-1 \
	-initial-cluster-state new

Unable to find image 'quay.io/coreos/etcd:v3.3.20' locally
v3.3.20: Pulling from coreos/etcd

https://travis-ci.com/github/cilium/cilium/jobs/349363271

Travis hit same issue and flake https://github.com/cilium/cilium/issues/11955


upload react lottie network aware loading project

@addyosmani
It's not ready to be merged yet.
The main functionality is completed except for toggling and docs.
The current build version.
https://adaptive-loading.web.app/react-lottie-network-aware-loading/

This is a really great start. Nice work, Anton :)

@addyosmani
It's ready for review. Hopefully it could be merged. :)
https://adaptive-loading.web.app/react-lottie-network-aware-loading/

Let's land this!


Fixed test case failures in Astro

Test  cases are failing due to wrong comparisions

Merging to master

retest this please


Add support for non-numeric dtypes in associative_scan

associative_scan uses an interleave method, which was implemented
using lax.add, meaning that it only worked for numeric dtypes.
Instead, we can use dynamic updating to set the elements without having
to add zeros to them.

I think https://github.com/google/jax/pull/6738 is a more conservative fix, in the sense that it fixes only the boolean problem without otherwise changing the performance of the associative scan. Closing this PR in favor of that one.


haskellPackages.uusi: add to top-level

Motivation for this change
uusi is a tool like jailbreak-cabal, but it has more features.
Things done

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

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

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
[ ] Added a release notes entry if the change is major or breaking
[x] Fits CONTRIBUTING.md.

Cherry picked as 6c9f648f7572f54668f3a3b8f1a6259384d187c8. I also amended the regenerated hackage-packages.nix which you can do yourself by running ./maintainers/scripts/haskell/regenerate-hackage-packages.sh.


Lenny

Key Changes :

Added Header that redirects to home from any page
Updated X and Github icons
Increased responsiveness on all screens [ text, images and content ]
Hover animation

Please look into the website on mobile screens the line height is still not adjusted

Please look into the website on mobile screens the line height is still not adjusted

i've rectified this


Delete gchp/v1.0.0 branch

Once the corresponding tag is verified, this branch does not need to persist.

I forked the MAPL repo to the GEOS-Chem GitHub organization and we are starting to test building it with cmake in the new GCHP repo. To start we'll just be building the GMAO libraries since it will be incompatible with GCHP which uses a newer MAPL and needs custom updates beyond tag gchp/v1.0.0.
Do you have an idea of when the legacy develop branch updates (as of when NASA GitHub went offline) will be available in master?

Adding @mathomp4, since he has boots on the ground and can comment more accurately about this.   The unanticipated bit is we needed to create MAPL specific branches for the gridcomps due to some ESMF changes in order to just test the MAPL develop stuff.
The git transition is still creating a lot of extra work for my group, and we're down both Ben and myself for this week.   So please be patient.

Thanks Tom and Matt. No hurry from my end since we aren't planning to release the next big version update until after ESMF v8 is released, which puts us to Sept at the earliest.

@lizziel It will probably be a while until the old developer-develop gets into master here. I know @bena-nasa was trying to compile/build the developer-develop yesterday and I might try to help when I have a chance. Then, we have to show we can get the same answer as developer-develop.
After that, because developer-develop is technically non-zero-diff to master (due to use of ESMF regridding) it will trigger a lot of testing on this end. GMAO will need to validate it with 30-year EMIPs and the like to prove that it is the same climate.
Though, I suppose, once we prove to ourselves that it's working, there is a train of thought to say MAPL 2.0 can be put on master itself in this repo. The older versions will still be here and can always have bugfixes in some sort of bugfix-v1 branch or whatever.

Thanks @mathomp4. Having a dev branch works as well, and I see that is there now with the base code I developed off of. We are actually using 5 repos: MAPL, GMAO_Shared, ESMA_cmake, ecbuild, and GEOSgcm_GridComp. Is there a repo that shows the submodule SHAs for these used together, specifically using MAPL develop? I am essentially looking for where to check version compatibility now, or in the future if a repo pulling them together is not there yet.

@lizziel Not yet, but yesterday, @bena-nasa did show that he can duplicate the results of developer-develop with code changes in Github. But, I'd like to have him around (say Monday) before I officially pull in a lot of his changes. Plus a few are in MAPL and I'm not that qualified to approve those. I mean, I'm fairly sure their correct because, well, they were needed, but still...
That said, hopefully by mid next week, I can get you tags of all five repos. Between you and @tclune, you could come up with a tag name that works (gchp/v1.0.0 could have a nice ring :smile: ) and I could easily tag the corresponding commits with that. Then your scripting is simple.

@mathomp4 Thanks! To be clear, I want to update to the latest MAPL and not necessarily stick with gchp/v1.0.0. I noticed folks are starting to use GEOSctm and I found the version of MAPL it uses, 1.1.3, along with the mapping to other repo versions. I diffed 1.1.3 with what we are using and it appears to be further along that our version, which is a good sign. I'm thinking we can start out with the versions GEOSctm uses and then update from there as needed. I'm not going to run GCHP with it yet, we just need to be able to test building with our new setup and ideally not using any branches that will be deleted and never merged in (gchp/v1.0.0).

@lizziel Do you need the ghcp/v1.0.0 branch anymore? If not, we'll close this ticket and delete it.

You can delete. Thanks for checking!


Add shadow to the base stylesheet

This PR intents to add the shadow configurations to the base stylesheet

@cristianames92 please add screenshots examples based on the Portal example project.


tikv crash when conv empty string

Bug Report

What version of TiKV are you using?

What operating system and CPU are you using?

Steps to reproduce

https://github.com/pingcap/tidb/issues/34975
use test;
drop table if exists UK_GCOL_STORED_176092;
CREATE TABLE `UK_GCOL_STORED_176092` (
  `COL1` bit(16) DEFAULT NULL,
  UNIQUE KEY `UK_COL1` (`COL1`) /*!80000 INVISIBLE */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
insert into UK_GCOL_STORED_176092 values(0x15AC), (0xB0B), (0xBC9), (0x11A3), (0x1055), (0x5CB), (0xC3C), (0xB25), (0x88D), (0x1220), (0x156F), (0x975), (0x190F), (0x11E6), (0x93C), (0x14B1), (0x1889), (0x71B), (0x1484), (0x133C), (0x577), (0x907), (0x8A3), (0x1598), (0xE45), (0x4C6), (0x12A2), (0x1917), (0xE57), (0x1227), (0x4D2), (0x16B8), (0x7E0), (0x990), (0x18CF), (0x233), (0x357), (0x351), (0xF01), (0x13D5), (0xCED), (0x124D), (0xB01), (0x1992), (0x7D5), (0x11AD), (0x804), (0x830), (0xBA0), (0x13FF), (0x144F), (0xE7D);
select * from  UK_GCOL_STORED_176092 where conv(col1, 2, 16);

What did you expect?
work
What did happened?
crash

/found customer


Proposed fix for #93

#93
tested on Bless Version 4.0.0

added at-rules in count() switch case: charset, namespace, page
test at-rules: @charset, @import, @namespace, @media,
@supports, @document, @page, @font-face, @keyframes,
@viewport, @counter-style
test when @charset is first line in file
test chunked at-rules

PS not sure if the test files are right, never really used mocha before :expressionless:

at-rules reference: https://developer.mozilla.org/en-US/docs/Web/CSS/At-rule
Related issues: #72
regarding #86, shouldn't you just need to declare it in the first file (@import(first-file.css)) to make it work, no need to duplicate it per file, anyway that's a different issue, thought I should link that here.

LGTM

Released in v4.0.1


planning scene object collide with octomap

Ideally, if an object in the planning scene overlaps the octomap, the boxes overlapping the object should be removed like the one below.
This is the core feature.

However, here are some examples where the boxes still overlaps with the object even after the cut out process is done.

I believe that this is because the robot or the sensor updating the octomap cannot see the overlapped boxes at that moment; hence the boxes are not removed. Here is an example where the generated octomap that is not updated because obstacle is not in view, are not removed even if the object overlaps with the octomap

Maybe orientation has an impact too. Need more testing


Conditional access to Office365: Can my organization check if a device of a supplier is compliant using its own org policies, before granting them access to my org data (like office365)?

Can my organization check if a device of a supplier is compliant using its own org policies, before granting them access to my org data (like office365)?
in other words, is it possible for my company to check if my supplier device is a compliant device (from any intune) before i decide to grant them access to my own org data?

@shrinivasonline I'd recommend posting in MSDN for office365 or stackoverflow forums. This medium is specifically reserved to documentation feedback.
We will now proceed to close this thread. If there are further questions regarding this matter, please reopen it and we will gladly continue the discussion.


Update datepicker document

The datepicker document had a few missing props.
Added the below 2 props.

renderDayContents
renderCustomHeader

These docs are auto generated.


Add ng-google-sheets-db.

ng-google-sheets-db is an Angular library to use Google Sheets as your (read-only) backend! :rocket:

Any comments regarding my PR @PatrickJS?


Failed to install via homebrew

Failing to resolve dependencies.
What can I do?
$ brew install danger/tap/danger-swift
==> Installing danger-swift from danger/tap
==> Downloading https://github.com/danger/danger-swift/archive/0.4.0.tar.gz
Already downloaded: /Users/hiragram/Library/Caches/Homebrew/danger-swift-0.4.0.tar.gz
==> make install PREFIX=/usr/local/Cellar/danger-swift/0.4.0
Last 15 lines from /Users/hiragram/Library/Logs/Homebrew/danger-swift/01.make:
swift package clean
swift build --disable-sandbox -c release --static-swift-stdlib
error: dependency graph is unresolvable; found these conflicting requirements:

Dependencies:
    https://github.com/JohnSundell/Marathon.git @ 3.0.0..<4.0.0
error: product dependency 'MarathonCore' not found
Fetching https://github.com/JohnSundell/Marathon.git
Fetching https://github.com/JohnSundell/Require.git
Fetching https://github.com/JohnSundell/ShellOut.git
Fetching https://github.com/JohnSundell/Wrap.git
Fetching https://github.com/JohnSundell/Files.git
Fetching https://github.com/JohnSundell/Releases.git
Fetching https://github.com/JohnSundell/Unbox.git
make: *** [build] Error 1

If reporting this issue please do so at (not Homebrew/brew or Homebrew/core):
https://github.com/danger/homebrew-tap/issues

Sorry, I will repost to danger/homebrew-tap. Closing.


http2 support

I am looking for an jsonapi server and this one looks very promising, but I don't see any way to use http2. Is this on the roadmap?

jsonapi-server uses express as its web framework, so that's where HTTP/2 support would come via. expressjs/express#2364 explains that you should attach express to an alternate http server such as node-spdy or node-http2.

What @wolfgang42 said, @braadworst. Does that sound like a solution for you?

Closing as we haven't heard from @braadworst and @wolfgang42's comment provides a solution.


Filter --list/--list-configurables by status

Closes #764
PR based on #774

Codecov Report
Base: 96.65% // Head: 96.72% // Increases project coverage by +0.07% :tada:

Coverage data is based on head (0e031dc) compared to base (a6d5fb7).
Patch coverage: 100.00% of modified lines in pull request are covered.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #775      +/-   ##
==========================================
+ Coverage   96.65%   96.72%   +0.07%
==========================================
  Files          24       24
  Lines        3197     3235      +38
==========================================
+ Hits         3090     3129      +39
+ Misses        107      106       -1

Impacted Files
Coverage Δ

robocop/config.py
94.54% <100.00%> (+0.95%)
:arrow_up:

robocop/exceptions.py
98.24% <100.00%> (ø)

robocop/run.py
89.77% <100.00%> (+0.11%)
:arrow_up:

robocop/version.py
100.00% <100.00%> (ø)

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

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


Cleanup layout files

I introduced design time layout attributes in a few places to make it easier to understand the layouts.

awesome! definitely looks cleaner this way. thx!


Python3 fails with basic auth credentials in API URL

With python3, if the pipeline command is invoked with an http(s) URL output, and if basic auth credentials are supplied using the URL pattern https://user:password@rest-of-api-url, it may fail due to https://github.com/requests/requests/issues/4168 with the following message:
Traceback (most recent call last):
  File "/Users/cory/.pyenv/versions/3.6.0/lib/python3.6/encodings/idna.py", line 165, in encode
    raise UnicodeError("label empty or too long")
UnicodeError: label empty or too long

On the FEC project, we worked around this issue by creating a .netrc file with basic auth credentials. See https://github.com/fecgov/fec-eregs/blob/develop/README.md#loading-fecs-regulations

Optional arguments for credentials could be a solution.


Bug report: file add commands should return file information

Description
I'm trying to script out uploading files then either retrieving or creating a link to the file but neither the m365 file add or the m365 spo file add return any data about the file they simply exit. This means that I then have to do a second request to get the file information using m365 spo file get since there is no m365 file get
To further complicate matters the command to add a file uses the folder relative to the weburl, but the command to get a file uses the folder relative to the server. For example
m365 spo file add --webUrl https://contoso.sharepoint.com/sites/project-x --folder "Shared Documents" --path file.xlsx
m365 spo file get --webUrl https://contoso.sharepoint.com/sites/project-x --url "/sites/project-x/Shared Documents/file.xlsx"
Steps to reproduce
Upload a file to Sharepoint
Expected results
Upload a file to Sharepoint and get back values about the file such as the UID, etc.
Actual results
Nothing is returned
Diagnostics
No response
CLI for Microsoft 365 version
"v6.3.0"
nodejs version
v18.15.0
Operating system (environment)
Linux
Shell
bash
cli doctor
No response
Additional Info
No response

I would assume there's some basic data that should be able to be returned on every file, even if it's just a UID. Part of the problem is that if you are writing a script that expects JSON output from the command and you just get back an empty string it can break the JSON decoders.
For example my script is in Python. I have a run_command function that takes the list of subcommands, appends them to the path to m365 runs it, captures the json output, then returns the decoded objects to the calling command. However Python's json decoder does not like empty strings and I don't have an object to return to the calling function so I have to check for the empty output and then return something else, in my case a boolean, that the parent function then has to have a separate code path to figure out what to do there.

This can be a bit confusing but we are also using different option names here. folder and url. It could indeed be worth the time to investigate it if we could streamline this naming/input convention

In most spo commands we support both server-relative and site-relative URLs. Do you get an error when you use the other variant @evilhamsterman? In that case I think we could align them.

The documentation isn't very clear on that, it does appear for instance that spo folder list does appear support the server relative url or the site relative url, but the documentation says it only supports the site relative. Most of the examples given on the commands use the site relative urls.
To me the server relative url seems redundant and it's easier to work with, rather than having to repeat the /sites/<sitename> everytime in addition to the folder. If either is available that's fine but it should at least be consistent.
It comes down to consistency. If every other command supports both types of url and returns a JSON object, then the file add and spo file add commands should do the same

It may be that this should be split into two separate issues which I'm fine with. One for the inconsistent return values on some commands and one for the inconsistent arguments

Part of the problem is that if you are writing a script that expects JSON output from the command and you just get back an empty string it can break the JSON decoders.

To tackle this, we started to add responses to most of our commands. But unfortunately this command doesn't have a response preview yet in the docs.

The documentation isn't very clear on that, it does appear for instance that spo folder list does appear support the server relative url or the site relative url, but the documentation says it only supports the site relative. Most of the examples given on the commands use the site relative urls.

Agree that the documentation here could use an update. About the examples, well they are just examples, they don't have to cover all possibilities of the command. Personally I mostly write examples with server-relative URLs because these URLs are simply more used within SharePoint.

It comes down to consistency. If every other command supports both types of url and returns a JSON object, then the file add and spo file add commands should do the same

I agree with the consistency part, consistency is key. Normally we accept both server-relative and site-relative URLs on most spo commands. If we missed one, please point us which option and we'll fix it ASAP.
For the response part, not all commands return a response because sometimes there shouldn't be a response. When I want to remove something, I don't expect any response for example. But I agree that spo file add should give a response about the added file. We should have a look what uniform result we can return here.
@pnp/cli-for-microsoft-365-maintainers TL;DR: spo file add doesn't return any response right now. @evilhamsterman would like some information about the added file so we should look if we can return anything here. Because the command currently doesn't log anything, I'm wondering if this is a breaking change?

I'm wondering if this is a breaking change?

I would say it is a breaking change no, it can't break scripts, right?

I would say it is a breaking change no, it can't break scripts, right?

I'm wondering if I use it in a script for example:

# Do stuff...

m365 spo file add --webUrl https://contoso.sharepoint.com/sites/project-x --folder 'Shared Documents' --path 'C:\MS365.jpg'

# Do more stuff ...

Don't you have to add | Out-Null to the command in PowerShell when we add an output for the command?

That's not really necessary, output won't break scripts, it will just light up the console 😂

@martinlingstuyl I would say that it isn't a breaking change

You're quoting @milanholemans, @waldekmastykarz, I already said I think it isn't a breaking change 😇
Anyway, I agree on the consistency argument. But sometimes you get extra information out of add commands as well. Things you'll need if you want to get a thing the next time.
And I think we also discussed that we want to return the API output if there is output. In this case the output might differ as were using multiple endpoints in one command, but still. I'd say we should not divert from that.

Ah, sorry @martinlingstuyl.

And I think we also discussed that we want to return the API output if there is output. In this case the output might differ as were using multiple endpoints in one command, but still.

Correct. When there's API output that we get for free, we should definitely consider returning it. In this case, because we're using two different APIs, which isn't obvious to our users, it will be hard to stay consistent.

I'd say we should not divert from that.

Just to be clear what you're proposing @martinlingstuyl: because we can't output consistent data shape, we shouldn't output anything. Is that what you're saying?

I meant we should not divert from returning the output from the API's. Even if that means the shape might be different when you call it with different options.

I meant we should not divert from our decision to return the output from the API's. Even if that means the shape might be different when you call it with different options. Let's just return it as it's necessary intel.

Problem here is that it won't depend on the options you are using, but on the file size of the file you try to upload. This makes it quite hard to determine in your script which output you'll get. I haven't checked the API responses yet, but I think we should just return our own response containing some useful info.

The stuff I would be interested in, and I assume so would others; is UID,
path/url/etc, time info
On Sun, Apr 2, 2023 at 12:41 PM Milan Holemans @.***>
wrote:

I meant we should not divert from our decision to return the output from
the API's. Even if that means the shape might be different when you call it
with different options. Let's just return it as it's necessary intel.
Problem here is that it won't depend on the options you are using, but on
the file size of the file you try to upload. This makes it quite hard to
determine in your script which output you'll get. I haven't checked the API
responses yet, but I think we should just return our own response
containing some useful info.
—
Reply to this email directly, view it on GitHub
https://github.com/pnp/cli-microsoft365/issues/4691#issuecomment-1493423628,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAAORKBRBMF53HSTTHJWJEDW7HI65ANCNFSM6AAAAAAWLEQ4BE
.
You are receiving this because you were mentioned.Message ID:
@.***>

Depending on the response of the API's we could also request the information after uploading it, before handing it back to the user so to say. If the api response is not sufficient in some cases, this might be a good addition. Although it has impact on the performance of the command, it would be more user friendly.

I agree with @milanholemans and suggest we use one output shape per command. Having it changing based on arguments will be too confusing and too unpredictable.

Depending on the response of the API's we could also request the information after uploading it, before handing it back to the user so to say. If the api response is not sufficient in some cases, this might be a good addition. Although it has impact on the performance of the command, it would be more user friendly.

It would be a shame to trade-off performance for perceived usability. If retrieving data on a non-get/-list operation requires a separate call then I suggest we give the user a choice whether they need it or not, rather than forcing it on them. Since the API that we use does return some information, could we take the intersection of both API responses and return it, which offers users some information as to the file they've just uploaded? Would that be enough and allow us to strike the balance between convenience and performance?


Allow setting security context of pods using persistent volumes

Overview
In order to support Ceph persistent volume claims, pods may need to be configured with a security context. This affects components such as:

standard authservice
brokered address space broker
standard address space broker

For the brokers, the podTemplate.spec in the standardinfraconfig/brokeredinfraconfig can be extended to specify the security context.
For standard-authservice, the syntax of AuthenticationService resource needs to be extended.

This feature will also support the running of EnMasse under OLM, where for installation in some namespaces, securityContext.fsGroup must be applied.   The scope of the features needs to include the IoT file device registry, which also requires a persistent volume.

As @lulf suggests above, for brokers, the existing pod template can be extended to respect the security context contained with the template attached to the infraconfig.
For the authentication service, one way to achieve this is to add a podTemplate to the standard spec.   For consistency, we'd also support the same field on the none authentication service too.
For the IoT file device registry, we could add a SecurityContext to the CommonServiceConfig.  I rejected the idea of adding a PodTemplate there as is role would overlap partially with the existing remit of ContainerConfig.
Currently the EnMasse operator supports a FS_GROUP_OVERRIDE environment variable allow the fs group to be specified globally.  This is flawed.  It is only a coincidence that the broker/keycloak/file device registry images happen to require the same gid.   Support for the FS_GROUP_OVERRIDE will be removed.  The upshot is that is the user wants to install EnMasse in openshift-operators (i.e. cluster wide, the user must specify the security context in the resources defined above.

@k-wall Looks reasonable to me. Note that the additional FS_GROUP_STANDARD_AUTHSERVICE_OVERRIDE i made should be removed as well.
I'm a bit divided on adding podTemplate to authservice spec, mainly because we already have resources called out explicitly in the schema today. I think if we add podTemplate to the spec, we should make sure one can set resources there as well. I'm fine with adding a securityContext field explicitly as well.

@lulf I share your concerns about the addition of the podTemplate.  On the one hand it is nice as it gives the user controls over many aspects, in a way that it is familiar to the Kubernetes user, and follows the pattern we have established on the infraconfigs. On the other, I have a dislike for too many levers.

or the IoT file device registry, we could add a SecurityContext to the CommonServiceConfig. I rejected the idea of adding a PodTemplate there as is role would overlap partially with the existing remit of ContainerConfig.

I wouldn't add it to the CommonServiceConfig, as only the FileBasedDeviceRegistry uses a PVC. And IIRC this would only make sense for pods which have a PVC attached. So we should only add this to the FileBasedDeviceRegistry.
For Infinispan we would need to set this on the Infinispan pods.

After reflection, I think to add code to default the appropiate fs group if there is no security context provided and the target namespace is openshift-operators.  That way, EnMasse will work out of the box if installed cluster wide using OLM.
To allow for this I add a environment variable which will be set from the enmasse operator deployment which specifies the file system GIDs to be applied if the namespace is openshift-operators.