portfwd: Optimize errors.Is() checks

On the read data path, we had many checks like:
if errors.Is(err, io.EOF) {
    return nil
}

There are 3 issues with these checks:

io.Copy() never return io.EOF
ReadFrom() is documented to not return io.EOF
errors.Is() is expensive and should not be used in the fast path

This change remove the checks when they are not needed, and it the case
of handling Recv() which is documented to return io.EOF, move the check
into a err != nil block.
I did not make any measurements with lima, but dolthub.com did synthetic
benchmarks:
https://www.dolthub.com/blog/2024-05-31-benchmarking-go-error-handling/

This can't possibly matter and serves only to introduce a conflict with #2944. Some of these conditions are statically impossible as I stated in #2944.

This can't possibly matter

Did you do any measurements?

Some of these conditions are statically impossible as I stated in #2944.

What is impossible? see my comment here: https://github.com/lima-vm/lima/pull/2944/commits/553ebd953e56344e6008a32acc155289e661a6cc#r1868342753

I'll change this to remove all the io.EOF checks, as @tamird pointed out that ReadFrom is documented not to the return io.EOF, and io.Copy() implementation doesn't return it.

This can't possibly matter

Did you do any measurements?

Here are some of the results from the blog post you linked:
ErrEqual | 7.366 ns/op | 2.15
ErrEqualNilCheck | 8.293 ns/op | 2.42

ErrorsIs | 19.35 ns/op | 5.65
ErrorsIsNilCheck | 19.34 ns/op | 5.65

So the nil check saves approximate 1 nanosecond. These code paths are invoked once per socket connection. Does one nanosecond matter?

Some of these conditions are statically impossible as I stated in #2944.

What is impossible? see my comment here: 553ebd9#r1868342753

This is a dead link, but I replied to your comment: https://github.com/lima-vm/lima/pull/2944#discussion_r1868345512

@tamird as I wrote, errors.Is() does not make sense even if the difference is not significant. We should handle errors only if there was an error.
The change updated to remove the unneeded checks.

This can't possibly matter and serves only to introduce a conflict with #2944.

Don't worry about conflicts. One of the PRs will be merged first and the other will do a trivial rebase.

3. errors.Is() is expensive and should not be used in the fast path

This is simply not true. It shortcuts if either err or target are nil:
func Is(err, target error) bool {
	if err == nil || target == nil {
		return err == target
	}

	isComparable := reflectlite.TypeOf(target).Comparable()
	return is(err, target, isComparable)
}

There is no reason to avoid calling it, even if err is nil. The main concern should be code readability. If calling errors.Is saves you an extra conditional, please call it instead of trying to optimize away a function call that the compiler may have inlined anyways.

errors.Is() is expensive and should not be used in the fast path

This is simply not true. It shortcuts if either err or target are nil:

The shortcut is still a useless function call. It makes sense in code that you don't care about, if it is more clear.

There is no reason to avoid calling it, even if err is nil. The main concern should be code readability.

Right, it make the code worse.

If calling errors.Is saves you an extra conditional, please call it instead of trying to optimize away a function call that the compiler may have inlined anyways.

I'm sure the compiler cannot inline it. We can have 1000's of these, and it does not make sense to inline such function.
Doing more work in the data path is always bad idea, even if the compiler optimize it. The entire errors.Is() thing is is a bad idea. Instead of returning sentinel error and doing a fast check, people wrap the sentinel in other errors and wasted cycles on finding the wrapped errors. Even worse, the error tree may contain a wrapped io.EOF when the error is real and should not be handled as io.EOF. io.Copy() does not the right way doing equality check on io.EOF.

The shortcut is still a useless function call.

You are just manually inlining code to avoid a "useless" call. The same argument could be made if you have a function to add 2 numbers, and you write:
if b != 0 {
    a = add(a, b)
}

to avoid a "useless function call" in case b is 0.
To me replacing errors.Is(err, someError) with err != nil && errors.Is(err, SomeError) is the same kind of obfuscating micro-optimization that does not improve readability.
The new code in this PR was not of that kind, so I merged it, but I would not agree with fluffing up code by manually inlining parts of functions. That's what optimizing compilers are for.

I'm sure the compiler cannot inline it.

Why not? I know there are a bunch of conditions around inlining, but anything smaller than something like 100 AST nodes will be inlined, and Is() looks small enough for that.

anything smaller than something like 100 AST nodes will be inlined

My naïve attempt shows that errors.Is is indeed not inlined, even though it seems trivial enough. I don't have time to dig deeper.
I still think the overhead of a single "useless" function call is trivial. I don't think it will be noticeable if this is on top of a system call.
We will never make back the time we wasted discussing this!


Install fail on any target - exec: /var/run/crw/crw: Permission denied

Please paste the output of the following command here: sudo edit-chroot -all

chronos@localhost / $ sudo edit-chroot -all
name: bullseye
encrypted: no
Entering /mnt/stateful_partition/crouton/chroots/bullseye...
/usr/local/bin/crash_reporter_wrapper: 119: exec: /var/run/crw/crw: Permission denied
WARNING: Unable to register core dump handler.
crouton: version 1-20221126232257~master:ae594340
release: bullseye
architecture: amd64
targets: kde-desktop
host: version 15393.58.0 (Official Build) stable-channel volteer
kernel: Linux localhost 5.4.237-20588-g6ec05122d35e #1 SMP PREEMPT Tue May 16 19:36:10 PDT 2023 x86_64 GNU/Linux
freon: yes
Unmounting /mnt/stateful_partition/crouton/chroots/bullseye...
name: sid
encrypted: no
Entering /mnt/stateful_partition/crouton/chroots/sid...
/usr/local/bin/crash_reporter_wrapper: 119: exec: /var/run/crw/crw: Permission denied
WARNING: Unable to register core dump handler.
crouton: version 1-20221126232257~master:ae594340
release: sid
architecture: amd64
targets: gnome
host: version 15393.58.0 (Official Build) stable-channel volteer
kernel: Linux localhost 5.4.237-20588-g6ec05122d35e #1 SMP PREEMPT Tue May 16 19:36:10 PDT 2023 x86_64 GNU/Linux
freon: yes
Unmounting /mnt/stateful_partition/crouton/chroots/sid...
name: xenial
encrypted: no
Entering /mnt/stateful_partition/crouton/chroots/xenial...
/usr/local/bin/crash_reporter_wrapper: 119: exec: /var/run/crw/crw: Permission denied
WARNING: Unable to register core dump handler.
crouton: version 1-20221126232257~master:ae594340
release: xenial
architecture: amd64
targets: xfce
host: version 15393.58.0 (Official Build) stable-channel volteer
kernel: Linux localhost 5.4.237-20588-g6ec05122d35e #1 SMP PREEMPT Tue May 16 19:36:10 PDT 2023 x86_64 x86_64 x86_64 GNU/Linux
freon: yes
Unmounting /mnt/stateful_partition/crouton/chroots/xenial...

Please describe your issue:
sudo crouton -t gnome -r sid
..
...
....
at end
Suggested packages:
  ed diffutils-doc
The following NEW packages will be installed:
  patch
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 128 kB of archives.
After this operation, 254 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian sid/main amd64 patch amd64 2.7.6-7 [128 kB]
Fetched 128 kB in 0s (509 kB/s)
Selecting previously unselected package patch.
(Reading database ... 14634 files and directories currently installed.)
Preparing to unpack .../patch_2.7.6-7_amd64.deb ...
Unpacking patch (2.7.6-7) ...
Setting up patch (2.7.6-7) ...
patch set to automatically installed.
sed: can't read common/cras_messages.h: No such file or directory
Failed to complete chroot setup.
Unmounting /mnt/stateful_partition/crouton/chroots/sid...

If known, describe the steps to reproduce the issue:
sudo crouton -t gnome -r sid

It's an audio issue. If i remember, cras_messages.h got deleted in an update to the cras repo on google's side. https://github.com/dnschneid/crouton/issues/4958 should help.

I have read and done all the thing there was in this issues message and it did not resolve the
exec: /var/run/crw/crw: Permission denied


Use public_name instead of name for attribute group

Fixes https://github.com/PrestaShop/PrestaShop/issues/15688
It should use the Public name instead of Name property for attributes.

This change is

Hi @PierreRambaud , thanks for the PR :)
I've got a problem with it:
When "Name" and "Public name" are identical, the filter works well.
But when "Name" and "Public name" are different, the filter doesn't work anymore : When clicking on a choice, the filter is not added.
See video below :
https://drive.google.com/file/d/1R3MM0E94RbDjg_cXup-ugU-6GR8CgnYw/view?usp=sharing
Thanks :)

@Robin-Fischer-PS Thanks! Should be ok now!

Thank you @PierreRambaud


[FEATURE] remove the old logo from the Readme and add the 4c banner instead

Description
1 remove the old logo
2 add the new 4C logo banner: https://github.com/FrancescoXX/4c-site/blob/main/4c_banner.jpg
Screenshots

Please assign this to my name, will work on it!
Appreciate that

fixed by #187


Updating Container Document Link

Broken link in the Container Document related to theme sizes.

Closes #
📝 Description

Add a brief description

⛳ Current behavior (updates)

Please describe the current behavior that you are modifying

🚀 New behavior

Please describe the behavior or changes this PR adds

💣 Is this a breaking change (Yes/No):

📝 Additional Information

@nikolovlazar Seems like there is still redirects missing. The broken link should be redirect to the new place in my opinion

@noobinthisgame I know. I'll work on the redirects during the weekend. I merged this PR for the time being.


Split Search into standalone SDKs

Description

This checklist is used to make sure that common guidelines for a pull request are followed.

[x] Please add REST spec PR link to the SDK PR
[x] I have read the contribution guidelines.
[x] The pull request does not introduce breaking changes.

General Guidelines

[x] Title of the pull request is clear and informative.
[x] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, see this page.

Testing Guidelines

[x] Pull request includes test coverage for the included changes.

SDK Generation Guidelines

[x] If an SDK is being regenerated based on a new swagger spec, a link to the pull request containing these swagger spec changes has been included above.
[x] The generate.cmd file for the SDK has been updated with the version of AutoRest, as well as the commitid of your swagger spec or link to the swagger spec, used to generate the code.
[ ] The *.csproj and AssemblyInfo.cs files have been updated with the new version of the SDK.

Can one of the admins verify this patch?

Can one of the admins verify this patch?

Can one of the admins verify this patch?

Can one of the admins verify this patch?

" The *.csproj and AssemblyInfo.cs files have been updated with the new version of the SDK"--------We don't need to do a verison dump as we have not published yet

@azuresdkci add to whitelist

Can one of the admins verify this patch?

Can one of the admins verify this patch?

@azuresdkci add to whitelist

You need to "ok to test" after whitelisting for this PR

@azuresdkci test this please


Toolbar disappears when scrolling in album view

