getState fetch without cache

Referred to #80 (see the code examples)
Every time a navigation is visible, it should be loaded from a remote api, without caching.
I want to use the marty fetch method with the nice promise for handling the status (pending, failed, done).
Could getState have a parameter (or exist a solution) that indicates when getState was called
on before initial render, or on store update ?
With that, the store fetch function can be called with cache enabled or disabled.

So, you want to know at what point in the component lifecycle getState was last called?

Yes, or did you see an other solution?

Hmm, not certain if I see the use case. I've just responded to the previous thread, not sure if that helps at all?

I use a similar idea at the moment, set once a timeout in componentDidMount which reset this.state.cache variable (not so nice but worked for me).
Cleaner would be if this.fetch without locally would automatically fetch remotely.

The problem with this approach is the component is responsible for determining when the state is re-fetched. If a component is listening to multiple stores then a change to a different store could inadvertently cause the state to be re-fetched. Any changes to the state should come from an action creator, the fetch should just be responsible for encapsulating the fact that state might not be there yet.
That said, locallydefaults to noop so if you really want this behaviour you just have to not implement locally.

Found a simple solution, completely store based:
Cache the result until it was loaded (done), on the the next getState -> getAllProjects call, it fetch remotely again.
    getInitialState: function () {
        return {
            cache: false,
            projects: []
        };
    },

    getAllProjects: function () {
        var result = this.fetch({
            id: 'all-projects',
            locally: function () {
                if (this.state.cache === false)
                    return undefined;

                if (this.hasAlreadyFetched('all-projects'))
                    return this.state.projects;
            },
            remotely: function () {
                self.state.cache = true;
                return ProjectApi.loadProjects();
            }
        });

        // disable cache on done / error
        if ( ! result.pending)
            this.state.cache = false;

        return result;
    }

That said, locally defaults to noop so if you really want this behaviour you just have to not implement locally.

Is that really the case? From my understanding the Fetch API works as follows:

Call locally().
If it returned undefined (just as by calling a noop) call remotely() to get the state into the local cache.
Call locally() again under the assumption that the state is now locally available.
If it returned undefined again (because noop) mark the FetchResult as failed. For good reason, btw.

So it would never work by not implementing locally(). Also: locally is listed as required in the docs.
I for one would be very happy if we could get this behavior without @rottmann`s workaround. ^_^

I did not use the Fetch API and the workaround anymore, replaced it by call an action in componentWillMount that load the ajax data with superagent.
It feels more "the flux way" and keep the stores clean.

@rottmann I disagree on that being more 'flux' - your views should not be directly responsible for triggering data loading. What if in the future you create another separate component that also needs the same data? You then have an issue whereby either two components trigger a data load, or you have to somehow make one component dependent on the other just to pass the data around. Stores should be a 'single source of truth'.

@rottmann Why did you leave the workaround you proposed? Is there any problem with it that i'm not seeing besides it needs to be coded on each store?

@oliverwoodings Wouldn't it still be a 'single source of truth' if the data loaded by the action in @rottmann's method is still put into the store? I am using a similar approach for some reports in part of my app where I want the data to be loaded every time a user see a certain component. I'm achieving this while still maintaining what I consider good flux practices by:

Action triggered in componentWillMount
Action calls state source method for reports store that gets data for that report
State source follows up with loaded data with source action creator that loads data into store with update method constant (handled by store using report-specific id passed from source)

In the component I use a store mixin that get uses a store method that does not use locally/remotely but gets based on the report-specific id -- initial state in the store in undefined. That way the store always has the 'single source of truth' but every time the component is mounted I know I will get fresh data.
In retrospect I guess I could use hasAlreadyFetched and forego the action in componentWillMount but I find dealing with fetch is a pain when I'm fine with initial state being undefined until a the component re-renders after the store updates.

@FoxxMD see the end of my last comment:
What if in the future you create another separate component that also needs the same data? You then have an issue whereby either two components trigger a data load in componentWillMount, or you have to somehow make one component dependent on the other just to pass the data around. Stores should be a 'single source of truth'.
It is fine for the initial state of the store to be undefined - that is what fetch is designed to manage. If you want to re-load the data whenever your component remounts you should dispatch an action in componentWillMount that causes the store to reset, something like this: Your store should be something like this:
var ReportStore = Marty.createStore({
  handlers: {
    setReports: Constants.REPORTS_LOADED,
    clearReports: Constants.CLEAR_REPORTS
  },
  loadReports: function (reports) {
    this.state = reports;
  },
  clearReports: function () {
    this.state = [];
  },
  getInitialState: function () {
    return {};
  },
  getReport: function (id) {
    return this.fetch({
      locally: function () {
        return this.state[id];
      },
      remotely: function () {
        return ReportAPI.getReports();
      }
    });
  }
});

And your component like this:
var ReportState = Marty.createStateMixin({
  listenTo: [ReportStore],
  getState: function () {
    return ReportStore.getReport(reportId)
  }
});
var Report = React.createClass({
  mixins: [ReportState],
  componentWillMount: function () {
    ReportActions.clearReports();
  },
  render: function () {
    this.state.when({
      pending: function () {
        return
Loading...
;
      },
      done: function (report) {
        return
{JSON.stringify(report)}
;
      },
      failed: function (err) {
        return
Sumthin fuccky
;
      }
    });
  }
});

In your example wouldn't the components still be dependent on each other since they are relying on one of them to clear the data?

No, because it doesn't matter if all of them clear the data

I still think this would be extremely useful to at least have an example of how to perform fetches remotely with no local cache.

I would rephrase that - you always need some sort of local cache, because the data rendered in a component needs to live in a store. What you specifically want is to refresh the data on the initial mount of a component, which is a little different, and requires something on the container API.

ref #354


python3Packages.screenlogicpy: init at 0.3.0

Motivation for this change
Python interface for Pentair Screenlogic devices
https://github.com/dieselrabbit/screenlogicpy
This is a Home Assistant dependency.
Things done

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

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

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Ensured that relevant documentation is up to date
[x] Fits CONTRIBUTING.md.

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

2 packages built:

python38Packages.screenlogicpy
python39Packages.screenlogicpy


add example for mxnet and pytorch

related-issue: #1366

/ok-to-test

Can you fix the directory structure?  There is. examples folder in examples /mxnet

Can you fix the directory structure? There is. examples folder in examples /mxnet

hi, johnugeorge  thanks for reviewing, it has been fixed

Are there any changes from the examples in respective repos?

repos

I just modified the mxnet structure.

I meant, are there any changes in code?

I meant, are there any changes in example code?

tf-operator/examples/tensorflow/tf_sample/Makefile
tf-operator/examples/tensorflow/distribution_strategy/estimator-API/Makefile
made a bit changes.

I meant, are there any changes in example code?

the only diff

CHANGED_FILES := $(shell git diff-files --relative=tensorflow/tf_sample)

CHANGED_FILES := $(shell git diff-files --relative=examples/tf_sample)

@googlebot I consent.

@andreyvelich thanks for reviewing, a new patch has been pushed.

@Jeffwan , thanks a lot! A new patch has been pushed.

@Jeffwan , thanks a lot! A new patch has been pushed.

Thanks! overall looks good to me. hold it for other reviewers. @johnugeorge @andreyvelich
/lgtm

Looks great
Thanks @DeliangFan
/approve


Add new functionality to documentation

Add the new functionality that was implemented to the README. This should be functions from #11 and #12.

duplicate of #23


Update overview-of-shared-computer-activation-for-office-365-proplus.md

Office Deployment Support Engineers have been seeing issues with customers activating Office 365 with single user licensing and then changing the installation to use SCA.  When this is done, the single user license is not automatically removed and the installation will continue to use the single user license.   this is not an issue until the license is up for renewal.   the office installation will see that that SCA is enabled, and then it will see that there is a single user license and it will not renew.   Action customers need to take is to "reset" office back to default installation state by removing the single user license.

Thank you for your suggested update to this article. We're in the process of making other updates to this article and will address this issue as part of those updates.


allow passing in custom state handler

Looks like I need a little enhancement to my previous changes. As i'm trying to integrate this into a react-styleguidist project it turns out there are basically 2 react tree's it uses. There's an outer one that renders the pages, then an inner one that is created via a ReactDOM.mount to mount the code example block. So in my scenario I need to be able to pass the context value from the outer tree and pass it into the inner tree. So I need to have the ability to pass in a custom context value or have access to the InspectorContext created from React.createContext. I've made both possible here.

New version published with this change.

👍  thank you ... appreciate it

Hmm...looks like something got goofed up with the release? I pulled in 1.1.0, but it doesn't look like it has the changes.

I think I did mess up the release. I'll push another one tonight. Sorry about that.

No worries 👍

I thought I didn't pull the newly merged changes before publishing the package but it looks like I did pull the changes. So I'm not quite sure why you are not seeing the changes :(

Just to confirm it wasn't something local I created a codesandbox pulling it in and yea its still not there.
https://codesandbox.io/s/jovial-haibt-v3t43?file=/src/App.js

@Raathigesh if I had to guess, it looks like what is published was the state at commit c4eecd3. In that commit the version was updated to 1.1.0. But that was done directly from the 1.0.0 tag. And I had noticed that the README was updated on master after the 1.0.0 tag to remove contributors list. And the version published on NPM still has the contributor list. Here's a visual to try to better show what appears to have happened.

Any chance you can bump to 1.1.1 and publish again?

Thanks for that. I did publish 1.1.1 now. Please check and let me know if that fixes the problem.

👍 That looks better 😀 Thank you ... appreciate it!


implement simd_neg and simd_fabs

This lets us run the puny portable-simd smoke test in the core test suite. ;)

@bors r+

:pushpin: Commit 0d4902f12f2630ababe056b167ad20eb0633bb01 has been approved by RalfJung

:hourglass: Testing commit 0d4902f12f2630ababe056b167ad20eb0633bb01 with merge a7151715348150c2925ade31c67d750ec2f742a1...

:sunny: Test successful - checks-actions
Approved by: RalfJung
Pushing a7151715348150c2925ade31c67d750ec2f742a1 to master...


[GHSA-cvx5-m8vg-vxgc] Arbitrary filesystem write access from velocity.

Updates

Description
References

Hi there @surli and @tmortagne! A community member has suggested an improvement to your security advisory. If approved, this change will affect the global advisory listed at github.com/advisories. It will not affect the version listed in your project repository.
This change will be reviewed by our highly-trained Security Curation Team. If you have thoughts or feedback, please share them in a comment here! If this PR has already been closed, you can start a new community contribution for this advisory

Ok thanks we'll see to improve our process then.
So I'm totally ok for merging this.


Fix missing CustomElement children

This PR fixes the following bugs:

Bug with missing CustomElement children

The motivation of these changes is that for now CustomElements is parsing incorrectly.
On line 18 we calling firstChild property:
for (let childNode = node.firstChild, nextNode; childNode; childNode = nextNode) {

However on line 25 we passing childNode itself, instead of childNode.parentNode (the parent of the node assigned to slot):
childNode.assignedNodes().forEach((childNode) => parseNodeTree(context, childNode, parent, root));

This cause missing firstChild property on line 18.
Furthermore, even if we pass childNode.parentNode, we are losing slot default content nodes as there is no place in code where we are parsing slot tree:
<slot>

Some default content

</slot>

We must parse children along with shadowRoot at the same point:
if (childNode.shadowRoot) {
    parseNodeTree(context, childNode.shadowRoot, container, root);
}

if (!isTextareaElement(childNode) && !isSVGElement(childNode) && !isSelectElement(childNode)) {
    parseNodeTree(context, childNode, container, root);
}

The reason for this is that children are already in LightDOM and it is not required to get assigned nodes through the slot element itself.
Also we must parse slot as default element, so we must remove this condition:
if (isSlotElement(childNode) && childNode.assignedNodes) {

Do you have a test case / repro of where this isn't working as expected? There was some recent changes to how web components are handled in https://github.com/niklasvh/html2canvas/commit/74696faf47c07b48b9c9587db0b999da1c08a8be


UCB: preparing for miner's change

Motivation

4th PR for #2902, general cleanup before adding new code
Changes

move beacon/sync interface to system package
use gomock for testing

Test Plan

unit tests
DevOps Notes

[x] This PR does not require configuration changes (e.g., environment variables, GitHub secrets, VM resources)
[x] This PR does not affect public APIs
[x] This PR does not rely on a new version of external services (PoET, elasticsearch, etc.)
[x] This PR does not make changes to log messages (which monitoring infrastructure may rely on)

bors merge


Possible fix for "FetchContent" builds, always use ONNXRUNTIME_PKG_DIR when defined.

I'm not sure what the purpose of _ONNXRUNTIME_EMBEDDED is, but the if branch checking it's existence in ext_ortlib.cmake uses the path ${CMAKE_SOURCE_DIR}/incluude/onnxruntime/core/session to attempt to find libs and headers for ORT.
When using  ${CMAKE_SOURCE_DIR}/../include/onnxruntime/core/session, unless you have the ONNX library in located in include/onnxruntime/core/session` above the project root (a bit of a random place?), it will fail to find headers and libs.
This will cause the variable ONNXRUNTIME_PKG_DIR to be ignored, but the user can set that variable to the root of ONNX runtime, causing it to actually find the lib.
My suggestion is to always use ${ONNXRUNTIME_PKG_DIR} when defined, as users like myself, can pull prebuilt packages (or build from source), find the libs and headers with CMake find package and then simply define ONNXRUNTIME_PKG_DIR prior to calling FetchContent.
I've left the previous branch in there, as a secondary check in case there's some need. But from a glance, we can just remove that branch as it's not really doing anything useful?

