[RFC] Custom subgraph property enhancements

Description
Request for comments on the next PR for enhancing custom subgraph property support
Heres some suggestions from the initial PR (Part 1):

docs, readme, tutorial #17585
dynamic graph passes
move builds of so's for customOp/subgraphProp from top level directory
Load libraries that are found as siblings next to libmxnet.so/dll. This will allow us to package external libraries into the pip wheel (ie. MKLDNN, TensorRT)
Load libraries that are specified in an environment variable like MXNET_EXT_LIBS=/path/to/libmylib.so
Apply subgraphBackend during bind when specified by an environment variable like MXNET_SUBGRAPH_BACKEND=myProp

Suggestions from the compile PR:

Enable removing params that are fully consumed by a subgraph during compilation to avoid duplication of tensor values

References

initial PR (Part 1): #17034
compile PR #17623

@mxnet-label-bot add RFC

Current implementation (as of 3/18/2020) only supports combining ops into subgraphs generically. does not allow for fine grained control to say which ops should go into which subgraphs. Need to modify supportedOps API to change the ids vector from bool (supported or not) to integer (to say which subgraph this node should go in to). This will allow for coloring and fine grained control of ops in a subgraph.
https://github.com/apache/incubator-mxnet/blob/07d0b738384cba011ce519bcc41aeeaaafcd22c1/example/extensions/lib_subgraph/subgraph_lib.cc#L179-L181
Will also need to modify custom_subgraph_property.h selector to use these int values to define the subgraph instead of just looking for existence of the operator name.
https://github.com/apache/incubator-mxnet/blob/41d534be3ffd7b45846f555366230f4e811d8751/src/operator/subgraph/partitioner/custom_subgraph_property.h#L47-L54
Open question:
How do we handle the cases where we want to remove args/aux from the top level of the model, migrating those into the subgraph? If we compile a subgraph with Args/Aux then those tensor values are effectively frozen in the compiled binary so we need to be clear with users that they can no longer be changed in the top level model

Need to support removing args/aux from custom graph pass, re-using the optimized symbol when calling optimize_for in Gluon repeatedly


Parameter to adjust starting LED

FEATURE REQUEST:
Firstly, thanks for the project. I've been using Tasmota then WLED and now ESPHome for this use case. I really like leveraging the extensibility of ESPHome to have temp/humidity and bluetooth proxy on the same board...
One thing I haven't figured out yet is how to adjust the starting LED for the clock - essentially shifting the 12 o'clock around the clock so it can adjust to my specific mounting position. I have my 12 o'clock in the middle of the strip (LED 30) as I wanted the 30 minute location to be where my power cable comes out so it comes out the bottom without impacting the LED strip.
I'm having a play around with the code myself but thought I'd raise it as a useful feature to have under the "globals" section. Will let you know if I figure this out or need some guidance. I'm thinking of some sort of time adjustment based on the pin which is entered...see how it goes...

Hey @BlackCatPeanut!
Thx for the suggestion, it should be possible to add this feature by adding an offset to all of the index values used in the code. Messing with the time might not be the best idea because it will make debugging very unintuitive.
Not sure if I get the time but if so I will let you know :)