When you scroll in albums view, the toolbar disappears and doesn't pop back.
Nexus 4 5.1.1

What about scrolling up ? Does that bring the toolbar again ?

No ... in album view it turns white instead of the toolbar.

Yes i encountered that before, It's quite annoying
Seems like a rendering problem,I will take a look at it
Thanks


build: symlink wasi/wit to adapter wit

This is for Windows testing only for now

Bad news are that this approach does not actually fix cargo vendor of the WASI adapter :/


[Feature] A option to hide dm ping icon

A option to hide all ping icon made in dm/friend request (on/off)

You can just use custom css, or make it into a small theme to make it easily toggleable.


Add throttle or filters to rule-export with traffic counts

will review in future. might not be necessary with new functionality.


vCPU/pCPU ratio seems not correct

Hello,
Just ran the vCheck report for the first time yesterday. Thanks for all the work that was put in it!
But I noticed something strange. The report syas the vCPU/pCPU ratio is 1 for some cluster. We recently calculated this ourselves and we came to a value of 2. Another cluster also has a vCPU/pCPU ratio of 1 and we calculated this a 1.9.
I was wondering what might be the cause of this difference. Does vCheck takes hyperthreading into account? We were told that hyperthreading should not be taken into account and our vCPU/pCPU ratio of 2 needs to be improved by assigning less cpu's to our vm's (or buying more esx servers) . But comparing this with the vCPU/pCPU ration vCheck is giving us, I'm starting to wonder if this is really necessary.
I was also wondering if the value in vCheck report is an integer (as I only seem to see round numbers. Wouldn't this better be a float ideally?
Thanks for shedding some light on this.
Willem

Which plugin are you talking about specifically?
In general I believe Hyperthreading will be counted, as this is the recommendation for VMware to have it enabled (otherwise, why would you not just turn it off). Although it is not the same as another core, the performance benefit to having it enabled outweighs this.
I'm not sure why you're so worried about your ratio being up around 2 unless you have really active VMs. Yes, you will potentially start getting CPU contention above 1:1, but really unless you are seeing CPU ready time getting excessive I wouldn't worry about it. Hell, on one of our clusters we have a ratio on around 4:1, but these VMs sit idle the majority of the time...

Hey Sneddo,
Thanks for your explanation. I'm talking about the 20 Cluster\71 Capacity Planning.ps1 plugin. Of course hyperthreading is enabled. We were told by our supplier that the vCPU / pCPU ratio should be lower then 1.5 without taking hyperthreading into account.
My main concern about the vCPU / pCPU ratio is that it is not a deciaml number. Imho there is a big difference between a  vCPU / pCPU ratio of 1 and a  vCPU / pCPU ratio of 1.5?
I'll look into it and see if I can implement this myself so the  vCPU / pCPU ratio is a decimal in the report.

Simple enough fix, just need to change one character on the round function. I agree we should either make it a decimal or display a more accurate ratio (e.g. 1:1.5 or 2:3)


[SPARK-32915][SHUFFLE][FOLLOW-UP] Rename classes in shuffle RPC used for block push operations

What changes were proposed in this pull request?
This is a follow-up to #29855 according to the comments
In this PR, the following changes are made:

A new BlockPushingListener interface is created specifically for block push, and the existing BlockFetchingListener interface is left backward compatible. These 2 interfaces are unified under BlockTransferListener to enable code reuse.
RetryingBlockFetcher, BlockFetchStarter, and RetryingBlockFetchListener are renamed to RetryingBlockTransferor, BlockTransferStarter, and RetryingBlockTransferListener respectively. This makes their names more generic to be reused across both block fetch and push.
Comments in OneForOneBlockPusher are further clarified to better explain how we handle retries for block push.

Why are the changes needed?
To make code cleaner without sacrificing backward compatibility.
Does this PR introduce any user-facing change?
No
How was this patch tested?
Existing unit tests.

Can one of the admins verify this patch?

This PR picks up an earlier stale version of the same change as a follow up to the original push protocol RPC patch.
cc @mridulm @otterc @Ngone51

Test failure is unrelated to this change.

I haven't taken a deep look into code but just wondering according to the PR description. I know some code was added in 3.1 but push-based wasn't usable at that time. So, do we have to handle the compatibility issue?
I also noticed a similar issue in another PR and @mridulm told me these kinds of cases don't have to be a compatibility issue.

I see why the adapter pattern is used here over simple renames. You also mentioned the reason: "without sacrificing backward compatibility" but could you explain the reason a little bit more in the description to have this information for the future reference.

@Ngone51 on compatibility issue it is meant keeping BlockFetchingListener as it is. As the BlockFetchingListener can be used by external shuffle solutions. @Victsm correct me if I am wrong.
By the way this is what I am missing from the description.

@attilapiros you are right. The backward compatibility is meant to keep the existing BlockFetchingListener as is. Will clarify this better in the description.

BTW, I think it's better to use a separate JIRA id for this PR instead of a follow-up (which usually has less change).

Created a separate ticket for this change under SPARK-36266 and addressed the additional comments.
@Ngone51 @attilapiros @otterc , please take another look.

LGTM if tests pass.

The tests seem to have been abnormally disrupted based on what I can see from the log.
Not sure what's causing this.
cc @mridulm

ok to test

Test build #141598 has started for PR 33340 at commit a590947.

Kubernetes integration test unable to build dist.
exiting with code: 1
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/46115/

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/46115/

Test build #141598 has finished for PR 33340 at commit a590947.

This patch fails to build.
This patch merges cleanly.
This patch adds no public classes.

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/141598/

Now I am sure. Line 335 in master:
https://github.com/apache/spark/blob/70a15868fc97e2b86c5ecc7bcf812bfdb05d98ea/core/src/test/scala/org/apache/spark/shuffle/ShuffleBlockPusherSuite.scala#L335

Thanks for the reviews @Ngone51, @attilapiros, @otterc !
@Victsm Can you address @attilapiros's comments please ?

Test build #141618 has started for PR 33340 at commit 1d40d59.

Kubernetes integration test starting
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/46136/

Kubernetes integration test status failure
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/46136/

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/46136/

Test build #141618 has finished for PR 33340 at commit 1d40d59.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/141618/

Test build #141652 has started for PR 33340 at commit 9c418f4.

Kubernetes integration test unable to build dist.
exiting with code: 1
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/46168/

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/46168/

Test build #141652 has finished for PR 33340 at commit 9c418f4.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/141652/

Merged to master and branch-3.2, +CC @gengliangwang
Thanks for working on this @Victsm.
Thanks for the reviews @Ngone51, @attilapiros, @otterc !


proxy: Return an error when autoprovision a user fails

Fixes #6194

It would be good to have a note in the graph readme to tell that one can restrict namings of usernames. Finding this setting is, as the referenced issue shows a challenge.

It would be good to have a note in the graph readme to tell that one can restrict usernames.

Agreed. But that would require adding at least some basic section which outlines the user/group management capabilities of the graph service. Just adding a note about 'GRAPH_USERNAME_MATCH' without more context won't help much.
I think that is beyond the scope of this PR, which tries to address a somewhat serious issue.
Please, open a new issue, feel free to assign it to me and I'll happily provide content about the user management settings in a separate PR.


[kjobctl] Add slurm-init image.

What type of PR is this?
/kind feature

What this PR does / why we need it:
Add slurm-init image for kjob.
Which issue(s) this PR fixes:

Part of #3243
Special notes for your reviewer:
Does this PR introduce a user-facing change?

NONE

/cc @mimowo

/close
Due to kjob moved to https://github.com/kubernetes-sigs/kueue/pull/3269#issuecomment-2516032339.


player moving

added a movable player, with other small edits to organization

This merge ends up deleting a few scenes because of how unity files are structured and because of the limitations of git.
Resolution: Raghav has agreed to manually merge by pulling the most recent commit from here, and manually copying all changes.


Request support for eMylo Wifi Smart Power Meter

Hello,
It would be great if you could add support for this smart power meter. Thank you in advance, and please let me know if i can help in any way!
Log Message
This is the log from "Get device details" on tuya IOT cloud:
{
  "result": {
    "active_time":<PHONE_NUMBER>,
    "biz_type": 0,
    "category": "zndb",
    "create_time":<PHONE_NUMBER>,
    "icon": "smart/icon/ay1536897190133VVeLx/32346148448dd9829abb97ce317c5e82.png",
    "id": "X",
    "ip": "X",
    "lat": "X",
    "local_key": "X",
    "lon": "X",
    "model": "",
    "name": "Wifi Smart Meter",
    "online": true,
    "owner_id": "X",
    "product_id": "nqbs1onwskmmmaac",
    "product_name": "wifi smart meter",
    "status": [
      {
        "code": "forward_energy_total",
        "value": 949095
      },
      {
        "code": "phase_a",
        "value": "{\"electricCurrent\":14.6,\"power\":3.322,\"voltage\":228.2}"
      },
      {
        "code": "fault",
        "value": 0
      },
      {
        "code": "switch_prepayment",
        "value": false
      },
      {
        "code": "balance_energy",
        "value": 0
      },
      {
        "code": "clear_energy",
        "value": false
      },
      {
        "code": "charge_energy",
        "value": 0
      },
      {
        "code": "switch",
        "value": true
      },
      {
        "code": "alarm_set_2",
        "value": "[{\"alarmCode\":\"overcurrent\",\"doAction\":false,\"threshold\":\"30\"},{\"alarmCode\":\"ammeter_overvoltage\",\"doAction\":false,\"threshold\":\"245\"},{\"alarmCode\":\"under_voltage\",\"doAction\":false,\"threshold\":\"200\"},{\"alarmCode\":\"insufficient_balance\",\"doAction\":false,\"threshold\":\"30\"}]"
      },
      {
        "code": "event_clear",
        "value": false
      }
    ],
    "sub": false,
    "time_zone": "+01:00",
    "uid": "X",
    "update_time":<PHONE_NUMBER>,
    "uuid": "X"
  },
  "success": true,
  "t":<PHONE_NUMBER>725,
  "tid": "X"
}

The log from HA shows only this:
   Device matches None with quality of 0%. DPS: {"updated_at":<PHONE_NUMBER>.8459601, "1": 948934, "10": 0, "12": false, "13": 0, "16": true}
    Device matches None with quality of 0%. DPS: {"updated_at":<PHONE_NUMBER>.6594088, "1": 948938, "10": 0, "12": false, "13": 0, "16": true}
    Report this to https://github.com/make-all/tuya-local/issues/
    Device matches ir_remote_sensors with quality of 67%. DPS: {"updated_at":<PHONE_NUMBER>.6888258, "1": true, "101": "2", "102": 0}
    Device matches None with quality of 0%. DPS: {"updated_at":<PHONE_NUMBER>.7939818, "1": 949145, "10": 0, "12": false, "13": 0, "16": true}

Information about DPS mappings

{
  "result": {
    "category": "zndb",
    "functions": [
      {
        "code": "switch_prepayment",
        "dp_id": 12,
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "clear_energy",
        "dp_id": 14,
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "charge_energy",
        "dp_id": 15,
        "type": "Integer",
        "values": "{\"unit\":\"kW·h\",\"min\":0,\"max\":50000,\"scale\":0,\"step\":1}"
      },
      {
        "code": "switch",
        "dp_id": 16,
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "alarm_set_2",
        "dp_id": 17,
        "type": "Json",
        "values": "{}"
      },
      {
        "code": "event_clear",
        "dp_id": 20,
        "type": "Boolean",
        "values": "{}"
      }
    ],
    "status": [
      {
        "code": "forward_energy_total",
        "dp_id": 1,
        "type": "Integer",
        "values": "{\"unit\":\"kW·h\",\"min\":0,\"max\":99999999,\"scale\":2,\"step\":1}"
      },
      {
        "code": "phase_a",
        "dp_id": 6,
        "type": "Json",
        "values": "{}"
      },
      {
        "code": "fault",
        "dp_id": 10,
        "type": "Bitmap",
        "values": "{\"label\":[\"ov_cr\",\"unbalance_alarm\",\"ov_vol\",\"undervoltage_alarm\",\"miss_phase_alarm\",\"outage_alarm\",\"magnetism_alarm\",\"terminal_alarm\",\"cover_alarm\",\"credit_alarm\",\"no_balance_alarm\",\"battery_alarm\",\"meter_hardware_alarm\"]}"
      },
      {
        "code": "switch_prepayment",
        "dp_id": 12,
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "balance_energy",
        "dp_id": 13,
        "type": "Integer",
        "values": "{\"unit\":\"kW·h\",\"min\":0,\"max\":99999999,\"scale\":2,\"step\":1}"
      },
      {
        "code": "clear_energy",
        "dp_id": 14,
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "charge_energy",
        "dp_id": 15,
        "type": "Integer",
        "values": "{\"unit\":\"kW·h\",\"min\":0,\"max\":50000,\"scale\":0,\"step\":1}"
      },
      {
        "code": "switch",
        "dp_id": 16,
        "type": "Boolean",
        "values": "{}"
      },
      {
        "code": "alarm_set_2",
        "dp_id": 17,
        "type": "Json",
        "values": "{}"
      },
      {
        "code": "event_clear",
        "dp_id": 20,
        "type": "Boolean",
        "values": "{}"
      }
    ]
  }
}

Other DPs:
101 - Internal Expansion command (whatever that is)
Product ID
{
  "result": {
    "active_time":<PHONE_NUMBER>,
    "category": "zndb",
    "category_name": "Smart Electric Meter",
    "create_time":<PHONE_NUMBER>,
    "gateway_id": "",
    "icon": "smart/icon/ay1536897190133VVeLx/32346148448dd9829abb97ce317c5e82.png",
    "id": "X",
    "ip": "X",
    "lat": "X",
    "local_key": "X",
    "lon": "X",
    "model": "",
    "name": "Wifi Smart Meter",
    "online": true,
    "owner_id": "X",
    "product_id": "nqbs1onwskmmmaac",
    "product_name": "wifi smart meter",
    "sub": false,
    "time_zone": "+01:00",
    "update_time":<PHONE_NUMBER>,
    "uuid": "X"
  },
  "success": true,
  "t":<PHONE_NUMBER>377,
  "tid": "X"
}

Information about how the device functions
Here is the homepage of the product:
http://emyloworld.com/products/details-58-223.html
Here is an amazon page with more details and real captures of the information displayed on tuya:
https://www.amazon.de/-/en/1-Phase-Digital-Wireless-Control-Smartphone/dp/B083BFGHPQ
Basically, it monitors power, has a few features to set limiters on (no leak on this specific model though) and has an internal relay that can be used to manually disconnect the power it forwards, or that will automatically open the circuit if the limiters set are reached or exceeded.

Hi make-all, thank you for your support.
The integration is partially working: it is able to retrieve the Total Energy but not the measure of Power, current, and voltage
...
"product_name": "wifi smart meter",
"status": [
{
"code": "forward_energy_total",
"value": 45284
},
{
"code": "phase_a",
"value": "{"electricCurrent":7.26,"power":1.498,"voltage":232.0}"
},
....
Please, let me know if I can help to improve this integration.

The device does not expose current, voltage and power as separate attributes. They are encoded in the phase_a attribute by some undocumented encoding method. phase_a is exposed as an extra attribute on the energy sensor if you want to have a look at it.

Hi Jason,
attached are a couple of device configuration files for Emylo and TOMZN wifi intelligent energy meters.They work on my devices with the limitations you highlighted in the previous email.
I've just modified the two configuration files already present in the distribution.
Hope can help a little bit.
Il sabato 18 marzo 2023 15:01:28 CET, Jason Rumney<EMAIL_ADDRESS>ha scritto:

Closed #529 as completed.
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you commented.Message ID: @.***>


Tweaks the Nearby stops controller to make sure it doesn’t pollute Nearby Stops results

Fixes #1093 - 'Nearby Stops' isn't cleared after search disambiguation

@themonki - there's one new string in this commit. if you have the bandwidth, I'd love your help in localizing this. thank you in advance :)


ComradeMao doesn't pick up English translation

Steps to reproduce
Open any random chap in ComradeMao
Expected behavior
There is some kind of protection from parsing and from some ip's
Actual behavior
ComradeMao source doesn't pick up English translation
Chinese symbols are visible
LNReader version
1.1.13
Android version
10
Device
.
Other details
No response
Acknowledgements

[X] I have searched the existing issues and this is a new ticket, NOT a duplicate or related to another open or closed issue.
[X] I have written a short but informative title.
[X] If this is an issue with a source, I should be opening an issue in the sources repository.
[X] I have updated the app to version 1.1.13.
[X] I will fill out all of the requested information in this form.

If this is an issue with a source, I should be opening an issue in the sources repository.


Feature/quickstart script integrate bridge client

Closes: #302 #371
Finally, the bridge image must point to the release version. (:bangbang:) This can't be done so far, because the configuration has changed.
Moreover the usage of the docker-compose configuration must be discussed. So far it got part of quickstart Docker image. For external usage it must be manually copied from ./docker/. Anyways the containers can be still controlled individually via pain docker.
At last but not least I was not able to test the fill setup with the DockerImage. I have local problems with the Dockerfile and Ubuntu apt. Apparently this is related to my network connection and also VPN does not solve it. I will make sure that everything works when I'm back at the office. Please try to review the rest or wait until I'm 100% done.

So, how do I run it?

You can install it into a virtual environment and execute it from the ./docker directory (not click command, simply run quickstart). Or just copy the ./docker-compose.yaml file where ever you want. Anyways this is only required for the final step. The rest of the user flow to setup the whole stuff does work without.
Alternatively you can build the image locally and export the DOCKER_IMAGE_NAME variable to your local tag before starting the new quickstart.sh script. This does then include the docker-compose configuration. But as already stated this is not tested and I would guess there will be something that doesn't work so far.
We could also let the quickstart script download the docker-compose.yaml file. It would then be mounted to the container anyways. Not sure whats the advantage here.

This does then include the docker-compose configuration

That's the right thing to do, i.e. please don't download the docker-compose.yml.

Please let someone fix the English.

Also, not sure if we have to fix the message issues in this PR or if we should do it in a separate one. Probably more will come up if we go through it with a lay person.

@schmir-at-bb please have a final look. Feel free to merge if you have no concerns. If you don't care: also merge :grimacing:

Does this handle the case where we already started the images with the old quickstart script?
i.e. will it shut them down and restart them with docker-compose?


I think there's an error in impl Stream for RingReceiver

Err(RecvError::Empty) => {
   // Keep polling thread awake.
   ctx.waker().wake_by_ref();
   Poll::Pending
}

AFAICT you should just return Pending here and store the waker. When new data comes in, then you call wake (I suppose that means your ringbuffer needs to wake the waker).

AFAICT you should just return Pending here and store the waker. When new data comes in, then you call wake (I suppose that means your ringbuffer needs to wake the waker).

Generally speaking, your assessment is correct. It was a conscious decision in the design to keep the polling thread awake to avoid having to keep an unbounded number of wakers stored (remember it's a MPMC channel) and tax producers with the unconditionsl overhead of checking whether there are wakers to awake. Considering ring-channel is throughoput oriented, chances are there will always be work to do, so there's little use in letting the polling thread sleep anyways. You can have a run at the benchmarks to see that ring-channel achieves very high throughput, when compared with regular channels.
Does that sound reasonable?

Hmm, this is async code, so there isn't necessarily any threads involved. But basically what you are doing here is running code in an endless loop consuming CPU when no data is present. The whole point of how async in rust is designed is to avoid having to loop. Think about it, what's the advantage of this over using the sync API and just doing something like:
loop
{
   match rx.recv()
   {
       Ok(data) => // do something useful
       Err(RecvError::Empty) => {}
   }
}

Now if this is single threaded, you can't actually do anything else here, because this loop will not exit, but in async code, the thread is shared with other async tasks, so if you just run the CPU in a loop it's really a problem.
Sure, it requires storing an unknown amount of wakers, but it's up to the user not to go insane and have a trillion tasks polling this channel, unless of course they have the memory to back it up. In any case it's consuming some memory to do something useful, whereas this impl is just endlessly burning cpu cycles for doing nothing. I haven't looked at how wake works, have you tested this? Because strictly speaking the context is still awake here so maybe it's just a no-op and the task never wakes up?
I think it's worth considering that the library could be useful for much more than just high throughput. I just advised someone on reddit to use it, where they need to communicate between tasks and they only want to consider the last item sent. That could be done with a ring_channel of size 1. I personally am interested in this for use cases where you don't want back pressure, but not unbounded channels either. That's an interesting property on it's own, regardless of throughput characteristics.
All it takes to do this correctly is keep a Vec<Waker>, when data comes in and when the channel get's closed by the sender, you just drain it, wake them all and then drop them.
I wouldn't use the implementation for async as it's written right now, which is a pity.

Hmm, this is async code, so there isn't necessarily any threads involved. But basically what you are doing here is running code in an endless loop consuming CPU when no data is present.

It is true that the polling thread will never sleep and our future will spin the CPU even if there are no messages to process, but in general the executor has a backlog of futures to process and it is not true that calling wake() immediately prevents the other futures from making progress. Behind the scenes what happens is that the future is put back on the queue and all other futures that have called wake() are polled before our future is polled again.

Sure, it requires storing an unknown amount of wakers, but it's up to the user not to go insane and have a trillion tasks polling this channel, unless of course they have the memory to back it up. In any case it's consuming some memory to do something useful, whereas this impl is just endlessly burning cpu cycles for doing nothing.

The problem is not at all related to memory consumption, the real issue are the concurrent reads and writes to the shared Vec<Waker>. Every time a writer sends a message or a reader finds an empty buffer this shared  Vec<Waker> has to be accessed. What's more, lock-free programming is extremely tricky and I'm yet to see a design that does not require a spin-lock to avoid deadlocks. If you're not familiar with it, a spin-lock is essentially a loop on an atomic variable that runs the CPU idle, exactly what we're trying to avoid.

I haven't looked at how wake works, have you tested this? Because strictly speaking the context is still awake here so maybe it's just a no-op and the task never wakes up?

The call to wake() is probably very cheap indeed, but it's the bottleneck created by the shared  Vec<Waker> that kills throughput, if I recall correctly it dropped by orders of magnitude.

I personally am interested in this for use cases where you don't want back pressure, but not unbounded channels either. That's an interesting property on it's own, regardless of throughput characteristics. [...] I wouldn't use the implementation for async as it's written right now, which is a pity.

Don't get me wrong, I'm absolutely interested in making ring-channel fit your use-case. It's very unlikely that we would be able to make it a silver bullet that serves all purposes though, but we can always consider providing different flavors for each use-case.
I'll revive an old unpublished branch where I explored alternative implementations of this shared Vec<Waker> and get a working prototype soon.
Meanwhile, would you be able to share more details about your use-case? Did you actually observe high CPU usage in practice?

Ok, I think I see what you mean. Do we agree this only concerns the async API? The sync api could just ignore the vector.
So yes, every read/write would have to check the vector even if there where no wakers in it. It could surely be improved by finding a better implementation, like setting an AtomicBool when a waker get's added and unsetting it on write, that would mean that you only need to check the bool if no wakers are present.
I haven't actually done any benchmarks yet, I just looked at the code and found it suspicious to wake in a loop. I will try to play around a bit with it soon and see what the effect on cpu are for infrequent events.

Do we agree this only concerns the async API?

Yes.

So yes, every read/write would have to check the vector even if there where no wakers in it. It could surely be improved by finding a better implementation, like setting an AtomicBool when a waker get's added and unsetting it on write, that would mean that you only need to check the bool if no wakers are present.

It would rather have to be an AtomicUsize that counts how many are waiting, but yes, that makes sense. Another thing I realized was that the list of Wakers is not completely unbounded. I mean, it is, but each receiver can only be associated with one task at a time, which means there's at most one Waker per receiver. I'm not sure whether this actually helps or not, but it's something I haven't realized before.

I will try to play around a bit with it soon and see what the effect on cpu are for infrequent events.

That would be awesome!

Actually, ring_channel async receiver always consume 100% CPU doesn't matter frequent or infrequent messages.
Example code (change FREQ_MS to try different event frequencies):
use futures::stream::StreamExt;
use tokio::runtime::Runtime;
use tokio::timer::Interval;
use tokio::future::FutureExt;
use futures::future::ready;
use ring_channel::*;
use std::num::NonZeroUsize;
use std::time::Instant;
use std::sync::atomic::{AtomicU64, Ordering};

static ELAPSED_EMA: AtomicU64 = AtomicU64::new(0);
static JITTER_EMA: AtomicU64 = AtomicU64::new(0);

const FREQ_MS: u64 = 1_000;

fn main() {

    let rt = match Runtime::new() {
        Ok(x) => x,
        Err(e) => {
            eprintln!("{}: cannot create tokio runtime, error: {}", line!(), e);
            return;
        }
    };

    let (tx, rx) = ring_channel(NonZeroUsize::new(1).unwrap());

    let producer = Interval::new(Instant::now(), Duration::from_millis(FREQ_MS))
        .for_each(move |_| {
            tx.send(Instant::now()).unwrap();
            ready(())
        });

    let consumer = rx.for_each(move |instant| {
        let elapsed = instant.elapsed().as_nanos() as u64;
        let mut elapsed_ema = ELAPSED_EMA.load(Ordering::Relaxed);
        if elapsed_ema != 0 {
            elapsed_ema = (9_999 * elapsed_ema + elapsed) / 10_000;
        } else {
            elapsed_ema = elapsed;
        }
        ELAPSED_EMA.store(elapsed_ema, Ordering::Relaxed);
        let jitter =
            if elapsed > elapsed_ema { elapsed - elapsed_ema }
                else { elapsed_ema - elapsed };
        let mut jitter_ema = JITTER_EMA.load(Ordering::Relaxed);
        if jitter_ema != 0 {
            jitter_ema = (9_999 * jitter_ema + jitter) / 10_000;
        } else {
            jitter_ema = jitter;
        }
        JITTER_EMA.store(jitter_ema, Ordering::Relaxed);
        println!("Elapsed {}ns, avg {}ns, jitter {}ns", elapsed, elapsed_ema, jitter_ema);
        ready(())
    });

    rt.spawn(consumer);
    rt.block_on(producer);
}

@mcseemk thanks for chipping in. I'm very busy right now, so haven't found time to run tests.
If you put your code in a block which specifies the language...
```rust

...it will have syntax highlighting and be more readable.

@mcseemk thanks for chipping in. I'm very busy right now, so haven't found time to run tests.
If you put your code in a block which specifies the language...
```rust

...it will have syntax highlighting and be more readable.

Great, thanks for the hint!

Actually no, there could be a receiver waiting on a Waker through the async API, while messages are pushed through the sync API. The receiver would never poll again despite the fact the buffer would be constantly full if the sync API were to ignore the wakers.

Yeah, the question was more whether you want to support mixing the API's. I can imagine it can be useful. However adding overhead for someone that doesn't use async (in reader nor writer) is probably not justified especially if you care about maximizing the throughput.
On the other hand, if the current impl really just goes to 100% CPU, I doubt anyone will want to use that. It seems to confirm there really is a problem.

Yeah, I would love to use ring_channel in my async programs, but 100% CPU is a show-stopper at the moment.

Yeah, the question was more whether you want to support mixing the API's. I can imagine it can be useful. However adding overhead for someone that doesn't use async (in reader nor writer) is probably not justified especially if you care about maximizing the throughput.

I think a reasonable way out would be to provide both RingReceiver and, say BlockingRingReceiver, such that the former can be converted to the later and only the later implements Stream. The first RingReceiver to be converted would upgrade the shared control block to a flavor that keeps track of wakers. RingSenders do not need to be converted and would seamlessly start waking pending receivers once the shared control block gets upgraded. The remaining RingReceivers would still work fine after conversion and could also be converted to BlockingRingReceivers independently.
@najamelan, @mcseemk how does that sound for a design?

It sounds a nifty design! except:

RingReceiver and say BlockingRingReceiver, such that the former can be converted to the later and only the later implements Stream
I suppose you accidentally reversed the names?

It just leaves the performance issue for async to be solved.

Sounds good to me. I wouldn't mind also having an mpsc blocking/async ring receiver as well.
Single consumer version should cover 80% use cases and would be potentially more performant/easier to implement for async polling.

I suppose you accidentally reversed the names?

@najamelan actually not, my reasoning is that from the point of view recv the call blocks by parking the thread until the Waker is awoken. This is a blocking version of RingReceiver, which returns even if the buffer is empty.
I can see now this naming convention may be confusing, what would you call them instead?

I wouldn't mind also having an mpsc blocking/async ring receiver as well

@mcseemk sounds like a great idea, specially because it can be incrementally built later with no impact to existing code.

@najamelan actually not, my reasoning is that from the point of view recv the call blocks by parking the thread until the Waker is awoken. This is a blocking version of RingReceiver, which returns even if the buffer is empty.

I'm a bit confused now. In principle if the receiver implements Stream, it shouldn't block threads, because it's async, so it blocks the task awaiting it, but never blocks the thread. Synchronous interfaces block threads, or just returns an error like WouldBlock, or Empty, and the thread get's woken up when new data is available, and thus do not need wakers, since wakers are for async. They also don't need executors, nor tasks. In general  I haven't had time to look closely enough at the sync implementation of ring_channel though, so I'm probably missing something crucial.

I'm a bit confused now. In principle if the receiver implements Stream, it shouldn't block threads, because it's async, so it blocks the task awaiting it, but never blocks the thread.

That's correct, through the Stream interface BlockingRingReceiver::poll_next would return Poll::Pending and it's up to the executor what to do with it. In my comment above I was referring to BlockingRingReceiver::recv, which parks (thus blocks) the calling thread without spinning the CPU. This is exactly how std::sync::mpsc::Receiver::recv behaves: "This function will always block the current thread if there is no data available and it's possible for more data to be sent."
Does that clarify it?

@najamelan @mcseemk I got a working implementation of the core logic that keeps track of Wakers to avoid spinning the CPU through the Stream interface. There's still some work to do, but I'd love some early feedback if you're able find the time to have a look.

@najamelan  @brunocodutra I've just done some tests, all looks good to me. New version of ring-channel looks virtually indistinguishable from futures::channel::mpsc in terms of async performance / CPU consumption. The latency per message is just under 0.1ms, which I presume is as good as it gets with async anyway.

Fantastic, thanks for checking @mcseemk!
I presume you used the code you posted above to get this number?

i ran the benchmarks, I haven't had time to really understand the code, but at least the results are these:
Benchmark results
Running target/release/deps/concurrency-9f82666c638de450
concurrency/10000       time:   [320.70 us 326.18 us 331.33 us]
                        thrpt:  [30.181 Melem/s 30.657 Melem/s 31.181 Melem/s]
Found 4 outliers among 100 measurements (4.00%)
  3 (3.00%) low mild
  1 (1.00%) high mild

     Running target/release/deps/futures-2e521ff894685f8b
futures/mpmc/4x4x1000/1 time:   [390.92 us 412.37 us 436.43 us]
                        thrpt:  [2.2913 Melem/s 2.4250 Melem/s 2.5580 Melem/s]
Found 14 outliers among 100 measurements (14.00%)
  6 (6.00%) low mild
  1 (1.00%) high mild
  7 (7.00%) high severe
futures/mpmc/4x4x1000/8 time:   [197.32 us 202.58 us 208.95 us]
                        thrpt:  [4.7857 Melem/s 4.9363 Melem/s 5.0678 Melem/s]
Found 6 outliers among 100 measurements (6.00%)
  1 (1.00%) low mild
  3 (3.00%) high mild
  2 (2.00%) high severe
futures/mpmc/4x4x1000/1000
                        time:   [182.16 us 190.89 us 201.06 us]
                        thrpt:  [4.9736 Melem/s 5.2385 Melem/s 5.4897 Melem/s]
Found 2 outliers among 100 measurements (2.00%)
  1 (1.00%) high mild
  1 (1.00%) high severe

futures/mpsc/7x1x1000/1 time:   [61.782 us 63.231 us 64.660 us]
                        thrpt:  [15.465 Melem/s 15.815 Melem/s 16.186 Melem/s]
Found 2 outliers among 100 measurements (2.00%)
  1 (1.00%) high mild
  1 (1.00%) high severe
futures/mpsc/7x1x1000/8 time:   [243.27 us 252.28 us 260.98 us]
                        thrpt:  [3.8317 Melem/s 3.9639 Melem/s 4.1107 Melem/s]
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high severe
futures/mpsc/7x1x1000/1000
                        time:   [249.98 us 254.53 us 258.78 us]
                        thrpt:  [3.8643 Melem/s 3.9288 Melem/s 4.0003 Melem/s]
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high severe

Benchmarking futures/spmc/1x7x1000/1: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 10.5s or reduce sample count to 40
futures/spmc/1x7x1000/1 time:   [3.1005 ms 3.3259 ms 3.5215 ms]
                        thrpt:  [283.97 Kelem/s 300.67 Kelem/s 322.53 Kelem/s]
Found 9 outliers among 100 measurements (9.00%)
  6 (6.00%) low mild
  2 (2.00%) high mild
  1 (1.00%) high severe
Benchmarking futures/spmc/1x7x1000/8: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 9.5s or reduce sample count to 50
futures/spmc/1x7x1000/8 time:   [2.3968 ms 2.4472 ms 2.4980 ms]
                        thrpt:  [400.31 Kelem/s 408.63 Kelem/s 417.22 Kelem/s]
Found 11 outliers among 100 measurements (11.00%)
  5 (5.00%) low severe
  4 (4.00%) low mild
  1 (1.00%) high mild
  1 (1.00%) high severe
Benchmarking futures/spmc/1x7x1000/1000: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s.
I presume you used the code you posted above to get this number?

Yes, slightly modified code above. I'm mostly interested in latency/jitter rather than throughput so just ran 100k messages 1ms apart and got average latency and its deviation. On my PC I couldn't find any statistically meaningful difference between mpsc futures and ring-channel.
Interestingly enough, for mpsc the latency drops significantly (almost 2 times) when using async-std runtime instead of tokio runtime, but I couldn't run ring-channel with async-std because of dependency hell.
Anyway, the latency seems to be determined by runtime. For spinning version of ring-channel the latency is between 100-200ns at the cost of 100% CPU, for properly async one it immediately jumps to some 90,000ns, but the CPU is much happier.

@all, thanks for looking into it! I look forward playing with ringchannel, and when I get round to it, I will review the code and try some benchmarks. 90us seems a lot, but then it depends the hardware and exact bench.

@najamelan @mcseemk v0.7 has been published to crates.io.


twobody: correct raan_from_ltan calculation by 180 degrees

Closes #841
Should I also add a unit test checking if the function behaves correctly for a
few orbits which I can extract from public TLEs?

hi @noc0lour, thanks for this PR! this needs a tox -e reformat.

Should I also add a unit test checking if the function behaves correctly for a
few orbits which I can extract from public TLEs?

Absolutely!

Should be fine now, I've added a test with a MetOp-B & Sentinel-5P TLE for their respective LTAN and RAAN matches for up to 0.3 degrees, I think that's fine as the S-5P LTAN is not as precise as the published MetOp-B LTAN.

@noc0lour looking good! For this to be perfect let's add a comment explicitly stating where does the expected LTAN come from, and I'll merge :muscle:

Thanks for pointing out the missing sources, I meant to include them but just overlooked.

Thanks to you! Merged 💪


Enhance Question Management and Extend Quiz Functionality

Overview
The current implementation of the quiz game in main.py has a static set of questions that are defined within the file itself. This approach is simple and straightforward for a small number of questions but can become cumbersome as the quiz grows in size and complexity. To improve the scalability and manageability of the question set, I propose enhancing the question management system.
Suggested Improvements

External Question Source: Instead of hardcoding questions within main.py, we can move them to an external source like a JSON file or a database. This would make it easier to add, remove, and manage questions without touching the codebase.
Dynamic Question Loading: Implement functionality to load questions dynamically at the start of the game. This could involve parsing a file or fetching from a database to populate the questions list.
Question Randomization: To keep the game engaging, we could add a feature that randomizes the questions each time the game is played, ensuring a unique experience for the user.
Category and Difficulty Levels: Introduce categories and difficulty levels for questions, allowing players to choose the type of questions they want to be quizzed on or the level of difficulty they're comfortable with.

Benefits

Maintainability: Separating questions from the main code will make the codebase cleaner and easier to maintain.
Scalability: As the quiz grows, it will be much easier to manage a large set of questions.
User Experience: Randomization and varied difficulty levels will make the game more engaging and replayable.

Conclusion
I believe these changes will significantly enhance the quality and user experience of the quiz game. I am willing to contribute to the development of this feature and look forward to feedback from the team.

thank you i will work on some of your recommendations !


[Improvement] The interval of container status check is too short

What would you like to be improved?
There are some failing tests because of container status check failed.  see example:

Corresponding key logs are as follows:

......
2024-02-20 00:23:38 INFO  8:543 - Container datastrato/gravitino-ci-hive:0.1.8 started in PT56.579618497S
2024-02-20 00:23:40 ERROR HiveContainer:78 - Command [bash /tmp/check-status.sh] exited with 1
2024-02-20 00:23:40 ERROR HiveContainer:79 - stderr: ++ hdfs dfsadmin -report
++ grep 'Live datanodes'
++ awk '{print $3}'
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0

hdfs_ready=
[[ '' == (\1): ]]
echo 'HDFS is not ready'
exit 1

2024-02-20 00:23:40 ERROR HiveContainer:80 - stdout: HDFS is not ready
2024-02-20 00:23:46 ERROR HiveContainer:78 - Command [bash /tmp/check-status.sh] exited with 1
2024-02-20 00:23:46 ERROR HiveContainer:79 - stderr: ++ hdfs dfsadmin -report
++ grep 'Live datanodes'
++ awk '{print $3}'
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0

hdfs_ready=
[[ '' == (\1): ]]
echo 'HDFS is not ready'
exit 1

2024-02-20 00:23:46 ERROR HiveContainer:80 - stdout: HDFS is not ready
2024-02-20 00:23:53 ERROR HiveContainer:78 - Command [bash /tmp/check-status.sh] exited with 1
2024-02-20 00:23:53 ERROR HiveContainer:79 - stderr: ++ hdfs dfsadmin -report
++ grep 'Live datanodes'
++ awk '{print $3}'
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0

hdfs_ready=
[[ '' == (\1): ]]
echo 'HDFS is not ready'
exit 1

2024-02-20 00:23:53 ERROR HiveContainer:80 - stdout: HDFS is not ready
2024-02-20 00:23:59 ERROR HiveContainer:78 - Command [bash /tmp/check-status.sh] exited with 1
2024-02-20 00:23:59 ERROR HiveContainer:79 - stderr: ++ hdfs dfsadmin -report
++ grep 'Live datanodes'
++ awk '{print $3}'
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0

hdfs_ready=
[[ '' == (\1): ]]
echo 'HDFS is not ready'
exit 1

2024-02-20 00:23:59 ERROR HiveContainer:80 - stdout: HDFS is not ready
2024-02-20 00:24:06 ERROR HiveContainer:78 - Command [bash /tmp/check-status.sh] exited with 1
2024-02-20 00:24:06 ERROR HiveContainer:79 - stderr: ++ hdfs dfsadmin -report
++ grep 'Live datanodes'
++ awk '{print $3}'
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0

hdfs_ready=
[[ '' == (\1): ]]
echo 'HDFS is not ready'
exit 1

2024-02-20 00:24:06 ERROR HiveContainer:80 - stdout: HDFS is not ready
2024-02-20 00:24:11 INFO  HiveConf:187 - Found configuration file null
2024-02-20 00:24:11 WARN  NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2024-02-20 00:24:11 INFO  metastore:405 - Trying to connect to metastore with URI thrift://<IP_ADDRESS>:9083
2024-02-20 00:24:11 INFO  metastore:479 - Opened a connection to metastore, current connections: 1
......

We can see that the Hive container has started, but the check fails before HDFS is initialized,  resulting in a Precondition failed
How should we improve?
Retry interval should be increased

@mchades Can you please confirm if this PR is related to the problem I encountered?
https://github.com/datastrato/gravitino/actions/runs/8402223775/job/23011468726?pr=2661
If so, can we review this PR again?
@jerryshao @mchades

It may fixed by #2871


Wide Arabic codepoints are unreadable

I made a similar issue for diffbrowsers here: https://github.com/googlefonts/diffbrowsers/issues/30
When reviewing Arabic fonts for Google Fonts QA there are sometimes very wide codepoints like U+FDFD. It would be helpful if diffenator2 was responsive to the width of each codepoint so the user can see the full drawing.
This should show a very wide Bismillah U+FDFD ﷽

Issue I noticed while reviewing this PR: https://github.com/google/fonts/pull/6859

just grepped the wordlists and we don't have these codepoints. Would you like to add them?


Create CentOS CI commands

"minibot artefacts for pull request "
"minibot artefacts for latest master build"
"minibot URL to latest staging docs"

Merged via pull request #21


[codemod] Skip ListItemButton import for unrelated files

closes #43527

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

@siriwatknp I refactored to cover the following case:
import ListItem from '@mui/material/ListItem';

// ...

<>
  <ListItem />
  <ListItem button />
</>

In which there are no imports to remove but we still need to add the ListItemButton one.


Add Metadata Favorites List feature

Is your feature request related to a problem? Please describe.
Add favorite data function within explorer data
Menu : Favorite Data > Data Creator > Detail View
References : #2328
Describe the solution you'd like

디자인 공유드립니다.

퍼블작업 완료되었습니다.
05_01메타데이터_01user_02FavoriteData_02DataCreator
05_01메타데이터_01user_02FavoriteData_01Data

@ufoscw
should i show detail modal when item is clicked?

@AnnieHwang
When click user show e1-01-019 means click exactly which part?
profile image or user name?

@thinkcsww
I think both of them.

@AnnieHwang @ufoscw
In These two screen, user can navigate from one to the other one.
overview -> creator's data list -> overview -> creator's data list -> overview -> creator's data list
Then the modal is keep stacked.
In planning book, when navigate from creator's data list to overview, show confirm modal to close and move. However the case of navigate from overview to creator's data doesn't have any manual.
What would be the proper way?

@thinkcsww
There is an error in the content, so I would like to change the details as below.

Menu structure
The 3depth menu, which was previously set to 'Data' and 'Data Creator' under 'My Favorite', was changed to 2depth with 'My Favorite Data' and 'Data Creator'.

(changed)
Exploration
   - Data
   -My Favorite Data
   -Data Creator

Data Creator shows both UnFollow User and Follow User.

'Data Creator' detail screen has been changed to a detail UI, not a popup UI.
Click Data on the 'Data Creator' detail screen to display the 'Data' popup screen. (In this case, no warning window is required)

@ufoscw
Is there api for favorite creator exist already?

@thinkcsww @ufoscw The design is complete. Please, check it.

@thinkcsww
sorry for late reply.
1. Data Creator List API
(GET) /api/metadatas/datacreators(?nameContains)

Request Sample

/api/metadatas/datacreators?nameContains=metatron

Response Sample

[
    {
        "username": "metatron",
        "creator": {
            "id": "metatron",
            "username": "metatron",
            "fullName": "Metatron",
            "email"<EMAIL_ADDRESS>            "imageUrl": "3",
            "createdTime": "2019-09-02T11:04:02.000Z",
            "modifiedTime": "2019-09-02T11:04:02.000Z"
        },
        "count": 1,
        "favorite": true,
        "dataList": [
            {
                "name": "audit_idx",
                "id": "cb4eca99-cdef-47c6-b3b1-b0332d72626a",
                "sourceType": "JDBC",
                "createdTime": "2019-09-05T00:15:38.000Z",
                "modifiedTime": "2019-09-05T00:15:38.000Z"
            }
        ]
    }
]

2. Data Creator Detail API
(GET) /api/metadatas/datacreators/{username}

Request Sample

/api/metadatas/datacreators/metatron

Response Sample

{
    "creator": {
        "id": "metatron",
        "username": "metatron",
        "email"<EMAIL_ADDRESS>        "createdTime": "2019-09-02T11:04:02.000Z",
        "fullName": "Metatron",
        "modifiedTime": "2019-09-02T11:04:02.000Z",
        "imageUrl": "3"
    },
    "favorite": true,
    "followerList": [
        {
            "id": "admin",
            "username": "admin",
            "email"<EMAIL_ADDRESS>            "createdTime": "2019-09-02T11:04:02.000Z",
            "fullName": "Administrator",
            "modifiedTime": "2019-09-02T11:04:02.000Z",
            "imageUrl": "1"
        }
    ]
}

3. Add or Remove Favorite to Data Creator
(POST) /api/metadatas/datacreators/{creatorId}/favorite/{action:attach|detach}

4. Metadata List by Data Creator
(GET) /api/metadatas/datacreators/admin/metadatas(?size,sort,projection,nameContains)

Request Sample

/api/metadatas/datacreators/admin/metadatas?size=10&projection=forListView&nameContains=s&sort=createdTime%2Cdesc

Response Sample

{
    "_embedded": {
        "metadatas": [
            {
                "name": "asdasd",
                "id": "a8c69a3e-acdb-4d11-8921-bb4f41051791",
                "sourceType": "ENGINE",
                "createdTime": "2019-09-26T14:37:39.000Z",
                "popularity": 0,
                "modifiedBy": {
                    "type": "user",
                    "username": "admin",
                    "fullName": "Administrator",
                    "email"<EMAIL_ADDRESS>                    "imageUrl": "1"
                },
                "modifiedTime": "2019-09-26T14:37:39.000Z",
                "favorite": false,
                "createdBy": {
                    "type": "user",
                    "username": "admin",
                    "fullName": "Administrator",
                    "email"<EMAIL_ADDRESS>                    "imageUrl": "1"
                },
                "description": "",
                "_links": {
                    "self": {
                        "href": "http://localhost:8180/api/metadatas/a8c69a3e-acdb-4d11-8921-bb4f41051791"
                    },
                    "metadata": {
                        "href": "http://localhost:8180/api/metadatas/a8c69a3e-acdb-4d11-8921-bb4f41051791{?projection}",
                        "templated": true
                    },
                    "catalogs": {
                        "href": "http://localhost:8180/api/metadatas/a8c69a3e-acdb-4d11-8921-bb4f41051791/catalogs"
                    },
                    "columns": {
                        "href": "http://localhost:8180/api/metadatas/a8c69a3e-acdb-4d11-8921-bb4f41051791/columns"
                    }
                }
            },
            {
                "name": "sales",
                "id": "test_meta1",
                "sourceType": "ENGINE",
                "createdTime": "2019-09-05T09:11:21.000Z",
                "popularity": 50,
                "modifiedBy": {
                    "type": "user",
                    "username": "admin",
                    "fullName": "Administrator",
                    "email"<EMAIL_ADDRESS>                    "imageUrl": "1"
                },
                "modifiedTime": "2019-09-05T09:11:21.000Z",
                "favorite": false,
                "createdBy": {
                    "type": "user",
                    "username": "admin",
                    "fullName": "Administrator",
                    "email"<EMAIL_ADDRESS>                    "imageUrl": "1"
                },
                "description": "meta description1",
                "tags": [
                    {
                        "id": "b022e345-0797-49a9-a0e4-d74fa76310d1",
                        "name": "111",
                        "scope": "DOMAIN",
                        "domainType": "METADATA",
                        "createdBy": "admin",
                        "createdTime": "2019-09-23T08:38:33.000Z"
                    },
                    {
                        "id": "0b2e3e4d-b69a-44f8-ab46-1a80a2162b4b",
                        "name": "222",
                        "scope": "DOMAIN",
                        "domainType": "METADATA",
                        "createdBy": "admin",
                        "createdTime": "2019-09-23T08:38:35.000Z"
                    },
                    {
                        "id": "68a7d5b5-587b-401e-8dca-4abd29da5891",
                        "name": "333",
                        "scope": "DOMAIN",
                        "domainType": "METADATA",
                        "createdBy": "admin",
                        "createdTime": "2019-09-23T08:38:36.000Z"
                    },
                    {
                        "id": "28f3873c-d03b-4d5e-a9b2-27ee243fd75d",
                        "name": "444",
                        "scope": "DOMAIN",
                        "domainType": "METADATA",
                        "createdBy": "admin",
                        "createdTime": "2019-09-23T08:38:43.000Z"
                    },
                    {
                        "id": "b8c2bf2e-b6a9-4523-9139-9a247fb3d2e3",
                        "name": "555",
                        "scope": "DOMAIN",
                        "domainType": "METADATA",
                        "createdBy": "admin",
                        "createdTime": "2019-09-23T08:38:55.000Z"
                    },
                    {
                        "id": "4b7cd8bf-621b-446d-889a-ada7d639dbf3",
                        "name": "666",
                        "scope": "DOMAIN",
                        "domainType": "METADATA",
                        "createdBy": "admin",
                        "createdTime": "2019-09-23T08:38:56.000Z"
                    }
                ],
                "_links": {
                    "self": {
                        "href": "http://localhost:8180/api/metadatas/test_meta1"
                    },
                    "metadata": {
                        "href": "http://localhost:8180/api/metadatas/test_meta1{?projection}",
                        "templated": true
                    },
                    "catalogs": {
                        "href": "http://localhost:8180/api/metadatas/test_meta1/catalogs"
                    },
                    "columns": {
                        "href": "http://localhost:8180/api/metadatas/test_meta1/columns"
                    }
                }
            },
            {
                "name": "activity_stream",
                "id": "8248a950-500f-45dc-93a5-dbe9ac2d59e0",
                "sourceType": "JDBC",
                "createdTime": "2019-09-05T00:10:32.000Z",
                "popularity": 0,
                "modifiedBy": {
                    "type": "user",
                    "username": "admin",
                    "fullName": "Administrator",
                    "email"<EMAIL_ADDRESS>                    "imageUrl": "1"
                },
                "modifiedTime": "2019-09-05T00:10:32.000Z",
                "favorite": false,
                "createdBy": {
                    "type": "user",
                    "username": "admin",
                    "fullName": "Administrator",
                    "email"<EMAIL_ADDRESS>                    "imageUrl": "1"
                },
                "_links": {
                    "self": {
                        "href": "http://localhost:8180/api/metadatas/8248a950-500f-45dc-93a5-dbe9ac2d59e0"
                    },
                    "metadata": {
                        "href": "http://localhost:8180/api/metadatas/8248a950-500f-45dc-93a5-dbe9ac2d59e0{?projection}",
                        "templated": true
                    },
                    "catalogs": {
                        "href": "http://localhost:8180/api/metadatas/8248a950-500f-45dc-93a5-dbe9ac2d59e0/catalogs"
                    },
                    "columns": {
                        "href": "http://localhost:8180/api/metadatas/8248a950-500f-45dc-93a5-dbe9ac2d59e0/columns"
                    }
                }
            },
            {
                "name": "analysis_binary",
                "id": "8826ae16-5e98-4fbc-87c1-e86e611c416b",
                "sourceType": "JDBC",
                "createdTime": "2019-09-05T00:10:32.000Z",
                "popularity": 0,
                "modifiedBy": {
                    "type": "user",
                    "username": "admin",
                    "fullName": "Administrator",
                    "email"<EMAIL_ADDRESS>                    "imageUrl": "1"
                },
                "modifiedTime": "2019-09-05T00:10:32.000Z",
                "favorite": true,
                "createdBy": {
                    "type": "user",
                    "username": "admin",
                    "fullName": "Administrator",
                    "email"<EMAIL_ADDRESS>                    "imageUrl": "1"
                },
                "_links": {
                    "self": {
                        "href": "http://localhost:8180/api/metadatas/8826ae16-5e98-4fbc-87c1-e86e611c416b"
                    },
                    "metadata": {
                        "href": "http://localhost:8180/api/metadatas/8826ae16-5e98-4fbc-87c1-e86e611c416b{?projection}",
                        "templated": true
                    },
                    "catalogs": {
                        "href": "http://localhost:8180/api/metadatas/8826ae16-5e98-4fbc-87c1-e86e611c416b/catalogs"
                    },
                    "columns": {
                        "href": "http://localhost:8180/api/metadatas/8826ae16-5e98-4fbc-87c1-e86e611c416b/columns"
                    }
                }
            }
        ]
    },
    "_links": {
        "self": {
            "href": "http://localhost:8180/api/metadatas/datacreators/admin/metadatas?projection=forListView&nameContains=s&page=0&size=10&sort=createdTime,desc"
        }
    },
    "page": {
        "size": 10,
        "totalElements": 4,
        "totalPages": 1,
        "number": 0
    }
}

@ufoscw
I'm not sure about the scope of this sprint.
All i have to do is implement these two screen? except favorite data list?

@AnnieHwang
How about the design about  this page?

@thinkcsww
The original plan is three screens below.

Favorite Data List
Favorite Data Creator List (Card View)
Favorite Data Creator Detail (Layer)

Favorite Data Creator Detail View changed to "Page", not "Layer", because there was an issue that caused the Layer Stack to be unnatural when moving in the Detail View.

@ufoscw
In My Favorite Data screen
sorting by name, searching and filter by data type is not working.
Only sort by updated is working.
Can you check this please?

@thinkcsww
very sorry for the late feedback.
added parameter (sourceType) and fixed sorting error.

@ufoscw
Is this api is for this page?

@thinkcsww
Yes you can use that api.  Please connect api except search function and sorting function.

@ufoscw
I'm sorry but use /metadatas/favorite/my in my favorite data screen
or use (GET) /api/metadatas/datacreators/admin/metadatas?size=10&projection=forListView&sort=name%2Cdesc ??

@thinkcsww
Pleas use /metadatas/favorite/my


[FireFox] Building and running XPI

Hi,
I completely new here, so sorry if I'm asking nonsense :).
I've understood that the FireFox extension isn't ready yet. I've built the code and created a XPI by myself - which worked fine. But when I run it, it looks "disturbed" (see attached picture).
Is this the current state of the App in FireFox or does something went wrong with my build?
Best regards, Tom

Hi @Metal-Frog, yes that's the current state for branch v1.4.0. I'll be commit a change shortly that will resolve this.

@Metal-Frog if you get the latest commit you should now be able to add the firefox extension and run it properly. Note that it's not ready to use yet though, and it may cause issues with your existing sync so please don't use it unless you accept it might corrupt your sync data!!
Subscribe to this issue to keep up to get notified once it's ready to use.


Explicit checkpointing on WriteAheadLog

Hi there!
I'm playing around with okaywal, and am curious about the ability to intentionally force a checkpoint operation on the WAL.
My usecase: I want to be able to explicitly 'drain' a storage node, which would force all of its log entries to be checkpointed, before decommissioning the node.
I couldn't find any explicit way to do this from reading the source, but please let me know if I'm missing something. Otherwise, I'd be happy to submit a PR if you think it's a good idea.
Thanks, and thanks for open sourcing okaywal!

This sounds like a great addition, and I would be happy to accept a PR with it. If you have any questions during implementation, I'm happy to help!

I've released v0.3.0 with your PR merged. Sorry for the delay in merging and lack of response in the meantime. I thought I had replied, but apparently I had gotten distracted before finishing my previous reply. The main source of the delay was me trying to figure out if I wanted to try to publish the new crate main depends on.
In the end, I just cherry-picked your change on top of the current release so that you could have it sooner rather than later. Thank you for your contribution!


various HDFStore fixes regarding tables

commit d1f439c: added optional keyword argument 'itemsize' to HDFStore.put and HDFStore.append to control string length; default 255
it sets the string length of strings in the index and columns for the table (rather than the previous behavior, which was to take the max string length from the longest index/column string in the dataset that is used to create the table). Default is 255.
commit 2b13848: nicer error message for store.put('ccc', DataFrame(['hi'], ['a'], ['col']), table=True); also fixes a bug in d1f439
commit 2bce685: before this commit, the following would discard column1:
store.put('eee', DataFrame([0], ['a'], ['column1'])); store.append('eee', DataFrame([1], ['a'], ['column2'])); store['eee']
even with this commit, strings such as column names which are longer than "itemsize" and which are .appended in the future will be silently truncated. I recommend that a warning be raised when this happens, but i didn't add that myself because i couldn't easily find the place where the truncation occurs, or how to extract the current string length.
i'm having trouble building so i won't be able to try writing unit tests. however, here are tests for these commits:
from pandas import *; store = HDFStore('test.h5')
store.put('ccc', DataFrame(['hi'], ['a'], ['col']), table=True);
should raise "TypeError: At this time, Pandas HDFStore tables only support floating point values."
store.put('fff', DataFrame(['0'], ['a'], ['column1'])); store.append('fff', DataFrame([1], ['a'], ['column2']));
should raise "ValueError: Can only append to Tables"
store.put('fff', DataFrame([0], ['a'], ['column1']), table=True); store.append('fff', DataFrame([1], ['a'], ['column2'])); store['fff']
should yield
column1  column2
a  0        1
(this was true even before the present commits)
store.append('j', DataFrame([0], ['a'], ['column1'])); store.append('j', DataFrame([1], ['a'], ['column2'])); store['j']
should yield:
column1  column2
a  0        1
(this was true even before the present commits)

commit 2b13848: nicer error message for store.put('ccc',  DataFrame(['hi'], ['a'], ['col']), table=True)
commit c3e311d: before this commit, the following would discard column1:
store.put('eee',  DataFrame([0], ['a'], ['column1'])); store.append('eee',  DataFrame([1], ['a'], ['column2'])); store['eee']

also, commit 2b13848 fixes a bug in commit d1f439c

(overwrote c3e311d; so now read "commit af17801: before this commit, the following would discard column1:
store.put('eee', DataFrame([0], ['a'], ['column1'])); store.append('eee', DataFrame([1], ['a'], ['column2'])); store['eee']"

The test suite (pandas/io/tests/test_pytables.py) fails after applying these changes. There are also no unit tests for the new functionality added / fixed. Could you get the tests to pass and write a couple of tests exploring the things you worked on? Otherwise I won't be able to merge this for a while until I can find the time to do it myself
Secondly...slight git faux pas-- the changes are in your master branch. you'll want to clean up your master this is done (or move this work to a branch and fix up master right away)

Just pinging you to see if you want to follow through with these changes (and getting the test suite to pass)

Ping

oops, sure, not sure when tho :(
On Thu, Feb 23, 2012 at 11:46:25AM -0800, Wes McKinney wrote:

Ping

Reply to this email directly or view it on GitHub:
https://github.com/pydata/pandas/pull/515#issuecomment-4143638


Feature Request: Integrate bluesky_chat into bluesky

These packages share same types. Integrate packages for more efficient maintenance and development.

Also, I want to make the packages more streamlined.
For example, in the bluesky package, objects inherited from atproto_core and atproto are exposed in package:bluesky/bluesky.dart, but should be in package:bluesky/core.dart and package:bluesky/atproto.dart.


Add StringIndexType to Analyze Tasks

Addressed in https://github.com/Azure/azure-sdk-for-net/pull/17968

Addressed in https://github.com/Azure/azure-sdk-for-net/pull/17968


Protect topics from deletion

Internal topics (__consumer_offsets and the like) or legacy topics not managed by Kafka Specs shouldn't be deleted.
I'd like to have

a topic blacklist/whitelist command line option, an allow/deny regex for example, to select which topic can or can not be deleted (altered?).
something similar to Ansible limit option which select hosts subset

Mega thanks!


unexpected token c in json at position 0

I tried running it once and it worked! after that i get unexpected token c in json at position 0 everytime

hopped on my VPN & it started working
when i disconnect it doesnt?

Same issue here.

Hello,
I've had that issue and a couple others like it. It seems to be due to encountering the rate limit.

I also have the same issue and haven't figured out the solution yet. Any suggestions would be greatly appreciated.

it's a rate limit issue. This library won't really be able to solve it besides communicating the errors more clearly.

Thanks @hayksaakian. Since these errors happen so frequently it might be good to have a specific case to catch them and report it back to the user. What do you think?

Does anyone know any numbers or have an estimate of what the rate limit is or a quota limit?
As far as I can tell, running a request every second used to be the fastest rate to query without running into any throttling. After I receive a ''too many requests" error, the fastest reliable request speed seems to be once per minute.
I was wondering if any one else has played around with the rate limit and any rates they may have observed.

@nakasoori I could fire off a bunch of requests fairly quickly but eventually I would get rate limited. With about thousands of requests, as I needed to perform, I did 1 request per minute, which experimentally seems to be the rate limit over time. (It also lines up with a suggestion I found elsewhere online)

Thanks @FelisPhasma . I noticed that limit too. On the python version of this library, someone tested that there is a rate limit of 1400 requests per every 4 hours and a limit of 1 request per minute once the 4 hour limit is reached.
In my case, ideally I want to run a request every second and so I started working on using rotating proxy servers once a limit is reached. It seems that Google not only limits one's IP address, but limits a range of IP addresses altogether. Currently I am trying to find a way to ensure distinguished enough IP addresses while also optimizing the query speed as best as possible. If anyone has an ideas, I would very much appreciate it!


two possible issues in view-only-meeting-experience.md

Hi,
The first paragraph contains "We have full Android and iOS mobile support for an attendee to join." The "Experience for view-only attendees" section says: "Join the Overflow Room via the Teams Android mobile app."
The doc describes opt-out for the feature (The view-only experience is enabled by default for any organizer who has E3/E5/A3/A5 SKU.) But the internal mail from Christi Balaki points out the opt-in: View-Only Attendee experience will be rolling out as Default OFF for E3/E5/A3/A5 tenants.
Thank you :)

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


Add additional machines that can build Linux installers

Currently we only have 1 machine to build the den/rpm files and this is shared with the docker builds. This can cause a massive delay in getting releases out. Let’s get the required dependencies added to ansible.

I thought I'd taken the docker tag off that machine - I'll remove it now as the docker builds generally run on other systems now

It's sitting with two executors as well which should have prevented it from blocking any pipelines (I also thought I'd dropped that back to one executor, or did you increase it to unblock the installer jobs?)

Ref https://github.com/AdoptOpenJDK/openjdk-infrastructure/issues/952

Have dropped executors on that machien back down to 1 now that the docker job has finished (and the docker tag removed this time!)
Do we have docs on the requirements setting up machines for running the installers @gdams? The only thing we need to take care of is additional access controls on machines that have the keys so I don't want them just installed everywhere (same situation with the docker keys - I want access to those systems more restricted than most of our systems so I'm trying not to deploy them everywhere at the moment)

https://github.com/AdoptOpenJDK/openjdk-installer/tree/master/linux#linux
https://github.com/AdoptOpenJDK/openjdk-installer/tree/master/linux#rpm-packages (last paragraph)

If I can do anything to make things more friendly for our infra, please let me know.

@aahlenst This is purely out of curiosity (as itr's not a problem) but why is java 11 required? There seems to be references to gradle in there, but does that now require 11 - is that the reason?

Java 11 isn't required anymore. I removed the Java 11 specific features a year ago or so. The machine the jobs are running on doesn't have 11 anyway?

It does have 11 installed (most of our machines do) but it's not the default java. Your first link was where it said it needed java11 or later, so I was curious as to why that was the case, or if java 8 was ok for whatever required it. Sounds like the latter, in which case perhaps the doc could be updated to clarify that?

I think we should definitely get an ansible role set up for those extra things (ruby gems+fpm), even if we don't run it by default on all of our machines :-) Feel free to take a look at creating one if you're interested, or @Haroon-Khel can probably get something in place without too much difficulty too! I suspect there's an ansible operation to install a ruby gem somewhere so this should be a simple thing to add.

I think it also requires a specific GPG key to be installed on the machine

Yeah I figured there probably was hence my earlier comment on "additional access controls" - I'm not keen for any such key being a default thing on all the machines

@sxa I think there is a Jenkins plugin that allows you to install a gpg key on a machine temporarily for a job

could look at using https://plugins.jenkins.io/rpmsign-plugin/

I think it also requires a specific GPG key to be installed on the machine

Seems to be the ones in ~/.gnupg on the machine that are used

I would imagine that nothing else would be definitely required to perrform the work, but I would suggest we add the Superuser and jenkins roles and see how well that works :-)
We should see if we can run the install script excluding the signing on a machine set up with only those things.

The linux installer job uses gradle tasks, yet gradle isnt mentioned as a prerequisite in https://github.com/AdoptOpenJDK/openjdk-installer/tree/master/linux#prerequisites. @gdams Do you know if this is because Jenkins sorts this out by the use of a plugin?

@Haroon-Khel Gradle wrapper is being used. If Gradle is already present on the system, it's ignored.

Is this still relevant with the move to the linuxNew installer process?

For those watching, linuxNew has been renamed to linux


Add French translation for error handling

I must admit, it's a very rough translation - French is not my primary language (I have been taking classes for 5 years now) but it should be understandable to a French speaker.
The phrase translates literally to "No test could be found which corresponds to the pattern of Lua: %s".

Related: Olivine-Labs/busted#364


MongoDB tests do not run

Bug Summary:
Mongo DB tests do not run when testing the backend CI tests.
Steps To Reproduce

Push to master branch
Wait for build to finish

Expected behaviour
MongoDB tests should not error out but instead work as required.
Observed Behaviour
MongoDB tests fail

Duplicate #70


Kenneth l/otp 25 blog highlights

Draft of OTP 25 highlights blog post

If you want to preview the blog post you can use this gitpod link: https://gitpod.io/#https://github.com/KennethL/erlang-org/tree/kennethL/OTP-25_blog_highlights.
You need a gitpod account to do so.

Pushed a new version

New version where the table of contents has got links to the sections

Yet another correction of the table of contents

More corrections of TOC


First sample

Thanks alot @timclegg  for the detailed PR review , sorry for making you scan alots of files in one PR !! .
I did adjust as per the PR and for the broader ask of a terraform stack for devops + common components , we will add to our backlog and will check and release according to the Oracle Devrel guidlines.


Single-narrow-char char literals should be sign extended on platforms where char is signed.

The following issues no errors on x86_64-linux but 2 errors for aro:
_Static_assert('\xFF' == -1, "");

#if '\xFF' != -1
#error comparison failed
#endif

This only applies to single-character literals; the following currently works as expected:
_Static_assert('\x00\xFF' == 255, "");
_Static_assert('\xFF\xFF' == 65535, "");

This should be fixable by intCast'ing the value from char -> destination type (int or intmax_t depending on if we're in the parser or preprocessor) if all the conditions are met (char is signed for the target, it's a regular char literal, it's a single byte, value is >= 128)


