Complete rework of useElmish

Overview of Changes
Reworked useElmish hook
useElmish now actually uses Elmish 4 under the hood! 🎉
This means that useElmish can now take advantage of all the great Elmish features like subscriptions and async commands!
It has two main variations of overloads:

Two that take init, update, initArg and an optional mapProgram (for adding subsriptions or other Elmish extensions)
Two that take writableModel, update and an optional mapProgram (for adding subsriptions or other Elmish extensions)

Here is an example from the ChordParserView sample that uses subscriptions:
let private subscriptions (model: Model) : Sub<Msg> =
    let timerSub (dispatch: Msg -> unit) =
        let invoke() = dispatch Msg.SetTime; true
        DispatcherTimer.Run(invoke, TimeSpan.FromMilliseconds 1000.0)

    [
        // Dynamically start or stop (Dispose) subscription
        if model.Transpose = 0 then
            [ nameof timerSub ], timerSub
    ]

let view () = Component (fun ctx ->
    let model, dispatch = ctx.useElmish(init, update, (), Program.withSubscription subscriptions)
    //let model, dispatch = ctx.useElmish(init, update, ()) // if no subscriptions are needed

    Grid.create [

More sample cleanup

Changed some samples that I missed before to use init() =  instead of init =

Updated init in the templates

Same as above, but for the templates.
I also installed the templates locally to ensure that all four templates build properly.

@sleepyfran This is good to go now... tested on the ChordParser example and ready to go. 👍

@sleepyfran,
Looking at the build process, it looks like if I update the version it will automatically push the package to NuGet.
Is that correct?
If so, then should I just create a new PR to update to the next preview version (0.6.0-preview6)?
Or can I just push directly to master?
Thanks!

@sleepyfran,
Looking at the build process, it looks like if I update the version it will automatically push the package to NuGet.
Is that correct?

Yep! The CI will automatically try to always push whatever version is defined, and then NuGet takes care of either rejecting it because there's already a version with the same number or accepting it if it's new 😄

If so, then should I just create a new PR to update to the next preview version (0.6.0-preview6)?
Or can I just push directly to master?

I think we don't have permissions to push to master directly, but feel free to create a PR and I will accept it :^)


[fix deployment on k8s ] fix #6807: dolphinscheduler.zookeeper.env_vars - > dolphinscheduler.r…

…egistry.env_vars

Purpose of the pull request

Brief change log

Verify this pull request

This pull request is code cleanup without any test coverage.
(or)
This pull request is already covered by existing tests, such as (please describe tests).
(or)
This change added tests and can be verified as follows:

Codecov Report

Merging #6808 (4ccfe59) into dev (dfe4945) will decrease coverage by 0.00%.
The diff coverage is n/a.

@@             Coverage Diff              @@
##                dev    #6808      +/-   ##
============================================
- Coverage     41.79%   41.79%   -0.01%
+ Complexity     3615     3613       -2
============================================
  Files           641      641
  Lines         25890    25890
  Branches       2795     2795
============================================
- Hits          10821    10820       -1
+ Misses        14094    14089       -5
- Partials        975      981       +6

Impacted Files
Coverage Δ

...inscheduler/common/thread/ThreadPoolExecutors.java
19.23% <0.00%> (-1.93%)
:arrow_down:

...dolphinscheduler/remote/future/ResponseFuture.java
81.35% <0.00%> (-1.70%)
:arrow_down:

...e/dolphinscheduler/remote/NettyRemotingClient.java
52.81% <0.00%> (+0.70%)
:arrow_up:

...org/apache/dolphinscheduler/remote/utils/Host.java
40.00% <0.00%> (+2.22%)
:arrow_up:

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 dfe4945...4ccfe59. Read the comment docs.


Summary output

Currently prints no. unique links in each experiment, as well as no. unique links in the intersection of the experiments.
Will try:
-Sliding window correlation
-Printing unique points as well as intersections?

Hi J,
I get the following error when I try to run proScatter on EC, Core and an xwalk file (from a model of only UvrD ie. no RpoB or RpoC points):
Summary for RpoC-RpoC
EC:  72
Core:  231
Traceback (most recent call last):
File "proScatter.py", line 140, in
proscatter.print_summary()
File "proScatter.py", line 69, in print_summary
points = set(interaction[key])
KeyError: 'RpoC-RpoC'
When I change the fasta file so it only contains UvrD, there's no error. So I think there's a small bug when one of the data directories does not contain at least 1 xlink from all the proteins?
K


Values merge where a key with an nil value is added does not work

Problem: Adding a new key to a map with a nil value doesn't merge.
Scenario to reproduce
values1.yaml:
components:
  etcd-operator:
   version: 0.10.0

values2.yaml:
components:
  etcd-operator:
    version:  0.10.3
  prometheus:

helmfile.yaml
repositories:
- name: "stable"
  url: "https://kubernetes-charts.storage.googleapis.com"

environments:
  default:
    values:
      - values1.yaml
      - values2.yaml

releases:
- name: "etcd-operator"
  chart: stable/etcd-operator
{{- if .Values.components | getOrNil "etcd-operator" | getOrNil "version" }}
  version: {{ .Values.components  | getOrNil "etcd-operator"  | getOrNil "version"  }}
{{- end }}

{{- if hasKey .Values.components "prometheus }}
- name: "prometheus"
  chart: stable/prometheus
{{- if .Values.components | getOrNil "prometheus" | getOrNil "version" }}
  version: {{ .Values.components  | getOrNil "prometheus"  | getOrNil "version"  }}
{{- end }}
{{- end }}

Expected calculated values:
components:
  etcd-operator:
    version:  0.10.3
  prometheus:

Actual calculated values:
components:
  etcd-operator:
    version:  0.10.3

Note: If prometheus is an empty map {}, it works, or if prometheus has some version set, it also works.
Helmfile version: v0.104.0

@mattymo Thanks! Seems like this is resolved in mergo via https://github.com/imdario/mergo/pull/133. I'll bring it to helmfile soon.

@mattymo This should be fixed in v0.106.2. Could you confirm if it works on your machine, too?


Add support for Google disk snapshots

Terraform resource: google_compute_snapshot, the resource is already in the codebase, just returns nil as it's not been implemented.
We can add one cost component "Name: Storage" with "Units: GB-months". The following Pricing API filters should be used. The storage_gb infracost-usage.yml file parameter should be added/used too. The google_compute_disk_resource_policy_attachment resource looks like it's free, we can add it to the free resource list as part of this ticket too.
    "productFilter": {
      "service": "Compute Engine",
      "productFamily": "Storage",
      "region": "us-east1",
      "attributeFilters": [
				{
          "key": "description",
          "value": "Storage PD Snapshot"
        }
      ]
    }
  }

Pricing details: see here, "Snapshot storage" is the relevant price. Cloud Storage already includes the network transfer prices so we don't need to include those in the snapshot resource.
I can't find the pricing filters for "Multi-regional snapshot storage" using the following, @aliscott any ideas where it might be hiding?
db.products.distinct("attributes.description", {"vendorName": "gcp", "region": "us-east1", "service": "Compute Engine"})

db.products.distinct("attributes.description", {"vendorName": "gcp", "region": "us-east1", "service": "Compute Engine", "productFamily": "Storage"})

db.products.distinct("attributes.description", {"vendorName": "gcp", "region": "us-east1", "service": "Compute Engine", "productFamily":"Compute"})

@alikhajeh1 hey, I want to work on it!

Released in v0.8.3


Download speed

I have a problem with slow download speed on esp32c3. I'm trying to build a simple audio sink, which connects to audio source in my local network and plays audio through I2S DAC.  For now I'm testing download speed, because i wan't to stream uncompressed audio at CD quality which requires about 172 KiB/s of data throughput. On ESP datasheet i saw 20 Mbit/s download speed, so it should be possibile.
This is my test program based on examples :
#![no_std]
#![no_main]
#![feature(type_alias_impl_trait)]

//extern crate alloc;

use esp_backtrace as _;
use embassy_executor::_export::StaticCell;
use embassy_net::tcp::TcpSocket;
use embassy_net::{Config, Ipv4Address, Stack, StackResources};

use embassy_executor::Executor;
use embassy_time::{Duration, Timer, Instant};
use embedded_svc::wifi::{ClientConfiguration, Configuration, Wifi};
use esp_backtrace as _;
use esp_println::logger::init_logger;
use esp_println::println;
use esp_wifi::wifi::{WifiController, WifiDevice, WifiEvent, WifiMode, WifiState};
use esp_wifi::{initialize, EspWifiInitFor};
use hal::{
    clock::{ClockControl, CpuClock},
    Rng, embassy,
    peripherals::Peripherals,
    prelude::*,
    timer::TimerGroup, Rtc,
    systimer::SystemTimer,
    i2s::{I2s0New},
};

const SSID: &str = env!("SSID");
const PASSWORD: &str = env!("PASSWORD");

macro_rules! singleton {
    ($val:expr) => {{
        type T = impl Sized;
        static STATIC_CELL: StaticCell<T> = StaticCell::new();
        let (x,) = STATIC_CELL.init(($val,));
        x
    }};
}

static EXECUTOR: StaticCell<Executor> = StaticCell::new();

#[entry]
fn main() -> ! {
    init_logger(log::LevelFilter::Info);

    let peripherals = Peripherals::take();

    let system = peripherals.SYSTEM.split();
    let mut peripheral_clock_control = system.peripheral_clock_control;
    let clocks = ClockControl::configure(system.clock_control, CpuClock::Clock160MHz).freeze();

    let mut rtc = Rtc::new(peripherals.RTC_CNTL);
    rtc.swd.disable();
    rtc.rwdt.disable();

    let timer = SystemTimer::new(peripherals.SYSTIMER).alarm0;

    let init = initialize(
        EspWifiInitFor::Wifi,
        timer,
        Rng::new(peripherals.RNG),
        system.radio_clock_control,
        &clocks,
    ).unwrap();

    let (wifi, _) = peripherals.RADIO.split();

    let (wifi_interface, controller) = esp_wifi::wifi::new_with_mode(&init, wifi, WifiMode::Sta);

    let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks, &mut peripheral_clock_control);
    embassy::init(&clocks, timer_group0.timer0);

    let config = Config::dhcpv4(Default::default());

    let seed = 1234; // very random, very secure seed

    // Init network stack
    let stack = &*singleton!(Stack::new(
        wifi_interface,
        config,
        singleton!(StackResources::<3>::new()),
        seed
    ));

    let executor = EXECUTOR.init(Executor::new());
    executor.run(|spawner| {
        spawner.spawn(connection(controller)).ok();
        spawner.spawn(net_task(&stack)).ok();
        spawner.spawn(get_page(&stack)).ok();
    })
}

#[embassy_executor::task]
async fn connection(mut controller: WifiController<'static>) {
    println!("start connection task");
    println!("Device capabilities: {:?}", controller.get_capabilities());
    loop {
        match esp_wifi::wifi::get_wifi_state() {
            WifiState::StaConnected => {
                // wait until we're no longer connected
                controller.wait_for_event(WifiEvent::StaDisconnected).await;
                Timer::after(Duration::from_millis(5000)).await
            }
            _ => {}
        }
        if !matches!(controller.is_started(), Ok(true)) {
            let client_config = Configuration::Client(ClientConfiguration {
                ssid: SSID.into(),
                password: PASSWORD.into(),
                ..Default::default()
            });
            controller.set_configuration(&client_config).unwrap();
            println!("Starting wifi");
            controller.start().await.unwrap();
            println!("Wifi started!");
        }
        println!("About to connect...");

        match controller.connect().await {
            Ok(_) => println!("Wifi connected!"),
            Err(e) => {
                println!("Failed to connect to wifi: {e:?}");
                Timer::after(Duration::from_millis(5000)).await
            }
        }
    }
}

#[embassy_executor::task]
async fn net_task(stack: &'static Stack<WifiDevice<'static>>) {
    println!("start net_task task");
    stack.run().await
}

#[embassy_executor::task]
async fn get_page(stack: &'static Stack<WifiDevice<'static>>) {
    let mut rx_buffer = [0; 40960];
    let mut tx_buffer = [0; 40960];

    println!("start get_page task");

    loop {
        if stack.is_link_up() {
            break;
        }
        Timer::after(Duration::from_millis(500)).await;
    }

    println!("Waiting to get IP address...");
    loop {
        if let Some(config) = stack.config_v4() {
            println!("Got IP: {}", config.address);
            break;
        }
        Timer::after(Duration::from_millis(500)).await;
    }

    loop {
        Timer::after(Duration::from_millis(1_000)).await;

        let mut socket = TcpSocket::new(&stack, &mut rx_buffer, &mut tx_buffer);

        socket.set_timeout(Some(embassy_time::Duration::from_secs(10)));

        let remote_endpoint = (Ipv4Address::new(10, 1, 1, 85), 5901);
        println!("connecting...");
        let r = socket.connect(remote_endpoint).await;
        if let Err(e) = r {
            println!("connect error: {:?}", e);
            continue;
        }
        println!("connected!");
        let mut buf = [0; 20480];
        loop {
            use embedded_io::asynch::Write;
            let r = socket
                .write_all(b"GET /stream/swyh.wav HTTP/1.1\r\nHost: <IP_ADDRESS>:5901\r\n\r\n")
                .await;
            if let Err(e) = r {
                println!("write error: {:?}", e);
                break;
            }

            let mut measure_start = Instant::now();
            let mut bytes_downloaded_total = 0;
            loop {
                let bytes_downloaded = match socket.read(&mut buf).await {
                    Ok(0) => {
                        println!("read EOF");
                        break;
                    }
                    Ok(n) => n,
                    Err(e) => {
                        println!("read error: {:?}", e);
                        break;
                    }
                };
                bytes_downloaded_total += bytes_downloaded;

                let now = Instant::now();
                let elapsed_ms = now.duration_since(measure_start).as_millis();
                if elapsed_ms >= 1000 {
                    let kib_per_sec = bytes_downloaded_total as f32 / elapsed_ms as f32;
                    println!("got {}B in {}ms {:05.2} KB/s", bytes_downloaded_total, elapsed_ms, kib_per_sec);

                    measure_start = now;
                    bytes_downloaded_total = 0;
                }
            }
        }
        Timer::after(Duration::from_millis(3000)).await;
    }
}

And speeds i get :
got 15818B in 1028ms 15.39 KB/s
got 15818B in 1044ms 15.15 KB/s
got 12942B in 1075ms 12.04 KB/s
got 12942B in 1142ms 11.33 KB/s
got 12942B in 1023ms 12.65 KB/s
got 11504B in 1154ms 09.97 KB/s
got 14380B in 1078ms 13.34 KB/s
got 14380B in 1013ms 14.20 KB/s
got 11504B in 1097ms 10.49 KB/s

So I'm more than 10 times short :(
Is there anything i can do to speed this up ?
I have tried increasing buffers size but it doesn't change anything.
Ultimately i would like to use DMA transfer to push incoming audio data to I2S, is this possible on ESP and this library ?

IIRC @MabezDev did some tests and the results where much, much better than your results. t.b.h. I haven't benchmarked it myself
Maybe worth to try this with a different client (e.g. another PC) and see if what the WiFI and the server can do - just to rule that out

i ruled out weak wifi connection by moving esp close to router. I'm using https://github.com/dheijl/swyh-rs as audio source, so i think i should be fine. I'll try to make some simple rust client to try the speed on my laptop, but maybe somebody will notice some configuration or other errors in my code.

I also had the same problem the last two days. I wrote multiple benchmarks for download speeds. The code used is available here. Here is the result I got (on my PC I get speeds up to 25 MB/s on Wi-Fi, so the Wi-Fi is plenty fast):

It seems that there is a bottleneck somewhere, as the download speed is very similar across download sizes. The esp32-s3, which I tested on, should be capable of 2.5 MB/s (20 Mbit/s).

IIRC @MabezDev did some tests and the results where much, much better than your results. t.b.h. I haven't benchmarked it myself

Is it possible to get code for those benchmarks that @MabezDev did ? Maybe that will point me to some errors in my code.

I'm on vacation right now but the weather is even worse than it was the other days - so I took my gaming laptop and an ESP32-C3 and had a look.
I took the DHCP example and just changed the fetched URL, then added printing the duration and bytes downloaded - I got around 14000 bytes/second. Pretty bad.
Changing the socket buffer and similar simple things got me to around 37000 bytes/second. Still not good.
I tried a few things in esp-wifi itself and changed to my laptop as the HTTP server.
Bytes 1863616, millis 3012, B/s 618730
Making HTTP request

Bytes 1863616, millis 2402, B/s 775860
Making HTTP request

Bytes 1863616, millis 4666, B/s 399403
Making HTTP request

Bytes 1863616, millis 3909, B/s 476750
Making HTTP request

Bytes 1863616, millis 2976, B/s 626215
Making HTTP request

Bytes 1863616, millis 3072, B/s 606645
Making HTTP request

Bytes 1863616, millis 4665, B/s 399488
Making HTTP request

Bytes 1863616, millis 3537, B/s 526891
Making HTTP request

Bytes 1863616, millis 4241, B/s 439428
Making HTTP request

Bytes 1863616, millis 3956, B/s 471085
Making HTTP request

Bytes 1863616, millis 3149, B/s 591812
Making HTTP request

Bytes 1863616, millis 4226, B/s 440988
Making HTTP request

Bytes 1863616, millis 3338, B/s 558303
Making HTTP request

While the speed varies a lot (probably due to my crap access-point and the device not sitting exactly next to the AP) this is much better.
Unfortunately, the changes are not in a shape that I can just make it a PR yet - will do that after my vacation since I also need to check a few things (e.g. increased memory usage, how it affects other chips).
However, I think these numbers are quite promising.

Can you provide the modified DHCP example that you used ? Thank you.

With #233 it will be possible to configure various internals which got me much better performance. Finding the best values might be a trial-and-error thing however

@bjoernQ do you happen to remember what settings were effective during your july trial?

@bjoernQ do you happen to remember what settings were effective during your july trial?

I think it was like this
rx_queue_size = 20
tx_queue_size = 5
static_rx_buf_num = 32
dynamic_rx_buf_num = 16
ampdu_rx_enable = 1
ampdu_tx_enable = 1
rx_ba_win = 32
max_burst_size = 8

FWIW the best I could achieve is still an order of magnitude slower than yours.
Average speed: 34.3kB/s KiB/s
I'm not blocked on my display, I'm not bottlenecked by TLS (yet), this speed is the same with/without HTTPS. Did you happen to have some other modifications privately that didn't get into esp-wifi by any chance? :)

IIRC it was really just what is also in the tuning document. But I also had to use large receive and socket buffers to get there - I can try to reproduce it when I'm back home (next week)

Changing the buffer size may be a good idea. There are some details in my firmware that make it difficult to test right now but I'll try and play with it some.

Using this code with merged #233 :

Code
        ```
    #![no_std]
    #![no_main]

    #[path = "../../examples-util/util.rs"]
    mod examples_util;
    use examples_util::hal;

    use embedded_io::blocking::*;
    use embedded_svc::ipv4::Interface;
    use embedded_svc::wifi::{AccessPointInfo, ClientConfiguration, Configuration, Wifi};

    use esp_backtrace as _;

    use esp_println::{print, println};
    use esp_wifi::wifi::utils::create_network_interface;
    use esp_wifi::wifi::{WifiError, WifiMode};
    use esp_wifi::wifi_interface::WifiStack;
    use esp_wifi::{current_millis, initialize, EspWifiInitFor};
    use hal::clock::ClockControl;
    use hal::{peripherals::Peripherals, prelude::*};
    use hal::{systimer::SystemTimer, Rng};
    use smoltcp::iface::SocketStorage;
    use smoltcp::wire::IpAddress;
    use smoltcp::wire::Ipv4Address;

    const SSID: &str = env!("SSID");
    const PASSWORD: &str = env!("PASSWORD");

    #[entry]
    fn main() -> ! {
        #[cfg(feature = "log")]
        esp_println::logger::init_logger(log::LevelFilter::Info);

        let peripherals = Peripherals::take();

        let system = peripherals.SYSTEM.split();
        let clocks = ClockControl::max(system.clock_control).freeze();

        let timer = SystemTimer::new(peripherals.SYSTIMER).alarm0;
        let init = initialize(
            EspWifiInitFor::Wifi,
            timer,
            Rng::new(peripherals.RNG),
            system.radio_clock_control,
            &clocks,
        )
        .unwrap();

        let (wifi, ..) = peripherals.RADIO.split();
        let mut socket_set_entries: [SocketStorage; 3] = Default::default();
        let (iface, device, mut controller, sockets) =
            create_network_interface(&init, wifi, WifiMode::Sta, &mut socket_set_entries).unwrap();
        let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);

        let client_config = Configuration::Client(ClientConfiguration {
            ssid: SSID.into(),
            password: PASSWORD.into(),
            ..Default::default()
        });
        let res = controller.set_configuration(&client_config);
        println!("wifi_set_configuration returned {:?}", res);

        controller.start().unwrap();
        println!("is wifi started: {:?}", controller.is_started());

        println!("Start Wifi Scan");
        let res: Result<(heapless::Vec<AccessPointInfo, 10>, usize), WifiError> = controller.scan_n();
        if let Ok((res, _count)) = res {
            for ap in res {
                println!("{:?}", ap);
            }
        }

        println!("{:?}", controller.get_capabilities());
        println!("wifi_connect {:?}", controller.connect());

        // wait to get connected
        println!("Wait to get connected");
        loop {
            let res = controller.is_connected();
            match res {
                Ok(connected) => {
                    if connected {
                        break;
                    }
                }
                Err(err) => {
                    println!("{:?}", err);
                    loop {}
                }
            }
        }
        println!("{:?}", controller.is_connected());

        // wait for getting an ip address
        println!("Wait to get an ip address");
        loop {
            wifi_stack.work();

            if wifi_stack.is_iface_up() {
                println!("got ip {:?}", wifi_stack.get_ip_info());
                break;
            }
        }

        println!("Start busy loop on main");

        let mut rx_buffer = [0u8; 1536 * 64];
        let mut tx_buffer = [0u8; 1536 * 1];
        let mut socket = wifi_stack.get_socket(&mut rx_buffer, &mut tx_buffer);

        let mut current_try = 1;
        let max_tries = 3;
        let mut speed_sum = 0;
        loop {
            println!("Making HTTP request (count {})", current_try);
            socket.work();

            socket
                .open(IpAddress::Ipv4(Ipv4Address::new(10, 1, 1, 10)), 80)
                .unwrap();

            socket
                .write(b"GET /testfile HTTP/1.0\r\nHost: <IP_ADDRESS>\r\n\r\n")
                .unwrap();
            socket.flush().unwrap();

            let wait_end = current_millis() + 20 * 1000;
            let mut bytes = 0;
            let t1 = current_millis();
            let mut buffer = [0u8; 1024 * 32];
            loop {
                if let Ok(len) = socket.read(&mut buffer) {
                    //println!("{len}");
                    bytes += len;
                } else {
                    break;
                }

                if current_millis() > wait_end {
                    println!("Timeout");
                    break;
                }
            }
            let t2 = current_millis();

            println!();

            socket.disconnect();

            let speed = bytes as u64 * 1000 / (t2 as u64 - t1 as u64);
            println!("Bytes {}, millis {}, B/s {}", bytes, t2 - t1, speed);

            speed_sum += speed;

            let wait_end = current_millis() + 5 * 1000;
            while current_millis() < wait_end {
                socket.work();
            }
            current_try += 1;
            if current_try > max_tries {
                let avg_speed = speed_sum / max_tries;
                println!("Avg speed in {} tries {} B/s", max_tries, avg_speed);

                loop {
                }
            }
        }
    }
    ```

I was able to tune my esp32c3 to get around 400 KB/s. I've used multivariate experiment (https://www.youtube.com/watch?v=5oULEuOoRd0) to find out which settings has most influence on download speed.
I've used those values for experiments:

test
rx_queue_size
tx_queue_size
static_rx_buf_num
dynamic_rx_buf_num
static_tx_buf_num
dynamic_tx_buf_num
ampdu_rx_enable
ampdu_tx_enable
rx_ba_win
max_burst_size
country_code

1
5
3
10
32
0
32
0
0
6
1
CN

2
20
5
32
16
16
16
1
1
32
8
PL

And those were the results:
|   | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11
-- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | --
test | speed B/s (avg of 3) | rx_queue_size | tx_queue_size | static_rx_buf_num | dynamic_rx_buf_num | static_tx_buf_num | dynamic_tx_buf_num | ampdu_rx_enable | ampdu_tx_enable | rx_ba_win | max_burst_size | country_code
1 | 124764 | 5 | 3 | 10 | 32 | 0 | 32 | 0 | 0 | 6 | 1 | CN
2 | 60115 | 5 | 3 | 10 | 32 | 0 | 16 | 1 | 1 | 32 | 8 | PL
3 | 63889 | 5 | 3 | 32 | 16 | 16 | 32 | 0 | 0 | 32 | 8 | PL
4 | 114179 | 5 | 5 | 10 | 16 | 16 | 32 | 1 | 1 | 6 | 1 | PL
5 | 65398 | 5 | 5 | 32 | 32 | 16 | 16 | 0 | 1 | 6 | 8 | CN
6 | 133764 | 5 | 5 | 32 | 16 | 0 | 16 | 1 | 0 | 32 | 1 | CN
7 | 407828 | 20 | 3 | 32 | 16 | 0 | 32 | 1 | 1 | 6 | 8 | CN
8 | 113233 | 20 | 3 | 32 | 32 | 16 | 16 | 1 | 0 | 6 | 1 | PL
9 | 114566 | 20 | 3 | 10 | 16 | 16 | 16 | 0 | 1 | 32 | 1 | CN
10 | 116413 | 20 | 5 | 32 | 32 | 0 | 32 | 0 | 1 | 32 | 1 | PL
11 | 435955 | 20 | 5 | 10 | 16 | 0 | 16 | 0 | 0 | 6 | 8 | PL
12 | 328365 | 20 | 5 | 10 | 32 | 16 | 32 | 1 | 0 | 32 | 8 | CN
  | SUM 1 | 562109 | 884395 | 1177944 | 808288 | 1278839 | 1155438 | 920985 | 1199970 | 1261357 | 716919 | 1174685
  | SUM 2 | 1516360 | 1194074 | 900525 | 1270181 | 799630 | 923031 | 1157484 | 878499 | 817112 | 1361550 | 903784
Unfortunately i live in very RF noisy place, so i couldn't rule out external variables, but i think this method can lead to even better results.

So it seems that the secret ingredients are increasing the flash read speed and bumping up the ICACHE... Is there a way to change them in a no-std Rust stack?

Those things are currently not configurable in esp-hal. While it will make a difference, I think it needs more since 300k vs 5M is a huge difference. Can you post your cfg.toml?

Sure:
[esp-wifi]
rx_queue_size = 3
tx_queue_size = 3
static_rx_buf_num = 16
dynamic_rx_buf_num = 16
static_tx_buf_num=16
dynamic_tx_buf_num=16
ampdu_rx_enable = 1
ampdu_tx_enable = 1
country_code="PL"
rx_ba_win = 32
tx_ba_win = 32
max_burst_size = 8

EspHeap is 100 kib, RX buffer 1 kib (since its only for ACKs), TX buffer is 64 kib, to mirror ESP config. It would benefit from larger queues since it emits a lot of "no TX token" warnings, but it seem to OOM if it is increased (I'm very new to ESP32 and its memory layout so I'm likely doing something stupid, though).
I'm going to test how disabling flash/cache in sdkconfig hurts the idf demo, this should give us a hint how useful they are.

I was not able to run the iperf example with modified parameters (this fancy pseudo-shell got broken easier than wifi), yet I made a simple project with esp-idf stack pushing 1KiB of static data in a blocking way. I have used the following sdkconfig.defaults file:
##--- This part is from Rust template ---
# Rust often needs a bit of an extra main task stack size compared to C (the default is 3K)
CONFIG_ESP_MAIN_TASK_STACK_SIZE=8000

# Use this to set FreeRTOS kernel tick frequency to 1000 Hz (100 Hz by default).
# This allows to use 1 ms granuality for thread sleeps (10 ms by default).
#CONFIG_FREERTOS_HZ=1000

# Workaround for https://github.com/espressif/esp-idf/issues/7631
#CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=n
#CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=n

##--- This is the IPERF demo config ---

## -- The Modem/LWIP part --
CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=16
CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=64
CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=64
CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y
CONFIG_ESP_WIFI_TX_BA_WIN=32
CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y
CONFIG_ESP_WIFI_RX_BA_WIN=32

CONFIG_LWIP_TCP_SND_BUF_DEFAULT=65535
CONFIG_LWIP_TCP_WND_DEFAULT=65535
CONFIG_LWIP_TCP_RECVMBOX_SIZE=64
CONFIG_LWIP_UDP_RECVMBOX_SIZE=64
CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=64

## -- The Cpufreq part --
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=240

## -- The QIO (flash speed) part --
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y

## -- The ICACHE part --
CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB=y
CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_32B=y
CONFIG_ESP32S3_INSTRUCTION_CACHE_WRAP=y

It has three blocks that I was then turning on/off; here are my results (def means defaults/block off, iperf means settings from the demo):

Modem/LWIP
CPU Freq
QIO+Flash
ICACHE
Speed

def
160MHz
def
def
643KiB/s

iperf
240MHz
iperf
iperf
3.62MiB/s

iperf
240MHz
def
iperf
3.62MiB/s

iperf
240MHz
def
def
879KiB/s

def
180MHz
def
iperf
1.69MiB/s

def
240MHz
iperf
iperf
2.06MiB/s

It is pretty evident that instruction cache is a main source of speed-up; playing with buffers and queue sizes helps, but I doubt it can get one over the 1MiBps barrier.

You could try playing with patching various values from here: https://github.com/esp-rs/esp-hal/blob/4d87e75d71b55d546b37aff6a4494cefb743c4a9/esp32s3-hal/src/lib.rs#L76-L100 in esp-hal.
We have a longer standing issue around cache configuration here: https://github.com/esp-rs/esp-hal/issues/955.

@MabezDev For a fast test I tried bumping esp-wifi to main, and the result was 50% throughput drop, from 313KiB/s to 139KiB/s (this is on S3 board with a sync code that just tries to push as many bytes as possible); I haven't tested cache patches yet.
Anyhow, I decided to use IDF for the project I'm doing now, but I'm still keeping my fingers crossed for a solution here.


openvr driver about overwriting vive hmd positioning and getting vive hmd gyroscope rotation data

Hello,
I am a developer doing openvr related development, but this is my first exposure to openvr
I read something about OSVR online and wanted to ask if OSVR can help me with the needs described below, and if so, is there any more detailed documentation on how to get started.
I created an openvr driver and it works fine. I have tried adding a device in the driver: TrackedDeviceClass_GenericTracker, this tracker device receives 3rd party positioning data via UDP, and overlays the positioning data with the helmet positioning data by using trackingoverrides; I don't use a base station.
The problem now is:
1.When I use trackingoverrides to override the HMD positioning, the window of the steamVR application immediately pops up a prompt box, prompting me to set the room, the error code is C200; and the VR view is not displayed on the PC.like the  picture:
https://user-images.githubusercontent.com/39475297/148365368-d15b0e84-e2ab-449b-abc5-f1b91b94cd1f.png
I see there are some methods that say other chaperone json files can be used directly, but I don't know how to use it, can anyone tell me the details? How to unify the coordinate system in the openvr driver, and how to avoid the frequent pop-up of room settings in steamvr?

I want to use the position data in the third-party positioning data in the driver (without its rotation), and then use the rotation data of the HTC VIVE helmet's own gyroscope, and combine the third-party position data with the rotation data of the HTC vive helmet's gyroscope. After fusion, I set the positioning and rotation of the helmet together, because I know its own gyro rotation data is very accurate. Is my method correct? And how to get the rotation data of HTC vive helmet gyroscope through openvr driver? Note that I do not use lighthouse base stations.
I have tested a lot of examples, but all of them have the above problems, including the vive official git sample, OpenVR-driver-for-DIY, Simple-OpenVR-Driver-Tutorial and many more.
Hope to get help, thanks. I asked the same question on the steam forum because I was really bothered by it for a long time, I hope to get help, thanks.
Best ,
Looking forward to getting a reply

That's a better question for the SteamVR forums. OSVR is not likely to be able to help you here.

First of all thank you very much.
I've posted the same question on the steamVR community, and since no one responded, I'm just asking here, I wonder if OSVR can meet such a feature requirement?


Add an editor to container for user edition

Maintainers would put this command earlier and I recommend it too, since this step will be stored in "the docker cache" next time the image is built
Fix #22

Thanks for your help, @iamdey!
The error you are seeing on #22 is because of this.
I am wondering if replacing vi there with nano would be a more sensible default. I think we should default whichever is the most widespread of the two in common distributions. But this is kind of a wild guess to make.
@iamdey, does that image come with nano, out of curiosity? If so, and if we decide to keep vi as a default, I think setting $EDITOR to nano is more sensible here.
Thoughts?

When I made the PR to attempt vim, I included defaulting to nano if vim and $EDITOR weren't found - that might also be a sensible option? (even if it doesn't fix this, that might be a beneficial PR)

Right, but we gave up because it's not just process.env.EDITOR || "vi" || "nano", we actually have to handle failure from spawn, which I think is unnecessary. Having one default, widespread (as much as we can) or else we fallback to $EDITOR is sensible enough IMO.

no vim, no vi nor nano in the container.
I'm agree vi sounds more like a generic choice.

Docker containers shouldn't really facilitate editing of files inside the container via pseudo-TTY sessions, imo. Files that needs to be edited should be mounted or cp'd into the container. I'm 👎 on this one.

@williamboman I'm not experienced enough in writing Dockerfile to have an opinion.
I changed the PR following recommendations so do whatever you want, merge or not I'll not take this personally.

@iamdey I haven't forgotten about this PR. The use case is definitely there, I'll propose a different solution soon™.

Files that needs to be edited should be mounted or cp'd into the container.

@williamboman, is that something that can be done directly from the Dockerfile? (Never wrote or edited one myself, so I have no idea if that's dumb or not)

@williamboman, is that something that can be done directly from the Dockerfile? (Never wrote or edited one myself, so I have no idea if that's dumb or not)

Yes, but this image shouldn't do anything like that. There's the COPY/ADD directives, and there's docker cp (which is the one I'm referring to).


Add Parser for Liberty Throughput

• Added parser for Renaissance tests
• Remove unit from metric name for Liberty Startup test
• Renamed Liberty Startup to conform to the naming convention

Related Issues:
https://github.com/AdoptOpenJDK/openjdk-tests/issues/1127
https://github.com/AdoptOpenJDK/openjdk-tests/issues/1770
Signed-off-by: Piyush Gupta<EMAIL_ADDRESS>


Migrations with date-based versioning are incorrectly sorted

Versioned migrations with date-based scheme (e.g. v20180101__initial.sql) are not executed in proper order during migrate goal.

Thanks for the report. We definitely need to support date formats.
The problem is with the migration comment. Currently, we execute only files labeled as jpa2ddl (we're sure there are only schema changes here) and assume all others can contain data migrations. As invoking data migrations makes no sense (there is no data in the database set up by the plugin) we must have a pattern to distinguish it. Of course we can make it configurable, however, a good default is always welcome. Any suggestions here?

So why not just execute data migrations?

Unfortunately, data migration can be related to the existing data, that is not present in the database temporarily created by the plugin. That's why we need to separate it from the schema migrations


Scripts in feedbackreporter/Server/Mantis do not support current Mantis (version 1.2)

The scripts in feedbackreporter/Server/Mantis support Mantis 1.1 but not the current 1.2.
An update would be nice. :)

@starlocke

💡 I just had an idea on how to "maintain" multiple MantisBT support at the same time. Should be creating a new "Mantis-2.x" folder instead of patching the original "Mantis" folder. New folders for "1.2" and "1.3" needed as well. 😂

I don't see any value in keeping the current mantis code, as it only supports mantis version 1.1, which has known security vulnerabilities and isn't being maintained.  I believe that applies to all of 1.x too.
Supporting only the newest version (currently 2.5.1) is most sensible I believe.

Fine by me.


Feature request: Cover multiple scenarios with concise syntax

Subject of the issue
Testing multiple edge cases with concise syntax.
Your environment

Ruby version: Any
rspec-core version : Future

Steps to reproduce
N/A
Expected behavior
I think a little code snippet gets the points across.
Something I have found useful is doing this kind of thing:

with_lets(
  self, [
    { foo: false, bar: false, baz: false },
    { foo: false, bar: nil,   baz: false },
    { foo: nil,   bar: nil,   baz: false },
    #...
    { foo: true,  bar: true,  baz: true }
  ]
) do
  it 'works' do
    expect(foo && bar).to eq baz
  end
end

I end up re-implementing similar versions of this from time to time.
Here's a simple implementation from a Rails project:
module SpecSupport
  module WithLets
    extend ActiveSupport::Concern

    class_methods do
      def with_lets(base, scenarios, &block)
        scenarios.each do |spec_attrs|
          description = spec_attrs.map { |n, v| "with #{n}: #{v}" }.join(', ')

          _with_lets_define_context(base, spec_attrs, description, &block)
        end
      end

      private

      def _with_lets_define_context(base, spec_attrs, description, &block)
        base.instance_eval do
          context description do
            spec_attrs.each do |name, value|
              let(name) { value }
            end

            instance_eval(&block)
          end
        end
      end
    end
  end
end

RSpec.configure do |c|
  c.include SpecSupport::WithLets
end

Then you get output with a new context for each scenario, and the let keys and values in the context description.
Actual behavior
As far as I'm aware this or similar functionality doesn't exist. Please correct me if I'm wrong. Do you think this is something you'd be interested in having a pull request for?
I find it really convenient for covering lots of cases in a relatively easy-to-read intuitive form.
I prefer it to heavily nested contexts that cover (or may miss some coverage) the same set of (or a subset of) edge cases.
It would probably be nicer if the syntax could avoid needing passing in self, but I haven't investigated to see how doable that is.
I'd be happy to have a stab at it, if you think it belongs in RSpec.
I've not really contributed (much?) to RSpec, so I'm not sure whether this would live in rspec-core or somewhere else. Apologies if it's not here.

I would implement this using shared examples, which is intended for this sort of repetition:
shared_examples_for "my example" do |**kwargs|
  kwargs.each { |name, value| let(name) { value }
  it "works" do
     expect(foo && bar).to eq baz
  end
end

it_behaves_like "my example", foo: false, bar: false, baz: false
it_behaves_like "my example", foo: false, bar: nil,   baz: false
it_behaves_like "my example", foo: nil,   bar: nil,   baz: false
#...
it_behaves_like "my example", foo: true,  bar: true,  baz: true

It would make an interesting RSpec extension. But with an existing alternative notation, I would suggest keeping it as an extension, and keeping the core less TIMTOWTDI.

Fair points.
I've found shared example failures to be pretty opaque in the past, but it could have been how they were used.
I'll take another look at that approach. Named keywords looks like a good simplification. It sounds like addressing any issues with shared_examples would be a better focus if I can remind myself what the troubles were.

Hey so I'm re-opening this, just to say I have tried out the shared_examples approach.
I do still find it to be quite opaque for understanding failures.
What would your thoughts be on automatically adding in a context similar to the above that uses passed in arguments to describe the context?
Is that something worth pursuing?

To clarify, to add this to the shared_examples functionality rather than this proposed with_lets method

You can do that, too:
shared_examples "my example" do |foo:, bar:, baz:|
  context "with foo: #{foo}, bar: #{bar}, baz: #{baz}" do
    it "works" do
       expect(foo && bar).to eq baz
    end
  end
end

Even simpler when you use **kwargs. To define lets, you can use this one-liner:
context "with #{kwargs}" do
  kwargs.each { |name, value| let(name) { value } }

Yes, that's possible, but from what I've seen, I don't think generally people actually do. So you get identical opaque failure messages. Which probably leads to less people using them. And then people like me still wanting something briefer.
Would there be disadvantages to adding in these contexts by default? Each time you use a new combination of arguments for a shared example, it seems to me that it's conceptually a new context.

Shared examples uses a new context each time already

Ok so I'm just on mobile now but will look at the code later.
Maybe I need to rephrase it as "would there be any issues with automatically naming these contexts by default in a way which makes the failure output more useful"

would there be any issues with automatically naming these contexts

The name is generated from the method used to invoke the group, and the name of the shared examples, inspecting meta data is potentially possible but would create potentially rather large names which are also class names, (basically we can't guarantee that they are primitives)

Ah I see.
Ok well perhaps I'll gemify it at some point.
Thanks for your time.

uses a new context each time already

Unless used with include_examples.
@markburns What do you propose exactly, how would it look in specs?
Something like that?
shared_examples_with_description_including_parameters "my examples" do |foo: bar:, baz:|
  # ...
end

To keep in mind, it_behaves_like accepts a block that you can also use to define lets:
it_behaves_like "my examples", foo: 1, bar: 2 do
  let(:baz) { 'baz' }
end

but in this case it won't be possible for a shared example group to have a description that includes baz.

@pirj in an ideal world it would just be
shared_examples 'my examples' do |foo:, bar:, baz:|
  # ...
end

But I'm not sure it's all that viable with the caveats you and Jon have presented.
I suppose if I were to address your it_behaves_like scenario, I'd say that the generated context containing only the foo: 1, bar: 2 would be the least surprising thing.
Given that with_lets does what I want and is a small amount of code though I think it does make sense to just create a gem.


Roll Flutter Engine from b94e0097035d to d05f1b633515 (2 revisions)

https://github.com/flutter/engine/compare/b94e0097035d...d05f1b633515
2024-08-21<EMAIL_ADDRESS>Roll Dart SDK from 49f655b526c7 to 48f9b96d71e7 (1 revision) (flutter/engine#54672)
2024-08-21<EMAIL_ADDRESS>Roll Fuchsia Linux SDK from 3a16kOsyFmJh3lo7e... to XGzE3idakwfQZ68pb... (flutter/engine#54671)
Also rolling transitive DEPS:
fuchsia/sdk/core/linux-amd64 from 3a16kOsyFmJh to XGzE3idakwfQ
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-engine-flutter-autoroll
Please CC jimgraham@google.com,rmistry<EMAIL_ADDRESS>on the revert to ensure that a human
is aware of the problem.
To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose
To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

Commit queue failed; closing this roll.


Make pykorm python 3.6 compatible

May be related with @YiannisGkoufas issue

I've published the new version to pypi @YiannisGkoufas , it should now work for you. Thanks for the report !

I've published the new version to pypi @YiannisGkoufas , it should now work for you. Thanks for the report !

Yeap I can confirm that by upgrading to python 3.7 I was able to install!

Yeap I can confirm that by upgrading to python 3.7 I was able to install!


AP-2267 BugFix - Update predwp check to be more accurate

AP-2267 BUGFIX Update predwp check to be more accurate
Link to story
Update the base state machine to define the states that occur before the dwp check.
Update the LegalAidApplication model to use the above states to check if a legal aid application is in the pre_dwp_check state.
Test the above.
Checklist
Before you ask people to review this PR:

[x] Tests and rubocop should be passing: bundle exec rake
[x] Github should not be reporting conflicts; you should have recently run git rebase master.
[x] There should be no unnecessary whitespace changes. These make diffs harder to read and conflicts more likely.
[x] The PR description should say what you changed and why, with a link to the JIRA story.
[x] You should have looked at the diff against master and ensured that nothing unexpected is included in your changes.
[x] You should have checked that the commit messages say why the change was made.

Codecov Report

Merging #2562 (7ea00a8) into master (f53a669) will not change coverage.
The diff coverage is 100.00%.

@@            Coverage Diff            @@
##            master     #2562   +/-   ##
=========================================
  Coverage   100.00%   100.00%
=========================================
  Files          520       520
  Lines        10423     10424    +1
=========================================
+ Hits         10423     10424    +1

Impacted Files
Coverage Δ

app/models/concerns/base_state_machine.rb
100.00% <100.00%> (ø)

app/models/legal_aid_application.rb
100.00% <100.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 f53a669...7ea00a8. Read the comment docs.


Fix classification of maven builds

As with #14 should we try to create unit tests for these?

As with #14 should we try to create unit tests for these?

If BuildFinder were refactored to separate out a Main class and make the other methods non-static, then this might make it easier to test functionality.
There is the general problem that unit tests should be offline and avoid any sort of network or database access, so it needs to be decided how to mock the actual Koji API calls like getArchiveTypeMap() which are all methods on a KojiClient object,

Agreed with tests not requiring external resource (beyond standard dependencies). I would suggest something like wiremock perhaps?

Agreed with tests not requiring external resource (beyond standard dependencies). I would suggest something like wiremock perhaps?

Kojiji has a way to load the XML data normally sent over the network from a file. I am not sure if that would be enough.


how to change FlowingView pull out color ?

how to change FlowingView pull out color ?

#23 here is solution


Add support for config drift checker

As a follow-up of: https://github.com/cilium/cilium/issues/34101, https://github.com/cilium/cilium/issues/34541.
Add support to monitor the drift between the agent config and the dynamicconfig table content to highlight the config drift to the user.

/cc @christarazi
Can you add the relevant labels (I don't have access) and assign this to me.


forward porting

Using git merge --no-ff --no-commit origin/rel/1.0 with master as a baseline.

:+1:


Inline PHP codes ?

I know JS HTML CSS shortcodes are possible, but is their anyway to use PHP inline code ?

You can't put PHP inline in your content or even in your Twig.  This is for security reasons to help deter hacking.
The preferred approach is to create a simple plugin with your PHP logic.  Depending on your needs this could be a shortcode plugin, markdown plugin, or just a custom Grav plugin that does something and assigns data to a Twig variable to be used in Twig templates.
There are plenty of examples of these various types in the downloads section.


update changelog

update changelog:
GPU support for torch fl model

I have read the CLA Document and I hereby sign the CLA


Updates keys for posting to gladiator.

What's this PR do?
updates names to match changes DoSomething/gladiator/pull/67
How should this be manually tested?
do requests still send to gladiator?
What are the relevant tickets?
Refs #6170

:100: :ship:


endpoint: Embed a *controller.Manager

Allows to use NewManager() and thus FakeManager() isntead of doing a copy by
value.
Fixes: #6896

This change is

Coverage decreased (-0.04%) to 42.908% when pulling e63e4acfdcec6034ebe7c9ca9ab65cb58e46478b on pr/tgraf/fix-controller-manager-lock-copy into 04e4d9931131b01fa6036a1f2172efbb4cfddee7 on master.

test-me-please

test-me-please


[Event Hub Client] EventData Body Update

Summary
The focus of these changes is to refactor the EventData class to promote the BinaryData representation of the payload as the primary interaction point, and deprecate the former Body and BodyAsStream members in favor.
Note: These changes have been reviewed and approved by the language architect. Marking with the corresponding tag for tracking purposes.
Last Upstream Rebase
Monday, October 5, 2:28pm (EST)

The code changes look good. Are there any additional docs changes needed? Like, beyond the samples.

Good catch.   Forgot to update the migration guide!


Encapsulate FiniteElementState in class

This PR moves the FiniteElementState struct into a class.  Direct member accessors are still used in several places but some functionality has been abstracted into methods to minimize direct member exposure.
The variant coefficient has been moved out of the BoundaryCondition namespace and has been renamed GeneralCoefficient.
Because BoundaryCondition depends on FiniteElementState, some changes were made to this class, in particular a helper method to apply a boundary condition to a linear system (called apply).
Partially addresses #118

it's pretty tricky to review these PRs that change types between values/pointers, the diffs become long enough that it's easy to miss stuff.

Yeah, I agree. My hope is these large sweeping refactoring/style PRs should slow down soon. I am a big fan of small PRs!

This has some great code readability and general quality of life improvements! I have a few comments we should discuss, but overall this looks great!

My hope is these large sweeping refactoring/style PRs should slow down soon. I am a big fan of small PRs!

I agree, but to some extent it's a catch-22: eliminating or reducing tight couplings between components means that future modifications won't need to modify as much code (as long as the right abstractions are chosen), but can require a fair amount of upfront modification.

My hope is these large sweeping refactoring/style PRs should slow down soon. I am a big fan of small PRs!

I agree, but to some extent it's a catch-22: eliminating or reducing tight couplings between components means that future modifications won't need to modify as much code (as long as the right abstractions are chosen), but can require a fair amount of upfront modification.

Yep, that's why I'm OK with this for now. It's kind of a necessary evil.

LGTM


Fidelity auto incorrect limit price

Hello, very big fan of the project, impressive really. Recently been running into a problem with fidelity where the limit price entered is 111.03 regardless of what limit price is stored in the .side file. Not sure if you've noticed anything similar.
Any help is appreciated Thanks!

The issue has been fixed. Thanks for supporting the project.


Signing error - Could not sign PSBT

I have a multisig wallet in which one of the signatures is a hardware wallet. The wallet has many inputs. I try to sign a transaction and I get an error saying Signing Error and "Could not sign PSBT".

I am able to successfully sign the transaction with Electrum using the same hardware wallet and passphrase.
I am able to sign transactions using that hardware wallet and Sparrow for a different wallet that doesn't have many inputs. Maybe the large number of inputs is the issue? There are 32 inputs. I can provide the psbt file if that would be safe enough to do.

Don't send the PSBT file here, it contains privacy sensitive information.
When saying "the wallet has many inputs" - do you mean "the transaction has many inputs"? Can you check the Sparrow log (Help menu) for more information?

I've attached the full log file here. You can specifically search the log file for "could not sign" to see the related error messages.
log.txt

Thanks for the bug report, fixed in 7f2d72e.

Thanks for fixing this. When do you think the next release will be out? I'm trying to determine if I should wait to send the payment I need to send or if I should just export the wallet to Electrum and use that in the meantime.
I'm facing another issue when doing one of the multisig signatures with the Fully Noded iphone app after exporting the PSBT from Sparrow. I'm not sure if the issue is in Fully Noded or Sparrow, but I thought I'd link to the issue here so that you can take a look when you have time:
https://github.com/Fonta1n3/FullyNoded/issues/206
I'm not sure if it's related to this issue that you resolved here because it's occurring in the same wallet. It doesn't occur in other wallets. Thanks!

When do you think the next release will be out?

Probably in a couple of weeks - running from source is not super difficult, but Electrum is a good fallback.

I'm not sure if it's related to this issue that you resolved here because it's occurring in the same wallet.

It's not related. I'm happy to take a look at the PSBT if you email it to me at craig at sparrowwallet.com. Otherwise, you can save in a number of different formats - try the File > Save PSBT > As Base64 option.

Thanks, received. The PSBTs look fine, and load in Sparrow - it's probably their size that is troubling FullyNoded. Try the File > Save PSBT > Without Xpubs menu item to reduce the file size.

Thanks. Yea I think FullyNoded isn't able to handle a psbt with such a large file size. The transaction has 39 inputs and 2 outputs. I tried it without the xpubs based on your suggestion. It's still 6.7MB in base64 and 5.1MB in binary. The original with the xpubs is 5.1MB, so it doesn't make any difference.

I see there is already one signature present - try without signing first?


Unpublished pages are migrated as published

Brief bug description
Running the migration tool against a KX13 database, with pages that are currently unpublished, all pages are added to the new channel's tree as published pages. This is quite inconvenient as it means we'll need to correct this ourselves after the migration has completed.
Repro steps

Unpublish a page in KX13
Run migration toolkit
Page in XbyK is published

Expected behavior
Page should remain unpublished when added to the new XbyK database.

I assume this might be fixed when the toolkit supports XbyK 29.2.0?

@tkrch - example on a site I am looking at in particular, uses Versioning without workflow.
It is currently used to ensure versioning of pages is tracked, allowing for rollbacks, and keeping an audit trail of changes made.  What types of workflows/versioning work with the migration toolkit?

Yep - they use the publish to field in KX13.
I assume since the migration tool doesn't support 29.2.0 yet, then it won't factor in the unpublished state using that field yet?


pm2 processes ? (question mark) on left side, beside process name

I have installed pm2 and it all went on fine. But I see a few question (?) marks when I run pm2 monit which I don't really understand what it means. I have set up the monitoring server too, as specified in https://app.keymetrics.io console.
? PM2 monitoring (To go further check out https://app.keymetrics.io)

? pm2-server-monit                    [                              ] 0 %
[0] [fork_mode]                        [|||||                         ] 31.375 MB

? index                               [                              ] 0 %
[1] [cluster_mode]                     [||||||||                      ] 47.734 MB

? index                               [                              ] 0 %
[2] [cluster_mode]                     [||||||||                      ] 47.398 MB

? index                               [                              ] 0 %
[3] [cluster_mode]                     [||||||||                      ] 46.418 MB

The question marks that I am referring to are the ones in front of "index" e.g "? index"
I can see from some of the other screenshots on the web that it is supposed to be either a green or red circle. I have no idea as to what those circles are. Anyone can help me understand?
Thanks,
M.M

Hi,
This is supposed to be a green circle if the application is live or a red if it crashed.
It seems the display failed on your terminal for some reason. What terminal do you use?
Those green/red circles can also be found in the Keymetrics console, right next to the application name.
Hope this helps!

It's a known issue https://github.com/Unitech/pm2/issues/727 and related


Conf: Allocate directive name memory from temp-pool.

Proposed changes
The PR intends to optimize the memory consumption of Nginx.
When custom_handler is not set, the first element in conf->args is treated as the directive name and is compared against the directive names defined by the modules. Since modules typically do not store the directive name, memory for it can be allocated using a temporary pool to optimize memory usage.

Modules are free to use and store any item from cf->args. It is true, typically directive name is not stored. However, changing allocation method may have severe consequences, while having little benefits. I'd avoid this.


[to #67] support setting api version in br requests

Signed-off-by: Jian Zhang<EMAIL_ADDRESS>
What problem does this PR solve?
Issue Number: [to #67]
Problem Description: Not a problem. In order backup and restore data between clusters with different API versions, we need to indicate tikv-servers about the target encoding format to either API v1 or v2.
What is changed and how does it work?
add a flag for users to indicate the destination API version for backup.
Code changes

Has exported function/method change
Has exported variable/fields change
Has interface methods change

Check List for Tests
This PR has been tested by at least one of the following methods:

Unit test
Integration test

Side effects

Increased code complexity, WHY: users need to be aware of the API versions to use BR tools

Related changes

Need to update the documentation

now the help message of tikv-br backup raw is:
➜ ./bin/tikv-br backup raw --help
(experimental) backup a raw kv range from TiKV cluster

Usage:
  br backup raw [flags]

Flags:
      --dst-api-version string   The encoding method of backuped SST files for destination TiKV cluster, default to the source TiKV cluster. Available options: "v1", "v1ttl", "v2".
      --end string               The end key of the backup task, key is exclusive.
      --format string            The format of start and end key. Available options: "raw", "escaped", "hex". (default "hex")
  -h, --help                     help for raw
      --start string             The start key of the backup task, key is inclusive.

...


GitVersion fails in CI, but not locally

https://github.com/HaloSPV3/HXE/runs/3451724892

C:\Users\runneradmin\AppData\Local\Microsoft\dotnet\sdk\6.0.100-preview.7.21379.14\Microsoft.Common.CurrentVersion.targets(4343,5): error : MSB4803: The task "FormatUrl" is not supported on the .NET Core version of MSBuild. Please use the .NET Framework version of MSBuild. See https://aka.ms/msbuild/MSB4803 for further details. [D:\a\HXE\HXE\src\HXE.csproj]

We use the DotNet CLI to compile a .NET Framework 4.6.2 project which is a valid usage as indicated by local builds.
So, we can only assume that the CI environment is using the wrong libraries because it lacks the libraries it needs to for Net4.6.2 build tasks.
The DotNet SDK does have an equivalent to the FormatUrl task, but it's a Class rather than a Task. Also, we would need to somehow wrap this class as a task for backwards compatibility with GitVersion which does not appear to support this mixed environment.

Okay. I'm not understanding what's wrong.
Visual Studio: https://docs.microsoft.com/en-us/visualstudio/msbuild/formaturl-task?view=vs-2019
MSBuild: https://docs.microsoft.com/en-us/dotnet/api/microsoft.build.tasks.formaturl?view=msbuild-16
MSBuild .NET Core: https://docs.microsoft.com/en-us/dotnet/api/microsoft.build.tasks.formaturl?view=msbuild-16-netcore
Contrary to the error, "FormatUrl" is supported on the .NET Core version of MSBuild.
So, now I can only assume this class or its library is missing from DotNet 6 SDK and/or the VS2019 build environment on the Windows Server 2019 Job Host.
If it isn't missing, then the PATH variable is lacking the appropriate paths or the path isn't being found by tools such as VSWhere.

https://gitversion.net/docs/usage/msbuild

It currently works with desktop MSBuild. Support for CoreCLR with dotnet build is coming soon.

It turns out that it was the <GenerateManifests> property. Removing it resolved the issue for dotnet build and dotnet publish
That element was introduced nearly a year ago when I was trying to learn what Publishing did.

"D:\Repos\HXE\src\HXE.sln" (Publish target) (1:2) ->
"D:\Repos\HXE\src\HXE.csproj" (Publish target) (2:6) ->
(_DeploymentComputeClickOnceManifestInfo target) ->
   C:\Program Files\dotnet\sdk\6.0.100-preview.7.21379.14\Microsoft.Common.CurrentVersion.targets(4343,5): error : MSB4803: The task "FormatUrl" is not supported on the .NET Core version of MSBuild. Please use the .NET Framework version of MSBuild. See https://aka.ms/msbuild/MSB4803 for further details. [D:\Repos\HXE\src\HXE.csproj]

dotnet build log BEFORE removal
dotnet build log AFTER removal


Postcard from Google Earth

#googleearth https://earth.app.goo.gl/?apn=com.google.earth&isi=293622097&ius=googleearth&link=https%3A%2F%2Fearth.google.com%2Fweb%2F%4064.69619163,-85.33221694,-30495.32725723a,47285319.83736992d,35y,40.14608319h,0t,0rSkip to content
Skip to table of contents
JW.ORG
Change site language
Log In (opens new window)
Search JW.ORG
SHOW MENU
Ca
4
The Song of Solomon4:1-16
Play
Current time 0:00
Loaded: 0%
Progress: 0%
Duration 0:00
Mute
4  “Look! You are beautiful, my beloved.Look! You are beautiful.Your eyes are those of doves behind your veil.Your hair is like a flock of goatsStreaming down the mountains of Gilʹe·ad.a 2  Your teeth are like a flock of newly shorn sheepThat have come up from being washed,All of them bearing twins,And not one has lost her young. 3  Your lips are like a scarlet thread,And your speech is delightful.Like a segment of pomegranateAre your cheeks* behind your veil. 4  Your neckb is like the tower of David,cBuilt with courses of stoneUpon which are hung a thousand shields,All the circular shields of the mighty men.d 5  Your two breasts are like two fawns,The twins of a gazelle,eThat feed among the lilies.” 6  “Until the day grows breezy* and the shadows flee,I will go my way to the mountain of myrrhAnd to the hill of frankincense.”f 7  “You are altogether beautiful, my beloved,gThere is no blemish in you. 8  Come with me from Lebʹa·non, my bride,Come with me from Lebʹa·non.hDescend from the peak of A·maʹnah,*From the peak of Seʹnir, the peak of Herʹmon,iFrom the lairs of lions, from the mountains of leopards.

Skip to content
Skip to table of contents
JW.ORG
Change site language
Log In (opens new window)
Search JW.ORG
SHOW MENU
Ca
4
The Song of Solomon4:1-16
Play
Current time 0:00
Loaded: 0%
Progress: 0%
Duration 0:00
Mute
4  “Look! You are beautiful, my beloved.Look! You are beautiful.Your eyes are those of doves behind your veil.Your hair is like a flock of goatsStreaming down the mountains of Gilʹe·ad.a 2  Your teeth are like a flock of newly shorn sheepThat have come up from being washed,All of them bearing twins,And not one has lost her young. 3  Your lips are like a scarlet thread,And your speech is delightful.Like a segment of pomegranateAre your cheeks* behind your veil. 4  Your neckb is like the tower of David,cBuilt with courses of stoneUpon which are hung a thousand shields,All the circular shields of the mighty men.d 5  Your two breasts are like two fawns,The twins of a gazelle,eThat feed among the lilies.” 6  “Until the day grows breezy* and the shadows flee,I will go my way to the mountain of myrrhAnd to the hill of frankincense.”f 7  “You are altogether beautiful, my beloved,gThere is no blemish in you. 8  Come with me from Lebʹa·non, my bride,Come with me from Lebʹa·non.hDescend from the peak of A·maʹnah,*From the peak of Seʹnir, the peak of Herʹmon,iFrom the lairs of lions, from the mountains of leopards.

Christopher Columbus pease  it is your time  king


[API] [Knowledge Base] Upload images to Amazon S3

Request:

Image

Process:

Validation: File size is <= 3MB.
Cap filename to 128 characters & append UTC timestamp (e.g. chart_1_20211117092630231.jpg).
Upload file to S3 & get the path.
Save file path to the images collection in DB.

Response:

Public URL of the file

This is what have been achieved:

Validation: File size is <= 3MB.
Cap filename to 128 characters & append UTC timestamp (e.g. chart_1_20211117092630231.jpg).
Compress image (keep resolution but reduce quality) to save storage space.
Upload file to S3 & get the path.
Save file path to the files collection in DB & marked as isInUsed: false


Consume current golang-release

The current release is not up-to-date. However the golang-versions prior to 1.18.2 and 1.17.10 have CWE 284. Could you publish soon the next syslog-release to fix this, please?

@joergdw https://github.com/cloudfoundry/syslog-release/releases/tag/v11.7.10
Done.

@joergdw btw, feel free to reach out in the cloudfoundry slack in #logging-and-metrics about these sorts of things.


Specific indentations

arguable, just an opinion
case 1, try-catch.
catch should not be indented
    try.
      call_a_method( ).
    catch cx_static_check into lx. " <<<<<
      process_error( lx ).
    endtry.

case 2, indentation right after class definition/implementation
when created with se80 2nd level code is not indented.
no problem to indent the definition. But indenting the implementation will add starting spaces when editing a specific method - which looks ugly imho.
class ZCL_MY_CLASS definition
  public
  final
  create private .

public section. " <<<<<
  ...
class ZCL_MY_CLASS implementation.
method CONSTRUCTOR. " <<<<<
  data ...

I know the above is the matter of taste of course. Could it be a good idea to add some params to indentation rule to exclude specific cases like above? (one by one of course). E.g:
    "indentation":{
      "enabled": true,
      "try-catch-indent": false,
      "class-def-indent": false,
    }

seems like current pretty printer has own issues. E.g
getExpectedIndentation("try.\nwrite moo.\ncatch.\nwrite err.\nendtry.") = [1,5,5,5,1] // 5 for catch

Can it be ?
BTW is it possible to output pretty printed result ? I mean is there a command line param for that ?

regarding the case 2 (with global class indentation): how do I find that the class is global ? (in the context of indentation.ts)
Is it something like statement.getChildren().find(t => t instanceof Statements.ClassGlobal) ?
P.S. BTW why do you enforce ter-arrow-body-style always in tslint ? The above statement is incorrect but it far better readable apart from ...find(t => { return t instanceof Statements.ClassGlobal)}

"makes the above statement incorrect", how so?

OK, the second rule is also ready. So will PR right after the first one merged.
statement.getChildren().find(t => t instanceof Statements.ClassGlobal)
>>> tslint: Expected block statement surrounding arrow body. (ter-arrow-body-style)

But anyway it is more to personal preferences

add a local flag variable? and save the information, the global defintion and global implementation is always in the same file

I though there is some index of found tokens available. But it is an option too. Will PR soon.

I think can be closed now

Hi Guys,
I'm new to github and trying to write some abap code there. I'm getting Indentation error while defining a PUBLIC SECTION in the local class.
REPORT zdemo.
CLASS lcl_class DEFINITION.
PUBLIC SECTION.   <<< This line of code is giving Indentation error. Any clue??
ENDCLASS.
CLASS lcl_class IMPLEMENTATION.
ENDCLASS.

Please help.

Hi @DHEWC001,
public section kind of belong to class so it should be
class lcl_class definition.
  public section. <<< indent it too !
    methods xxx.
    data yyyy type i.
endclass.

However in the context of this particular issue you can also specify globalClassSkipFirst = true in indentation rule of the abaplint.json to suppress particulary first class line indentation.
class ZCL_MY_CLASS implementation.
method CONSTRUCTOR. " <<<<<
  data ...


BOOST-97 Upgrading Storybook to version 7.0.6

Already updated with https://github.com/rangle/radius-monorepo-react/commit/5e40e2f86083cb9ed863dca750d91d1e2f041735


Please return true/false from aggregate_failures in a custom matcher

Subject of the issue
Make aggregate_failures easier to use in custom matchers defined as groups of expectations. Currently it returns nil, so you must end the match block with true else the matcher will always fail.
The steps below are simplified, and it could be argued that it should be separate matchers, or move the aggregate_failures block into the example.
However, I'm currently using this with the all matcher on an array of differing length (shared examples), so I need to aggregate_failures around each item of the array to make it easier to spot which items in the array are failing. In this way, it's not possible to group expectations into a custom matcher and run all the assertions before failing.
Your environment

Ruby version: 2.6.6
rspec-expectations version: 3.9.2

Steps to reproduce
context 'with custom matcher' do
  matcher :be_custom do
    match(notify_expectation_failures: true) do |actual|
      aggregate_failures do
        expect(actual).to start_with 'c'
        expect(actual).to end_with 'm'
        expect(actual).to include 'usto'
      end
    end
  end

  it { expect('custom').to be_custom }
end

Expected behavior
Test passes ☺
Actual behavior
Test fails 😢
with custom matcher
  is expected to be custom (FAILED - 1)

Failures:

  1) with custom matcher is expected to be custom
     Failure/Error: fit { expect('custom').to be_custom }
       expected "custom" to be custom
     # ./spec/custom_spec.rb:12:in `block (2 levels) in <top (required)>'

Finished in 0.02801 seconds (files took 0.16621 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/custom_spec.rb:12 # with custom matcher is expected to be custom

Custom fix in the meantime
Return true after the aggregate_failures block. However, this means the matcher cannot be used as negated 😞
context 'with custom matcher' do
  matcher :be_custom do
    match(notify_expectation_failures: true) do |actual|
      aggregate_failures do
        expect(actual).to start_with 'c'
        expect(actual).to end_with 'm'
        expect(actual).to include 'usto'
      end
      true # how can we detect success or failure in the block above?
    end
  end

  it { expect('custom').to    be_custom } # passes
  it { expect('hello').not_to be_custom } # fails
end

**Thanks very much for an awesome testing library ☺ 🎉 **

I have never seen expect being used inside of a match block, and couldn't find such usage in the documentation.
You may try to use the following instead:
  matcher :be_custom do
    def custom
      @matcher ||=
        start_with('c')
          .and end_with('m')
          .and include('usto')
    end

    match do |actual|
      custom.matches?(actual)
    end

    failure_message do |actual|
      custom.failure_message
    end
  end

     Failure/Error: it { expect('111').to be_custom }
          expected "111" to start with "c"
       ...and:
             expected "111" to end with "m"
          ...and:
             expected "111" to include "usto"

No notify_expectation_failures/aggregate_failures needed.
Don't forget to define failure_message_when_negated and match_when_negated if you plan to use it with not_to.
Please feel free to reopen if I'm missing something.

Hi @pirj,
Thanks for the possible solution :)
I didn’t realise you can get failure messages from the matchers! That may work for me.
However, my understanding was that notify_expectation_failures: true exists so that expect can be used in custom matchers?

You're right, it seems to have to work.
I hope your real use case is not as complicated and the proposed solution works in some form. If it does not - please reopen and provide more details, we'll figure it out.

main contains a fix for this if you're interested

Aaahhh this is so nice, thanks everyone for reopening it and fixing it! Much love 💖

Fixed by https://github.com/rspec/rspec-expectations/pull/1225


Use package build rather than a pub transformer

I left a few notes, but overall this looks good! Thanks for taking the time to convert this over.
As a general note, the way these builders are actually set up and ran is still in flux a bit, (we would like to autogenerate these build scripts based on dependencies, plus optional configuration). We will let you know as things change though, and could add an e2e test for reflectable into the build repo if you are interested in that.
Another note is that the build package does do incremental builds, but as a single global step this won't be able to take much advantage of that. It might be worth exploring more incremental approaches in the future, depending on how long this action takes to run for people in practice. It might not be feasible anyways though given the somewhat global nature of some of the features in this package.

the way these builders are actually set up and ran is still in flux a bit .. We will let you know

OK, it would be very nice to get a heads up when this area develops!

could add an e2e test for reflectable into the build repo if you are interested in that

An end-to-end test? Sounds like a good idea, unless it's redundant because the buildbot for package test_reflectable already does the same thing.


Update proj4 to 6.1.1

Changelog: https://github.com/OSGeo/proj.4/releases/tag/5.2.0
https://github.com/Microsoft/vcpkg/tree/master/ports/proj4

https://github.com/OSGeo/PROJ/releases/tag/6.1.1

#7192

#7917 is fixing this issue.

Hi @luzpaz, thanks for reporting this issue.
I've upgrade proj4 in #7917, please update vcpkg and rebuild proj4.
Thanks.


Linking: Add Snack examples, function components and hooks

In Reference to #1579
This PR adds Snack examples, function components and hooks for the Linking API.

@rachelnabors can you review this PR ?
Also I get that error from the Snack example, so I don't know why ? Can you check that ?

Thanks so much for working on this @danilobrinu! Before I can accept, a few things:

Can you confirm that you have checked the API is up to date in this PR?
What error in what snack example? Which platform?

@rachelnabors

Yes, the API is updated, I checked the source code before write the examples.

You can try the Snack example for send intents.

@rachelnabors thanks to you for your amazing work. Big hugs.


getConsoleIds: add iconUrl field

https://github.com/RetroAchievements/api-docs/pull/37

Resolved by https://github.com/RetroAchievements/api-js/pull/84.


command: expire

related: https://github.com/sabledb-io/sabledb/issues/7

Also, to make sure you have all the building blocks to implement the expire command, I added this API to GenericDb
set_expiration and get_expiration for any key type (string, list, hash)
https://github.com/sabledb-io/sabledb/blob/main/libsabledb/src/storage/generic_db.rs#L71

@sabledb-io thanks ! i just

In order to make sure you have all the building blocks to implement the expire command, I added this API to GenericDb put_expiration and get_expiration for any key type (string, list, hash)
https://github.com/sabledb-io/sabledb/blob/main/libsabledb/src/storage/generic_db.rs#L71

Thanks, it's helpfully

@sabledb-io can you check it please ?


Load JSON from a URL instead of local file

I'd like to Load JSON from a URL set in the plugin interface instead of selecting a local file. It is not a big deal but it feels a bit weird to copy paste some json into a file first before reloading it into my design. Repopulate would ideally reload the data from the source and then update the file.

You could try Craft from Invision: https://www.invisionapp.com/craft you can paste a json url.

@csantiago132 My point is to be able to use production data, or as I'm doing now for a specific project, use a Google Sheet as some sort of CMS.

@Oli4k well, this would be amazing if added

As for now I've built a tool on Glitch.com using Tabletop that loads data from a Google Sheet, turns it into nice JSON that I can download via Express. Actually works quite well. All I have to do now is click a saved web location and point Data Populator to the file that was just downloaded.

Pssst, something's cooking around this topic! We'll keep you posted.

🤗🤗🤗

Any updates on this topic?

@lyapustin only a few days left until a new release. stay tuned!

Great, thanks!
On Mon, 1 Oct 2018 at 21:07, Christophe Stoll<EMAIL_ADDRESS>wrote:

@lyapustin https://github.com/lyapustin only a few days left until a
new release. stay tuned!
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/preciousforever/data-populator/issues/116#issuecomment-426006266,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AHwlFQpO1Dzn4K2U6FmtbzaYonoNb9m7ks5uglnogaJpZM4PybBV
.

--
Dmitry Lyapustin
Lead product designer at Sola
+370 675 17 870
sola.ai  •  lyapustin.com

@lyapustin @lpredster @Oli4k @csantiago132 please get in touch via<EMAIL_ADDRESS>if you'd like to get a sneak peek of the next version of data populator!

Just updated the plugin and it looks really promising. Nice work!

i’m closing this issue as populate from URL is now available. if you run into bugs or have some feedback, please open new issues :tada:


Quick Start reports functionality that actually are not present

Info about your system:

yfinance version 0.1.87
python version 3.8.2

Quick Start reports functionality that actually are not present .

Simple code that reproduces your problem
`
import yfinance as yf
msft = yf.Ticker("MSFT")

show analysts recommendations
msft.recommendations_summary
show analysts other work
msft.analyst_price_target
mfst.revenue_forecasts
mfst.earnings_forecasts
mfst.earnings_trend
`

The error message

Typos fixed in #1216


doc(docs): fix some typos

Changes

Fixed typos in docs directory

Author Checklist

[ ] Ensure you provide a DCO sign-off for your commits using the --signoff option of git commit.
[ ] Vital features and changes captured in unit and/or integration tests
[ ] Commits messages follow AP format
[ ] Extend the documentation, if necessary
[ ] Merging to master from fork:branchname
[ ] Manual accessibility test performed

[ ] Keyboard-only access, including forms
[ ] Contrast at least WCAG Level A
[ ] Appropriate labels, alt text, and instructions

Hi @shahsank3t, may you review this PR


Add LovyanGFX display driver

Is your feature request related to a problem? Please describe.
As the list of supported devices and configurations grows, the number of firmware files to be build goes up.
TFT_eSPI uses a configuration file that is evaluated at compile time, so all hardware info is baked into the firmware binary.
Describe the solution you'd like
To consolidate the number of hardcoded pins/drivers in openHASP, LovyanGFX can be added as a display driver option.
It allows us to configure the bus, display- and touch-panel at runtime. LovyanGFX is in active development and based on TFT_eSPI.
Besides the flexible configuration parameters, LovyanGFX is touted to be slightly faster and supports extra display chips.
LovyanGFX uses the same license as TFT_eSPI (FreeBSD License) with parts by Adafruit_GFX (BSD License).
Describe alternatives you've considered
Another option is Arduino_GFX but that is a faily recent project based on "Adafruit_GFX, LovyanGFX, TFT_eSPI, Ucglib, and more..."
There is no license file as of yet, so it is unclear if it will be compatible with openHASP.
Additional context
Speed comparison between ST7796/ILI9488 and TFT_eSPI/LovyanGFX:
https://www.youtube.com/watch?v=kRTFc2vY5A8

FT6xx6 touch driver is working too.

@paultbarrett @FamilieKlein I'm trying to get a working LovyanGFX config for the WT86-32-3ZW1.
It would be great if you could share your experience or configuration for this device. Thanks!
https://www.giters.com/Bodmer/TFT_eSPI/issues/1348 (It seems the comments on the TFT_eSPI repo were deleted... 😞)

@fvanroie https://github.com/HASwitchPlate/openHASP/commit/8f88a6ab4818c167cf6acdec7e6e148067cf68cc

I am aware of that repository and exchanged messages with the author. The result is that we have a working TFT driver for the WT86-32-3ZW1. No touch yet...

The WT86-32-3ZW1 now is included in the dev-test builds from the Actions tab.


Refactor collaboration permissions code

Instead of looping through all the user's collaboration user
associations and then the other user in the collaboration, use sql query
to filter out all the relevant collaboration users.
This came out of trying to fix:
  File "/code/app/extensions/__init__.py", line 452, in current_user_has_edit_permission
    return rule.check
  File "/code/app/modules/users/permissions/rules.py", line 360, in check
    self._permitted_via_collaboration(current_user)
  File "/code/flask_restx_patched/namespace.py", line 115, in wrapper
    return x_required(
  File "/code/flask_restx_patched/namespace.py", line 87, in x_required
    return func(*args, **kwargs)
  File "/code/app/modules/users/permissions/rules.py", line 430, in _permitted_via_collaboration
    ) & collab_assoc.collaboration.user_has_read_access(
  File "/code/app/modules/collaborations/models.py", line 392, in user_has_read_access
    other_assoc = self._get_association_for_other_user(user_guid)
  File "/code/app/modules/collaborations/models.py", line 178, in _get_association_for_other_user
    assert len(other_user_guids) == 1
AssertionError

Rebased and made a small improvement:
diff --git a/app/modules/users/permissions/rules.py b/app/modules/users/permissions/rules.py
index 187aef15..7363b503 100644
--- a/app/modules/users/permissions/rules.py
+++ b/app/modules/users/permissions/rules.py
@@ -434,11 +434,12 @@ class ObjectActionRule(DenyAbortMixin, Rule):
         if approval_state:
             # First find all the collaborations approved by the user
             collab_guids = [
-                c[0]
-                for c in Collaboration.query.join(CollaborationUserAssociations)
-                .filter(CollaborationUserAssociations.user_guid == user.guid)
+                cua[0]
+                for cua in CollaborationUserAssociations.query.filter(
+                    CollaborationUserAssociations.user_guid == user.guid
+                )
                 .filter(approval_state == CollaborationUserState.APPROVED)
-                .values('guid')
+                .values('collaboration_guid')
             ]
             # Then find all the users associated to the collaborations
             # approved by the other users


Test coverage for labelled rewrites

We should have unit tests to cover all the exotic behaviour that we encountered while implementing labelled rewrites:

[x] #902 endomorphism on the circle, contracted at both ends (shouldn't be able to absorb a homotopy into the endomorphism) (test hourglass_no_absorb)
[X] #899 contract endomorphism on the fully algebraic ring composed with weak unit (source and target cocone indices need to be calculated correctly) ((test contract_with_weak_id(endomorphism_on_algebraic_ring))
[X] #899 contract endomorphism on the half-algebraic half-homotopy ring composed with weak unit (collapse needs to consider multi-edges when searching for triangles) (test contract_with_weak_id(endomorphism_on_half_algebraic_ring))
[x] #898 contract 2D homotopy cap/cup composed with weak unit (source and target cocone indices need to be calculated correctly) (test bead_through_cap_cup, contract_with_weak_id)
[X] #879 contract counit on endomorphism, composed with weak unit (test contract_with_weak_id)
[x] #876 contract counit on a scalar, composed with weak unit (test contract_with_weak_id)
[x] #875 contract endomorphism on a weak unit, composed with a weak unit (test contract_with_weak_id(endomorphism_on_weak_unit)
[x] #856 braiding 3D scalar with a wire (test three_dimensional_scalar_across_wire_preserves_label_neighbourhood)
[x] #840 #759 passing a unit through a braid (test pull_through_braid)
[x] #828 unit (also bead on a wire) should not be bendable through cup (test no_bend_cup)
[x] #823 should be able to create double-braids in all configurations (test double_braid)
[x] #821 should be able to braid wire with cup/cap (test cap_braid)
[x] #734 dually, should be able to pop wire off cap (test cap_braid)
[x] #820 Reidemeister 1 should not contract, nor crash (test no_reidemeister_1)
[x] #801 contracting homotopy circle (test bubble_pop_2d)
[x] #798 endomorphism on a braid, composed with weak unit (test contract_with_weak_id)
[x] #744 (expansion) interchanging a half-braid with a bead on a wire (test bead_with_half_braid)
[x] #736 braiding a counit with a wire (3D) (test counit_braid)
[x] #723 #597 make braid on same singular height as bead (test braid_next_to_endomorphism)
[x] #722 should be able to contract two caps together (test contract_two_caps)
[x] #720 expanded braid made by interchanging two beads on two wires should contract (test bead_interchanger)
[x] #713 should be able to construct this generator (test monoid_with_unit_to_id)
[x] #686 tricky cone-wise smoothing indices (test monoid_tensor_bead_and_inverse)
[x] #681 should be able to contract 3D scalar with its inverse (test scalar)
[x] #620 (factorization) bubbling should not stretch generators, and another test for a double braid (test bead_no_stretch)
[x] #598 unbraiding a braid shouldn't introduce weak unit (test braid_smooth)
[x] #568 test cone-wise smoothing, annihilation next to a bead (test bead_tensor_bead_and_inverse)

@NickHu can we close this?

Yeah pretty much. I'll just add that we probably also want a test for #906, once we figure out what's going wrong there.
Also, for reference, cargo nextest run is like cargo test but it parallelises runs and is a lot faster.

Can we change the pre-commit hook and CI to use cargo-nexttest instead of cargo-test?

In principle yes, but it's not immediately supported by the tool we use to generate the commit hook, so it's not entirely trivial. I've been meaning to move the commit hooks over to nix anyway, so I'll find time to do it then anyway.


feat(n-space): add item-class prop

Codecov Report
Patch and project coverage have no change.

Comparison is base (ef7279e) 62.37% compared to head (51e96b1) 62.37%.

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@           Coverage Diff           @@
##             main    #5275   +/-   ##
=======================================
  Coverage   62.37%   62.37%
=======================================
  Files        1074     1074
  Lines       22588    22588
  Branches     5930     5930
=======================================
  Hits        14090    14090
  Misses       6954     6954
  Partials     1544     1544

Files Changed
Coverage Δ

src/space/src/Space.tsx
100.00% <ø> (ø)

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


Incomplete instructions

Please update to provide instructions about the use of Activities, Record Types and Workload selectors to filter results. Provide some guidance about when to use each of these options, (I don't fully understand their differences).
Many of the choices in these selectors are cyrptic acronyms, please add a link to a dictionary that decodes them, eg. CRM, HRSignal, MSITC are not self explanatory. Many of the workload choices are old product names, and some are new names.
It takes alot of trial and error to figure out which workload contains the events we are looking for, anything to help point us to the appropriate workload, record type and/or activity will be very much appreciated.

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

ID: 3076de81-b766-9177-cc31-e538cf9757b6
Version Independent ID: 3076de81-b766-9177-cc31-e538cf9757b6
Content: Audit New Search - Microsoft Purview (compliance)
Content Source: microsoft-365/compliance/audit-new-search.md
Service: o365-seccomp
GitHub Login: @robmazz
Microsoft Alias: robmazz

@DeanGross Thanks for your feedback! New issues and pull requests for this content are closed while we update this content to support upcoming feature improvements.


In line plots, choosing a Y-axis variable with only one value throws an error message

The example below comes from PRISM without any filtering. I believe this error message is coming because choosing Country on the Y-axis should enable proportions, but there is only one value for the variable Country in this study. Some possible solutions: 1) remove variables with single values as options in the drop down menu, 2) give people a more distinct error message, 3) update how proportions work when there is only one possible value.

I think this will be obviated by https://github.com/VEuPathDB/EdaDataService/issues/178

In the data viz meeting, decided to allow vars with only one unique value in proportions. Also decided to allow the numerator=denominator.

I'm removing the dependency label as we have decided to NOT impose the constraints indicated in https://github.com/VEuPathDB/EdaDataService/issues/178

@danicahelb I think that I have addressed this in the following PR. I made a couple of screenshots in there, so can you please see if it is appropriate outcome? https://github.com/VEuPathDB/web-eda/pull/1204#issue-1269899970

I have confirmed that the error message is removed, I was able to configure the proportion and that the y =1.
It was a little confusing that I can't click on mean and median - but that can be discussed later.


Get live data (like stack exchange app) from web host in flutter?

Use case

how can i get live data from web host? i cann't find any package in flutter which help me to get live data. is there any official package to achieve this task? now i am using unofficial laravel-echo package using pusher.it's work well in android but pusher create issue in IOS build. now i have no idea what is the right way to get live data from host in flutter? kindly help me as soon as possible.
waiting for your help....!

Hi @junaidhashmi
Please see https://flutter.dev/community for resources and asking questions like this,
you may also get some help if you post it on Stack Overflow.
https://medium.com/zipper-studios/flutter-fetch-data-from-api-and-architect-your-app-using-bloc-pattern-b826f80d6996, https://stackoverflow.com/questions/57554659/stream-for-api-coming-from-php-in-flutter-not-firebase may be helpful.
Closing, as this isn't an issue with Flutter


Refactor dependencies system

@jianba .No. You should not approve of those changes. Because there exists some very obvious bugs in it.

Now I have fixed some of them. Please review this pull request again and give your reviews. @jianba


If-none-match on NSS returns 201 for PUT on existing resource

https://github.com/solid-contrib/specification-tests/blob/6fe781855cdf0104909123ee0c28624f4bed4fd6/protocol/writing-resource/if-none-match-asterisk.feature#L7
Conformance test expects 412

If the resource already exists, then PUT with If-None-Match=* should fail

resolved with https://github.com/nodeSolidServer/node-solid-server/commit/59f94fb9f8afabdb03257886b37be6eb33695bb1


Delete typings.d.ts

Fix #2314

 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.

Thank you very much for your contribution!
You are welcome to join Wechaty Contributor Program
1. Join Wechaty Organization

You've invited System233 to Wechaty! They'll be receiving an email shortly. They can also visit https://github.com/wechaty to accept the invitation.

I have invited you to join our Wechaty GitHub Organization, please accept it by following the above message. (See also: wechaty/PMC#16)
2. Update Your Wechaty Contributor Profile

Please open Contributor Hall of Fame and add yourself to the end of the list, so that other contributors will know you better!
Please add yourself to our Website Contributors by creating a PR and refer to this PR link as well.

3. Join The Contributor Only WeChat Room
We also have a WeChat room for contributors only which can discuss Wechaty at a deeper level, you are welcome to join and if you are interested.
Please add @lijiarui wechat: ruirui_0914 and send her this pr link. She will invite you into Wechaty Contributor Room
Cheers!


LXDM/LXSession with openrc-shutdown

In LXDM and LXSession the code calls the shutdown binary directly like this:
shutdown -h now
This fails with the sysvinit compat that openrc-shutdown provides since it is an invalid way to call openrc-shutdown.

Looks like this is also a problem with consolekit. Consolekit also calls shutdown with "-h now" under linux and "-hp now" under openbsd bsd.

https://github.com/manjaro/packages-openrc/tree/master/openrc
@cromerc
Can you please test with the patches?
https://github.com/OpenRC/openrc/issues/141
Works fie for me so far on plasma system.

These patches won't fix this issue. The problem here is that openrc-shutdown does not accept the arguments "-h now". Temporarily I ended up patching consolekit and lxdm to call "poweroff" instead of "shutdown -h now" until a better solution is found.

I see, I use elogind since a while as default, annd that solves a lot of issues compared to ck.

I decided to allow the users to decide between consolekit and elogind, so I have to try to keep it working for both types of installations. The big issue here is that consolekit, lxdm, and probably many other software depend on the shutdown command being called in a certain way(the sysvinit way) but the sysvinit compat provided by openrc can't handle it correctly yet.

The problem is the dependency of arch binary packages, they are simply made for systemd, and elogind eases the pain. ;)
I will give ck a shot again and relax conflicts once it supports multiseat, ie logind interface.
Still leaves the crazy systemd/libsystemd depend in the arch tree, and no way to get liblogid off the system to replace it with something else, because liblogind is part of libsystemd.

Yep, I am tired of systemd creeping in under Arch Linux and complicating everything in it's binaries which are all compiled against systemd or with systemd as dependencies. Which is why I decided to start a new distro with OpenRC and Pacman based off Linux From Scratch. I figure the best way to avoid systemd is with a distro completely devoid of it from the start. It is still in the early stages of development and I just recently finished getting Xorg and LXDE up and running.

Yes, and that's the reason I switched to elogind, packages that don't have a direct systemd package depend work with elogind. You spare yourself with patching lots of DE stuff for ck, and can focus eliminating the direct systemd depends for at least the core repo.

I think the issue you are hitting is openrc-shutdown uses -h for help instead of hault, correct? The provided sysv-compatible shutdown is just a script, so I may be able to remap -h to --halt there. I'll look at it this weekend.

@williamh
Correct, the issue is that it is mapped to help. I do believe remapping -h to --halt will solve this.

rebuilding arguments isn't quite correct yet.