_ONNXRUNTIME_EMBEDDED  is a flag when ONNXRuntime build with -use-extensions flag, and ort-extensions will be compiled as ORT internal static library and linked.
I guess your projects take ort-extensions as a sub project which makes _ONNXRUNTIME_EMBEDDED be defined. And it triggers a buggy behavior of ort-extensions. It can be fixed by adding an ONNXRUNTIME flag check, like if ONNXRUNTIME_ROOT is defined here. https://github.com/microsoft/onnxruntime-extensions/blob/36a9c991a20a9fd9eb49909117e2528d64fdeda5/CMakeLists.txt#L157

_ONNXRUNTIME_EMBEDDED is a flag when ONNXRuntime build with -use-extensions flag, and ort-extensions will be compiled as ORT internal static library and linked.
I guess your projects take ort-extensions as a sub project which makes _ONNXRUNTIME_EMBEDDED be defined. And it triggers a buggy behavior of ort-extensions. It can be fixed by adding an ONNXRUNTIME flag check, like if ONNXRUNTIME_ROOT is defined here.
https://github.com/microsoft/onnxruntime-extensions/blob/36a9c991a20a9fd9eb49909117e2528d64fdeda5/CMakeLists.txt#L157

Thanks for replying. And yes, I am using FetchContent_Declare and FetchContent_MakeAvailable to pull this project. The not_top flag is set as it's the result of querying CMake's PARENT_DIRECTORY property. So it's kind of a limbo when the project is being compiled as part of a different project with FertchContent_*.
Also, checking if ONNXRUNTIME is set at that line won't do anything because ONNXRUNTIME is set by finding the library onnxruntime, which itself depends on ONNXRUNTIME_LIB_DIR defined in ext_ortlib.cmake that is using _ONNXRUNTIME_EMBEDDED.
By inverting the "if" checks in this PR, users can still figure that they can set ONNXRUNTIME_PKG_DIR to find the prebuild libraries, and you also get the _ONNXRUNTIME_EMBEDDED behaviour if it's not set.
@wenbingl let me know if that still sounds like a bad solution, I'm happy to think of an alternative.

here is where _ONNXRUNTIME_EMBEDDED start. https://github.com/microsoft/onnxruntime/blob/b1abb8c656c597bf221bd85682ae3d9e350d9aba/cmake/external/extensions.cmake#L41
the _ONNXRUNTIME_EMBEDDED means ort-extensions is embedded into ONNXRUNTIME source tree and be built as its sub module. So cmake encounters the line of not_top, the ONNXRUNTIME_ROOT should be already defined. And in your case, ONNXRUNTIME_ROOT is never defined, and _ONNXRUNTIME_EMBEDDED will be false.

Gotcha, pushed the changes required (reverted the changes to the ext_onnx.cmake file).

/azp run extensions.ci

Thanks for the fixing!


[Feature] External file watcher.

This includes:

inotify for Linux
kqueue for BSD
fsevents for OSX

Wontfix. Use operator= on need.


[725]-fix for profileObjFromServer.pageAccesses.filter is not a function