You are hero(es)! Many thanks

I have no issues, I just wanted to thank you for making it easy for me to ditch vscode and go back to emacs!

Thank you :) Just putting together here the work of lots of people, Rust has a great community!


Allow Entities to be associated with event definition on UI

On Entity edit page add functionality to associate a event_definition.

#4294


Unable to write to volume after modeAllRWX removal

Describe the bug
As a result of the changes in https://github.com/ceph/ceph-csi/pull/3204
We are unable to  write to the volumes after mount, due to the following being removed
Mode: modeAllRWX,

Environment details

Image/version of Ceph CSI driver :
Helm chart version :
Kernel version :
Mounter used for mounting PVC (for cephFS its fuse or kernel. for rbd its
krbd or rbd-nbd) :
Kubernetes cluster version :
Ceph cluster version :

Steps to reproduce
Steps to reproduce the behavior:

Setup details: '...'
Deployment to trigger the issue '....'
See error

Actual results
Describe what happened
Expected behavior
A clear and concise description of what you expected to happen.
Logs
If the issue is in PVC creation, deletion, cloning please attach complete logs
of below containers.

csi-provisioner and csi-rbdplugin/csi-cephfsplugin container logs from the
provisioner pod.

If the issue is in PVC resize please attach complete logs of below containers.