I've had a playaround and have added the number component to capture the desired offset position. Unfortunately there is no restore as its a lambda so you can accept updates from HA. To keep it, the initial value needs to be set...
I tried to get the value into the lambda but cannot follow the indices code:
`substitutions:
num_leds: "60"
esphome:
name: clock-living-room
on_boot:
# set "loading" effect while initializing
priority: 500.0
then:
# enable clock effect after boot
- light.turn_on:
id: light_ring
brightness: 100%
effect: Sync
red: 0%
blue: 0%
green: 0%
esp32:
board: esp32dev
framework:
type: arduino
Enable logging
logger:
level: debug
Enable Home Assistant API
api:
password: !secret esphome_password
ota:
password: !secret esphome_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: <IP_ADDRESS>
gateway: <IP_ADDRESS>
subnet: <IP_ADDRESS>
dns1: <IP_ADDRESS>
Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Clock Living Room Fallback AP"
password: !secret esphome_password
captive_portal:
globals:

id: clock_brightness
type: int
restore_value: yes
initial_value: '255'

id: clock_indicators_enabled
type: bool
restore_value: yes
initial_value: 'true'

id: clock_seconds_enabled
type: bool
restore_value: yes
initial_value: 'true'

id: wide_hour_hand_enabled
type: bool
restore_value: yes
initial_value: 'false'

id: offset_LED_position
type: int
restore_value: false

time:

platform: sntp
id: sntp_time
timezone: Europe/Paris
on_time_sync:
then:
- light.turn_on:
id: light_ring
effect: Clock

switch:

platform: template
name: "Clock Indicators"
icon: mdi:progress-clock
lambda: !lambda |-
return id(clock_indicators_enabled);
turn_on_action:
globals.set:
id: clock_indicators_enabled
value: 'true'
turn_off_action:
globals.set:
id: clock_indicators_enabled
value: 'false'

platform: template
name: "Clock Seconds"
icon: mdi:update
lambda: !lambda |-
return id(clock_seconds_enabled);
turn_on_action:
globals.set:
id: clock_seconds_enabled
value: 'true'
turn_off_action:
globals.set:
id: clock_seconds_enabled
value: 'false'

platform: template
name: "Wide Hour Hand"
icon: mdi:clock-plus-outline
lambda: !lambda |-
return id(wide_hour_hand_enabled);
turn_on_action:
globals.set:
id: wide_hour_hand_enabled
value: 'true'
turn_off_action:
globals.set:
id: wide_hour_hand_enabled
value: 'false'

number: # Input number to set position but for permanent setting adjust initial value

platform: template
name: "LED position offset"
icon: mdi:counter
min_value: "1"
max_value: "${num_leds}"
step: "1"
initial_value: '30' # Update value to to restore after boot as Lambda updates from HA cannot be restored from Flash
set_action:
then:
- globals.set:
id: offset_LED_position
value: !lambda return x;

light:

id: light_ring
internal: False
platform: neopixelbus
type: GRB
variant: WS2812X
pin: GPIO32
num_leds: "${num_leds}"
method: esp32_i2s
name: "Living Room Clock"
color_correct: [50%, 50%, 50%]
effects:

addressable_lambda:
name: "Clock"
update_interval: 32ms
lambda: |-
static boolean initialized;
static Color clock_ring_colors [${num_leds}];
if (initialized == false) {
std::fill_n(clock_ring_colors, it.size(), Color::BLACK);
initialized = true;
}
auto time = id(sntp_time).now();
if (!time.is_valid()) {
return;
}
int offset = (int) id(offset_LED_position); #Read offset value in lambda
// calculate led indices
int second_idx = (int) (time.second * (it.size() / 60));
int minute_idx = (int) (time.minute * (it.size() / 60));
// this idx would "jump" in big steps
int hour_idx = (int) ((time.hour % 12) * (it.size() / 12));
// this moves one led at a time
int hour_inc_min_idx = hour_idx + (int) (((float) time.minute / 12) * (it.size() / 60));
// the hour hand may be bigger than one led, so we use an array for that
std::vector hour_idx_vector;
if (id(wide_hour_hand_enabled)) {
hour_idx_vector.push_back((hour_inc_min_idx - 1 + it.size()) % (it.size()));
hour_idx_vector.push_back(hour_inc_min_idx);
hour_idx_vector.push_back((hour_inc_min_idx + 1) % it.size());
} else {
hour_idx_vector.push_back(hour_inc_min_idx);
}
// fade out old colors
for (int i = 0; i < it.size(); i++) {
Color old_color = clock_ring_colors[i];
int percentage = 2;
int red = old_color.red;
int red_sub = std::max(1, (int) ((red / 100.0) * percentage));
int green = old_color.green;
int green_sub = std::max(1, (int) ((green / 100.0) * percentage));
int blue = old_color.blue;
int blue_sub = std::max(1, (int) ((blue / 100.0) * percentage));
if (red <= red_sub) { red = 0; } else { red -= red_sub; }
if (green <= green_sub) { green = 0; } else { green -= green_sub; }
if (blue <= blue_sub) { blue = 0; } else { blue -= blue_sub; }
Color new_color = Color(red, green, blue, 0);
clock_ring_colors[i] = new_color;
}
int indicator_brightness = id(clock_brightness) / 3;
Color indicator_color = Color(indicator_brightness, indicator_brightness, indicator_brightness);
// set base colors
Color hour_color = Color(0, 0, id(clock_brightness));
Color minute_color = Color(0, id(clock_brightness), 0);
Color second_color = Color(id(clock_brightness), 0, 0);
if (!id(clock_seconds_enabled)) {
second_color = Color::BLACK;
}
// merge colors if they overlap
// if minute idx inside hour idx range
if (std::find(std::begin(hour_idx_vector), std::end(hour_idx_vector), minute_idx) != std::end(hour_idx_vector)) {
minute_color += hour_color;
}
if (second_idx == minute_idx) {
minute_color += second_color;
second_color = minute_color;
} else if (std::find(std::begin(hour_idx_vector), std::end(hour_idx_vector), second_idx) != std::end(hour_idx_vector)) {
second_color += hour_color;
}
// === set colors from bottom to top
// indicators
if (id(clock_indicators_enabled)) {
  for (int i = 0; i < it.size(); i += (int) ((float) it.size() / 12)) {
    clock_ring_colors[i] = indicator_color;
  }
}
// hours
for (int i = 0; i < hour_idx_vector.size(); i++) {
  clock_ring_colors[hour_idx_vector[i]] = hour_color;
}
// minutes
clock_ring_colors[minute_idx] = minute_color;
// seconds
if (id(clock_seconds_enabled)) {
  clock_ring_colors[second_idx] = second_color;
}
// apply colors to light
for (int i = 0; i < it.size(); i++) {
  it[i] = clock_ring_colors[i];
}

addressable_scan:
name: Sync
move_interval: 100ms
scan_width: 1

addressable_rainbow:
name: "Rainbow Spinner"
speed: 8
width: "${num_leds}"

addressable_rainbow:
name: "Rainbow Fader"
speed: 3
width: "${num_leds}"

random:
name: "Random Slow"
transition_length: 30s
update_interval: 30s

DHT11 Sensor:
#sensor:
- platform: dht
pin: GPIO2
temperature:
name: "Living Room Temperature"
humidity:
name: "Living Room Humidity"
update_interval: 60s

Tried to pull the offset value into the Lambda but I don't think my understanding of the indices is correct:
`effects:
- addressable_lambda:
name: "Clock"
update_interval: 32ms
lambda: |-
static boolean initialized;
static Color clock_ring_colors [${num_leds}];
if (initialized == false) {
std::fill_n(clock_ring_colors, it.size(), Color::BLACK);
initialized = true;
}
auto time = id(sntp_time).now();
if (!time.is_valid()) {
return;
}
int offset = id(offset_LED_position);
// calculate led indices
int second_idx = (int) ((time.second * (it.size() / 60 + offset)));
int minute_idx = (int) ((time.minute * (it.size() / 60 + offset)));
// this idx would "jump" in big steps
int hour_idx = (int) (((time.hour % 12) * (it.size() / 12 + offset)));
// this moves one led at a time
int hour_inc_min_idx = hour_idx + (int) (((float) time.minute / 12) * (it.size() / 60));
// the hour hand may be bigger than one led, so we use an array for that
std::vector hour_idx_vector;
if (id(wide_hour_hand_enabled)) {
hour_idx_vector.push_back((hour_inc_min_idx - 1 + it.size()) % (it.size()));
hour_idx_vector.push_back(hour_inc_min_idx);
hour_idx_vector.push_back((hour_inc_min_idx + 1) % it.size());
} else {
hour_idx_vector.push_back(hour_inc_min_idx);
}
// fade out old colors
for (int i = 0; i < it.size(); i++) {
Color old_color = clock_ring_colors[i];
int percentage = 2;
int red = old_color.red;
int red_sub = std::max(1, (int) ((red / 100.0) * percentage));
int green = old_color.green;
int green_sub = std::max(1, (int) ((green / 100.0) * percentage));
int blue = old_color.blue;
int blue_sub = std::max(1, (int) ((blue / 100.0) * percentage));
if (red <= red_sub) { red = 0; } else { red -= red_sub; }
if (green <= green_sub) { green = 0; } else { green -= green_sub; }
if (blue <= blue_sub) { blue = 0; } else { blue -= blue_sub; }
Color new_color = Color(red, green, blue, 0);
clock_ring_colors[i] = new_color;
}
int indicator_brightness = id(clock_brightness) / 3;
Color indicator_color = Color(indicator_brightness, indicator_brightness, indicator_brightness);
// set base colors
Color hour_color = Color(0, 0, id(clock_brightness));
Color minute_color = Color(0, id(clock_brightness), 0);
Color second_color = Color(id(clock_brightness), 0, 0);
if (!id(clock_seconds_enabled)) {
second_color = Color::BLACK;
}
// merge colors if they overlap
// if minute idx inside hour idx range
if (std::find(std::begin(hour_idx_vector), std::end(hour_idx_vector), minute_idx) != std::end(hour_idx_vector)) {
minute_color += hour_color;
}
if (second_idx == minute_idx) {
minute_color += second_color;
second_color = minute_color;
} else if (std::find(std::begin(hour_idx_vector), std::end(hour_idx_vector), second_idx) != std::end(hour_idx_vector)) {
second_color += hour_color;
}
        // === set colors from bottom to top
        // indicators
        if (id(clock_indicators_enabled)) {
          for (int i = 0; i < it.size(); i += (int) ((float) it.size() / 12)) {
            clock_ring_colors[i] = indicator_color;
          }
        }
        // hours
        for (int i = 0; i < hour_idx_vector.size(); i++) {
          clock_ring_colors[hour_idx_vector[i]] = hour_color;
        }
        // minutes
        clock_ring_colors[minute_idx] = minute_color;
        // seconds
        if (id(clock_seconds_enabled)) {
          clock_ring_colors[second_idx] = second_color;
        }
        // apply colors to light
        for (int i = 0; i < it.size(); i++) {
          it[i] = clock_ring_colors[i];
        }`

Further attempts to integrate the offset into the lambda - I think it needs two offsets - one for seconds & minutes (sec_min_offset) and another for hour (hour_offset)...
lambda: |-
            static boolean initialized;
            static Color clock_ring_colors [${num_leds}];
            if (initialized == false) {
              std::fill_n(clock_ring_colors, it.size(), Color::BLACK);
              initialized = true;
            }
            auto time = id(sntp_time).now();
            if (!time.is_valid()) {
              return;
            }
            int sec_min_offset = id(offset_LED_position);
            int hour_offset = (sec_min_offset / 5);
            // calculate led indices
            int second_idx = (int) ((time.second * (it.size() / 60 + sec_min_offset)));
            int minute_idx = (int) ((time.minute * (it.size() / 60 + sec_and_min_offset)));
            // this idx would "jump" in big steps
            int hour_idx = (int) (((time.hour % 12) * (it.size() / 12 + hour_offset)));
            // this moves one led at a time
            int hour_inc_min_idx = hour_idx + (int) (((float) time.minute / 12) * (it.size() / 60));
            // the hour hand may be bigger than one led, so we use an array for that
            std::vector<int> hour_idx_vector;
            if (id(wide_hour_hand_enabled)) {
              hour_idx_vector.push_back((hour_inc_min_idx - 1 + it.size()) % (it.size()));
              hour_idx_vector.push_back(hour_inc_min_idx);
              hour_idx_vector.push_back((hour_inc_min_idx + 1) % it.size());
            } else {
              hour_idx_vector.push_back(hour_inc_min_idx);
            }
            // fade out old colors
            for (int i = 0; i < it.size(); i++) {
              Color old_color = clock_ring_colors[i];
              int percentage = 2;
              int red = old_color.red;
              int red_sub = std::max(1, (int) ((red / 100.0) * percentage));
              int green = old_color.green;
              int green_sub = std::max(1, (int) ((green / 100.0) * percentage));
              int blue = old_color.blue;
              int blue_sub = std::max(1, (int) ((blue / 100.0) * percentage));
              if (red <= red_sub) { red = 0; } else { red -= red_sub; }
              if (green <= green_sub) { green = 0; } else { green -= green_sub; }
              if (blue <= blue_sub) { blue = 0; } else { blue -= blue_sub; }
              Color new_color = Color(red, green, blue, 0);
              clock_ring_colors[i] = new_color;
            }
            int indicator_brightness = id(clock_brightness) / 3;
            Color indicator_color = Color(indicator_brightness, indicator_brightness, indicator_brightness);
            // set base colors
            Color hour_color = Color(0, 0, id(clock_brightness));
            Color minute_color = Color(0, id(clock_brightness), 0);
            Color second_color = Color(id(clock_brightness), 0, 0);
            if (!id(clock_seconds_enabled)) {
              second_color = Color::BLACK;
            }
            // merge colors if they overlap
            // if minute idx inside hour idx range
            if (std::find(std::begin(hour_idx_vector), std::end(hour_idx_vector), minute_idx) != std::end(hour_idx_vector)) {
              minute_color += hour_color;
            }
            if (second_idx == minute_idx) {
              minute_color += second_color;
              second_color = minute_color;
            } else if (std::find(std::begin(hour_idx_vector), std::end(hour_idx_vector), second_idx) != std::end(hour_idx_vector)) {
              second_color += hour_color;
            }

            // === set colors from bottom to top
            // indicators
            if (id(clock_indicators_enabled)) {
              for (int i = 0; i < it.size(); i += (int) ((float) it.size() / 12)) {
                clock_ring_colors[i] = indicator_color;
              }
            }
            // hours
            for (int i = 0; i < hour_idx_vector.size(); i++) {
              clock_ring_colors[hour_idx_vector[i]] = hour_color;
            }
            // minutes
            clock_ring_colors[minute_idx] = minute_color;
            // seconds
            if (id(clock_seconds_enabled)) {
              clock_ring_colors[second_idx] = second_color;
            }
            // apply colors to light
            for (int i = 0; i < it.size(); i++) {
              it[i] = clock_ring_colors[i];
            }

I need to reupload this to the clock as I have put it back up on the wall rather than have it sitting on the desk.

I think you are overcomplicating things.
If you add an offset to the i at the very last loop, isn't this sufficient?
Something like this:
// apply colors to light
for (int i = 0; i < it.size(); i++) {
  val index = (i + offset) % it.size()
  it[index] = clock_ring_colors[i];
}

That did work! Thanks for the nudge.
I was going to make it editable within Home Assistant but there is complications as the offset cannot be stored in flash so we'd need to read it from Home Assistant at boot...then more edge cases for offline etc... For the moment I have just added a global variable with an initial value and left it at that:
  - id: offset_LED_position
    type: int
    restore_value: false
    initial_value: '30' # Update value to to restore after boot as Lambda updates from HA cannot be restored from Flash

And then the following declared in the lambda:
            int offset = id(offset_LED_position);
With the final piece being your suggestion with a minor tweak:
            //apply colors to light
            for (int i = 0; i < it.size(); i++) {
              int index = (i + offset) % it.size();
              it[index] = clock_ring_colors[i];
            }

Thanks for the help to get it working. And thanks for sharing the project!


Specify the versions of Juju that we support on Charmed Kubeflow's supported versions page

Context
Our support versions docs page lists kubernetes versions but not Juju versions.  We do have requirements on what Juju version can be used, so we should include that here as well.
What needs to get done

add juju versions to supported versions, perhaps starting with the next ckf release

Definition of Done
see above

Done


Mmonarch dev

I'll go ahead and merge this into development.  It still needs some pytests and release notes which we'll have to work up before any new release.


Version Packages

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
<EMAIL_ADDRESS>Patch Changes

#307 ad3ea55 Thanks @threepointone! - fix: route sub party requests correctly
sigh. we were always fetching from the main party. This fix routest he request to the correct sub party.

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


Compiler run failed error[7576]: DeclarationError: Undeclared identifier. Did you mean "Vm"?

Component
Forge
Have you ensured that all of these are up to date?

[X] Foundry
[x] Foundryup

What version of Foundry are you on?
forge 0.2.0 (8d0099b 2023-04-19T00:08:21.764755505Z)
What command(s) is the bug in?
forge build
Operating System
Windows
Describe the bug
pragma solidity ^0.8.0;

import "forge-std/Test.sol";
import "forge-std/console.sol";
import "../src/ERC20PERMIT.sol";
import "../src/GasLessTokenTransfer.sol";

contract GasLessTokenTransferTest {
    ERC20Permit private token;
    GasLessTokenTransfer private gasLess;

    address sender;
    address receiver;
    uint constant AMOUNT = 1000; // 10K DAI TOKEN WE WILL TRANSFER
    uint constant FEE = 10; // 10 DAI TOKEN WILL BE PAID AS FEE

    uint256 constant SENDER_PRIVATE_KEY = 123;

    function setUp() public {
        sender = vm.addr(SENDER_PRIVATE_KEY);
        receiver = address(2); // this is local address of foundry that will be act as receiver address
        token = new ERC20Permit("test", "test", 18);

        //
        token.mint(sender, AMOUNT + FEE); // here we are givng amount to sender.
        gasLess = new GasLessTokenTransfer();
    }

    // this test gonna let sender sign up the permit message and this contract will call GasLessTokenTransfer contract
    // and token will be transfer from sender to reciever address  amd this contract will recieve some of fee
    function testValidSig() public {
        uint deadline = block.timestamp + 60;
        // prepare the permit hash
        bytes32 permitHash = _getPermitHash(
            sender,
            address(gasLess),
            AMOUNT + FEE,
            token.nonces(sender),
            deadline
        );

        // after getting the hash, sign the hash with the help of sender
        (uint v, bytes32 r, bytes32 s) = Vm.sign(
            SENDER_PRIVATE_KEY,
            permitHash
        ); // v ,r ,s part of signed message

        // Execute send
        gasLess.send(
            address(token),
            sender,
            receiver,
            AMOUNT,
            FEE,
            deadline,
            v,
            r,
            s
        );

        // check token balance
        token.balanceOf(sender);
    }

    // this will return permit hash of signed message
    function _getPermitHash(
        address owner,
        address spender,
        uint value,
        uint nonces,
        uint deadline
    ) private view returns (bytes32) {
        return
            keccak256(
                abi.encodePacked(
                    "\x19\x01",
                    token.DOMAIN_SEPARATOR(),
                    keccak256(
                        abi.encode(
                            keccak256(
                                "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
                            ),
                            owner,
                            spender,
                            value,
                            nonces,
                            deadline
                        )
                    )
                )
            );
    }
}

when i run forge build it shows error
[⠃] Compiling 23 files with 0.8.19
[⠊] Solc 0.8.19 finished in 1.35s
Error:
Compiler run failed
error[7576]: DeclarationError: Undeclared identifier. Did you mean "Vm"?
  --> test/GasLessTokenContract.t.sol:21:18:
   |
21 |         sender = vm.addr(SENDER_PRIVATE_KEY);
   |                  ^^```