[#725 ] - Fix for  profileObjFromServer.pageAccesses.filter is not a function

@Caitlyn-Mills @azlam-abdulsalam
I have tested this fix for issue #725 with the suggested changes and have created a PR for the same. Please have a look.

Thanks @VertikaGoyal  for the PR. We will test it out and incorporate it in this release


[FEATURE] window :clickthrough property

Description of the requested feature
The :clickthrough property would allow one to click through the window. This would be very useful for small, bar-like widgets with revealer elements; currently a window holding such a widget sets its dimensions as if the revealer is already open, blocking the portion of the screen it occupies from receiving any mouse events.
When this property is set to true, mouse events that don't occur to an eww element that accepts them (inputs, buttons, eventboxes, and the like) get passed to the window beneath the eww window. This allows eww widgets to remain interact-able, while also gaining the ability to support complex layouts without sacrificing the base functionality of the system.
Proposed configuration syntax
:clickthrough would accept a boolean argument. setting it to true would cause the eww window to pass mouse events that don't occur on a button, eventbox, or other interact-able element to the window underneath.
Additional context
No response

As of my knowledge, there is no way to accomplish this under Wayland, or any other way of manipulating window properties I know of (layer shell GTK_LAYER_SHELL_KEYBOARD_MODE_NONE does not work for mouse inputs). As I do not use X11, I do not know what the state there is, but it might be available there.
Have not tested it, but you could set a custom CSS class if the widget is hidden, which limits the height of the widget.

I mean, as long as custom properties can be assigned to windows, what's to stop eww from handling click through rather than X11/Wayland?
An extremely janky solution would be to emulate the click under the window using something similar to xdotool.
But take my solution with a grain of salt, as I often have very little idea of what I'm actually talking about.

Well, that would theoretically be an option, however:

It is not possible to just simulate the clicking on another window at an OS/Compositor level because Wayland did not implement this feature universally (However, I think it works on X11 universally)for security reasons.  While some Compositors, e.g., sway have an API to get and set the cursor position (and click on windows etc.), others do not, like Hyprland. (So the solution with xdotool wouldn't work under most Wayland compositors)
For it to work under Wayland, you would need a complete rewrite of the Mouse handling of GTK and then still, you could only click on underlying eww windows

Waylyrics implemented desktop lyrics click passthrough using gtk4-rs. I tested the passthrough feature of waylyrics on Wayfire, and it worked well. So, is it possible for eww to support click passthrough as well?
https://github.com/user-attachments/assets/fbd2eab7-f57f-4a9d-9277-0a6ee797504a
https://github.com/waylyrics/waylyrics/commit/463b8a5ec0e2a9cd5ff9e937a236c18efbb40d14

eww currently uses gtk3, a gtk4 update would be extremely difficult, so i don't whether it will ever happen.

eww currently uses gtk3, a gtk4 update would be extremely difficult, so i don't whether it will ever happen.

It's not a gtkk4 feature. You may try set_pass_through from Gdk3


project field can now list project names

If CeilometerEnableTenantDiscovery is enabled, ceilometer samples
will contain project_name field, values from which are populated
in project field.
This change affects 2 dashboards, 'Cloud View' and 'Virtual Machine View',
only these allow switching between openstack projects.
If samples are missing project_name field, the regex for project
variable allows fallback to project field

I'm migrating this change over from https://github.com/infrawatch/dashboards/pull/59 to give us more time to test this and update documentation without adjusting the base dashboards right now, and so that I can close the PR in the dashboards repo and set it to read-only.
Going forward, we want to make the changes here and not have changes land in the dashboard repo and then result in a reversion here. All dashboard changes for the core dashboards should come into the service-telemetry-operator repo as we'll provide management for them in STF 1.5.4.

Did a little bit of testing today and here's how this looks with instances from multiple projects

Did you get a chance to test how it looks when the OSP has not been configured to send the project names? That seems to be the concern that is blocking the merge.

@csibbitt If ceilometer doesn't send project names it would fallback to project ids. I lost the testing environment long back but I can retest and post a screenshot if needed

@csibbitt If ceilometer doesn't send project names it would fallback to project ids. I lost the testing environment long back but I can retest and post a screenshot if needed

(I don't say this often, but) I believe you. :) That seems like the expected behavior to me. Thanks!

I will leave the do-not-merge label on this for now, but the team is welcome to discuss how to manage this going forward.
I tagged this for 1.5.5 (RHOCP 4.16 rebase) for now. I would suggest a tracking issue for this in order to provide the appropriate documentation and manual testing prior to release (QE).
Suggest checking with PM about level of effort to apply to have this landing in a future STF release, and how visible you'd like the feature to be, or whether this can land silently as an easter egg :)

Here's how this looks if tenant discovery is disabled


Remove EnvObj

What
Remove EnvObj.
Why
It was replaced by using EnvVal<TaggedVal<TagObject>> in #45 and is no longer needed.
Known limitations
N/A

Oops sorry missed it!


Update mobile-apps-data-in-space-overview.md

https://community.powerbi.com/t5/Mobile-Apps/Data-in-Space-is-not-working-with-iPad-iOS-15-7-and-uptodate-App/m-p/2802565#M7069

@paulinbar
Can you review the proposed changes? IMPORTANT: When the changes are ready for publication, add a #sign-off comment to signal that the PR is ready for the review team to merge.
#label:"aq-pr-triaged"
@MicrosoftDocs/public-repo-pr-review-team

Closing this PR as the requested change was taken care of in another PR.


migrate sources to metadataless format?

is not just that is impossible to work with iceberg, is also very annoying to work on branches :P
Can't we migrate to metadataless format?
I guess is available in all platforms now?

The problem is that currently, it's possible to update Metacello in very old Pharo because they can manage metadata full file tree.
If Metacello move to a Metadataless format we need to update the update scripts to maybe install the last metadatafull version of Metacello and only then the stable version of Metacello.

Please note that Metacello is a project that lives beyond the recent Pharo versions. What I mean is that, not only older Pharo versions might have a problem with metadataless, but also maybe a GemStone or a Squeak that are not the most recent. Going forward is cool, but playing nice with all kids on the playground is also cool (from the Metacello implementations point of view)

But this is a problem also for squeak and gemstone: you cannot properly work on branches with metadataful. And ss far as I know metacello already can work with metadataless in most versions.
Now, the history problem: is not a problem, there are tools to migrate sources with history. But yes, history resides in other place than a text file committed with each version. And yes, you need tooling if you want to use it from your dialect (Pharo already has them, but that's because we decided to "take the bull by the horns" and develop them).

Hi @krono
I think it's one of the reasons why it's with the "question" tag.
Can you explain the current situation of Metacello for squeak please?
Personally, I don't know much about Squeak so what is the current stable version? Would it be able to update Metacello if it was metadataless? If yes, for how many past versions of Squeak is it possible?
If the last versions are able to update Metacello if it was metadataless and if we are able to produce a script to first update to the latest metadatafull version then to the current metadataless version it could work no?


OpenZwave add-on crashes when trying to use new device type xml

I have a lock (kwikset 888) that requires a refresh of the lock when the alarm event comes in for manual lock, same as the 914c.xml.  I created a working 888.xml that works perfectly in ozw-admin running in local server mode on a linux machine.  it fixes the lock issue and works perfectly.
when i try to add this 888.xml to the kwikset folder and then attach it to the lock device type it updates the lock name to Smartcode 888 when the add-on is restarted.  It does not add the refresh to the ozwcache so refreshnode is required.  However, when I refresh node it crashes every time and will continue to crash the add-on every startup until i remove the device from manufcatuer_specific.xml.
It also crashes when I excldue and re-include and again continues to crash every startup until the device xml is no longer assosciated with the device id.
since it works perfectly with ozw-admin i assume the issue must be the add-on.
Crash Log: https://hastebin.com/carimihiyu.md

just want to add i switched to the qt-openzwave all in one docker and the xml is working perfect so the issue seems to definitely be with the add-on.

Probably the same as #1403 i switched to all in one also.


FIX: Urlpath for images taking local reference in download notebooks

Since, some of our URIs have only _static in their paths, so added _static to jupyter_static_file_path. Now the array is `jupyter_static_file_path = ["source/_static", "_static"]

thanks @AakashGfude

Hi @mmcky have made the change and created accompanying PRs in

lecture-source-py
lecture-source-jl
python_lecture_sandpit

datascience is not using this variable at the moment

thanks @AakashGfude


add style as prop to be passed to TextInput used within

Exposing the internal TextInput style prop on the DropDown so it can be styled by the consumer.

Much needed

@fateh999 thoughts?


快速开关机

Description of the new feature / enhancement
通过快捷键实现开关机
或
通过快捷键调出菜单（有 关机、重启、休眠、睡眠、锁定、注销 等功能），然后通过鼠标选择
Scenario when this would be used?
关机需要3步：
1. 单击开始按钮
2. 单击电源按钮
3. 单击关机
Supporting information
No response

Description of the new feature / enhancement
Switch the machine on and off by shortcut keys
or
Call up the menu (with functions of shutdown, restart, hibernate, sleep, lock, logout, etc.) through shortcut keys, and then select through the mouse
Scenario when this would be used?
Shutdown requires 3 steps:

Click the Start button
Click the power button
Click Shut Down

You can use PowerToys Run to execute these commands. (just make sure that the plug-in "system commands" is turned on)

I don't think we'd do this.  for turning on scenario, this could be heavy HW dependent which mean if there was a bug, we may not be able to repro it.
for off, Win11 menu has a quick power button and Win+X has easy access shutting down too.


Only draw if read

Check height and width to make sure map is ready to draw.

Can you use the early return pattern instead of wrapping everything with if?

converted to early return


feat: add kafka_broker_version output

Description
add a new kafka_broker_version as output to the module. Also Update examples and Readme
Release required?

[ ] No release
[ ] Patch release (x.x.X)
[x] Minor release (x.X.x)
[ ] Major release (X.x.x)

Release notes content

Run the pipeline
If the CI pipeline doesn't run when you create the PR, the PR requires a user with GitHub collaborators access to run the pipeline.
Run the CI pipeline when the PR is ready for review and you expect tests to pass. Add a comment to the PR with the following text:
/run pipeline

Checklist for reviewers

[ ] If relevant, a test for the change is included or updated with this PR.
[ ] If relevant, documentation for the change is included or updated with this PR.

For mergers

Use a conventional commit message to set the release level. Follow the guidelines.
Include information that users need to know about the PR in the commit message. The commit message becomes part of the GitHub release notes.
Use the Squash and merge option.

/run pipeline

:tada: This PR is included in version 2.3.0 :tada:
The release is available on:

GitHub release
v2.3.0

Your semantic-release bot :package::rocket:


Crash while using HttpClient HTTP/2 TLS

Reported by: https://t.me/ivan_ushakov
auto response = http_client_.CreateRequest()
    .http_version(userver::clients::http::HttpVersion::k2Tls)
    .headers({
        { std::string_view{"Authorization"}, bearer_token_ },
    })
    .data(notification)
    .post(url)
    .timeout(std::chrono::seconds{60})
    .perform();

Service logs, including the crash:
https://pastebin.com/MZ4kNa9U
pg_service_template is used, userver commit e1fbef5
Related: https://groups.google.com/g/wx-dev/c/6Wbz9FRrwM8
It seems that CURL_POLL_REMOVE handler should check that ease has already been removed while handling CURLMSG_DONE, and should not call pending write in this case.

Here are some additional details about this issue.
libcurl has special feature "Eyeballs" and in short it tries to connect to IPv6 address first (if available) with timeout 200ms (see log below) and after this timeout it starts regular IPv4 connection (with another timeout). If one of this attempt success, the other one is dropped
* Added api.sandbox.push.apple.com:443:2620:149:208:305::1f,2620:149:208:304::1f,2620:149:208:303::1f,<IP_ADDRESS>,<IP_ADDRESS>,<IP_ADDRESS> to DNS cache
* Hostname api.sandbox.push.apple.com was found in DNS cache
*   Trying [2620:149:208:305::1f]:443...

tskv	timestamp=2023-11-08T13:54:42.196195	level=INFO	module=socket ( userver/core/src/curl-ev/multi.cpp:362 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=socket multi=0x000060700009A870 what=2 si=(null) s=51
tskv	timestamp=2023-11-08T13:54:42.196271	level=INFO	module=socket ( userver/core/src/curl-ev/multi.cpp:386 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=new socket:51,0x0000613000080180
tskv	timestamp=2023-11-08T13:54:42.196308	level=INFO	module=SetFd ( userver/core/src/engine/ev/watcher/io_watcher.cpp:20 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=fd=51
tskv	timestamp=2023-11-08T13:54:42.196337	level=INFO	module=CancelSingle ( userver/core/src/engine/ev/watcher/io_watcher.cpp:117 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=CancelSingle self=0x0000613000080188,watcher=0x00006130000801F8
tskv	timestamp=2023-11-08T13:54:42.196372	level=INFO	module=CancelSingle ( userver/core/src/engine/ev/watcher/io_watcher.cpp:117 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=CancelSingle self=0x0000613000080188,watcher=0x0000613000080198
tskv	timestamp=2023-11-08T13:54:42.196410	level=INFO	module=CloseFd ( userver/core/src/engine/ev/watcher/io_watcher.cpp:130 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=close fd=-1

Here we get socket callback with new socket 51 for IPv6 connection. Now we get timer callback and create timeout for 200ms. Also notice that we create start_write_op for this connection
tskv	timestamp=2023-11-08T13:54:42.196463	level=INFO	module=start_write_op ( userver/core/src/curl-ev/multi.cpp:307 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=start_write_op si=0x0000613000080180
tskv	timestamp=2023-11-08T13:54:42.196500	level=INFO	module=Init ( userver/core/src/engine/ev/watcher.cpp:41 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=fd=51
tskv	timestamp=2023-11-08T13:54:42.196552	level=INFO	module=Start ( userver/core/src/engine/ev/watcher.hpp:109 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=self=0x00006130000801F8
tskv	timestamp=2023-11-08T13:54:42.196597	level=INFO	module=RunInEvLoopSync<userver::engine::ev::Watcher<ev_io>::Start()::<lambda()> > ( userver/core/src/engine/ev/thread_control.hpp:184 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=RunInEvLoopSync sync
tskv	timestamp=2023-11-08T13:54:42.196637	level=INFO	module=StartImpl ( userver/core/src/engine/ev/watcher.cpp:60 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=self=0x00006130000801F8 fd=51 is_running=false
tskv	timestamp=2023-11-08T13:54:42.196688	level=INFO	module=timer ( userver/core/src/curl-ev/multi.cpp:398 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=self=0x000060700009A870 timeout_ms=200

Now timeout happens for IPv6 and we start IPv4 connection with socket 52 and timeout 30 seconds
tskv	timestamp=2023-11-08T13:54:42.397546	level=INFO	module=OnEventTimeout ( userver/core/src/engine/ev/watcher/timer_watcher.cpp:33 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=self=0x0000613000060340
tskv	timestamp=2023-11-08T13:54:42.397775	level=INFO	module=Stop ( userver/core/src/engine/ev/watcher.hpp:116 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=self=0x0000613000060340
tskv	timestamp=2023-11-08T13:54:42.397839	level=INFO	module=RunInEvLoopSync<userver::engine::ev::Watcher<ev_timer>::Stop()::<lambda()> > ( userver/core/src/engine/ev/thread_control.hpp:184 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=RunInEvLoopSync sync
tskv	timestamp=2023-11-08T13:54:42.397917	level=INFO	module=handle_timeout ( userver/core/src/curl-ev/multi.cpp:336 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=handle_timeout:system:0 (Success)

*   Trying <IP_ADDRESS>:443...

tskv	timestamp=2023-11-08T13:54:42.398264	level=INFO	module=socket ( userver/core/src/curl-ev/multi.cpp:362 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=socket multi=0x000060700009A870 what=2 si=(null) s=52
tskv	timestamp=2023-11-08T13:54:42.398363	level=INFO	module=socket ( userver/core/src/curl-ev/multi.cpp:386 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=new socket:52,0x0000613000080340
tskv	timestamp=2023-11-08T13:54:42.398412	level=INFO	module=SetFd ( userver/core/src/engine/ev/watcher/io_watcher.cpp:20 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=fd=52
tskv	timestamp=2023-11-08T13:54:42.398441	level=INFO	module=CancelSingle ( userver/core/src/engine/ev/watcher/io_watcher.cpp:117 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=CancelSingle self=0x0000613000080348,watcher=0x00006130000803B8
tskv	timestamp=2023-11-08T13:54:42.398495	level=INFO	module=CancelSingle ( userver/core/src/engine/ev/watcher/io_watcher.cpp:117 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=CancelSingle self=0x0000613000080348,watcher=0x0000613000080358
tskv	timestamp=2023-11-08T13:54:42.398542	level=INFO	module=CloseFd ( userver/core/src/engine/ev/watcher/io_watcher.cpp:130 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=close fd=-1
tskv	timestamp=2023-11-08T13:54:42.398646	level=INFO	module=start_write_op ( userver/core/src/curl-ev/multi.cpp:307 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=start_write_op si=0x0000613000080340
tskv	timestamp=2023-11-08T13:54:42.398688	level=INFO	module=Init ( userver/core/src/engine/ev/watcher.cpp:41 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=fd=52
tskv	timestamp=2023-11-08T13:54:42.398718	level=INFO	module=Start ( userver/core/src/engine/ev/watcher.hpp:109 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=self=0x00006130000803B8
tskv	timestamp=2023-11-08T13:54:42.398748	level=INFO	module=RunInEvLoopSync<userver::engine::ev::Watcher<ev_io>::Start()::<lambda()> > ( userver/core/src/engine/ev/thread_control.hpp:184 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=RunInEvLoopSync sync
tskv	timestamp=2023-11-08T13:54:42.398776	level=INFO	module=StartImpl ( userver/core/src/engine/ev/watcher.cpp:60 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=self=0x00006130000803B8 fd=52 is_running=false
tskv	timestamp=2023-11-08T13:54:42.398821	level=INFO	module=timer ( userver/core/src/curl-ev/multi.cpp:398 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=self=0x000060700009A870 timeout_ms=29796

We get success connection for IPv4
tskv	timestamp=2023-11-08T13:54:42.572154	level=INFO	module=OnEventWrite ( userver/core/src/engine/ev/watcher/io_watcher.cpp:85 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=self=0x0000613000080348 events=2
tskv	timestamp=2023-11-08T13:54:42.572372	level=INFO	module=Stop ( userver/core/src/engine/ev/watcher.hpp:116 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=self=0x00006130000803B8
tskv	timestamp=2023-11-08T13:54:42.572432	level=INFO	module=RunInEvLoopSync<userver::engine::ev::Watcher<ev_io>::Stop()::<lambda()> > ( userver/core/src/engine/ev/thread_control.hpp:184 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=RunInEvLoopSync sync
tskv	timestamp=2023-11-08T13:54:42.572474	level=INFO	module=StopImpl ( userver/core/src/engine/ev/watcher.cpp:69 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=self=0x00006130000803B8 fd=52 is_running=true
tskv	timestamp=2023-11-08T13:54:42.572527	level=INFO	module=handle_socket_write ( userver/core/src/curl-ev/multi.cpp:315 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=handle_socket_write si=0x0000613000080340 ec=system:0 (Success) watcher=0x0000613000080348

* Connected to api.sandbox.push.apple.com (<IP_ADDRESS>) port 443 (#0)
* ALPN: offers h2,http/1.1
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs

tskv	timestamp=2023-11-08T13:54:42.638925	level=INFO	module=socket ( userver/core/src/curl-ev/multi.cpp:362 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=socket multi=0x000060700009A870 what=1 si=0x0000613000080340 s=52

So libcurl has winner and drops IPv6 connection attempt and closes socket 51. At this time we get socket callback with CURL_POLL_REMOVE (4). At this moment socket was already closed by libcurl so assert is fired inside Watcher
tskv	timestamp=2023-11-08T13:54:42.639311	level=INFO	module=socket ( userver/core/src/curl-ev/multi.cpp:362 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=socket multi=0x000060700009A870 what=4 si=0x0000613000080180 s=51
tskv	timestamp=2023-11-08T13:54:42.639364	level=INFO	module=socket ( userver/core/src/curl-ev/multi.cpp:371 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=CURL_POLL_REMOVE easy_handle:0x00006130000631D0,valid=-1
tskv	timestamp=2023-11-08T13:54:42.639400	level=INFO	module=monitor_socket ( userver/core/src/curl-ev/multi.cpp:247 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=si->watcher=0x0000613000080188
tskv	timestamp=2023-11-08T13:54:42.639431	level=INFO	module=CancelSingle ( userver/core/src/engine/ev/watcher/io_watcher.cpp:117 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=CancelSingle self=0x0000613000080188,watcher=0x00006130000801F8
tskv	timestamp=2023-11-08T13:54:42.639467	level=INFO	module=Stop ( userver/core/src/engine/ev/watcher.hpp:116 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=self=0x00006130000801F8
tskv	timestamp=2023-11-08T13:54:42.639498	level=INFO	module=RunInEvLoopSync<userver::engine::ev::Watcher<ev_io>::Stop()::<lambda()> > ( userver/core/src/engine/ev/thread_control.hpp:184 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=RunInEvLoopSync sync
tskv	timestamp=2023-11-08T13:54:42.639528	level=INFO	module=StopImpl ( userver/core/src/engine/ev/watcher.cpp:69 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=self=0x00006130000801F8 fd=51 is_running=true
tskv	timestamp=2023-11-08T13:54:42.639809	level=CRITICAL	module=UASSERT_failed ( userver/universal/src/utils/assert.cpp:27 ) 	task_id=0	thread_id=0x00007FA604A0E6C0	text=ERROR at userver/core/src/engine/ev/watcher.cpp:72:StopImpl. Assertion 'IsFdValid(w_.fd)' failed: Invalid fd=51

Current implementation does not allow to cancel write operation for socket 51. So even if we do this changes
diff --git a/core/src/curl-ev/multi.cpp b/core/src/curl-ev/multi.cpp
index 573f257b6..87617c0bb 100644
--- a/core/src/curl-ev/multi.cpp
+++ b/core/src/curl-ev/multi.cpp
@@ -272,7 +272,7 @@ bool multi::still_running() { return (pimpl_->still_running_ > 0); }

 void multi::start_read_op(socket_info* si) {
   LOG_TRACE() << "start_read_op si=" << si;
-
+  if (!si->watcher.HasFd()) return;
   si->pending_read_op = true;

   si->watcher.ReadAsync(
@@ -298,6 +298,7 @@ void multi::handle_socket_read(std::error_code err, socket_info* si) {

 void multi::start_write_op(socket_info* si) {
   LOG_TRACE() << "start_write_op si=" << si;
+  if (!si->watcher.HasFd()) return;
   si->pending_write_op = true;

   si->watcher.WriteAsync(
@@ -349,7 +350,7 @@ socket_info* multi::GetSocketInfo(native::curl_socket_t fd) {
 }

 // multi::assign() may throw when used on an invalid socket, shouldn't happen
-int multi::socket(native::CURL*, native::curl_socket_t s, int what, void* userp,
+int multi::socket(native::CURL* native_easy, native::curl_socket_t s, int what, void* userp,
                   void* socketp) noexcept {
   auto* self = static_cast<multi*>(userp);
   LOG_TRACE() << "socket multi=" << self << " what=" << what
@@ -359,9 +360,18 @@ int multi::socket(native::CURL*, native::curl_socket_t s, int what, void* userp,
     // stop listening for events
     if (socketp) {
       auto* si = static_cast<socket_info*>(socketp);
-      self->monitor_socket(si, CURL_POLL_NONE);
-      self->assign(s, nullptr);
       si->watcher.Release();
+      si->pending_read_op = false;
+      si->pending_write_op = false;
+      si->handle = nullptr;
+
+      easy* easy_handle = easy::from_native(native_easy);
+      auto it = self->pimpl_->easy_handles_.find(easy_handle);
+      if (it != self->pimpl_->easy_handles_.end()) {
+        self->pimpl_->easy_handles_.erase(it);
+      }
+
+      self->assign(s, nullptr);
     }
   } else if (socketp) {
     // change direction
diff --git a/core/src/engine/ev/watcher/io_watcher.cpp b/core/src/engine/ev/watcher/io_watcher.cpp
index 6dd9bee47..41ecc0ffc 100644
--- a/core/src/engine/ev/watcher/io_watcher.cpp
+++ b/core/src/engine/ev/watcher/io_watcher.cpp
@@ -56,6 +56,10 @@ void IoWatcher::WriteAsync(Callback cb) {

 void IoWatcher::OnEventRead(struct ev_loop*, ev_io* io, int events) noexcept {
   auto* self = static_cast<IoWatcher*>(io->data);
+  if (!self->HasFd()) {
+    return;
+  }
+
   self->watcher_read_.Stop();

   if (events & EV_READ) {
@@ -80,6 +84,10 @@ void IoWatcher::CallReadCb(std::error_code ec) {

 void IoWatcher::OnEventWrite(struct ev_loop*, ev_io* io, int events) noexcept {
   auto* self = static_cast<IoWatcher*>(io->data);
+  if (!self->HasFd()) {
+    return;
+  }
+
   self->watcher_write_.Stop();

   if (events & EV_WRITE) {

We still get assert fired but in another place when try to terminate application and process write operation from queue with already closed socket 51
1d3de1223cd6b6	span_id=760fc5e31016548a	parent_id=	stopwatch_name=component_stop	total_time=0.230889	span_ref_type=child	stopwatch_units=ms	start_timestamp=1699595299.663158	link=44f91efdef3b4378b9f2bf9cecd5ca34	component_name=testsuite-support
ERROR at userver/core/src/engine/ev/watcher.cpp:68:StopImpl. Assertion 'IsFdValid(w_.fd)' failed: Invalid fd=51. Stacktrace:
 0# userver::utils::impl::UASSERT_failed(std::basic_string_view<char, std::char_traits<char> >, char const*, unsigned int, char const*, std::basic_string_view<char, std::char_traits<char> >) at userver/universal/src/utils/assert.cpp:20
 1# userver::engine::ev::Watcher<ev_io>::StopImpl() at userver/core/src/engine/ev/watcher.cpp:69
 2# userver::engine::ev::Watcher<ev_io>::Stop()::{lambda()#1}::operator()() const at userver/core/src/engine/ev/watcher.hpp:114
 3# userver::engine::ev::impl::CallerOwnedPayloadSync<userver::engine::ev::Watcher<ev_io>::Stop()::{lambda()#1}>::DoPerformAndRelease() at userver/core/src/engine/ev/thread_control.hpp:56
 4# userver::engine::ev::SingleShotAsyncPayload<userver::engine::ev::impl::CallerOwnedPayloadSync<userver::engine::ev::Watcher<ev_io>::Stop()::{lambda()#1}> >::PerformAndReleaseImpl(userver::engine::ev::AsyncPayloadBase&) at userver/core/src/engine/ev/async_payload_base.hpp:60
 5# userver::engine::ev::AsyncPayloadBase::PerformAndRelease() at userver/core/src/engine/ev/async_payload_base.hpp:22
 6# userver::engine::ev::Thread::UpdateLoopWatcherImpl() at userver/core/src/engine/ev/thread.cpp:243
 7# userver::engine::ev::Thread::UpdateLoopWatcher(ev_loop*, ev_async*, int) at userver/core/src/engine/ev/thread.cpp:225
 8# ev_invoke_pending in /lib/x86_64-linux-gnu/libev.so.4
 9# ev_run in /lib/x86_64-linux-gnu/libev.so.4
10# userver::engine::ev::Thread::RunEvLoop() at userver/core/src/engine/ev/thread.cpp:206
11# userver::engine::ev::Thread::Start()::{lambda()#1}::operator()() const at userver/core/src/engine/ev/thread.cpp:187
12# void std::__invoke_impl<void, userver::engine::ev::Thread::Start()::{lambda()#1}>(std::__invoke_other, userver::engine::ev::Thread::Start()::{lambda()#1}&&) at /usr/include/c++/12/bits/invoke.h:61
13# std::__invoke_result<userver::engine::ev::Thread::Start()::{lambda()#1}>::type std::__invoke<userver::engine::ev::Thread::Start()::{lambda()#1}>(userver::engine::ev::Thread::Start()::{lambda()#1}&&) at /usr/include/c++/12/bits/invoke.h:97
14# void std::thread::_Invoker<std::tuple<userver::engine::ev::Thread::Start()::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) at /usr/include/c++/12/bits/std_thread.h:252
15# std::thread::_Invoker<std::tuple<userver::engine::ev::Thread::Start()::{lambda()#1}> >::operator()() at /usr/include/c++/12/bits/std_thread.h:259
16# std::thread::_State_impl<std::thread::_Invoker<std::tuple<userver::engine::ev::Thread::Start()::{lambda()#1}> > >::_M_run() at /usr/include/c++/12/bits/std_thread.h:210
17# 0x00007F66208D44A3 in /lib/x86_64-linux-gnu/libstdc++.so.6
18# 0x00007F661FEA8044 in /lib/x86_64-linux-gnu/libc.so.6
19# 0x00007F661FF2861C in /lib/x86_64-linux-gnu/libc.so.6

Aborted

Temporary solution could be to to force using IPv4 on request so "Eyeballs" will not work:
auto response = http_client_.CreateRequest()
    .use_ipv4()

Hi @ivan-ushakov! Thank you for the thorough explanation.

This confuses me:
if (and that's a big if actually) i understand what libcurl does here correctly, it has to call the provided socket close callback before invoking socket callback with CURL_POLL_REMOVE, and that socket close callback is the one that calls close() on the file descriptor, which in turn leads to the ASSERT down the road.
However, in the socket close callback we assert that neither read nor write is pending:
https://github.com/userver-framework/userver/blob/e1fbef56a94052f37e9fcde7d6fb91590431d7d2/core/src/curl-ev/multi.cpp#L131-L136
, and the IoWatcher::Cancel you are seeing in the backtrace is only called when there is a pending operation:
https://github.com/userver-framework/userver/blob/e1fbef56a94052f37e9fcde7d6fb91590431d7d2/core/src/curl-ev/multi.cpp#L241-L243
So i'm failing to understand how the socket could be closed before socket callback is invoked, and not trigger the assert in socket close callback.

Do you by chance have an url that reliable reproduces the Eyeballs behavior in question (IPv6 connect timeout)?
Also, what version of libcurl do you link against?

$ curl --version
curl 7.88.1 (x86_64-pc-linux-gnu) libcurl/7.88.1 OpenSSL/3.0.11 zlib/1.2.13 brotli/1.0.9 zstd/1.5.4 libidn2/2.3.3 libpsl/0.21.2 (+libidn2/2.3.3) libssh2/1.10.0 nghttp2/1.52.0 librtmp/2.3 OpenLDAP/2.5.13
Release-Date: 2023-02-20
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL threadsafe TLS-SRP UnixSockets zstd

URL: https://api.sandbox.push.apple.com

Could you please add debug symbols into your libcurl installation/build and backtrace all close syscalls when reproducing the issue?
Backtracing could be done via either strace -f -e 'close' -k -p <pid>, or manually by debugger breakpoints.

@ivan-ushakov kindly requesting your support here

@ivan-ushakov kindly requesting your support here

I'm a bit busy but will do this during the week

@itrofimow
logs.zip

I believe this is libcurl bug.
I can reproduce this reliably with curl 7.88.0 all the way to 8.1.2, with 8.2.0 working again.
From this blog post https://daniel.haxx.se/blog/2023/04/28/curl-8-is-faster/ we can gather, that after 7.86.0 a massive refactoring of libcurl internals started:

As a baseline version, I selected curl 7.86.0, which was released in October 2022. The last curl release we shipped before Stefan’s refactor work started. Should work as a suitable before/after comparison.

, and the refactoring mentioned is this one: https://daniel.haxx.se/blog/2022/11/15/connection-filters-in-curl/

I had a look at the 7.87.0 vs 7.86.0 diff, and the aforementioned connection-filters are indeed there.
The diff between 7.88.0 and 7.87.0 (which i tend to believe introduced the behavior in question) is Showing 2,000 changed files with 25,700 additions and 14,675 deletions. , and i have no idea what exactly changed there, however seeing commits like this https://github.com/curl/curl/commit/34cdcb9b96a9aa3995323b74c3dd5ab19013a707 (which i think could be somewhat related, but not the exact issue in question) landed in 8.4.0 doesn't make me eager to jump onto recent libcurl versions just yet.

@ivan-ushakov could you please give libcurl-7.86.0 (or 8.2.0 for that matter) a try?
It is actually surprisingly easy to build it from sources (on Ubuntu 22.0.04 at least):

Clone the curl repo
git checkout curl-7_86_0
autoreconf -fi
./configure --with-openssl --prefix=
make install -j

For testing purposes one could just LD_PRELOAD the resulting shared library

Update: on 7.87.0 curl hangs for 30 seconds for me.

The relevant parts of behavior on 8.2.0 (works):
276388      0.341136 close(10)          = 0
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_close+0x3b) [0x11517b]
 > /home/itrofimow/work/userver/build/userver/core/userver-core-unittest(userver::curl::easy::closesocket(void*, int)+0x33) [0x1a8d623]
 > /home/itrofimow/work/curl_installation/lib/libcurl.so.4.8.0(socket_close+0x70) [0x210ab]
 > /home/itrofimow/work/curl_installation/lib/libcurl.so.4.8.0(cf_socket_close+0x1a7) [0x220c0]
 > /home/itrofimow/work/curl_installation/lib/libcurl.so.4.8.0(cf_socket_destroy+0x33) [0x22184]
 > /home/itrofimow/work/curl_installation/lib/libcurl.so.4.8.0(Curl_conn_cf_discard_chain+0x66) [0x24d2a]
 > /home/itrofimow/work/curl_installation/lib/libcurl.so.4.8.0(baller_close+0x3f) [0x28457]
 > /home/itrofimow/work/curl_installation/lib/libcurl.so.4.8.0(baller_free+0x2e) [0x28488]
...
 > /home/itrofimow/work/curl_installation/lib/libcurl.so.4.8.0(curl_multi_socket_action+0x51) [0x7f43b]

and 7.88 (breaks):
240505      0.301337 close(10)          = 0
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_close+0x3b) [0x11517b]
 > /home/itrofimow/work/curl_installation/lib/libcurl.so.4.8.0(curl_dbg_sclose+0x20) [0x667c0]
 > /home/itrofimow/work/curl_installation/lib/libcurl.so.4.8.0(cf_socket_close+0x190) [0x19c33]
 > /home/itrofimow/work/curl_installation/lib/libcurl.so.4.8.0(cf_socket_destroy+0x33) [0x19cd1]
 > /home/itrofimow/work/curl_installation/lib/libcurl.so.4.8.0(Curl_conn_cf_discard_chain+0x66) [0x1c62d]
 > /home/itrofimow/work/curl_installation/lib/libcurl.so.4.8.0(baller_close+0x3f) [0x1fca7]
 > /home/itrofimow/work/curl_installation/lib/libcurl.so.4.8.0(baller_free+0x2e) [0x1fcd8]
...
 > /home/itrofimow/work/curl_installation/lib/libcurl.so.4.8.0(curl_multi_socket_action+0x51) [0x757a9]

So yeah, pretty sure libcurl messed up and didn't invoke the callback provided.

Happy to hear that libcurl upgrade resolved the issue.
Thank you for the elaborate report.
I'll leave this open till we document this unfortunate behavior somewhere.

userver cmake scripts now prohibit using curl in the buggy version range


Penguasa Misteri/Lord of the mysteries (Chapter is empty)

Source information
IndoWebNovel
Steps to reproduce

Expected behavior

Actual behavior

LNReader version
<IP_ADDRESS>
Android version
Android 13
Other details
chapter is empty, but in WebView it's fine at all
Acknowledgements

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

has been fixed

Done in https://github.com/LNReader/lnreader-plugins/pull/882 (beta app)


Could you add my project to Library Usage section in your README?

Hello grafov.
I've made an webpage that showing m3u8 format of URL which user inserted. It is built on your parser. If you don't mind, could you add my project to Library Usage section in your README?
It would be honor to me! :)
Here is the my project link and screenshot.
https://github.com/jeongmin/m3u8-reader

I don't see a problem with this, are you able to provide a PR?

I created pull request about this. Thanks! :)


test: move IsUsingBuiltinNodeDrainKey from utils

Move IsUsingBuiltinNodeDrainKey from utils
to migration_test to make utils shorter.
Signed-off-by: Ben Oukhanov<EMAIL_ADDRESS>Release note:
NONE

/lgtm
/ok-to-test

/lgtm
/ok-to-test
I wonder if I just hit a rate limit...

@maya-r It should be in queue, no? shouldn't be a rate limiter.


Is API backend proprietary?

Does API endpoint that is used by TonWeb wallet open source?

pyTON with webserver serves as backend (in particular toncenter.com runs pyTON)
Current sources a little bit outdated: user need to recompile libtonlibjson from https://github.com/newton-blockchain/ton.
In a week or two pyTONv3 (fully compatible but more stable and with more features) will be released.


Responsiveness of the navigation menu

I would like to suggest changes in the responsiveness of the nav-menu.
After the nav-bar changes into a drop-down menu, the following stuffs appears.

The icon and menu are far away. This seems a bit problematic.
Either we can shift the icon to the right or shrink the menu to the left.
@khannakshat7 @CodesbyUnnati Can I work on this under gssoc21 ?
If yes, comment with right or left.
Originally posted by @rakup444 in https://github.com/khannakshat7/Elektra/issues/30#issuecomment-796432468

Hey @khannakshat7 I would like to work on this issue. Please assign this issue to me.

@rakup444 You can try both whatever seems good then we can discuss

Ok
Thank you

Hi, do you still need help with this responsive nav menu?, Looking at the site it looks like there's still some styling and adjustments to do.
My thoughts -
When you open the mobile nav menu on desktop simulating mobile/small view width and THEN expand the view from mobile to a larger width the mobile nav overlay persists, this overlay should disappear as you expand the width from mobile/small view width to larger view width.
Also it may look better if you centre the menu items within the mobile menu overlay rather them being shifted to the left? For example take a look my portfolio and click the hamburger icon to view the menu. https://darsh2987.github.io/portfolio-2020/
thanks


⚠ Samsung has degraded performance

In 72f6258, Samsung (https://samsung.com) experienced degraded performance:

HTTP code: 200
Response time: 2729 ms

Resolved: Samsung performance has improved in 477f5cb.


Help to develop etiquete in regards to critical review feedback.

Getting critical feedback about your code from random strangers from the Internet will naturally not always go well with emotions and egos of parties involved. Sometimes, the reviewer will be wrong about their judgment making them look unfair etc.
It would be good to establish an etiquette and set of standards, to make everyone involved feel more comfortable.

Judge the code, not people
Remember that one of the main goals is to improve the ecosystem
If possible, report the feedback upstream so the issues can be addressed
If possible, prioritize re-reviewing newer versions of crates that addressed reported issue

Judge the code, not the people

Although this is probably already the goal during reviews, it's natural for people to feel like maybe they are being judged when all of the comments are negative, or e.g. when the conclusion is like "overall I'd give this a entire effort a big thumbs down".
Perhaps it would be good to at least start and finish with some friendly comments that help make the intentions clear. Then maybe at the end, a summary of some of the main pros/cons observed.
Another thing, I've seen one or two reviews where the author answers some of the feedback, or even implements fixes. I think it's important to thank and encourage them for this.

Start out the review by stating the requirements of the reviewed code.  This builds rapport with the stranger who is receiving your review.  Relate all feedback to the code's requirements.
Bug reports are easy to accept.  To report a bug, suggest a new test case that exercises the bug.  Explain a potential fix if you want.
Design critique can be hard to accept.  See if you can change your design critique into a bug report by suggesting a new test that demonstrates the shortcoming.
If the design problem is not testable, then you need to explain why the code will better meet the requirements after the change.
Start out by stating which of the requirements you think the code currently meets.  Then explain how the code will better meet specific requirements with specific changes.  Watch out for comments on things that are not in the requirements.  A comment like "users will will expect functionX to do Y but it doesn't and they will be confused" may not be received well if the requirements don't include "easy to use".  Other requirements that are often missing are "easy to learn", "easy to maintain", and "modular".  Avoid commenting on things that are not in the requirements but you think should be.  Instead, first suggest adding them to the requirements.
Teaching is an important part of code reviews.  When you suggest a change, try to link to background material so the code author can learn more.

https://rust-lang.github.io/api-guidelines/
https://doc.rust-lang.org/1.47.0/book/
https://doc.rust-lang.org/rust-by-example/


Automated Package Upgrade

:tada: This PR is included in version 9.1.12 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


[wip] ensure docker image builds on PRs

Resolves #6849

Messages

:book:
:sparkles: Thanks for your contribution to Shields, @calebcartwright!

  Generated by :no_entry_sign: dangerJS against 63d279d3c4d130ba6b23a32b34570b01a18a6179

Went extra cautious and validated the job would indeed fail if the build failed, https://github.com/badges/shields/pull/7019/checks?check_run_id=3593513925 for 05c89f811ffa9885e396699337e84a3d84c77e6f


WarmUp is not warming up

WarminUp seems to not warm up properly or am I missing something?
main() async {
  await Executor().warmUp();
  final lines = await loadFile();

  print("First Try");
  DateTime now = DateTime.now();
  for (final line in lines) {
    Executor().execute(arg1: line, fun1: callback).then((_) => print(
        "Paralel time: ${DateTime.now().difference(now).inMilliseconds}"));
  }

  // Wait enough seconds to make sure first try ended
  Future.delayed(Duration(seconds: 10));
  print("Second try");
  now = DateTime.now();
  for (final line in lines) {
    Executor().execute(arg1: line, fun1: callback).then((_) => print(
        "Paralel time: ${DateTime.now().difference(now).inMilliseconds}"));
  }
}

23 has been spawned
initialized
Load done
added task with number -9007199254740992
isolate with task number -9007199254740992 begins work
added task with number -9007199254740991
isolate with task number -9007199254740991 begins work
added task with number -9007199254740990
isolate with task number -9007199254740990 begins work
added task with number -9007199254740989
isolate with task number -9007199254740989 begins work
added task with number -9007199254740988
isolate with task number -9007199254740988 begins work
added task with number -9007199254740987
isolate with task number -9007199254740987 begins work
added task with number -9007199254740986
isolate with task number -9007199254740986 begins work
added task with number -9007199254740985
isolate with task number -9007199254740985 begins work
added task with number -9007199254740984
isolate with task number -9007199254740984 begins work
added task with number -9007199254740983
isolate with task number -9007199254740983 begins work
added task with number -9007199254740982
isolate with task number -9007199254740982 begins work
isolate with task number -9007199254740985 ends work
Paralel time: 4060
isolate with task number -9007199254740982 ends work
Paralel time: 4069
isolate with task number -9007199254740983 ends work
Paralel time: 4079
isolate with task number -9007199254740986 ends work
Paralel time: 4094
isolate with task number -9007199254740990 ends work
Paralel time: 4097
isolate with task number -9007199254740984 ends work
Paralel time: 4104
isolate with task number -9007199254740992 ends work
Paralel time: 4122
isolate with task number -9007199254740987 ends work
Paralel time: 4146
isolate with task number -9007199254740991 ends work
Paralel time: 4157
isolate with task number -9007199254740989 ends work
Paralel time: 5002
isolate with task number -9007199254740988 ends work
Paralel time: 5170
New test
added task with number -9007199254740981
isolate with task number -9007199254740981 begins work
added task with number -9007199254740980
isolate with task number -9007199254740980 begins work
added task with number -9007199254740979
isolate with task number -9007199254740979 begins work
added task with number -9007199254740978
isolate with task number -9007199254740978 begins work
added task with number -9007199254740977
isolate with task number -9007199254740977 begins work
added task with number -9007199254740976
isolate with task number -9007199254740976 begins work
added task with number -9007199254740975
isolate with task number -9007199254740975 begins work
added task with number -9007199254740974
isolate with task number -9007199254740974 begins work
added task with number -9007199254740973
isolate with task number -9007199254740973 begins work
added task with number -9007199254740972
isolate with task number -9007199254740972 begins work
added task with number -9007199254740971
isolate with task number -9007199254740971 begins work
isolate with task number -9007199254740975 ends work
Paralel time: 20
isolate with task number -9007199254740974 ends work
Paralel time: 25
isolate with task number -9007199254740972 ends work
Paralel time: 34
isolate with task number -9007199254740971 ends work
Paralel time: 35
isolate with task number -9007199254740979 ends work
Paralel time: 36
isolate with task number -9007199254740973 ends work
Paralel time: 74
isolate with task number -9007199254740981 ends work
Paralel time: 93
isolate with task number -9007199254740976 ends work
Paralel time: 124
isolate with task number -9007199254740980 ends work
Paralel time: 143
isolate with task number -9007199254740978 ends work
Paralel time: 1011
isolate with task number -9007199254740977 ends work
Paralel time: 1171

Same exact work.
First try took 5170 ms.
And Second try took 1171 ms.
It seems that the Executor has still to warm up but it's supposed to be up..
Or am I missing something?

Warming up means isolates already spawned and you don't have to wait until Isolate bacame capable to receive messages and run something. Also, I think if you run same code twice with same arguments with no external dependencies it can be actually dartVM runtime optimization. Try another tests with different functions. You can figure out what does warmup means by looking at the source code.


Fixed issue with drag element being displayed with an offset when used with fixed header

When the body element's getBoundingClientRect top and left is not 0, such as with a fixed header, the drag element is displayed with an offset and is not under the mouse cursor.

Coverage decreased (-0.1%) to 36.006% when pulling e9110c879194de565b5b394e4a9c05efbc9949f7 on riyunoa:offsetfix into 1cf9dfc720da0322bbea149f15d25a3e66fc1364 on angular-ui-tree:master.


Error: player started when engine not running

Hello,
first of all - great work with AudioKit, amazing piece of software.
After upgrading to XCode 9 & AK 4, I have an issue I cannot resolve and would like for your help.
My code is simple, here is how I start the engine in view controller
mixer = AKMixer()

AudioKit.output = mixer
AudioKit.start()

Than on button click (many buttons, many sounds) I connect player to mixer and play it
let file = try! AKAudioFile(readFileName: fileName, baseDir: .resources)
let plr = try! AKAudioPlayer(file: file!)

plr?.connect(to: mixer)
plr?.play()

Problem occurs after random couple of button clicks (might be 5, might be 10), doesn't have to be quick & chaotic, it can be one by one.
App crashes and says

*** Terminating app due to uncaught exception 'com.apple.coreaudio.avfaudio', reason: 'player started when engine not running'

I am in a dead end and can't find a reason why, engine is running just before plr.play().
One thing I noticed is that crash takes a while. I hit the button app freeze & crash outputs with 2-3 sec delay.
Any help much appreciated, cheers.
Sz

This is the bug found by ryanfrancesconi.  If a mixer has 0 input connections when AudioKit is started, you can't make any subsequent connections while it's running.  A workaround is to stop AudioKit prior to making connections to "empty mixers", then restarting AudioKit after the connection has been made.

Thanks for such a quick response. I will test in a bit but already I can say I can connect players to my mixer, it fails after couple connections (and .play() causes crash not .connect(to:)), not immediately. Although I need to test your feedback first, cheers.

@dave234, a workaround you suggested works but AudioKit.stop() causes all active players stop and I want them to continue fluently, is there another trick I can use?
I also tried to look for ryanfrancesconi bug but cannot find it in the archive here or Google groups, if you could share link maybe it would limit size of this thread.
Once again thanks for help, cheers.

I've been meaning to address this issue, I speculate that it's an internal optimization of the mixer to just disable itself completely if there aren't any connections.  One way to get around this is to just connect a throwaway generator like AVAudioUnitSampler to the mixer before starting the engine.  I haven't tested this so if you do try it, let us know if it works.

@dave234 thank you very much for your help & time. I think I have solution to my problem.
Apparently there is a limit of items (at least AKAudioPlayer) added to the mixer and to clear the capacity I have to disconnect players once they're done. Every time I connect & play new player I set completionHandler and in it I disconnect from mixer.
It works but still rapid creation of new players kills the app I limited number of active players to 7.
Again thanks for help and maybe this will save someones time.

So this is a known issue/bug, there is a workaround.  The mixer will automatically make more inputs available when the setOutput(to: mixer) function is used rather than the connect(to: mixer) syntax.  You can solve this by creating a dummy node, set it's output to the mixer, then remove it.  Then there will be another input ready to be connected to.
if let mixer = node.inputNode as? AVAudioMixerNode {
if mixer.nextAvailableInputBus >= mixer.numberOfInputs {
let dummy = AVAudioMixerNode()
dummy.setOutput(to: node)
dummy.disconnectOutput()
}
}
Then make your connection using the regular syntax.

Thank you! I will test and confirm, cheers.

Also, you could just use setOutput, but it will clear any other output connections from that node.

To be honest I can't make it work, here is code
let dummy = AKNode()
dummy.setOutput(to: mixer)
dummy.disconnectOutput()

mixer is AKMixer. This code throws error

*** Terminating app due to uncaught exception 'com.apple.coreaudio.avfaudio', reason: 'required condition is false: node != nil'

BTW I have acceptable version now working, solution described in earlier post.

I think AKNode is supposed to be an abstract class.  Try using AVAudioMixerNode instead.

@szczepanwaclaw I've made a PR addressing this issue, let us know if it fixes it.  It uses the dummy node technique described above.  Let us know if it's still broken.
https://github.com/AudioKit/AudioKit/pull/1068

Reopen if necessary.

@dave234 I will for sure but know I am offline for a while, cheers.


validation cycles

Thank you for providing this beautiful template.
I was wondering where I'd ideally put validation cycles, say every 1000 iterations, in this structure. Any recommendations?

Hello,
Yes you can,
https://github.com/MrGemy95/Tensorflow-Project-Template/blob/master/base/base_train.py
you can make afunction called validate_epoch ok?!
Then call it in function train after self.train_epoch()


Clean exit and better resume points

This PR has introduce two new features:

We now wait for each indexer to process their block before exiting Marconi. The wait has a 3 minutes timeout.
We keep track of all the chainpoints when we flush on disk. I wanted to keep only one event first, but as we flush the whole memory at the moment and as we want to be able to resume from at least 1 non volatile point, I had to do so.

This PR doesn't revert the intersection computation. It should be done if we want to continue with this indexer design.
It isn't a problem for side chain as the epoch state indexer will lag behind anyhow and will be the one that will be used when resuming.

Pre-submit checklist:

Branch

[ ] Tests are provided (if possible)
[x] Commit sequence broadly makes sense and have useful messages
[ ] Important changes are reflected in changelog.d of the affected packages
[ ] Relevant tickets are mentioned in commit messages

PR

[ ] (For external contributions) Corresponding issue exists and is linked in the description
[x] Targeting main unless this is a cherry-pick backport
[x] Self-reviewed the diff
[x] Useful pull request description
[ ] If relevant, reference the ADR in the PR and reference the PR in the ADR
[x] Reviewer requested

do you know what the behaviour on forced exit is?

 Uncovered so it might be a mess if it happens in the middle of a flush or while writing the ledger state. ^C behave as described in the PR description.

or signal 15 as a system would on shutdown. Just wondered if would still attempt some recovery. Of course there is no guarantee.


No index/module/main fields in package.json

Please define entry points, so that library can be used as:
import * as webeid from '@web-eid/web-eid-library
or even better would be:
import webeid from '@web-eid/web-eid-library

Thanks for pointing this out!
Instead of index/module/main, we should probably use the exports field which allows us to specify exports based on module type.
  "exports": {
    "import": "./web-eid.js",
    "require": "./dist/es/web-eid.js"
  },

I'm planning to create example Angular, React and/or Vue.js apps. In addition to having them as examples, they will be used to find and iron out these kinds of wrinkles.


Fix bug in gradient for prior, test gradient, and test block Hessian

:warning: Please install the  to ensure uploads and comments are reliably processed by Codecov.
Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 81.20%. Comparing base (536198d) to head (0a25f81).
Report is 55 commits behind head on main.

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #172      +/-   ##
==========================================
+ Coverage   80.33%   81.20%   +0.86%
==========================================
  Files          50       50
  Lines        4613     4618       +5
==========================================
+ Hits         3706     3750      +44
+ Misses        907      868      -39

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


🐞 - Unable to add custom styles to tui-hint-box by tuiHintDescribe since v3

Which @taiga-ui/* package(s) are the source of the bug?
core
Please provide a link to a minimal reproduction of the bug
https://taiga-ui.dev/stackblitz
Is this issue blocking you?
Blocking
Description
We used to change styles of some <tui-hint-box> by adding id to tooltip host element and writing styles
[id^='employeeHint'] {  tui-hint-box {         max-width: var(--tui-hint-box-max-width, 30rem);         min-width: var(--tui-hint-box-max-width, 21rem);         width: min-content;     } }
It hasn't worked since v3.
v2 is below

v3 - ids are only on hosts of hints

How can I add custom styles to a specific element?
Angular version
13.3.11
Taiga UI version
3.19.0
Which browsers have you used?

[X] Chrome
[ ] Firefox
[ ] Safari
[ ] Edge

Which operating systems have you used?

[X] macOS
[ ] Windows
[ ] Linux
[ ] iOS
[ ] Android

Use tuiHintAppearance instead


Bracket pair colorization should also work for language-specific bracket tokens

In Python 3, the following is a valid expression:
f"""foo {
	f'''bar{
		f"baz {f':-) {42}'}"
	}
	'''
}"""`

In Bash, the following are valid expressions:

echo "foo $(echo "bar $(echo "echo baz $(echo "echo :-)")")")"

echo "hello1-`echo hello2-\`echo hello3-\\\`echo hello4\\\`\``"  # credit: https://stackoverflow.com/a/2657037/13994294

(using shellcheck)
I think it would be nice if pair colorization could also be applied to language-specific bracket tokens such as single quotes (') and double quotes (") but also their triple equivalents in Python (''' and """) or backticks in bash (`). There might be even further bracket tokens in other languages, maybe chevrons (<>), I don't know.
The question is for which tokens it would be vise to provide colorization as a language-agnostic concept (as bracket colorization works at the moment to my knowledge) and for which ones you should dispatch them over the LSP ...

VS Code brackets colorization relies in brackets that is specified in language-configuration.json (usually) by extension that provides support for this language. Should work if extension specifies them as brackets.
Otherwise you can wait for #131412 which will allow user specified brackets config, however I'm not sure if it's supposed for multicharacter entities.
/assign @hediet

Thank you, so shall I file in two issues for the Python and Shellscript language extensions?

Opening brackets must be distinguishable from closing brackets at the moment.


1.10.2 Crash whe teleporting to Nether, world corrupted does not load.

Here the crash log. It trash my world entirely, it does not load... I restore a backup,  and trying to do the same steps it crashes (this is consistent, not random)
[Uploading crash-2016-09-02_19.37.16-server.txt…])

crash-2016-09-02_19.37.16-server.txt

Was the nether reset or something? RFTools can't find a receiver there. I can fix the crash but the reason the crash is there is weird though

Nope, the funny thing is that I do have other receiver in Nether far away (1800 blocks) from this one in and that works just fine... the only thing that is different between those two nether locations are that I recently installed a Mod called futuretech and this mod created big structures all over the nether (except in the place tha is working), that's why i have to go lenghts to reach this structures. In other words, the receiver location that crash has new structures from futuretech mod, that the old receiver (one that works) does not...
Thank you for your promptly answer!!!

So probably the structure mod overwrote the receiver. That can cause problems...

Do you think I should report this to Futuretch guys?

Well the problem is that this kind of thing is probably hard to avoid. Adding a mod later that adds worldgen like that is bound to give problems. This is most likely something they can't do a lot about either. I did add some protection in rftools so that it will not crash at least but the receiver will not function

I understand, no problem then, I manage to workaround this by creating a Nether portal (that takes me to overworld at 12k block away from home :-) and there I place the receiver, and it works fine, just one more "jump" to travel to the futuretech complex in nether... I guess you can close this...


[WIP] Enable WML Training

This PR enables WML training functionality.

Restructured the original assets and uploaded them to max-assets-prod
Updated the Dockerfile for training
Bump the API version to 2.0.0
Added Train section to main README
Added the cookiecutter training and setup scripts
Added the model-specific training scripts

TODO:

[x] Optimize code
[x] Update data README.md
[x] Update training README.md

@ptitzler @SSaishruthi This PR is ready for review now.

This build also succeeds with my jenkins pipeline :-)

I have made both your changes and both Jenkins and Travis are succeeding.

A couple minor comments, otherwise looks ready

Thanks all, have updated this!


Compatibility issue with eating animation

When you have both this mod and Eating Animation, CIT completely stops working within GUI's. Items will just have vanilla textures in inventories, but CIT still works when they are dropped on the ground or held in your hand.

Known issue, should be fixed with the latest eating animations update but I havent tested.


Implement commented part in Rts

See https://github.com/snowleopard/hadrian/blob/29046aa3b29a26e69db1bf38015f9376bfad2ff0/src/Settings/Packages/Rts.hs#L127-L258

It's probably medium-to-high priority. I expect that these missing flags account for a lot of errors we see when we run validate.

I'll close this now


Moved from protobuf to protocol-buffers to allow installation on Node 0.12

Should fix #12.
I have zero Riemann knowledge, but the test cases pass on both Node 0.10 and Node 0.12 (to get them working on 0.12 I had to lower the client port number in the tests, I don't know if this is acceptable but Node will throw a RangeError otherwise).
The package.json reformatting is due to using npm install --save, hope that's okay.

Thanks for the submission, I'll review and release a new version this
weekend.
On Thu, Jul 23, 2015, 11:30 PM Robert Klep<EMAIL_ADDRESS>wrote:

I have zero Riemann knowledge, but the test cases pass on both Node 0.10
and Node 0.12 (to get them working on 0.12 I had to lower the client port
number in the tests, I don't know if this is acceptable but Node will throw
a RangeError otherwise).
The package.json formatting is due to using npm install --save, hope
that's okay.
You can view, comment on, or merge this pull request online at:
https://github.com/perezd/riemann-nodejs-client/pull/15
Commit Summary

Moved from protobuf to protocol-buffers to allow installation on
Node 0.12

File Changes

M package.json
https://github.com/perezd/riemann-nodejs-client/pull/15/files#diff-0
(18)
M riemann/serializer.js
https://github.com/perezd/riemann-nodejs-client/pull/15/files#diff-1
(8)
M test/basic_tests.js
https://github.com/perezd/riemann-nodejs-client/pull/15/files#diff-2
(2)

Patch Links:

https://github.com/perezd/riemann-nodejs-client/pull/15.patch
https://github.com/perezd/riemann-nodejs-client/pull/15.diff

—
Reply to this email directly or view it on GitHub
https://github.com/perezd/riemann-nodejs-client/pull/15.

This looks good, I'll merge it now and get it on NPM by end of the weekend.

Awesome, thanks :-)

OK this has been pushed. Thank you for your contributions!


Ignore trailing slash on /v1/traces endpoint

Is your feature request related to a problem? Please describe.
I just spent a couple of hours trying to figure out why refinery is not applying the sampling to the traces I sent and instead is forwarding all traces directly to honeycomb. As it turns out, I've set the endpoint in my application to <refineryhost>:8080/v1/traces/. Once I removed the trailing slash, everything started to work as expected.
Describe the solution you'd like
Refinery should work like honeycomb itself. When sending traces to /v1/traces/ it should ignore the trailing slash and process the trace as expected.
Describe alternatives you've considered
I guess an alternative could be to reject the request and respond with the same error that appears when accidentally sending to the root endpoint:
invalid OTLP endpoint - should you be sending to /v1/traces?, see API docs https://docs.honeycomb.io/

Side-Note: The question mark directly behind a URL is a little confusing. Maybe consider adding a space between /v1/traces and ?
Additional context
Of course in hindsight it's all very obvious, but I can easily see myself making that error again in the future.

We mimic the behavior of the collector in this regard.

The spec here seems to indicate that as long as we support /v1/traces we can also support other endpoints, so it seems fine to do this.


FormItem: add tooltip

[x] Make sure you follow Element's contributing guide (中文 | English | Español | Français).
[x] Make sure you are merging your commits to dev branch.
[x] Add some descriptions and refer relative issues for you PR.

Scene: Sometimes users may need to add some extra info to the form item label.

建议采用 Form-Item 的 label 插槽实现


MoviesX App added

Movies-X is a movie searching application, which is built using OMDB API. This app demonstrates Modern Android Development and best practices of Android Development.
Link to issue - https://github.com/aadityamp01/Androapps/issues/39

Hey @Vaibhav2002 can you please remove .idea folder outside of your app folder;
also link your issue in the description of this PR, you can refer PR template for this!

Ok , I will do all this

Great job @Vaibhav2002
Thanks for your valuable contribution in this project, this app will be very helpful!
You're welcome to contribute more!!


Upgrade to nom v4

Hi Malte! 👋
I was evaluating nom-sql for use in another project and decided it'd be easiest to explore by upgrading it to use nom v4. The diff is annoyingly large but fortunately nearly entirely mechanical.

There were two changes to nom v4 that had a major impact on this crate.
First, nom v4 uses the standard Result type instead of a custom enum.
That means that checking for a successful parse uses the is_ok method
instead of the is_done method.
Second, nom v4 is more aggressive about returning incomplete results.
This caused many tests to fail because the parser required one more
character to determine whether a keyword was finished or not. Work
around the problem by using nom v4's CompleteByteSlice type, which
indicates that the parser is never used with streaming input, and
therefore the end of the input string can be treated as EOF. This has
the added benefit of making all of the complete! macros redundant.

Cool, thanks for doing this port! Looks like a sensible change to me -- I've been bitten by forgetting complete! a bunch of times before, so the workaround makes things better.


Is this supposed to address the Blender window freeze when the Qt window is open?

I'm just starting out on some PySide2 pipeline dev with Blender and I'm running into the issue where Blender's window freezes or doesn't update when the Qt window is open.
Does vfxwindow address that or do we still need to handle that on our own?
I've found a few workarounds, but they're not perfect- for example I can get Blender to not freeze by following this method, but if I try to move the main Blender window the whole program freezes. Same result with this method.
Seems like a cool package though, I'll look into implementing it into my project.

Hey, I've not done too much testing on Blender, but I think I remember coming across that issue and solving it :)
If you start using this, I made a page detailing how to use a few of the features - https://github.com/Peter92/vfxwindow/wiki/Quick-Start

Just asked for more help here as well, not sure I know enough about how Blender or threads work to effectively solve this at the moment.

Just asked for more help here as well, not sure I know enough about how Blender or threads work to effectively solve this at the moment.

To be honest I forgot about the wiki until you posted aha, it just dawned on me I didn't seem to have much documentation, so I checked in there and found some from half a year ago.
The point of this module is to do the solving for you. If you write your window to inherit VFXWindow, then calling win.show() will perform whatever steps are needed to open it without locking Blender. Remember that it inherits QMainWindow and not QDialog like in the example you linked, so some lines will have to be changed.

Thanks for clearing that up. I'll give it another go.


Fix liveaction rerun with no parameters

If no parameters is provided, NoneType is passed to the server side resulting in error.

If it only started to fail after 2727, it's probably a thing that should be fixed on st2api end.


Unreliable torch

Tested on an iPhone 11 Pro running iOS 16;
With isTorchOn set to true the torch can show three behaviours - none of which is reliable:

The torch will not light up
The torch will light up for a brief moment and then be off again.
The torch will not go out when the View is dismissed.

The View is presented in a Sheet:
.sheet(isPresented: $isShowingScanner) {
    CodeScannerView(
        codeTypes: [.code39],
        simulatedData: "04 ASO SCANTEST123",
        isTorchOn: true,
        completion: handleScan)
}

Can you provide a project (for example a zip archive) to reproduce this issue? I tried in my app and it is not happening...

Yes, it happens in this project: https://github.com/nitricware/pSTaRT

I'm experiencing this issue as well. This seems to be related to these stack overflow questions:

AVCaptureSession freezes when torch is turned on
Device torch turns off when starting AVCaptureSession

Maybe related to #70

I think the problem boils down to these LOCs here
let fallbackVideoCaptureDevice = AVCaptureDevice.default(for: .video)
and here
if let backCamera = AVCaptureDevice.default(for: AVMediaType.video),
So the quickfix is to use the exact same AVCaptureDevice on both lines, the proper fix would be to pass explicitly set AVCaptureDevice to the updateViewController-function, I think.

I changed my code, so that the CodeScannerView gets passed a @State and the torch is off initially. I also implemented a button as suggested in #70 but when I press the button the torch switches on as expected, however the camera freezes.


:bug: Delete associated tickets on wave delete

Resolves https://issues.redhat.com/browse/MTA-1014
TODO: handle bulk delete case
Discussion item: Should we be deleting tickets when deleting wave? It seems there is some conflicting info in the enhancement around this, but IMO this makes for a better user experience. When you delete the hub representation of tickets on wave delete, they you don't have stale ticket items that can be erroneously linked to a wave application from a previous wave lifecycle. Also, this allows us to remove a tracker when it is no longer visibly linked to an existing wave per MTA-1014

@ibolton336, I believe this one is on hold until Ramon is back next week.

@ibolton336, also we don't want to delete tickets when a migration wave is deleted as the use might want/need to move the applications involved in a different migration wave.
The tickets, if that approach is confirmed by Ramon, will be cascade deleted when the tracker is removed (and only if there are no migration waves left)


Loose type constraint on hyper::server::Builder::Serv?

It seems that some Send and Sync contraints could be removed on hyper::server::Builder::Serv. Because of those constraints, I cannot reuse a service written for hyper 0.11, which does not implements Send. Is there any reason for those constraints?
Here's my patch for loosing those constraints.
https://github.com/yjh0502/hyper/commit/859115ec18799aab51f18abe0824a4d9a5aa24fd

Does that patch compile? The server runs in a thread pool in 0.12 so futures can be sent from one thread to another.

Yes it compiles.
$ git branch
* loose_types
  master
$ git log HEAD~1..HEAD
commit 859115ec18799aab51f18abe0824a4d9a5aa24fd (HEAD -> loose_types, yjh0502/loose_types)
Author: Jihyun Yu<EMAIL_ADDRESS>Date:   Mon Jun 11 12:16:10 2018 +0900

    loose type constraint on `serv`
$ cargo clean && cargo check
   Compiling nodrop v0.1.12
   Compiling libc v0.2.42
   Compiling cfg-if v0.1.3
   Compiling lazy_static v1.0.1
   Compiling memoffset v0.2.1
   Compiling byteorder v1.2.3
   Compiling scopeguard v0.3.3
   Compiling futures v0.1.21
   Compiling slab v0.4.0
   Compiling lazycell v0.6.0
   Compiling fnv v1.0.6
   Compiling indexmap v1.0.1
   Compiling string v0.1.0
   Compiling try-lock v0.1.0
   Compiling httparse v1.2.4
   Compiling crossbeam-utils v0.3.2
   Compiling log v0.4.2
   Compiling arrayvec v0.4.7
   Compiling crossbeam-epoch v0.4.1
   Compiling iovec v0.1.2
   Compiling net2 v0.2.32
   Compiling num_cpus v1.8.0
   Compiling rand v0.4.2
   Compiling time v0.1.40
   Compiling bytes v0.4.8
   Compiling crossbeam-deque v0.3.1
   Compiling mio v0.6.14
   Compiling http v0.1.5
   Compiling tokio-io v0.1.6
   Compiling tokio-executor v0.1.2
   Compiling want v0.0.4
   Compiling futures-cpupool v0.1.8
   Compiling tokio-threadpool v0.1.4
   Compiling tokio-timer v0.2.4
   Compiling tokio-reactor v0.1.1
   Compiling tokio-fs v0.1.0
   Compiling tokio-udp v0.1.0
   Compiling tokio-tcp v0.1.0
   Compiling tokio v0.1.7
   Compiling h2 v0.1.9
   Compiling hyper v0.12.1 (file:///home/jihyun/repo/git/hyper)
    Finished dev [unoptimized + debuginfo] target(s) in 7.93 secs

Ah right, server doesn't manage its own event loop anymore.

I found more Send that could be removed.
https://github.com/yjh0502/hyper/commit/450bc9b78d9de747c6f9886b0a96de67992e83ee

For what it's worth, I've been working on a branch to add HTTP upgrades to a higher-level API, such as Client and Server. It's relying on the transport being AsyncRead + AsyncWrite + Send + 'static to allow passing it as a boxed trait object in the Body. Removing these bounds here would make the current approach impossible.
Is there need for the IO type to be !Send?

Sorry for late reply. I'm trying to migrate from 0.11 to 0.12. The hardest part is about Send, which is not required on 0.11 because it runs on single tokio core. My code has quite amount of std::rc::Rc and std::ref::RefCell to represent shared internal state across multiple http requests. Those should be changed to std::arc::Arc and std::sync::Mutex to be Send. The amount of code for those changes for quite large so I'm trying to find a way to run hyper on single thread, as 0.11 does.
It seems that even if those constraints are relaxed hyper cannot run on single thread because of an executor, which forces the future to be Send.
https://github.com/hyperium/hyper/blob/d127201ef22b10ab1d84b3f2215863eb2d03bfcb/src/common/exec.rs#L20-L38
The problem could be solved by using tokio::executor::current_thread::spawn instead of tokio_executor::spawn [1]. The patch is reasonably small so I think I can maintain patched hyper while migrating to std::arc::Arc.
[1] https://github.com/yjh0502/hyper/commit/1353f849cb7d693257d37a9d487e87e397a2c574