csi-resizer and csi-rbdplugin/csi-cephfsplugin container logs from the
provisioner pod.

If the issue is in snapshot creation and deletion please attach complete logs
of below containers.

csi-snapshotter and csi-rbdplugin/csi-cephfsplugin container logs from the
provisioner pod.

If the issue is in PVC mounting please attach complete logs of below containers.

csi-rbdplugin/csi-cephfsplugin and driver-registrar container logs from
plugin pod from the node where the mount is failing.

if required attach dmesg logs.

Note:- If its a rbd issue please provide only rbd related logs, if its a
cephFS issue please provide cephFS logs.
Additional context
Add any other context about the problem here.
For example:
Any existing bug report which describe about the similar issue/behavior

@miguelhar
please add fsgroup to pod spec securitycontext like done here https://github.com/ceph/ceph-csi/issues/3342#issuecomment-1225854433.


add flippdf compatibility

Lists flippdf as compatible and adds a test.

hm, when one upload that to ngpdf.com the order of the (mirrored) text looks rather random. But it looks more like an ngpdf bug. But on the other side I doubt that anybody wants tagging when using this package ....

but if there is a bug with ngpdf, we should tell Boris even if the package as such isn't really useful with tagging.


The app won't do anything if it's stuck in the Master EXP or Material Drop windows