You need to inherit the Test contract from forge-std: contract GasLessTokenTransferTest is Test {}

oops sorry i did not check that silly mistake. my bad


Add 'all' target to oneMKL samples for Eclipse

Description
Adds "all" targets for oneMKL sample makefiles which do not have them. This is the default target for Eclipse.
Type of change

[X] Bug fix (non-breaking change which fixes an issue)

These test failures are expected on Beta09. Merging the rest of the fix.


Add Chinese document

Added a Chinese document, fortunately merged and I would like to maintain it for a long time

This looks like an interesting effort! You should definitely share this with folks in our Discord.
Unfortunately, it's not something that we can merge in at this time:

It's not solving a major problem for OSSU. The courses that are pointed to are all in English. If a user does not speak enough English to understand our curriculum page, they will not be able to understand the resources the page points to.
It's not something that OSSU can maintain. That you are able to maintain it is a good reason to do so in your repo.

If you develop a track record of contribution and maintenance, at some point in the future we could re-evaluate merging a future foreign language resource.
I will mention that OSSU has a Chinese language CS curriculum. It has not been updated in many years and we intend to archive it. Forking that repo, updating the broken links, developing a community that uses the curriculum, would be the sorts of contributions that would truly move the needle for OSSU's Chinese language offerings.

Sorry for not updating for many years for the ropo. Since 2017 I am busy for my fulltime job after my graduate, it takes all my spare time. I will see what I can do. It would my honer if you contribute the Chinese version.

Hi @jimages! It is good to know that you are still following OSSU PRs and Issues. I definitely understand having new responsibilities and not having time for previous projects. I'd like to know more about your availability, how you would characterize the current state of the Chinese language OSSU CS curriculum, your interest in advising new contributors and more. If you're open to talking, send me an email at<EMAIL_ADDRESS>


Encode from string being worng

So basically i am getting string from element of an HTML website which encode in windows 1255,
but the text in my android app is in latin1, i tried to decode/encode but that doesn't seems to work..
any suggestions?
code:
class El{
  final body;
  El(this.body);
}
Future<El> gatherMainPage(String forumName,int page )async{
  final response = await http.get('http://rotter.net/cgi-bin/forum/dcboard.cgi?az=list&forum=${forumName}&mm=${page.toString()}&archive=');
    if (response.statusCode == 200) {

    // If server returns an OK response, parse the JSON
      var element = await _scrape(response);
      return element;

  } else {
    // If that response was not OK, throw an error.
    throw Exception('Failed to load post');
  }
}