If the app gets through the bond point screen, but doesn't click enough to go through all the following windows, it gets stuck.
Here are JP screenshots of those screens:

I've got the NA images.
These are the parts I'm going to use:

Sadly there are 2 more screens, master level up and command code level up:

On NA I'm already max level.

I think we can use the big UP, it's the same in NA.

Or we can use the same icon used for bond up

Yes, but make the region bigger.

Your code change definitely works in JP for the 2 new handled windows.


Feature Request: Highlight node when hovering over item in list.

When hovering over the names on the left, the corresponding node in the graph should be highlighted.

Could you show which list or example @SgtPooki  ?
Actually to bind hovering of corresponding elements to the graph I used an ID selector on DOM elements, corresponding to node_Id.
Does it help?


[lexical-react] Bug Fix: useCharacterLimit AutoLink infinite loop bug #6662

Description
Bug Fix: useCharacterLimit AutoLink infinite loop bug #6662
Steps to Reproduce

add CharacterLimitPlugin and AutoLinkPlugin or LinkPlugin
type a link in overflow node

Current Behaviour:

when type a link in overflow node infinite loop in useCharacterLimit -> $wrapOverflowedNodes

New Behaviour:

autolink is ok in overflow node

Test plan

It does seem strange that this would be the best way to fix this bug. Ideally this wouldn't need to know anything about node types other than TextNode, ElementNode and DecoratorNode. Seems like a problem that is in the algorithm either here or in AutoLinkNode (e.g. if it's "grabbing" text from too far outside of its container). If we were to rewrite the character limit plugin in its own package without a react dependency it would be unexpected that it depends on the link package.

The analysis is quite correct, it's seems to be the fastest, but not the best solution, and I try to reconsider from the algorithm in the $wrapOverflowedNodes function, and think a way how to avoid judging directly by AutoLink node.


Calendar offset when view first loads after updating to 8.0

(Required) Version Number:
8.0.2
Description
After updating from 7.x.x to 8.0.2, the calendar is offset upon first load. This is after only making the needed delegate method name changes, so no code has actually changes functionality-wise since before the update.
When I tap or scroll at all on the calendar, the offset fixes itself, but only after some interaction has occurred.
Steps To Reproduce
For context, i'm not using any special features of the calendar view, simply creating a calendar and configuring as such:
return ConfigurationParameters(startDate: startDate, endDate: endDate, generateInDates: .forAllMonths, generateOutDates: .tillEndOfGrid)
Expected Behavior
The calendar should focus the current month in-bounds and not need a tap to re-center.
Additional Context
This screenshot shows a selected date, and i'm using scrollToDate() which seems has maybe been changed? The functionality before scrolled to the month that contained that date. Now it's scrolling specifically to that date.

@patchthecode Wondering if you have any input on this. I can't tell if this is a config problem or a bug, but if it's the latter, i'm willing to look for a fix.

probably the default scroling mode in has changed.
can you explicitly set it instead?
calendarView.scrollmode = .stopAtEachFrame