Future<El> _scrape(http.Response rsp)async{
  final body = cv.latin1.decode(rsp.bodyBytes);
  var html = parse(body);
  var ellist = html.getElementsByTagName('table');
  List<Title> titles;
  // titels are in place 15 do not toch this
  final elm = ellist[15].children;
    Element a =elm[0].children[1].children[1].children[0].children[0];
    String href = a.attributes['href'];

    var title =a.children[0].text;

    return El(title);

Please consider asking support questions in one of the other channels listed at http://flutter.io/support .


Fix for rendering semi-transparent models and plane renderer

Configure the renderable to use only 1 channel.
.channel(0)

Note Previously I reduced the number of primitives to 1 from 4, but I double checked that it has no effect. So the number of primitives I set back to 4.

@ThomasGorisse
Do you remember why we had to set the channel number to 3?
https://github.com/SceneView/sceneview-android/commit/cd6d0cea56fabd85c74aada542b1f14abcc175cc#diff-06d11f1033730f3791ef91200f04eaf3b4b05f00d0db2a09e0cfc7d83ae0e5caR176

@grassydragon Please remove it.
So the PR is fixing something at the end?

So the PR is fixing something at the end?

@ThomasGorisse
The ArSceneView 0.9.7

The fix applied.

@kiler222
Great! But is it possible to remove the channel call completely to use the default second channel?

@kiler222 Great! But is it possible to remove the channel call completely to use the default second channel?

In 0.9.7 the Filament 1.31.4 is used, where the default channel is 0. Only from Filament 1.31.6 the default channel is 2.
Do you plan to upgrade filament in the next release?
Sure I can remove the channel(0) and leave it to to the default value.

Do you plan to upgrade filament in the next release?

Probably, so it's better to use the default value.

Hello @kiler222
Can you guide how achieve above second ui, I want to draw a model with a plan tracker and want move with the plan finder, Can you guide plz


Adds example for generating Cloud CDN Signed URLs

Example implementation of generating URL signature for Cloud CDN.
Based on: https://cloud.google.com/cdn/docs/using-signed-urls#creating_signed_urls
@ahmetb

Wouldn't this be better in an "auth" directory? Or is this consistent with other languages?

other languages put this in cdn/ as it's a cdn feature.

can we get a test?

It will be very difficult to actually test this against an API. We should have unit tests, though. Maybe we can test the file generated at the end to see it matches the value.
This is just an offline algorithm that makes no API calls, so it should always generate the same value. @brona please copy test cases from https://github.com/GoogleCloudPlatform/golang-samples/blob/master/cdn/signedurls/signurl_test.go, it should provide the same signed output.

@ahmetb @bshaffer can you review this one?

Sorry for dropping the ball here. I will defer to Brent for approval.

Gentle ping here @bshaffer please take another look.

Ping. 🐶


Internal Error after deploying on zeit

I followed all the instructions and deployed on zeit.
After deployment, there is an Internal server error.
Here is the deployed link : https://neighbor-express-1aoo9y2sz.now.sh/
Errors in console :

Missing languages value in CMS
TypeError: Cannot read property 'split' of undefined

@vinit-2997 Sorry! We've made some changes to our base CMS to handle multiple languages, and I think you started before we'd added that.
If you open the CMS tab of your airtable, add a new row that has
key: language
data: English:en,Spanish:es
I'm going to add it to our default CMS linked in the github as well, and make sure that we keep that airtable up to date as we push out PRs, and ensure better backwards compatibility.
I opened #15 to catch for this, and have smart defaults.

Great.
Thanks for the update.


Fix patching deployment when upgrade to istio 1.24 (#54170)

Fix upgrade to 1.24, the managed gateway/waypoint cannot be patched

add release note

revert debug log level

Fix comments

address comment

lint

add legacy label

Please provide a description of this PR:

@hzxuzhonghu: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name
Commit
Details
Required
Rerun command

unit-tests-arm64_istio_release-1.24
094e2238b17773cab62c77d5c5af34257f9e9485
link
true
/test unit-tests-arm64

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.


Check if opts is nil before checking if 'with_text' option is present

Was raising an error on nvim startup if opts is nil (empty init function). This PR checks if opts is empty before hand.

awesome, thanks. I'm away from my workstation now so I can't do proper tests for a while. Sorry for that.


Anyway to convert plain text(link) to <a href .. > tag when space or enter press?

As above, Anyway to convert plain text(link) to <a href .. > tag when space or enter press? Thank in advance

I have same problem
Do you have a solution?


[Question]: Clarification on the division of full user dialogue history into context and history

Hello,
I'm currently studying your code and trying to understand how the full user dialogue history is divided into the short recent dialogue context and the long dialogue history, as described in the corresponding paper.
According to the paper:

"Besides, to avoid frequently encoding the full user history h, we divide it into a short recent dialogue context c and a long dialogue history l, i.e., h = [c, l], where only the short recent context c will interact with other side information in the encoder."

However, after examining the code, its not clear how this splitting process occurs. Could you provide more information on how this process works? or point to the part of the code that handles this division? Any help or guidance would be greatly appreciated.
Best regards

Hi, you can reference to https://github.com/X-PLUG/ChatPLUG/blob/main/XDPX/xdpx/utils/chat/pipeline.py#L527C24-L527C24  for inference. As for training phase, see https://github.com/X-PLUG/ChatPLUG/blob/main/XDPX/xdpx/loaders/chat.py#L247C17-L247C17 , here we've split the full history to context and long dialogue history in advance. The variable contents[0] stands for context and contents[1] stands for a string concatenating by history, user_profile, bot_profile and knowledge.

Hi @chenhehong, thanks for your response.
However, I still have a bit confusion regarding the splitting of full history into context and long dialogue history during training.
In the training phase code, I noticed that contents[0] is assigned to the context and contents[1] is assigned to the response.
If I understand correctly, contents[2] likely contains the remaining history, along with user_profile, bot_profile and knowledge. These different components are then further processed and eventually tokenized into query_token_list, which is returned by the parse method.
        contents[0] = contents[0].strip().strip(SEP)
        contents[1] = contents[1].strip().strip(SEP)
        contents[2] = contents[2].strip().strip(SEP)

        context = contents[0]
        response = contents[1]
        passages = contents[2].split(';;;')

        context = process_context(context, SEP)
        query_list = []
        for p in passages:
            p = p.strip()
            if len(p) == 0:
                continue
            p = p.strip(";")
            p = p.strip(SEP)
            if p.startswith("history"):
                p = p[len("history:"):]
                p = p.replace(' \t ', SEP).replace('\t', SEP)
                p = process_history(p, SEP)
                p = history_template[random.randint(0, len(history_template) - 1)].format(context=context, history=p)
            elif p.startswith("user_profile"):
                p = p[len("user_profile:"):]
                p = user_profile_template[random.randint(0, len(user_profile_template) - 1)].format(context=context,
                                                                                user_profile=p)
            elif p.startswith("bot_profile"):
                p = p[len("bot_profile:"):]
                p = bot_profile_template[random.randint(0, len(bot_profile_template) - 1)].format(context=context,
                                                                                bot_profile=p)
            else:
                p = p[len("knowledge:"):]
                p = knowledge_template[random.randint(0, len(knowledge_template) - 1)].format(context=context,
                                                                                knowledge=p)
            p = p + SEP
            query_list.append(p)
        if len(query_list) == 0:
            p = context_template[random.randint(0, len(context_template) - 1)].format(context=context)
            p = p + SEP
            query_list.append(p)

        response = response + SEP

        query_token_list = [cls._tokenizer.encode(q) for q in query_list]
        response_token = cls._tokenizer.encode(response)

        return {
            'id': _id,
            'query': query_token_list,
            'response': response_token,
        }

Could you please confirm whether my understanding is correct, And if so, could you provide some insight into where and how the initial split between the context and the remaining dialogue history (in contents[2]) is performed? From inference, it seems to be 2 https://github.com/X-PLUG/ChatPLUG/blob/ac5e7fa9b63b2f3447e7b88bf00e1d197799c9c1/XDPX/chat_pipeline/chatplug_3.7B_sftv2.6.0_instruction.hjson#L43
Thanks

Your understanding is correct. And we split context and history offline. That is, if you follow the example https://github.com/X-PLUG/ChatPLUG#one-click-train , you can perform splitting operation at https://github.com/X-PLUG/ChatPLUG/blob/main/data/belle/process_belle_0.5M.py#L12 . However, as the Belle dataset does not have a long history, the passages field is empty in the example code.

Thanks!


[Build System: CMake] Darwin Supported Archs and Modules.

This PR adds the ability for users to override the complete list of supported architectures when building for Darwin platforms. Setting the CMake cache variable SWIFT_DARWIN_SUPPORTED_ARCHS to a space separated list of architectures (e.g. armv7 arm64 x86_46) will exclude all other supported architectures across all the Darwin platforms. Leaving this option blank will configure all the default architectures specified in cmake/modules/DarwinSDKs.cmake.
Additionally users are able to set SWIFT_DARWIN_MODULE_ARCHS to configure and build only the .swiftmodule content for architectures that have been excluded by SWIFT_DARWIN_SUPPORTED_ARCHS. If architectures are listed in both of these cache variables then the supported architectures list takes precedence. The SDK output will now optionally include a Module Architectures section if any have been selected.
rdar://50561574

@swift-ci please test

@swift-ci please test

Build failed
Swift Test Linux Platform
Git Sha - 32501fa9f3f064e68962c5724e33f3c2123faa37

Build failed
Swift Test OS X Platform
Git Sha - 32501fa9f3f064e68962c5724e33f3c2123faa37

@swift-ci please test

Build failed
Swift Test Linux Platform
Git Sha - 4ec60332f9aa824c8ec30333260170fdc1ee84a6

Build failed
Swift Test OS X Platform
Git Sha - 4ec60332f9aa824c8ec30333260170fdc1ee84a6

@swift-ci please test

Build failed
Swift Test Linux Platform
Git Sha - 03dbada12f5387de79fec30034941d3733624848

Build failed
Swift Test OS X Platform
Git Sha - 03dbada12f5387de79fec30034941d3733624848

@swift-ci please test

Build failed
Swift Test Linux Platform
Git Sha - 029c25a1374a57e2985fe143ac5d87ca18d9d509

Build failed
Swift Test OS X Platform
Git Sha - 029c25a1374a57e2985fe143ac5d87ca18d9d509

@jrose-apple Correct, the supported architectures are intersected with the architectures supported by each platform.

@swift-ci please test

Build failed
Swift Test Linux Platform
Git Sha - 1da11512e76a1c926cf96a4eb71725fe4992e82f

Build failed
Swift Test OS X Platform
Git Sha - 1da11512e76a1c926cf96a4eb71725fe4992e82f


bugfix: fix remotefile fetch image properties

这个 PR 实现什么功能/修复什么问题:

fix remote file fetch image properties

是否需要 backport 到之前的 release 分支:
release/2.13
/cc @swordqiu @zexi
/area host

Codecov Report

Merging #6598 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master    #6598   +/-   ##
=======================================
  Coverage    7.15%    7.15%
=======================================
  Files         647      647
  Lines      109327   109327
=======================================
  Hits         7818     7818
  Misses     100909   100909
  Partials      600      600

Flag
Coverage Δ

#aFlag
7.15% <ø> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update c05e243...810de8a. Read the comment docs.


Improve Chant Search View

This PR implements several changes to the Chant Search View in order to improve execution time:

when a queryset containing Chants and a queryset containing Sequences are combined using .union(), we now pass an all=True argument to prevent Postgres from checking the resulting queryset to ensure all items are DISTINCT from each other
we now apply .values() to fetch only the values needed for rendering the template
these changes were applied to both ChantSearchView and ChantSearchMSView, since they both use the same template

Some other related changes occurred:

updated tests for Chant Search View
updated tests for Chant Search MS View

Also wrote a bunch of new tests in ChantSearchMSViewTest, mostly copied from ChantSearchViewTest, ensuring that the values/links/etc. in the cells of the table render correctly. Since we previously weren't testing this, the Chant Search MS page was initially broken by the changes in the template, and the all tests were passing even when they shouldn't have been. So it's a good thing these tests are now here!

we no longer use keyword_search, previously used in both views mentioned above, so I was able to delete the function.
some slight refactoring of how we handle query parameters, mostly to make the code more self-documenting

I tried to replace the {% if chant.search_vector %} field with an annotation, but I kept running into an error, ORDER BY term does not match any column in the result set. This will be a nice thing to refactor eventually, but it's not urgent, so I'll try to figure this out another time. Since we no longer use keyword_search, once this is done, we can remove the search_vector from our Chant/Sequence model.

What is a chant's search_vector?

What is a chant's search_vector?

A very good question, and one I've spent several months wondering about and then being confused by.
As I understand it: when Postgres is doing a keyword search, it will add an annotation to each record in the table, which takes several of the record's values and uses them to calculate a number for ranking the results in order of relevance. Our BaseChant model has a search_vector field to store this information, and it's calculated whenever a Chant (but not a Sequence) is saved/updated, so that Postgres can just use this stored value instead of needing to calculate it during the query evaluation.
As currently calculated, the search_vector field includes the chant's incipit, MS spelling and standard spelling fulltexts, and its source's title as heavily weighted components of the score, and the names of its genre, feast and office as lightly weighted components.
Since we want to search for a keyword in only (as I understand it) the two fulltext fields, and since we have the Chant Search page set up to be sortable by clicking on the column headings, we have no need for these ranking features nor for the searching in the incipit, source title, office name fields etc.

Upon noting that many chants have only an incipit, and neither fulltext field (see #574), I added an extra commit to ensure that such chants also appear among search results.

I pushed a new commit adding some tweaks based on @ahankinson's feedback. I'll run some experiments with .only and .select_related etc., and make further changes if it runs just as fast as .values.

Running some experiments with this, I'm unable to make .select_related and .only work together nicely together - it seems I'm not able to traverse related models' fields in the template. This may still be good to look into in more detail - suggesting that we merge this as-is, and hold .select_related and .only in mind as a potential thing to refactor in the future.
(For what it's worth, the .select_related+.only version ran no faster than the .values version, even when objects' names/urls/etc. were not being rendered. So it doesn't appear that switching away from .values would further improve page load times - the benefit will mostly be to make the template look a bit cleaner by swapping out the __s for .s.)

Seeing as no new objections have been raised in the last 96 hours, and seeing as I'd like to get these changes up on staging in order to see how they behave on the DRA servers, I'm going to go ahead and merge this. There's still room for improvement, especially in the style/formatting department, but this should be good enough for the time being.


Broccoli Serve stuck in build loop

I'm new to Broccoli, so it's possible I've done something wrong.  Whenever I run broccoli serve, it endlessly loops over the build and does not allow anything to connect.  It just reports the build time and slowest trees over and over again.  I can't even break out of it with an interrupt.  I have to kill the process to stop it.  Running broccoli build public works fine.  I can load the static build and everything behaves as expected.
I'm using OSX 10.8.5, and I've tried this under Node 0.10 and 0.11 with the same result.

I believe this is easier to address in 1.x as the watcher is part of core.

Actually, broccoli 1.0 by default has moved the tmpdir out of the project root, which means by default this should already work more or less fine.
We should still bake in some auto-detection of this problem in to broccoli. But i'm tracking that here: https://github.com/broccolijs/broccoli/issues/94


Uninstall script tries to remove /usr/include/ files

I don't think uninstall.sh should be trying to remove these files:
rm /usr/include/iconv.h
rm /usr/include/libcharset.h
rm /usr/include/localcharset.h
The script was stopped by permissions.  They are dated more than a year before I installed Tokaido

Sorry about that. The strategy was changed (these were there for avoiding Nokogiri installation failures back in the day since the gem looked at those hard-coded paths).
Tokaido installed those files. It's gone now though. Check our latest release and thank you for reporting this.


Remove duplicate commits in issue/#3

Remove duplicate commits created on September 4. From b7d99788acbeac8fc5e14d24af6b4126a6bfdf87 to 31fd31a26025c224baf0a1711e61c09900087d9a.

I give up.


Apply FillModes after computing the absolute size to account for RelativeChildSize

RelativeChildSize caused issues with fillmodes because they used relativeToAbsoluteFactor without taking into account the final absolute size in each dimension, thus yielded incorrect conversions. For example:
Assume square 50x50 parent, RelativeChildSize = Vector2(1)
Size = Vector2(1)
FillMode.Fit
---
Conversion = ComponentMin(relativeToAbsoluteFactor) = Min(50, 50) = Vector2(50)
FinalSize = Size * conversion = Vector2(1) * Vector2(50) = Vector2(50)

vs
Assume square 50x50 parent, RelativeChildSize = Vector2(2, 1)
Size = Vector2(2, 1)
FillMode.Fit
---
Conversion = ComponentMin(relativeToAbsoluteFactor) = Min(25, 50) = Vector2(25)
FinalSize = Size * Conversion = Vector2(2, 1) * Vector2(25, 25) = Vector2(50, 25)  // Even though Size == RelativeChildSize

So now we first compute the absolute size in both dimensions, i.e. Size * Conversion before computing the fill mode to avoid this.

I guess not then. :(
Not sure what this will break, but pretty sure it will break some things.
On 9 Aug 2017 06:39, "Dean Herbert"<EMAIL_ADDRESS>wrote:

Merged #941 https://github.com/ppy/osu-framework/pull/941.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/ppy/osu-framework/pull/941#event-1198408427, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AEshBxNavk3eimJ6ZEqakVUSfUcIxcEIks5sWTgcgaJpZM4Oxcqg
.

Did you say something? o_O


Remove objects when removed from manifests

If a user puts a file in /var/lib/rancher/k3s/server/manifests/ then the
objects contained therein are deployed to the cluster. If the objects
are removed from that file, they are not removed from the cluster.
This change tracks the GVKs in the files and will remove objects when
there are removed from the cluster.
Signed-off-by: Donnie Adams<EMAIL_ADDRESS>Verification
Deploy a K3S cluster and put a file in the /var/lib/rancher/k3s/server/manifests/ directory. Once the objects have been deployed to the cluster, clear the contents of the file in the directory. The objects should be removed from the cluster.
Linked Issues
https://github.com/k3s-io/k3s/issues/5559
User-Facing Change

Objects will be removed from Kubernetes when they are removed from manifest files.

If I remember correctly last time I had to dig I to this, there was a big that was preventing wrangler from applying an empty desiredset because it wasn't properly searching for owned objects across all namespaces. You shouldn't need to know the gvks of owned objects to delete them using an empty desiredset. If we do, that's a regression in wrangler. Check out th issues linked from https://github.com/rancher/wrangler/pull/196

@thedadams my apologies for not digging into this further before commenting. You're absolutely right that we need to be persisting the GVKs somewhere. I just hadn't dug into it enough to notice that this has always been broken in the deploy controller. I incorrectly assumed that something had broken again on the wrangler side.
As I mentioned over at https://github.com/k3s-io/k3s/issues/5559#issuecomment-1126593255 long-term I would like to switch to using a cluster-scoped AddOn type so that we can let Kubernetes garbage collection clean up anything wrangler's apply misses, but that doesn't need to be done now.

Codecov Report

Merging #5560 (8280029) into master (bac8cf4) will increase coverage by 0.00%.
The diff coverage is 0.00%.

:exclamation: Current head 8280029 differs from pull request most recent head 5898ce3. Consider uploading reports for the commit 5898ce3 to get more accurate results

@@          Coverage Diff           @@
##           master   #5560   +/-   ##
======================================
  Coverage    9.87%   9.88%
======================================
  Files         136     136
  Lines        9810    9801    -9
======================================
  Hits          969     969
+ Misses       8647    8638    -9
  Partials      194     194

Flag
Coverage Δ

unittests
9.88% <0.00%> (+<0.01%)
:arrow_up:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

pkg/deploy/controller.go
0.00% <0.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update bac8cf4...5898ce3. Read the comment docs.

Sonobuoy is flaking; merging.


Question: Use pgn-parser without node

Hi @mliebelt.
I need a parser for a stand-alone project and I have a question.
Since the pgn-parser doesn't have node dependencies, would be possible to run it without node?
Like a simple js script, I mean. Or some functionality needs the node runtime?
Thanks in advance.

Yes, that is correct. There was even an interesting change done by another issue #22
As a consequence, I changed the README.md to include that information. There is no functionality that needs the node runtime. The only dependency I have is the peg parser, but only at build time.
I hope that clarifies a little bit your topic.

Great.
I've been searching for something like this, and this is the only one that parses the most part of the info that can there be within a pgn file, such as comments and variants as well.
Congratulations on this excellent work.

So if you find any PGN that confirms to the standard, but cannot be read by the parser, please raise an issue.


How to add redis caching support?

How to add redis caching support? It is just simplely add some redis code to Controller in webapi?

You do not want to add any redis code to the controller. It's advisable to move the redis cache calls to the application layer within the MediatR implementations. It would be a cleaner fit.
Also, here is a post on Redis Caching - https://www.codewithmukesh.com/blog/redis-caching-in-aspnet-core/

Thanks for your suggestion


No default values, as nothing would be reasonable

fixes #267

Well I say :+1:  to this

Yes! Thanks @kotp


Track VMI LastState in VirtualMachineStatus

Is your feature request related to a problem? Please describe:
VM has been crashed sometime. I want to figure out crash reason.
Describe the solution you'd like:
Add new field VMILastState in VirtualMachineStatus, which similar to LastState in PodStatus.
Describe alternatives you've considered:
WIP
Additional context:
WIP

/label good-first-issue

Hi, I am interested in this issue. If no one is assigned, can I be assigned

@CSWYF3634076 feel free to take it. I'll assign to you

/assign @CSWYF3634076

Is this being worked on? If not, shall I be assigned to this issue?

Is this being worked on? If not, shall I be assigned to this issue?

I am currently working on this issue

is this issue solved? can i work on this?

Not yet resolved, approximately 50% complete. My current solution is modeled after ContainerState

/open
Hey @lxs137 , what would we track here? Did you observe anything that would be valuable?

@xpivarc
Looks like @CSWYF3634076 is doing some work on this.
Actually I have implement this feature in our internal fork, base on v0.50.0. But I am afraid I don't have too much time to port our internal work.

@xpivarc
Looks like @CSWYF3634076 is doing some work on this.
Actually I have implement this feature in our internal fork, base on v0.50.0. But I am afraid I don't have too much time to port our internal work.


Change RedissonLocalCachedMap.cachePut access modifier

Hi,
I want to monitor latest updated time of Redisson local cache map. But I see that cachePut access modifier is private and I cannot override it.
Now I'm copy the original RedissonLocalCachedMap.java to a new file for my purpose.
I wonder that can Redisson change RedissonLocalCachedMap.cachePut method access modifier to protected or public?
Thanks

Since 3.21.0 version LocalCacheUpdateListener and LocalCacheInvalidateListener has been added. You need to use them instead.


Create rixxyx.js

An extension that allows you to do a lot of interesting things, including transforming strings into binary code and then converting them back into binary strings (I use it to pass string values through the TurboWarp cloud server which only supports integer type cloud variables)

see the part of https://docs.turbowarp.org/development/unsandboxed-extensions about wrapping the extension code in an IIFE to avoid leaking to global scope

I am a bit curious about what 'rixxyx' means

I am a bit curious about what 'rixxyx' means

I can't really tell you, I found it in a Scratch forum.

So is this something you made or copied from somewhere else? If it's from somewhere else, link the original source, we need to know the license information and who needs to be attributed.

So is this something you made or copied from somewhere else? If it's from somewhere else, link the original source, we need to know the license information and who needs to be attributed.

Yes, I got it from a Scratch forum, I'm sorry.
You can find it in this list under the letter R: https://scratch.mit.edu/discuss/m/topic/470021/

I've asked the original creator for permission, so we'll see how that goes
Also, arbitrary JS execution blocks will have to be removed or altered: returnObject, execJsCode

Compared to the original version of the extension, returnObject, returnJsCode, and execJsCode were removed.
Note that the color reporter block currently returns the wrong values until a compiler bug fix goes live soon-ish


Automated cherry pick of #1775

Cherry pick of #1775 on release-5.0.
/cc  @devinbinnie
NONE

The files scripts/generate_release_markdown.sh, scripts/generate_release_markdown.sh are in the blocklist for external contributors. Hence, these changes are not tested by the CI pipeline active until the build is re-triggered by a core committer or the PR is merged. Please be careful when reviewing it.
/cc @mattermost/core-security @mattermost/core-build-engineers


M365 Lighthouse: Update tenant page

While exploring M365 Lighthouse I realized some discrepancies between the actual portal and the documentation.
What I'm not entirely certain is if my change in the description on the "Tenant Domain" is correct, but it seems so after checking a couple of tenants.

@matsimon - Thanks for making these updates! I need to review your changes with the feature team. Once they approve everything, I'll merge this PR as is, or make additional updates as needed and then merge. Thanks for your patience while we work on this.

@JohanFreelancer9 - I’m the owner of this article and this PR has been assigned to me. As I noted in this PR, I’m confirming the updates with the product team and will edit as needed. Thanks!

@matsimon - While confirming your updates, we discovered some additional updates that need to be made to the article. I'm going to close this PR, since we'll be making the updates on our end in our private repository. We did note the updates you requested and will be including them as part of the larger article update. Thanks again for your help ensuring our documentation in correct! It's much appreciated.


create tamagui@latest start with a bug on mobile

Current Behavior
I just run the npm create tamagui@latest (monorepo is a starter with Expo + Next.js) and when I start the mobile with a yarn native t give that following error:

The web works.
Expected Behavior
The starter project should not start with an error when we start using the mobile project without changing anything.
Tamagui Version
I use the @latest when starting the project.

Seems to be the `1.99.1`

Platform (Web, iOS, Android)
Mobile

Only tested on IOS with Expo GO

Reproduction
- npm create tamagui@latest
- Choose the monorepo is a starter with Expo + Next.js
- cd {name of your project}
- yarn native

System Info
System:
    OS: macOS 14.5
    CPU: (10) arm64 Apple M1 Pro
    Memory: 2.76 GB / 32.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 18.16.0 - ~/.nvm/versions/node/v18.16.0/bin/node
    Yarn: 4.1.0 - ~/.nvm/versions/node/v18.16.0/bin/yarn
    npm: 9.5.1 - ~/.nvm/versions/node/v18.16.0/bin/npm
    bun: 1.0.2 - ~/.bun/bin/bun
    Watchman: 2<IP_ADDRESS> - /opt/homebrew/bin/watchman
  Browsers:
    Chrome: 125.0.6422.113
    Edge: 125.0.2535.67
    Safari: 17.5
  npmPackages:
    @babel/runtime: ^7.24.6 => 7.24.6
    @manypkg/cli: ^0.21.4 => 0.21.4
    check-dependency-version-consistency: ^4.1.0 => 4.1.0
    eslint: ^9.3.0 => 9.3.0
    node-gyp: ^10.1.0 => 10.1.0
    prettier: ^3.2.5 => 3.2.5
    turbo: ^1.13.3 => 1.13.3
    typescript: ^5.4.5 => 5.4.5

It seems related to the following code
const linkProps = useLink({
    href: `${linkTarget}/nate`,
  })

In that file packages/app/features/home/screen.tsx
If i remove the useLink it works.. but I don't think it's the goal here?
Maybe since it use the expo navgation it's not required anymore???
Sry, I just start the project, not a pro of tamagui/solito/Expo router at the moment.

PR with a fix is out, @t1gu1 check it out and lmk if it works now:
https://github.com/tamagui/starter-free/pull/27

@SamuraiF0x it works on your branch.
But be warned that there is a warning.

At least it works.
Thx!

fix for that warning has just been merged:
https://github.com/tamagui/starter-free/pull/27


feat: gov switch params

Summary by CodeRabbit

New Features

Introduced a message filtering mechanism to dynamically disable specific message types in the transaction processing.
Added governance-related querying capabilities for switch parameters via a new CLI command and API endpoint.

Enhancements

Integrated governance checks for precompiled contracts across various modules, boosting security and compliance.
Expanded the functionality of the governance keeper to manage switch parameters effectively.

Bug Fixes

Updated tests to reflect changes in expected outcomes and ensure functionality aligns with new features.

mg


Add logos from window managers.

Awesome WM
bspwm
dwm
Enlightenment
Fluxbox
Hyprland
i3
JWM
Qtile
Sway
XMonad

I agree with the cleanup.

preparing merge

I updated the database with the offset needed for #103 , didn't update the README to avoid more conflicts.

I updated the database with the offset needed for #103 , didn't update the README to avoid more conflicts.

Hmm?
I force pushed because rebase on master.
...

Can not undo my force push because did not pull directly in front of it.
What do we do now?
Assigning codepoints can only be done directly before merging.
Sorry. You need to push your changes back in.

I also force pushed rebase on master but in #103, I put #103 before this PR, I'll let you choose the codepoints to avoid conflicts

Ok let's leave this PR as of now and I'll start #103 on 95

I would merge and only afterwards go to the next PR, in that way you can rebase on master there and allocate the codepoints... and then merge, etc ;-)
But anyhow, I guess you prepare all "ready" PRs with codepoints now and they will only work if pulled in sequence I guess.
You prepare and then pull these three now?

I also force pushed rebase on master but in #103, I put #103 before this PR, I'll let you choose the codepoints to avoid conflicts

Laugh ... well, I have no clue we can not work in parallel ;-)
I guess you can allocate codepoints and merge the three PRs?
Possibly after considering changes suggested ;)

I was planning on merge first 103 then 104105, ...

I'll start here


IllegalArgumentException in RangeJoin

While doing a range join, I am getting the following exception and not able to figure out the reason for same :

java.lang.IllegalArgumentException: Number of partitions must be >= 0
at org.datasyslab.geospark.spatialRDD.SpatialRDD.spatialPartitioning(SpatialRDD.java:164)
at org.apache.spark.sql.geosparksql.strategy.join.TraitJoinQueryExec$class.doSpatialPartitioning(TraitJoinQueryExec.scala:198)
at org.apache.spark.sql.geosparksql.strategy.join.RangeJoinExec.doSpatialPartitioning(RangeJoinExec.scala:44)
at org.apache.spark.sql.geosparksql.strategy.join.TraitJoinQueryExec$class.doExecute(TraitJoinQueryExec.scala:127)
at org.apache.spark.sql.geosparksql.strategy.join.RangeJoinExec.doExecute(RangeJoinExec.scala:44)
at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkPlan.scala:114)
at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkPlan.scala:114)
at org.apache.spark.sql.execution.SparkPlan$$anonfun$executeQuery$1.apply(SparkPlan.scala:135)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
at org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:132)
at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:113)
at org.apache.spark.sql.execution.SparkPlan.getByteArrayRdd(SparkPlan.scala:225)
at org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:308)
at org.apache.spark.sql.execution.CollectLimitExec.executeCollect(limit.scala:38)
at org.apache.spark.sql.Dataset$$anonfun$org$apache$spark$sql$Dataset$$execute$1$1.apply(Dataset.scala:2371)
at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:57)
at org.apache.spark.sql.Dataset.withNewExecutionId(Dataset.scala:2765)
at org.apache.spark.sql.Dataset.org$apache$spark$sql$Dataset$$execute$1(Dataset.scala:2370)
at org.apache.spark.sql.Dataset.org$apache$spark$sql$Dataset$$collect(Dataset.scala:2377)
at org.apache.spark.sql.Dataset$$anonfun$head$1.apply(Dataset.scala:2113)
at org.apache.spark.sql.Dataset$$anonfun$head$1.apply(Dataset.scala:2112)
at org.apache.spark.sql.Dataset.withTypedCallback(Dataset.scala:2795)
at org.apache.spark.sql.Dataset.head(Dataset.scala:2112)
at org.apache.spark.sql.Dataset.take(Dataset.scala:2327)
at org.apache.spark.sql.Dataset.showString(Dataset.scala:248)
at org.apache.spark.sql.Dataset.show(Dataset.scala:638)
at com.inn.sparkrunner.processors.transformation.ExecuteQuery.execute(ExecuteQuery.java:117)

Here is the physical plan for the query :

|== Physical Plan ==
Project [latitude#5283, longitude#5284, type#5285, neighbour#2644, childLat#2, childLon#3, parentLon#0, parentLat#1]
+- RangeJoin st_geomfromwkt(regexp_replace(regexp_replace(polygon#2645, \s[\s*([-?0-9.])\s,\s*([-?0-9.])\s]\s*, $1 $2), [(.*)], POLYGON(($1)))), st_point(cast(longitude#5284 as decimal(16,10)), cast(latitude#5283 as decimal(16,10))), false
:- Generate posexplode(UDF(childLat#2, childLon#3, 1000.0, 2.0, 0.0, 60.0, 6)), true, false, [neighbour#2644, polygon#2645]
:  +- *FileScan parquet [parentLon#0,parentLat#1,childLat#2,childLon#3] Batched: true, Format: Parquet, Location: InMemoryFileIndex[file:/home/ist/Pictures/Product_ODSC/BuildingParquet], PartitionFilters: [], PushedFilters: [], ReadSchema: structparentLon:double,parentLat:double,childLat:double,childLon:double
+- Scan ExistingRDD[latitude#5283,longitude#5284,type#5285]|

@alifiyaali Can you show me your SparkSQL code?

@jiayuasu The code base is quite large. Can you point out some possible reasons which cause this exception. So that I can try to debug or provide you with some additional information?

@jiayuasu
The query is -

select * from zone z, building b where ST_Intersects(z.polygon, b.polygon);

The following are some test cases :

When zone partition = 200 and building partition = 1 : Exception occurs

When zone partition = 200 and building partition = 200 : Exception occurs (Since there are empty partitions)

When zone partition = 1 and building partition = 1 : Query works

Can you suggest me a workaround rather than coalesce or repartition?

If you swap b and z parameters in the ST function call, do you still get the exception?

@tociek I get a different exception now :

Caused by: java.lang.IllegalArgumentException: Points of LinearRing do not form a closed linestring
at com.vividsolutions.jts.geom.LinearRing.validateConstruction(LinearRing.java:111)
at com.vividsolutions.jts.geom.LinearRing.(LinearRing.java:106)
at com.vividsolutions.jts.geom.GeometryFactory.createLinearRing(GeometryFactory.java:341)
at com.vividsolutions.jts.geom.GeometryFactory.createLinearRing(GeometryFactory.java:328)
at com.vividsolutions.jts.io.WKTReader.readLinearRingText(WKTReader.java:549)
at com.vividsolutions.jts.io.WKTReader.readPolygonText(WKTReader.java:635)
at com.vividsolutions.jts.io.WKTReader.readGeometryTaggedText(WKTReader.java:481)
at com.vividsolutions.jts.io.WKTReader.read(WKTReader.java:205)
at com.vividsolutions.jts.io.WKTReader.read(WKTReader.java:174)
at org.datasyslab.geospark.formatMapper.FormatMapper.readWkt(FormatMapper.java:111)
at org.datasyslab.geospark.formatMapper.FormatMapper.readGeometry(FormatMapper.java:140)
at org.apache.spark.sql.geosparksql.expressions.ST_GeomFromWKT.eval(Constructors.scala:156)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$SpecificUnsafeProjection.apply_1$(Unknown Source)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$SpecificUnsafeProjection.apply(Unknown Source)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$SpecificUnsafeProjection.apply(Unknown Source)
at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)
at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)
at scala.collection.Iterator$class.foreach(Iterator.scala:893)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
at scala.collection.TraversableOnce$class.foldLeft(TraversableOnce.scala:157)
at scala.collection.AbstractIterator.foldLeft(Iterator.scala:1336)
at scala.collection.TraversableOnce$class.aggregate(TraversableOnce.scala:214)
at scala.collection.AbstractIterator.aggregate(Iterator.scala:1336)
at org.apache.spark.rdd.RDD$$anonfun$aggregate$1$$anonfun$22.apply(RDD.scala:1112)
at org.apache.spark.rdd.RDD$$anonfun$aggregate$1$$anonfun$22.apply(RDD.scala:1112)
at org.apache.spark.SparkContext$$anonfun$33.apply(SparkContext.scala:1980)
at org.apache.spark.SparkContext$$anonfun$33.apply(SparkContext.scala:1980)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
at org.apache.spark.scheduler.Task.run(Task.scala:99)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:282)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

b and z both are Polygon Geometry constructed using ST_GeomFromWKT , still I don't understand why is LinearRing being created?

No, I don't get the exception after swapping. But the performance has become extremely poor as data in b is very large as compared to z.

@alifiyaali This is a very interesting phenomenon. I roughly know what's going on but all my current test data and test cases cannot re-produce it.
To bypass this error, you should force the spatial join query to use a fallback PartitionNum.
sparkSession = SparkSession.builder().
config("spark.serializer",classOf[KryoSerializer].getName).
config("spark.kryo.registrator", classOf[GeoSparkKryoRegistrator].getName).
config("geospark.join.numpartition",1000)

geospark.join.numpartition will repartition both datasets to 1000 partitions and join them. You can specify any integer you want.

@alifiyaali
It seems your code is wrong.
select name,max(ST_GeomFromWKT(polygon)) as polygon
from polygonCSV
group by name

What is the meaning of max(ST_Geom)?? The max of the geometries? It doesn't make sense.

@alifiyaali
If your code is like
SELECT name, ST_GeomFromWKT(polygon) as polygon
FROM polygoncsv

Then register table polygoncsv
SELECT ST_Point(cast(1.0 as Decimal(16,10)),cast(2.0 as Decimal(16,10))) as point

Then register table points
SELECT *
FROM points p1, polygonCSV p2
WHERE ST_Within(p1.point,p2.polygon)

It should be fine. We have tested this many times.

@jiayuasu The exception is generated when one of the dataset has been shuffled. To represent a simpler code I did that group by intentionally.

Try using first() instead of max().

@alifiyaali The code still works fine on my side... I don't know what's going on. Did you try the same code?

What version of spark are you using? I was getting this error with 2.2 but not with 2.1...

Spark version : 2.1.0
Scala version : 2.11
GeoSpark version : 1.0.1

@jiayuasu Yes, I have tried it and got the error.

Same exception happened to me when I tried to join a Dataframe of 1 record with another. When I forced config("geospark.join.numpartition",200), I got java.lang.IllegalArgumentException: [GeoSpark] Number of partitions 200 cannot be larger than half of total records num 1. I just wonder, can this be related? Perhaps at some point when spatial join does not get enough data to fill all the partitions?

I got the same exception when trying to join two relatively small sample DataFrames.  Setting geospark.join.numpartition to a sufficiently low value solved the problem, but it would be nice to not have to do that.

@jonrein The exception @netchkin got
java.lang.IllegalArgumentException: [GeoSpark] Number of partitions 200 cannot be larger than half of total records num 1

is different from the original exception in this post
java.lang.IllegalArgumentException: Number of partitions must be >= 0

Which one did you get?
I don't suggest you repartition DataFrame. If you don't repartition DataFrame, you will not need to use geospark.join.numpartition and GeoSparkSQL will figure out the num partition by itself.

@jiayuasu,
I got the original exception.  If I'm reading @netchkin's comment correctly, he also got the original exception before modifying geospark.join.numpartition to investigate.
I'm not repartitioning the DataFrame, as far as I can tell.  Here's an example with some dummy data that generates the java.lang.IllegalArgumentException: Number of partitions must be >= 0 exception, but runs fine with geospark.join.numpartition set to 1:
`
var sparkSession = SparkSession.builder().
  config("spark.serializer",classOf[KryoSerializer].getName).
  config("spark.kryo.registrator", classOf[GeoSparkKryoRegistrator].getName).
  master("local[*]").appName("geoSparkTest").getOrCreate()
GeoSparkSQLRegistrator.registerAll(sparkSession.sqlContext)

val ll_df = sparkSession.createDataFrame(
  sparkSession.sparkContext.parallelize(
    Seq(Row(1, "40.0", "-120.0"), Row(2, "30.0", "-110.0"), Row(3, "20.0", "-100.0"))),
  StructType(
    List(StructField("id", IntegerType, true), StructField("lat", StringType, true), StructField("lon", StringType, true))
  ))
ll_df.createOrReplaceTempView("ll_df")

val pointDF = sparkSession.sql("select id, ST_Point(cast(ll_df.lat as Decimal(24,20)), cast(ll_df.lon as Decimal(24,20))) AS latlon_point FROM ll_df")
pointDF.createOrReplaceTempView("point_df")

val boundMaxMinsDF = sparkSession.createDataFrame(
  sparkSession.sparkContext.parallelize(
    Seq(Row("A", 25.0, -115.0, 35.0, -105.0), Row("B", 25.0, -135.0, 35.0, -125.0))),
  StructType(
    List(StructField("id", StringType, true), StructField("latmin", DoubleType, true),
      StructField("lonmin", DoubleType, true), StructField("latmax", DoubleType, true),
      StructField("lonmax", DoubleType, true))
  ))
boundMaxMinsDF.createOrReplaceTempView("bm_df")

val polygonEnvelopeDF = sparkSession.sql("select id, ST_PolygonFromEnvelope(" +
  "cast(bm_df.latmin as Decimal(24,20)), cast(bm_df.lonmin as Decimal(24,20)), " +
  "cast(bm_df.latmax as Decimal(24,20)), cast(bm_df.lonmax as Decimal(24,20)), bm_df.id) AS polygon FROM bm_df")
polygonEnvelopeDF.createOrReplaceTempView("poly_env_df")

val withinEnvelopeDF = sparkSession.sql("select * FROM point_df, poly_env_df WHERE ST_Within(point_df.latlon_point, poly_env_df.polygon)")
withinEnvelopeDF.explain()
withinEnvelopeDF.show()`

@alifiyaali @tociek @netchkin @jonrein
Thanks for the help from all of you!
I was able to re-produce this bug and found the reason of this bug. The partition number detection logic will fail at super small test data. See PR https://github.com/DataSystemsLab/GeoSpark/pull/207.
This patch is now available at GeoSpark 1.1.1-SNAPSHOT for spark 2.1, 2.2 and 2.3. Please read [1] to learn how to use SNAPSHOT versions.
[1] http://datasystemslab.github.io/GeoSpark/download/GeoSpark-All-Modules-Maven-Central-Coordinates/

@jiayuasu I am unable to download the snapshot version. Please suggest some resolution. I am using maven version 3.5
POM.XML

<project>
.
.
<dependency>
<groupId>org.datasyslab</groupId>
<artifactId>geospark-sql_2.1</artifactId>
<version>1.1.1-SNAPSHOT</version>
</dependency>
.
.
<profiles>
<profile>
<id>allow-snapshots</id>
<activation><activeByDefault>true</activeByDefault></activation>
<repositories>
<repository>
<id>snapshots-repo</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<releases><enabled>false</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
</profile>
</profiles>
.
.
</project>

@alifiyaali Not sure what's going on. The jar is here for sure: https://oss.sonatype.org/content/repositories/snapshots/org/datasyslab/geospark-sql_2.1/1.1.1-SNAPSHOT/
The coordinate is correct.
In the worst case, use JitPack instead. It will compile GeoSpark-for-Spark-2.1 branch on-the-fly and put all modules in a single jar.
https://jitpack.io/#DataSystemsLab/GeoSpark/GeoSpark-for-Spark-2.1-SNAPSHOT

@jiayuasu Please check -

[ERROR] An error occurred during dependency resolution of the following artifact:
org.datasyslab:geospark-sql_2.1:1.1.1-SNAPSHOT
Caused by: Unable to get dependency information: Unable to read the metadata file for artifact 'org.datasyslab:geospark-sql_2.1:jar': Cannot find parent: org.datasyslab:geospark-parent for project: null:geospark-sql_2.1:jar:1.1.1-SNAPSHOT for project null:geospark-sql_2.1:jar:1.1.1-SNAPSHOT
org.datasyslab:geospark-sql_2.1:jar:1.1.1-SNAPSHOT

from the specified remote repositories:
central (http://repo1.maven.org/maven2),
snapshots-repo (https://oss.sonatype.org/content/repositories/snapshots)

@alifiyaali Thanks for the information. There was a version mismatch between the parent project and submodule. I have fixed it and now you can download the SNAPSHOT version.

@jiayuasu I successfully downloaded the SNAPSHOT and the issue is resolved. Thank You!

@jiayuasu
Is this issue resolved in geospark-sql_2.3:1.1.3 version as well?
Because I am getting this issue in geospark-sql_2.3:1.1.3
Here is the version detail -
Spark version : <IP_ADDRESS>.0.2.0-50 (hortonworks)
Scala version : 2.11
GeoSpark version : 1.1.3
Java 8

@td-truedetective This bug has been fixed in 1.1.3. Are you sure that you got the exact error?


Fix and improve get_storage_size_for_path

This PR should fix #1 and improve the get_storage_size_for_path function as df can by called directly with the mount point without having to look up for the device.

Tested successfully on CentOS 7 and Debian 8.

Looks like this should be fine to merge, and does fix the Issue.


Tests fail without specifying DB env variable

Environment
Knex version: 0.14.4
Database + version: Not relevant, but the failing test is trying to use the mysql2 client
OS: Ubuntu 16.04.4
Bug
Trying to run the test suite locally right after a clean install produces the following error:
  #2321 dead connections are not evicted from pool

/home/ricardo/src/knex/test/tape/pool.js:105
  if (process.env.DB.indexOf('mysql2') >= 0) {
                    ^

TypeError: Cannot read property 'indexOf' of undefined
    at Test.<anonymous> (/home/ricardo/src/knex/test/tape/pool.js:105:21)
    at Test.bound [as _cb] (/home/ricardo/src/knex/node_modules/tape/lib/test.js:77:32)
    at Test.run (/home/ricardo/src/knex/node_modules/tape/lib/test.js:96:10)
    at Test.bound [as run] (/home/ricardo/src/knex/node_modules/tape/lib/test.js:77:32)
    at Immediate.next [as _onImmediate] (/home/ricardo/src/knex/node_modules/tape/lib/results.js:71:15)
    at processImmediate [as _immediateCallback] (timers.js:396:17)

I can confirm that setting the mentioned environment variable to a valid value will make the test suite run correctly.
Steps to reproduce

Clone the repo
npm install
npm test

Expected results
The test suite runs fine.
Actual results
There is an unexpected error about a missing environment variable.

Looks fixed, closing


Use transitive set for HaskellLibraryInfo

This PR changes the fields of HaskellLibraryProvider to contain a transitive set of HaskellLibraryInfo instead of using a list.

remove merge_haskell_link_infos since it is now unused
apply change to ide script

Thanks for the changes! This looks great. I'm heading off on holiday until Tuesday, so have sent it off for internal testing, but will probably land it once I'm back.

The issue is when you have a Haskell library with deps = [":a", ":a"] - so the same dependency twice. That then generates an entry for the Haskell package database which is malformed and GHC complains. I've now added such an instance to our internal test suite (which we're working on open sourcing slowly...) so just trying to reapply.

Bad news - there was a significant performance regression from this code. It generates command lines that upset GHC. I don't yet know why, but investigating. Reverted once more.

There are two places this code causes a significant performance regression. In both cases it comes from the fact that multiple packages might exist within the same package_db. Before, since we deduplicated everything by value, you might have 100 packages and 20 package_dbs. If you give GHC 100 package dbs (even if there are only 20 unique ones) the performance crashes dramatically. That's especially true if you have a package_db representing all of stackage, which both occurs a lot and is slow to load. I've spun up #624 as a version with your two patches and my deduplication code in. Aiming to land that next week, but being cautious given this has gone wrong twice now 😄

There are two places this code causes a significant performance regression. In both cases it comes from the fact that multiple packages might exist within the same package_db. Before, since we deduplicated everything by value, you might have 100 packages and 20 package_dbs. If you give GHC 100 package dbs (even if there are only 20 unique ones) the performance crashes dramatically.

Oh, that's interesting. Thank you for pushing this forward!

To update, there ended up being a third place, which I fixed too. All sorted now and seems to have had no regressions for a while. Thanks for the contribution!


As a user, I would like the fonts used on the page to be readable and fitting to the purpose of the website.

Choose a font pair for the UI.
Ideally one serif and one sans-serif font.
Most likely serif as headers and sans-serif for paragraphs etc
Resource:
Google Fonts

Hey team! Please add your planning poker estimate with ZenHub @ChristopherSterza @Donovanphenry @gdochoa @sedwardsmarsh


Publish on PyPI

Could you publish this on PyPI so a pip install mommy_spatial_generators would work?

Sure!
Em 1 de jun de 2017 5:11 AM, "Dylan Verheul"<EMAIL_ADDRESS>escreveu:
Could you publish this on PyPI so a pip install mommy_spatial_generators
would work?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/sigma-geosistemas/mommy_spatial_generators/issues/6,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AA0rP_AtHFnVFeAUVOijNdIFMj2xRGpuks5r_nIwgaJpZM4NsoeQ
.


[Ben] Wrong error message for invalid requirements

Woopsie. Functionality bug?

Hmm this is probably because of Requirements using Tag as the unit


Remove obsolete field from docker-compose.yml

Description

Every time a just command involving docker is run, you get a warning:

According to documentation, it can be safely removed.
This PR also removes some unused imports from the file defining API URLs.
Testing Instructions

Compare this branch with main looking at the output of the just api/up, for example.
Checklist

[x] My pull request has a descriptive title (not a vague title likeUpdate index.md).
[x] My pull request targets the default branch of the repository (main) or a parent feature branch.
[x] My commit messages follow best practices.
[x] My code follows the established code style of the repository.
[ ] I added or updated tests for the changes I made (if applicable).
[ ] I added or updated documentation (if applicable).
[x] I tried running the project locally and verified that there are no visible errors.
[x] I ran the DAG documentation generator (if applicable).

Developer Certificate of Origin

Developer Certificate of Origin
Developer Certificate of Origin
Version 1.1

Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
1 Letterman Drive
Suite D4700
San Francisco, CA, 94129

Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.

Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I
    have the right to submit it under the open source license
    indicated in the file; or

(b) The contribution is based upon previous work that, to the best
    of my knowledge, is covered under an appropriate open source
    license and I have the right under that license to submit that
    work with modifications, whether created in whole or in part
    by me, under the same open source license (unless I am
    permitted to submit under a different license), as indicated
    in the file; or

(c) The contribution was provided directly to me by some other
    person who certified (a), (b) or (c) and I have not modified
    it.

(d) I understand and agree that this project and the contribution
    are public and that a record of the contribution (including all
    personal information I submit with it, including my sign-off) is
    maintained indefinitely and may be redistributed consistent with
    this project or the open source license(s) involved.

This is related to #4046, and it seems there may be some other work that's necessary in order to close that issue.

@AetherUnbound Can you specify what additional work is needed based on the issue? If this PR works in CI and locally, then I think we're good to go. There was some speculation that the compose file version changes might affect our existing usage, but it seems like they didn't :thinking: we were only using forward compatible features?

There was some speculation that the compose file version changes might affect our existing usage, but it seems like they didn't 🤔

This was my only concern, based on the language you used in the other issue.


Add getWorkflowResultNoWait

Or getWorkflowResultNonBlocking
Or tryGettingWorkflowResult

in https://github.com/indeedeng/iwf-java-sdk/pull/199


Pull in opr #842 - 2-factor auth

that was a pain... Some questions before merging/releasing.

Consider having separate endpoints so can have both normal and 2FA - we already made this mistake with passwordless sharing the /login endpoint.

This seems to rely on lots of info in session - so that means this isn't really useful for token based applications?

try not to require onetimepasswd and qrcode (in setup.py install_requires) unless config is set.

generate_totp should be overridable - perhaps move it to userMixin like some other things? I am confused by  passlib.totp.generate_secret() as referenced in: https://passlib.readthedocs.io/en/stable/narr/totp-tutorial.html#totp-tutorial

in docs example: DbModel has only 16 chars for totp - that seems low

in docs example: DbModel phone number is just 15 chars

login - not sure @anonymous_user_required is good  (I know that is what current /login does). That can be annoying for UIs - I would suggest just logging out current user and allowing a new login.
-- generate_qrcode - probably should be a utility and throw exceptions (minor).

that was a pain... Some questions before merging/releasing.
I belive that - I tried and it was not enjoyable.

Consider having separate endpoints so can have both normal and 2FA - we already made this mistake with passwordless sharing the /login endpoint.

Is this really necessary?  I can't think of any reason to use normal auth and 2FA at the same time.  People would just use the normal auth route and bypass the two factor one if they don't have to go through the whole extra step.

This seems to rely on lots of info in session - so that means this isn't really useful for token based applications?

I would think it can be switched to use JSON Web Tokens, which shouldn't break anything, but I am not very familiar with JWTs.

try not to require onetimepasswd and qrcode (in setup.py install_requires) unless config is set.

Done. Easy enough fix.  Since we can't necessarily test for the failed imports, I've added the #pragma: no cover tag to those statements

generate_totp should be overridable - perhaps move it to userMixin like some other things? I am confused by  passlib.totp.generate_secret() as referenced in: https://passlib.readthedocs.io/en/stable/narr/totp-tutorial.html#totp-tutorial

I was confused by that as well, I tried using generate_secret, but the onetimepass lib didn't like that, so I reverted to the original method.

in docs example: DbModel has only 16 chars for totp - that seems low

That can be changed to anything.  I am unaware of any length restriction for the totp_secret.

in docs example: DbModel phone number is just 15 chars

That somewhat makes sense. The US phone number +1(555)555-5555 is 15 digits, so it could be increased based on the user's locale. It has to be defined in the User's models

login - not sure @anonymous_user_required is good  (I know that is what current /login does). That can be annoying for UIs - I would suggest just logging out current user and allowing a new login.

This can be changed, but if a User accidentally goes to /login, then they would have to go through the 2FA again as well.  Somewhat annoying.

-- generate_qrcode - probably should be a utility and throw exceptions (minor).

Completely doable.

Most of the missing coverage in utils.py seems to be coming from the TwilioSmsSender Class, which probably could be skipped in coverage, as you would need to create a Twilio client and send actual SMS messages.
The drop in coverage from views.py appears to be coming from missing tests that made the two-factor views more json friendly, mostly assert flashes and JSON form error checking. I'll write some tests at somepoint when I am able to sit down and write them.

It is getting really close. For additional tests on NEW functionality - I will file an issue and assign to you - that won't hold up getting this in.
For generating totp_secret - I will look into this - I am concerned about the current implementation both from a security perspective and that changing it might require a backwards incompatibility. I will file an issue and assign to me (but I want to resolve this PRIOR to releasing).
As for 2 endpoints - the way I see most websites written is that 2FA is an option. Some financial sites require it -  but most sites simply offer that as more secure login option that is per user. I can see having an option to require 2FA.
I was looking at view.py - I am confused by the URLs - looks like they aren't actually configurable like all the other urls - and have strange names like /two_factor_setup_function - that doesn't seem consistent. I think we should change those to config variables and use URL friendly names like:
tf-login, tf-setup, tf-validate, tf-qrcode, tf-rescue, tf-confim. I am happy to do this.

Sounds good.  Not sure how the dual login would best be implemented.  Most likely would have to modify the original login to redirect/return 400 if the user has two factor enabled.
As for the secret, I am not married to pyqrcode and onetimepass, those were in there from the original author.  I think he used a Miguel Grinberg blog post to develop most of the two factor extension.  If there are better/more recent packages that can implement it, I say use those.
If you want to update the routes in views.py and make them configurable, I say go for it.  Shouldn't be too difficult.  I am just trying to find a good balance between work, kids and all.

Thanks for your comments and all the work. I am really looking forward to getting this in and released. The original PR is pretty old - so I expect some new things have evolved.
I think what I will do is go ahead and merge this and file issues. This PR is already too large to keep reviewing, then followup with view changes and looking into secret/key generation. I just ask that you review the changes.

@baurt I have a question for you - I am going through the views and trying to understand the flow - I am extremely confused by the two_factor_password_confirmation view - which has as a default endpoint /change/two_factor_password_confirmation. It seems like you actually have to call this to get 'password_confirmed' set in the session prior to setting up 2FA.
More confusing is that the form is called two_factor_change_method_verify_password_form but from what I can tell - it has nothing to do with changing method - it just has password and verify_password - so it is nothing more that login and/or change password? What am I missing?
I suppose lastly - is there a way to change your preferred method?
I realize you didn't write this - but presumably you know/understand how to use it.....
Thanks!

The only way that I figured out what was going on was by manually testing a built extension in an app that I have.
What is happening is that the endpoint /change/two_factor_password_confirmation takes you to a form with a password that needs to be verified.  Once you verify the password, it takes you to the setup function to change the preferred method.  I think that the 'password_confirmed' session variable is one way of preventing unauthorized access to the setup function without having gone through the whole first time login.  It took me a while to understand most of what is going on.
So, there are two ways of reaching the setup function legitimately, first time login or via /change/two_factor_password_confirmation.  I think the first time login method is fairly clear.  The next way is via that endpoint.  Say a user is logged in and they want to change how 2FA occurs.  They go to /change/two_factor_password_confirmation and to prevent unauthorized changing of the method (say by forgetting to logout/leaving the session open) you have to enter your password again.  If that is correct, then it takes you to the setup function where you change your method.
So, can this process be cleaned up?  Surely.  Maybe the solution is to document the living daylights out of these views because they are confusing.  Let me know what you think.

Thanks for your comments and all the work. I am really looking forward to getting this in and released. The original PR is pretty old - so I expect some new things have evolved.
I think what I will do is go ahead and merge this and file issues. This PR is already too large to keep reviewing, then followup with view changes and looking into secret/key generation. I just ask that you review the changes.

Absolutely.  I think everything so far looks good to merge. I'll definitely review changes from the issues.  The tests probably will have to be modified slightly to accomodate some of the changes.


email: pull patch pending upstream inclusion for -fno-common toolchai…

…n supprot
Without the change build fails on upstream gcc-10 as:
ld: utils.o:include/email.h:81: multiple definition of `Mopts'; email.o:include/email.h:81: first defined here
ld: utils.o:include/email.h:64: multiple definition of `table'; email.o:include/email.h:64: first defined here
ld: utils.o:include/email.h:65: multiple definition of `conf_file'; email.o:include/email.h:65: first defined here

Description of changes

Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

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

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

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[x] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 173851 run on x86_64-linux 1

1 package built:

email


Storybook: Components for do´s and dont´s

We need a way to show do´s and dont´s examples in Storybook.

I don´t think this is the best solution, could we come up with something better?

Duplicate of #754


DP-548 Fix sse retry

Fixes two issues

DP-548, an issue when sleeping before retrying SSE
DP-577, a bug where we retired a tx 25 times instead of 5 times.

@yosriz Added tests for retry (and fixed some issues with it as well :) )
Pls review again


TELEGRAM newlines and  other text formating options

Whenever I try using \n or  they just get displayed int the chat.
Not event PHP_EOL.
Anyone succeeded in sending newlines or bold output ?

You can use Markdown or HTML parse modes.
Just set this as additional Parameters to your reply method:
$bot->reply('Hello *you*', [
    'parse_mode' => 'Markdown'
]);

See: https://core.telegram.org/bots/api#markdown-style

It does not work, it endsup [blocking the bot] with alot of messages,  the bot retries contacting(response) the telegram server with the  [html] text whitch it can't send then it keeps seeing the new message which it cannot respond to, I had to disable the reply function after reseting the webhook to make sure there are no more messages pending some response.

PHEW!
I've just cleared the 'pending_update_count'. I'll just have to wait for the official implementation.

Hi, make sure you test on the app itself, it doesn't work when testing locally but I can confirm that this works on the app
$bot->reply('Hello *you*', [     'parse_mode' => 'HTML' ]);


flagext: add RegisterFlagsWithLogger

For cases such as DeprecatedFlag() that need a logger, extend RegisterFlags to allow this while still working with existing code.
Checklist

NA Tests updated
[x] CHANGELOG.md updated.

Thanks for your feedback; I have updated and rebased to cope with the CHANGELOG conflict.


Complete Readme file

Closing this and replacing it with more specific tasks; that being said, effectively completed (we have a well-documented readme already, it just could also be better)


Add checking of future parser in CI

Add travis tests with FUTURE_PARSER=yes to check compatibility

completed e1f577c


compile grpc , fail to download something  from china.

Is there anyone give me advice on solving the problem? and give some other https to download?

I copy the url and download the file with googlechrome, then copy the file to the direcory as the error shown, at last repeat the command, the problem do not emerge.

@mrbrantofgithub    Thank you very much!


Proposal : add onClick prop

add onClick function prop
fire onClick when user click on item already selected

Use case :

simulate drop-down list

Hi @adcentury,
I recently developed a PWA. One client's demand was to have a input select "IOS like".
But instead of tap on an "OK" button to validate select choice, my client want to tap on current option selected for validate.
So if you select an option and tap on it : onClick prop is fired and in my use case, I can validate current selection.
(sorry for my french-english)


Added Solutions

From Issue: https://github.com/Romi904/Durmello/issues/66#event-7506096493

Great Job 👌


Replace ()-init with {}-init in the SQLite3 connector

This PR replaces the ()-initalization with {}-initialization (uniform initialization) in the SQLite3 connector code.
The library with this PR was built and tested with
cmake -B build -DBUILD_POSTGRESQL_CONNECTOR=ON -DBUILD_SQLITE3_CONNECTOR=ON -DBUILD_MYSQL_CONNECTOR=ON -DBUILD_TESTING=ON -DUSE_SYSTEM_DATE=ON -DDEPENDENCY_CHECK=ON
cmake --build build -- VERBOSE=1
cd build
ctest

All tests passed successfully.

Nice! Thanks for cleaning this up!


Subscribe button styling

can we please bring back the old styled input? 🥺

Is this the old styled input you are referring to?

https://www.figma.com/file/gHSzqGPeQ9qK4L0qIDcTjY/gallery-item-handoff?node-id=1270-5615

@leo-anderson-x yes

👋