It think this is the syntax. I do not have the library infront of me right now
let me know

Looks like that worked!


python310Packages.meraki: 1.34.0 -> 1.36.0

Changelog: https://github.com/meraki/dashboard-api-python/releases/tag/1.36.0
Description of changes

Things done

Built on platform(s)

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

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

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

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

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

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

6 packages built:

meraki-cli
meraki-cli.dist
python310Packages.meraki
python310Packages.meraki.dist
python311Packages.meraki
python311Packages.meraki.dist


_default view on mobile devices

There seems to be a couple of issues in regard to the default display on mobile devices.
We can test this via browser stack.
iphone 14 v16 seems to look alright but we need to find a solution for the growing button column display.

We can mark this as complete?

No.... The growing button column needs to be addressed. Will change to RFC.

The helpModal does not stay within the viewport of the mapview when you use mobileview.

Not sure if it would work but perhaps we need to move the 'default' buttons. zoom in / zoom out / zoom to area / admin / logout to the right of the screen in a separate panel. That would remove 5 buttons from the plugin button panel?
Or we need to just add extra buttons next to the others in the mobile view?

I think the solution needs to involve some form of scrolling. Splitting the control based on the viewport will be hard and just kick the can down the line for another year when there's too many buttons on either side.

@simon-leech  Can you create an "admin view on mobile" issue for this?

@dbauszus-glx deleted the previous comment and moved to this issue for clarity
https://github.com/GEOLYTIX/xyz/issues/1337

Also noticed the tab view isn't accessible on mobile. This isn't great as you can click infoj checkboxes that should do something and they do nothing, but it isn't clear to the user.
We need to allow tabview on mobile to resolve

On Safari on iPhone, MAPP is unusable. Something is triggering constant refreshes that renders the page unusable. It doesn't seem to happen on Google Chrome on iPhone


Tracking issue: Create validator for values hashed by BLAKE2 algorithm

Original issue: https://github.com/RedHatInsights/insights-data-schemas/issues/62

Fixed in https://github.com/RedHatInsights/insights-data-schemas/pull/76

Fixed in https://github.com/RedHatInsights/insights-data-schemas/pull/76


Add Runtime package

Move Adaptive Runtime package to Dotnet, including tests.

Currently in branch: https://github.com/microsoft/botbuilder-dotnet/tree/trboehre/runtime
Manual daily build and push to feeds

Release blocked pending architecture resolution.  However, there is a package being produced which unblocks other dependent issues.

Release blocked pending architecture resolution.  However, there is a package being produced which unblocks other dependent issues.


⚠ Mobitopup has degraded performance

In 64a4a54, Mobitopup (https://napcard.voz.tech) experienced degraded performance:

HTTP code: 200
Response time: 5507 ms

Resolved: Mobitopup performance has improved in c95fbf2.


DAOSGCP-84 Automatic format storage with pool and container creation

We decided to combine changes from DAOSGCP-83 and DAOSGCP-84 into this single PR.