chore: Cleanup Microsoft links

Ran script from MS Docs Authoring Pack.

HTTP -> HTTPS
Removes link locale

@craigg-msft @MikeRayMSFT @rothja @MightyPen - Could you review the PR? If you accept the submission, PR reviewers can move the commit to the private repo for validation and staging. Thanks.

@nschonni Hi Nick, This public PR 2451 looks pretty good.  I looked through about 25% of it.  The hassle is that the GitHub Differ often tells us only that there was a change somewhere in this or that large paragraph; without highlighting the changed characters in the paragraph.  It is therefore a tiring challenge for the human eye to be thorough.
We are considering approving this PR.
@v-thepet Hi Theano, This PR 2451 could be closely related to CATS work you had been doing. Could you spend 5-10 minutes looking at this 'Files changed' tab, and then enter a new Comment here to say whether your samplings suggest we Approve vs Disapprove?  If you cannot work on this type of PR, I will understand, just tell me so. Thanks.

PS: this is the script part that I mentioned used for this https://github.com/microsoft/vscode-docs-authoring/tree/develop/docs-markdown#cleanup-scripts
You can see what regexes it runs here https://github.com/microsoft/vscode-docs-authoring/blob/9feda42b85b962e0418dd46fb2effb815f14a9f9/docs-markdown/src/controllers/cleanup-controller.ts#L536 in case you want to run it manually instead

@v-thepet Theano, have you had a chance to look at Gene's question on this PR? Thanks!

Due to the many merge conflicts, I think we'll need to close this, and run again in a new copy of the repository. @nschonni  could you do that, and open a new PR? I'll watch for it and review it quickly.

I'll rebase this and ping you when I'm home

@MikeRayMSFT I've rebase this and force pushed to resolve the conflicts

We're in the process of pulling these commits to the private repo, so we can verify the content on staging. We'll post a new PR # shortly and then close this PR.

@nschonni @MightyPen @MikeRayMSFT @rothja - Private repo PR 11506 replaces this PR. We'll validate the updated URLs on staging in the private repo PR and reach out to content owners if needed. We'll close this PR now. Thanks!


Add support for include.hxp.

I think I've mentioned before how included projects can't always get the data they need, and it came up again in #1486. It's incredibly easy to get the architectures in an HXP project, but there's just no way in XML, nor is there an elegant way to add support.
There's one issue to be aware of here: all paths in include.hxp will be relative to the main project, which is practically guaranteed to break local paths. So, you have to type out Sys.getCwd() + "local/path" each time. Not a deal-breaker, just something people will have to be aware of.
Oh yeah, I refactored a few things while I was at it. IMO, the whole function should have been named fromDirectory() in the first place, because otherwise it sounds the same as fromFile(). It's a little late to change that now, so I'll settle for making the arguments more explicit.

I've done only basic testing here, but since this is based on the well-tested HXProject.fromFile() function, I don't anticipate major issues. Testing results:

include.xml supersedes include.hxp when both exist.
After removing include.xml, include.hxp can trace messages.
Specifying a relative source path fails; files aren't found.
Specifying an absolute source path succeeds; files are found.


Update docs to the latest 9.21 Git changes

@maksymvyhovskyi , I added the term pull throughout the text, but I have a question on Using Version in Studio Pro > section 9.6 Reverting Accidental Studio Pro App Model Upgrade, do I need to also mention Git in the following sentences:

Back in Windows Explorer, right-click the folder again, select TortoiseSVN > Commit, enter your commit message, and click OK.
Start the desired Studio Pro version and download the app from Team Server.
Check that everything is okay in your app.
Inform your team that they need to do a fresh checkout of the app or run TortoiseSVN > Update on their app folder before opening the app in the desired Studio Pro version again.

Discussed with the Version Control team that this is not applicable for Git, leave as is.


[DO NOT REVIEW -- testing only] travis: Test a second version of Node.js

This PR is currently only for testing purposes to see if this
Travis config works.  If it works, the build should fail (because
of places where we use features only supported in newer node
versions).

This commit changes Travis so that it tests Node.js v6.9.0
in addition to 7.10.0.  Version 6 is the latest LTS release,
and v6.9.0 was the first minor version that was part of the
LTS release.

BTW @kayousterhout, you might already be tracking this somewhere but we should also:

Update the docs on the new minimum version
Update the integration tests to use 6.9.0.


2.3.0 editor?

where is editor?

solved

click on Editor BRUH

Please close the issue @boramat


GPU hotplugging - loads/unloads based upon udev events

(this description is mostly copied from the main commit message)
This has been implemented specifically for the use case of Nvidia
Optimus laptops with display ports hardwired to the dGPU. I'm hoping it
may prove useful for other use-cases as well, such as hotplugging
external GPUs.
The implementation is not pretty, and likely is full of bugs and
special-cases. I am not familiar with the internal
architecture of wlroots, so would love any constructive criticism of the
implementation / C style.
The status quo:

with both i915 and nouveau drivers loaded, sway can use both the laptop
monitor AND external monitors, enabling and disabling outputs as
needed
BUT, the nouveau driver always stays loaded, and so my laptop idles
at 20W instead of 3-5W :(
unloading nouveau requires restarting sway. This is annoying.

After this patch:

run sudo modprobe nouveau while sway is running - wlroots will
detect the udev event and add a new drm backend and then add it to the multi
backend.
unplug all outputs from the dGPU, and sway will destroy the dGPU drm
backend.
You can verify that the nouveau driver is no longer in use,
by running lsof /dev/dri/card*
The user must still manually run sudo rmmod nouveau and
then also use bbswitch, to fully power off the dGPU and achieve
power-saving gains. Though still somewhat manual, this whole process can
be done WITHOUT shutting down sway, which is awesome for productivity (no longer have
to restart the swaywm several times throughout the day).

The future (perhaps a separate script):

Automatically loads nouveau when a cable is connected (unsure if
this is possible due to hardwiring of HDMI port, see below)
Automatically unloads nouveau and runs bbswitch after all monitors
have been disconnected for a while.
This would be BLISS - basically as automatic as Windows when it comes to
using Nvidia Optimus configuration - except of course that sway won't
actually render from the dGPU. For my workloads, this isn't a problem,
but perhaps someone will take this further and reimplement something
like bumblebee but for Wayland. Is that even a good idea? I don't know.

Note: at the moment, this driver unloading only occurs when you unplug all monitors from a given card. This results in some undesirable behaviour (https://github.com/swaywm/wlroots/issues/1278#issuecomment-705874280)
Perhaps there should be an explicit command, e.g.: "unload
all unused drm backends" that can be called by some other script, which
will trigger unloading. Or perhaps, if a drm backend is unused for a
given amount of time (e.g.: a few minutes) it will get unloaded.
Also note, at least on my laptop, there seemingly no way to tell when a
cable is plugged into the HDMI port (probably because it is hardwired to
the Nvidia GPU). If this were possible, then you could write a script
which will automatically power on the nvidia GPU when an external
monitor is connected. Currently, you need to do this manually, with sudo modprobe nouveau.

One other point, I think DRI_PRIME=1 should automatically load nouveau.

@J0nnyMak0 thank you once again for testing this, I have a few thoughts below, but no concrete solutions as of yet

First off, if I first plugin external monitors and then sudo modprobe nouveau, then it works great. The scan is completed and my external monitors come to life. Now I can unplug the monitors and sudo rmmod nouveau and everything works as expected. I then proceed to switch off the card with bbswitch. All good.
However, if I load nouveau module without external monitors connected, then there is a problem. Nouveau is loaded as expected, but then when I go to rmmod nouveau, it fails with: rmmod: ERROR: Module nouveau is in use

I think this is expected given the current implementation. Currently, the only time a backend will be destroyed is if the backend transitions from having some output enabled, to no outputs enabled. That certainly isn't ideal if you have no external monitors to plug in-and-out. I wasn't sure that my original implementation (unload when 0 outputs are enabled) was ideal either, because you could load nouveau without any monitors connected, and sway would immediately destroy the backend again. Then if you connected a monitor, you'd have to rmmod nouveau and modprobe nouveau again to get it to recognise.
I'm not sure what the most robust way to approach this is. Sometimes, you may not care about unloading/loading drivers, e.g.: if your particular drivers already do fantastic power management. Perhaps it should be become a config option that could be e.g.: exposed in sway's config?

One other point, I think DRI_PRIME=1 should automatically load nouveau.

From what I understand, DRI_PRIME=1 is an env-var which can be given to individual applications, that forces them to use the dGPU? I'm not entirely sure how to get wlroots involved in that process. I might try it out for myself on e.g.: glxgears

Thanks for working on this!
IMHO, it's not great to destroy the DRM sub-backend when all outputs are disconnected. Instead, I'd much prefer to listen to udev events. This will be what we'll need for dGPU that can be hot-unplugged by the user as well (e.g. via USB-C).
You can tell udev to trigger a unplug event for a GPU like so:
# MINOR=0 triggers removal for card0
udevadm trigger --verbose --type=devices --action=remove --subsystem-match=drm --property-match="MINOR=0"

Then wlroots can listen to these events, and destroy the sub-backend appropriately.

Ok, thanks! Also how are you monitoring the power state of dGPU with nouveau? For some reason powertop doesn't seem to be telling me the truth about dGPU state...

Thanks @emersion for the advice, I've changed it now to listen to udev "remove" events as well. Now most of the code for handling GPU hotplugging is inside of the multi/backend.c. I'm not sure if that's the best place to put it though, seeing as the multi backend previously didn't handle specifics like GPUs etc...

Ok, thanks! Also how are you monitoring the power state of dGPU with nouveau? For some reason powertop doesn't seem to be telling me the truth about dGPU state...

Have you tried cat /proc/acpi/bbswitch? It seems to work insofar as when bbswitch says the dGPU is off, power consumption drops significantly.

@neon64 thanks for the pointer. I'm trying to get some useful info about what I'm observing. It's a shame powertop is unreliable. The problem is when I use this branch to unload nouveau and turn off dGPU, my laptop seems to run hotter with fans and run out of battery faster than if I keep nouveau loaded and dGPU powered up. Powertop reports 100% usage of dGPU but no power reading, so I don't trust it. And bbswitch reports dGPU is off...

Hmm that is fishy. May I ask which generation GPU it is? I only have a GTX 1050-Ti to test on

Hmm that is fishy. May I ask which generation GPU it is? I only have a GTX 1050-Ti to test on

Its a Quadro K3100M

Now most of the code for handling GPU hotplugging is inside of the multi/backend.c. I'm not sure if that's the best place to put it though, seeing as the multi backend previously didn't handle specifics like GPUs etc...

Right, the multi backend isn't supposed to handle this. Instead, we should probably move the udev stuff to backend/drm/backend.c (we can grab the struct udev from the wlr_session there). The libinput backend handles its own udev event dispatching as well (via libinput_udev_create_context).

So I tried to have a read of how libinput does it (https://cgit.freedesktop.org/wayland/libinput/tree/src/udev-seat.c). Are you suggesting completely getting rid of all the udev stuff from session/session.c (including the existing handler that seems to invoke the drm_invalidated function), and then creating a fresh struct udev_monitor for each drm backend with its own separate event handler which (a) calls drm_invalidated on a relevant "change" event, and (b) destroys the backend on an appropriate "remove" event?
Also from what I understand of the wlroots architecture, in order to add a new drm backend, you need access to the multi backend from somewhere to be able to call wlr_multi_backend_add, and also need access to the primary drm backend to make it the "parent backend". Do you have a recommendation on where to store that information? Originally I had a pointer to the wlr_multi_backend inside struct wlr_drm_backend, but that seemed far from ideal.
I've also come across some errors when destroying the backend after the "remove" udev event (also got some crashes / kernel panics on exit which I assume are related https://github.com/neon64/wlroots/issues/1). This didn't occur before when unloading after monitor disconnect.
00:00:05.296 [ERROR] [backend/drm/legacy.c:45] HDMI-A-1: failed to set DPMS property: Permission denied
00:00:05.339 [ERROR] [backend/session/logind.c:122] Failed to release device '9': Device not taken

completely getting rid of all the udev stuff from session/session.c (including the existing handler that seems to invoke the drm_invalidated function)

Ah, right, I forgot that session.c had some DRM-specific stuff:

wlr_session_find_gpus being there
The monitoring of the "change" events is also somewhat DRM-specific

Also from what I understand of the wlroots architecture, in order to add a new drm backend, you need access to the multi backend from somewhere to be able to call wlr_multi_backend_add, and also need access to the primary drm backend to make it the "parent backend".

Yes, this is correct. We're somewhat hitting some wlroots API limitations here.
Some notes:

wlr_session doesn't have access to the multi backend, and I'd prefer to keep it that way
wlr_multi_backend shouldn't do DRM-specific stuff
It would be natural to add the new DRM udev monitoring to wlr_session and expose add/remove as events

I can't find the issue, but there were discussions about either:

Having the DRM backend being able to manage multiple devices without having to resort to multiple sub-backends (like glider does)

Maybe doesn't give enough control to the compositor
Maybe would be too monolithic

Making the compositor responsible for creating and destroying DRM backends

Would allow compositors to decide how DRM devices are used, which is a good thing
Need to think about how buffer sharing between backends should work (the trend is to remove any renderer bits from the DRM backends, but we can probably defer this work for now)
Maybe provide a helper that handles most of that complexity (e.g. takes a wlr_multi_backend plus a wlr_session, and creates the DRM sub-backends as necessary)

cc @ascent12

Some of the work I described in my previous comment is done in https://github.com/swaywm/wlroots/pull/2465.

Thanks for the PR refractoring all that stuff @emersion! I've just come out of an exam period so have been away from this for a while, I'll have a go rebasing off your branch and see what happens.

I would also like add a comment for consideration by the devs here. This kind of dynamic unloading of GPU drivers is perfect for passing a GPU through to a VM for gaming without having a second discreet gaming capable GPU. The ideal case would be to run the desktop on an integrated or other cheap GPU, and have a second GPU that can be easily detached and passed to a VM, then reattached without rebooting for accelerated workloads on the host.
I know that supporting this fringe workload is probably not a priority, but the dozen or so of us with this use case would greatly appreciate it if a few moments thought where put into it. for example, allowing the user to trigger the attaching and detaching easily without having to do something stupid like unplug the monitor.

This comment describes a way to tell wlroots to stop using a device from the CLI.

https://github.com/swaywm/wlroots/pull/2575 adds support for GPU unplug.

Maybe provide a helper that handles most of that complexity (e.g. takes a wlr_multi_backend plus a wlr_session, and creates the DRM sub-backends as necessary)

As noted above, this is the other half of the work. This can be implemented as a private helper for now that attempt_drm_backend would create. Maybe something like this:
struct wlr_drm_backend_monitor {
    struct wlr_backend *multi;
    struct wlr_backend *primary;
    struct wlr_session *session;

    struct wl_listener multi_destroy;
    struct wl_listener primary_destroy;
    struct wl_listener session_destroy;
    struct wl_listener session_add_drm_card;
};

struct wlr_drm_backend_monitor *wlr_drm_backend_monitor_create(struct wlr_backend *multi, struct wlr_session *session);

I hope to test this a little more soon, but I think this branch needs to be rebased first with all the changes to wlroots.

You're right, I've let this branch get very stale - I've tried building wlroots master a couple of times in recent weeks but have been hit by a number of bugs/crashes/performance issues with multi GPU including https://github.com/swaywm/wlroots/issues/2526, so I haven't rewritten GPU hotplugging yet because I'd just be hotplugging a blank screen! Hopefully in the new year I will come back and finish the missing part emersion has outlined.

So I've created a new PR https://github.com/swaywm/wlroots/pull/2657, based upon emersion's https://github.com/swaywm/wlroots/pull/2575 and rebased onto the latest master.
Rather large caveat: it doesn't really work at all (at least for me) - see the PR description and https://github.com/neon64/wlroots/issues/2

So I've created a new PR https://github.com/swaywm/wlroots/pull/2657, based upon emersion's https://github.com/swaywm/wlroots/pull/2575 and rebased onto the latest master.
Rather large caveat: it doesn't really work at all (at least for me) - see the PR description and https://github.com/neon64/wlroots/issues/2


nyc breaks the test translated by ts-node

Link to bug demonstration repository
I used it in one of my project, the link is here
I wrote my test file in TypeScript and I transform them at runtime with ts-node/register. When I run ava without nyc everything works fine, but when I run ava with nyc, ts-node gave a lot of error.

Expected Behavior
Run the tests as normal with not error.
Observed Behavior
ts-node gave a lot of strange error. I suppose that it is related to how nyc processes the test file
Troubleshooting steps

[x] still occurring when I put cache: false in my nyc config

Environment Information

System:
    OS: Linux 4.4 Ubuntu 19.10 (Eoan Ermine)
    CPU: (8) x64 Intel(R) Core(TM) i5-8265U CPU @ 1.60GHz
    Memory: 1022.06 MB / 7.83 GB
  Binaries:
    Node: 12.14.1 - ~/.nvs/default/bin/node
    Yarn: 1.21.1 - ~/.nvs/default/bin/yarn
    npm: 6.13.4 - ~/.nvs/default/bin/npm
  npmPackages:
    @ava/babel: 1.0.0 => 1.0.0
    nyc: ^15.0.0 => 15.0.0
    ts-node: 8.6.2 => 8.6.2
    typescript: 3.8.0-dev.20200119 => 3.8.0-dev.20200119

Can you post an example of the ts-node errors or better yet a link to the log of a failed CI run?
This is a difficult situation as it appears you have 4 transpilers running in your tests - ava is enabling babel, esm and ts-node, then nyc is enabling another copy of babel.  Might be that you need to tell nyc to not instrument and instead configure ava to enable babel-plugin-istanbul.  I haven't been following recent developments with ava but I know some changes have been made to how it integrates with babel.

Can you post an example of the ts-node errors or better yet a link to the log of a failed CI run?
This is a difficult situation as it appears you have 4 transpilers running in your tests - ava is enabling babel, esm and ts-node, then nyc is enabling another copy of babel. Might be that you need to tell nyc to not instrument and instead configure ava to enable babel-plugin-istanbul. I haven't been following recent developments with ava but I know some changes have been made to how it integrates with babel.

I didn't have a CI build link, but I will post an error report soon. I will try your solution too, but I've also tried c8 and it is working well.

Here's the gist, generated using my repo KsRyY/bethlehem@8a9ff76

Still does not work well when using the babel provider of ava (@ava/babel)

I tried to downgrade nyc to 14.1.1 and it's partially helps me, now tests runs normally but code coverage always 0

In my case (i'm writing API wrapper) i just increased ava testing timeout and<EMAIL_ADDRESS>works normally.
@KsRyY Try increase timeout, maybe it helps you too


[Core]Support generatedClass cache in CodeGeneratorImpl

Purpose

Linked issue: close #2955

Reuse the generated class in CodeGeneratorImpl to improve performance.
Tests
org.apache.paimon.codegen.CodeGeneratorCacheTest

API and Format

Documentation

Hi @JingsongLi  , PTAL when you have time. Thx.

@FangYongs @liming30 Hi, would u kindly help review this pr?

Can you just add cache to CodeGenUtils? In that way, we can cache generated Class.

@JingsongLi Do you mean cache the instance directly?

Can you just add cache to CodeGenUtils? In that way, we can cache generated Class.

@JingsongLi Do you mean cache the instance directly?

I mea compiled Class<T>.

Please fix compile

merged in 4ec5806428a8d3ddbb0ba8521b8971f0e9de7b17
Looks like your email<EMAIL_ADDRESS>is not bind to your github id.


Issue from website page Get Started: Test Drive

From URL: https://flutter.io/get-started/test-drive/
When creating a new project, how do I find the flutter path?

When you install Flutter you have to specify a directory. For example set the current directory before you run git clone.
How did you install Flutter?
When you execute flutter doctor -v in a command line shell/terminal window, what output do you get?

Without additional information, we are unfortunately not sure how to resolve this issue. We are therefore reluctantly going to close this bug for now. Please don't hesitate to comment on the bug if you have any more information for us; we will reopen it right away!
Thanks for your contribution.


net: tcp: Cleanup context if connection is not established

If we are closing connection before the connection was established,
then unref the context so that the cleanup is done properly.
Signed-off-by: Jukka Rissanen<EMAIL_ADDRESS>

This fixes the issue I was seeing but it introduces failures in tests. It requires a bit more work still.

Fixed the sanity issue.

Added test case for the issue.

Enhancing the unit test.


feat(prom): expose measure as summary #982

This turned out requiring quite some changes, i will try to explain them all:

First, i changed to choice of the prometheus metric type that we use to depend on the aggregator that is used. The old was trying to do that depending on the metric kind which could result lead to issue if a different aggregator than the defaults was used.
Second, the prom-client has its own implementation of histogram or summary that it keep over time, which we also do in the otel api, that mean we would have needed to maintain dataset in both (and could had a huge memory impact). To avoid that i've made "Fake" implementation of the internal prom-client's Histogram and Summary that allows us to only change internal state of the prom metrics when we update its value.
Finally, i've refactor our Histogram implementation because it was designed with the checkpoint concept that the Go impl use. Since our sdk don't have this logic right now, i've prefered to remove it (it was also complicating the integration with prom).

On the long term i believe we should implement the serialization as text ourselves to avoid the hack i've made in 2).

On the long term i believe we should implement the serialization as text ourselves to avoid the hack i've made in 2).

There is a similar hack for counter. I think removing prom-client is probably a good idea in the end.

Codecov Report

Merging #1038 into master will increase coverage by 0.90%.
The diff coverage is 97.82%.

@@            Coverage Diff             @@
##           master    #1038      +/-   ##
==========================================
+ Coverage   95.13%   96.04%   +0.90%
==========================================
  Files         212      151      -61
  Lines        8899     4825    -4074
  Branches      800      372     -428
==========================================
- Hits         8466     4634    -3832
+ Misses        433      191     -242

Impacted Files
Coverage Δ

...ges/opentelemetry-exporter-prometheus/src/utils.ts
95.65% <95.65%> (ø)

...pentelemetry-exporter-prometheus/src/prometheus.ts
93.51% <96.55%> (+1.51%)
:arrow_up:

...emetry-exporter-prometheus/test/prometheus.test.ts
99.62% <100.00%> (+0.04%)
:arrow_up:

...emetry-metrics/src/export/aggregators/histogram.ts
100.00% <100.00%> (ø)

...-metrics/test/export/aggregators/histogram.test.ts
100.00% <100.00%> (ø)

...ckages/opentelemetry-core/src/common/NoopLogger.ts
60.00% <0.00%> (-20.00%)
:arrow_down:

...metry-core/src/trace/instrumentation/BasePlugin.ts
81.57% <0.00%> (-5.27%)
:arrow_down:

...plugin-https/test/functionals/https-enable.test.ts

...telemetry-node/src/instrumentation/PluginLoader.ts

.../opentelemetry-exporter-collector/src/transform.ts

... and 60 more

Codecov Report

Merging #1038 into master will decrease coverage by 1.02%.
The diff coverage is 97.82%.

@@            Coverage Diff             @@
##           master    #1038      +/-   ##
==========================================
- Coverage   95.17%   94.14%   -1.03%
==========================================
  Files         216      167      -49
  Lines        9063     5675    -3388
  Branches      819      514     -305
==========================================
- Hits         8626     5343    -3283
+ Misses        437      332     -105

Impacted Files
Coverage Δ

...ges/opentelemetry-exporter-prometheus/src/utils.ts
95.65% <95.65%> (ø)

...pentelemetry-exporter-prometheus/src/prometheus.ts
93.51% <96.55%> (+1.51%)
:arrow_up:

...emetry-exporter-prometheus/test/prometheus.test.ts
99.62% <100.00%> (+0.04%)
:arrow_up:

...emetry-metrics/src/export/aggregators/histogram.ts
100.00% <100.00%> (ø)

...-metrics/test/export/aggregators/histogram.test.ts
100.00% <100.00%> (ø)

...ackages/opentelemetry-exporter-zipkin/src/utils.ts

...ges/opentelemetry-exporter-zipkin/test/e2e.test.ts

...ages/opentelemetry-plugin-http/test/utils/utils.ts

...lemetry-plugin-http/test/functionals/utils.test.ts

...-plugin-http/test/integrations/http-enable.test.ts

... and 46 more

cc @open-telemetry/javascript-approvers would be cool to have more reviews on this one ! thanks

@open-telemetry/javascript-approvers This PR has been open for almost a month now with no reviews. Please take a look if you can

Waiting #1137 #1017 to rebase this PR

Closing since measure doesn't exist anymore


Need to sync w/ ordo 3.2

There is a new version of Orphanet available as of July 2021. We want to sync with Orphanet in Mondo and make sure all the obsoleted classes in Orphanet are correctly represented in Mondo.
Nico:

[x] Need to sync w/ ordo 3.2: http://www.orphadata.org/cgi-bin/index.php
[ ] Need new list of obsoleted classes (related to https://github.com/monarch-initiative/mondo/issues/2338)

Nicole & Nico to work on together:

[ ] Match the obsoleted ORDO terms to corresponding Mondo classes to get obsoletion candidates

Nicole & Sabrina:

[ ] need to obsolete terms in Mondo that are obsoleted in Orphanet (if they only have an xref to Orphanet)
[ ] need to mark xrefs to Orphanet as MONDO:equivalentObsolete if the term is live in Mondo but obsolete in Orphanet

I think this can be closed because we will want to sync with ORDO 4.0


Add Wallaroo Docker image and automate build/release

Prep for Docker First Install
Adds Wallaroo Docker image
Adds Dockerfile for building a Wallaroo docker image which includes the following:

Machida
Giles Sender
Giles Receiver
Cluster Shutdown tool
Metrics UI

The above tools are bound to the PATH within the Docker container and PYTHONPATH is set for machida
Adds Wallaroo Docker image automation for building/releasing
The travis.yml file has been updated to build/release the Wallaroo Docker image on push/PR to the release and release-* branches.
Testing:
This PR should pass CI and a new Docker image should be pushed to Bintray. Follow Run A Application instructions for Docker. Verify you can go through the process start to finish without issue.
Note: Dipin's commits should probably be re-worded (remove WIP) and the docker-travis-test branch should be removed from the travis.yml file before merging.
Closes: #1680 #1681 #1720

@JONBRWN I think it makes sense as part of this project to follow the example of the ponyc repo and the pony library starter kit repo to move most of the logic out of .travis.yml into bash scripts that will be easier to maintain like:
https://github.com/ponylang/ponyc/blob/master/.travis_install.bash
https://github.com/ponylang/ponyc/blob/master/.travis_script.bash
or
https://github.com/ponylang/library-project-starter/blob/master/.travis_install.bash


Failed to load API definition when using "meta({swaggerHidden: true})"

Issue
Environment
npx envinfo --npmPackages '*hapi*' --binaries

Binaries:
Node: 14.15.4
Yarn: 1.22.5
npm: 7.5.4
npmPackages:
hapi-auth-jwt2: ^10.2.0 => 10.2.0
hapi-swagger: ^14.1.0 => 14.1.0
Steps to Reproduce
Use .meta({ swaggerHidden: true }) as a chained command in the Joi validation
'x-something': Joi.string().meta({ swaggerHidden: true }),

Expected Behavior
A working swagger page without the specific Joi property using the swaggerHidden value as specified in the document.
Actual Behavior
Failed to load API definition.
Reproducible Demo
Latest library.
NOTE
A simple fix for this is to add the following line :
if (schemaObj.properties[key]=== undefined ) return ;
here

I will check it.


How to access the current palette of a colorscheme.

Some Neovim colorscheme plugins provide a way to require and use the currently used theme colors for use with other plugins. For example, a helper in onedarkpro.nvim theme.
Is there an API that I'm overlooking in the docs that allows me to do this?
The closest thing I can find is require("github-theme.palette") mentioned in the Color lib section of the READ.me. However, this will provide all palette styles or a specified one.
I want to be able to create a lualine theme by using the current theme's palette.
Below is an example using olimorris/onedarkpro.nvim to create a new lualine theme located in lua/lualine/theme/theme_name.lua.
-- https://github.com/nvim-lualine/lualine.nvim/wiki/Writing-a-theme
-- https://github.com/olimorris/onedarkpro.nvim/blob/main/lua/lualine/themes/onedark.lua

local colors = require("onedarkpro.helpers").get_colors()

local onedarkpro = {}

onedarkpro.normal = {
  a = { fg = colors.fg },
  b = { fg = colors.fg },
  c = { fg = colors.fg },
  x = { fg = colors.fg },
  y = { fg = colors.fg },
  z = { fg = colors.fg },
}

onedarkpro.insert = {
  a = { fg = colors.fg },
  b = { fg = colors.fg },
  c = { fg = colors.fg },
}

onedarkpro.command = {
  a = { fg = colors.fg },
  b = { fg = colors.fg },
  c = { fg = colors.fg },
}

return onedarkpro

You can try:
require("github-theme.palette").load(vim.g.colors_name)


LISP error loading emacs 27 [Mac]

I have installed version 27 on my Mac using python 3.7
I'd rather not use pyenv but instead virtualenv which I've installed
❯ pip3 freeze | grep virtua
virtualenv==16.7.5
virtualenv-clone==0.5.3
virtualenvwrapper==4.8.4

My python.el seems to be alright until I added the requirement for virtualenvwrapper whereupon I'm greeted with the following errors:
Debugger entered--Lisp error: (error "Key sequence C-x C-a C-l starts with non-prefix ke...")
  define-key((keymap #^[nil nil keymap
#^^[3 0 set-mark-command back-to-indentation-or-beginning backward-char mode-specific-command-prefix delete-char move-end-of-line forward-char keyboard-quit help-command indent-for-tab-command electric-newline-and-maybe-indent kill-line recenter-top-bottom newline next-line open-line previous-line quoted-insert isearch-backward isearch-forward transpose-chars universal-argument scroll-up-command kill-region Control-X-prefix yank suspend-frame ESC-prefix toggle-input-method abort-recursive-edit nil undo self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command ...] #^^[1 0 #^^[2 0
#^^[3 0 set-mark-command back-to-indentation-or-beginning backward-char mode-specific-command-prefix delete-char move-end-of-line forward-char keyboard-quit help-command indent-for-tab-command electric-newline-and-maybe-indent kill-line recenter-top-bottom newline next-line open-line previous-line quoted-insert isearch-backward isearch-forward transpose-chars universal-argument scroll-up-command kill-region Control-X-prefix yank suspend-frame ESC-prefix toggle-input-method abort-recursive-edit nil undo self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command ...] self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command] self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command] self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command ...] (C-f6 . terminal-here-project-launch) (C-f5 . terminal-here-launch) (f8 . neotree-toggle) (67108924 . mc/mark-previous-like-this) (67108926 . mc/mark-next-like-this) (33554435 keymap (33554435 . mc/edit-lines)) (67108925 . er/expand-region) (company-dummy-event . company-ignore) (S-mouse-3 . kmacro-end-call-mouse) (C-wheel-left . mwheel-scroll) (S-wheel-left . mwheel-scroll) (wheel-left . mwheel-scroll) (C-wheel-right . mwheel-scroll) (S-wheel-right . mwheel-scroll) (wheel-right . mwheel-scroll) (C-wheel-down . mwheel-scroll) (S-wheel-down . mwheel-scroll) (wheel-down . mwheel-scroll) (C-wheel-up . mwheel-scroll) (S-wheel-up . mwheel-scroll) (wheel-up . mwheel-scroll) (drag-n-drop . ns-drag-n-drop) (ns-show-prefs . customize) (ns-toggle-toolbar . ns-toggle-toolbar) (ns-new-frame . make-frame) (ns-spi-service-call . ns-spi-service-call) (ns-open-file-line . ns-open-file-select-line) (ns-change-font . ns-respond-to-change-font) (ns-open-temp-file . [ns-open-file]) (ns-open-file . ns-find-file) (ns-power-off . save-buffers-kill-emacs) (S-mouse-1 . mouse-save-then-kill) (kp-next . scroll-up-command) (kp-prior . scroll-down-command) (kp-end . end-of-buffer) (kp-home . beginning-of-buffer) (s-left . ns-prev-frame) (s-right . ns-next-frame) (75497504 . ns-do-show-character-palette) (s-kp-bar . shell-command-on-region) (8388732 . shell-command-on-region) (8388656 . text-scale-adjust) ...) [24 1 12] gud-refresh)
  global-set-key([24 1 12] gud-refresh)
  byte-code("\301\302!\210\303\304\305\306\307\310\307\311&\7\210\312\300\313\314\315DD\316\317\320\307\304&\7\210\321\322\10\323\"\324\"\207" [gud-key-prefix require comint custom-declare-group gud nil "The \"Grand Unified Debugger\" interface.\nSupported ..." :group processes tools custom-declare-variable funcall function #f(compiled-function () #<bytecode 0x1fe4fa684d69>) "Prefix of all GUD commands valid in C buffers." :type key-sequence global-set-key vconcat "\f" gud-refresh] 8)
  require(gud)
  eval-buffer(#<buffer  *load*-652839> nil "~/.config/emacs/elisp/virtualenvwrappe..." nil t)  ; Reading at buffer position 826
  load-with-code-conversion("~/.config/emacs/elisp/virtualenvwrappe..." "~/.config/emacs/elisp/virtualenvwrappe..." nil t)
  require(virtualenvwrapper)
  eval-buffer(#<buffer  *load*-710263> nil "~/.config/emacs/elisp/lang-python.el" nil t)  ; Reading at buffer position 3306
  load-with-code-conversion("~/.config/emacs/elisp/lang-python.el" "~/.config/emacs/elisp/lang-python.el" nil t)
  require(lang-python)
  eval-buffer(#<buffer  *load*> nil "~/.config/emacs/init.el" nil t)  ; Reading at buffer position 2009
  load-with-code-conversion("~/.config/emacs/init.el" "~/.config/emacs/init.el" t t)
  load("~/.config/emacs/init" noerror nomessage)
  startup--load-user-init-file(#f(compiled-function () #<bytecode 0x1fe4f9815c91>) #f(compiled-function () #<bytecode 0x1fe4f9815ca5>) t)
  command-line()
  normal-top-level()

The solution was to change the counsel-projectile binding (I set it to the default C-c p SPC)


adding inital ui code

Added UI for Filters Step

Update the @patternfly version to use the TreeView component.

Will handle backend integration in subsequent pr.

Looks like a good start. For the switch, I'd personally like to see it 'on' by default with 'include' label and message under the filter entry. Or better yet a toggle which shows both available states... But what you have is according to the current design - we can discuss it with UX

sure :+1:


Add Customer Section under Organization menu

Hi,
I'm working for a small ISP, and I would like a customer section which reference the sites.
For exemple, a router of collect (in a DC) mutualize many customers under different interfaces (VLAN, ATM, PPP etc..)? I would like to attach an interface to a customer.
Do you see what I want to say ?
Thanks in advance.
Thomas V.

To complete :
A CPE Device is attached to a Circuit (Link) which one is attached to a PE Device (Providers Circuit + interface), which one is attached to a Customer Site, which is attached to a Customer.
It is a simple vision of an ISP from beginning to end,
Regards,
Thomas V.

It sounds like assigning tenants to objects will accomplish what you want. ("Tenant" is just a more generic term for customer.) You can assign tenants to sites, devices, and circuits.


minor refactoring according to best practices

I modified to repo structure a bit according to best practices.
that is - the interface Compressor is inside the directory compressors, and each compressor that implements the interface is inside it's own directory under compressors (same as we have transport dir with interface and inside we have kafka/sync-service implementation or alternatively same as we have db and then postgresql).
in addition I changed the package names to be easier and straight forward.

thank you


The application breaks when the last character is deleted

There are emojioneArea with the following parameters
emojioneArea({
    pickerPosition: "bottom",
    filtersPosition: "bottom",
    tonesStyle: "square",
    autocomplete: false,
    attributes: {
        spellcheck: true,
        autocomplete: "on"
    }
});

In all browsers with the Google Chrome engine, there is such an error, if you delete the last character from textarea, the application freezes, but if you remove attributes, there is no such error. There are two scenarios of operation, when the setup opens and textarea initialization occurs immediately, this scenario works correctly and the second, when initialization occurs in the settings when adding a block with textarea, an error appears, the error may be related to initialization?

Can you reproduce it in jsfiddle?
https://jsfiddle.net/by5tvgej/

@carpii I found a problem, along with the initialization of textarea, I initialize select2(), but I can't figure out what the reason is(

@carpii @mervick https://jsfiddle.net/rudbp8qw/3/


Headlabel and Taillabel for edges are missing

I'm building a parser/renderer for .json to UML for work. -> .dot example for an edge would be:
"node1" -- "node3" ["headlabel"="(1,*)",
"taillabel"="(0,1)"]
Can I or someone else add this feature, because the code is just a lot prettier not using a string builder for .dot but this lib only supports Label if I am not mistaken :)
PS: nice work so far

You can add any attributes to links/edges this way: node("node1").link(to(node("node3")).with("headlabel", "(1,*)"))

And now also node("node1").link(to(node("node3")).with(Label.of("(1,*)").head()))


Cannot set "native" kafka properties in KafkaBinderConfigurationProperties

The "configuration" attribute of KafkaBinderConfigurationProperties is defined as a Map<String,Object> and if you want to set any of the native, dotted notation Kafka properties, they end up being mapped wrong into the map:
spring:
  cloud:
    stream:
      kafka:
        binder:
          configuration:
            max.block.ms: 1000

Ends up being mapped to : max={block={ms=1000}}
I believe if the data type of that map is changed to Map<String,String> the value should be mapped correctly. This change would be consistent with how both KafkaConsumerProperties and KafkaProducerProperties map their configuration attribute.

Looks like the story is definitely about https://github.com/spring-cloud/spring-cloud-stream-binder-kafka and has been fixed via: https://github.com/spring-cloud/spring-cloud-stream-binder-kafka/commit/001cc5901e4b8d179237c8d12e13f28e2f011e2e.
We might consider to backport it into 1.2.x if we still support it.
@sabbyanandan ?
Anyway I'm closing this as fixed.
Feel free to open the backport request but already in the proper project.
Thanks


fix(hmr): Fix circular dep root starts hmr, and has invalidate in it,…

Infinite HMR caused by circular dep and hot.invalidate()

Description
Image a module A has dep B, and B also has dep A, if B has hot.invalidate() in it, and B triggers hmr, then it obviously will send vite:invalidate to the server, then B's importers all starts to propagate this update, and B's importer is A, which has B as its dependency again. So it will cause infinite loop.
How to reprod

Create a new vite project.
Add 2 modules, main and dep, main import some stuff from dep, and dep also import some stuff from main, add import.meta.hot.accept(() => { import.meta.hot.invalidate() }) to the dep.
Go to browser and open that page.
Save main.ts file

Additional context

What is the purpose of this pull request?

[x] Bug fix
[ ] New Feature
[ ] Documentation update
[ ] Other

Before submitting the PR, please make sure you do the following

[x] Read the Contributing Guidelines.
[x] Read the Pull Request Guidelines and follow the Commit Convention.
[x] Check that there isn't already a PR that solves the problem the same way to avoid creating a duplicate.
[x] Provide a description in this PR that addresses what the PR is solving, or reference the issue that it solves (e.g. fixes #123).
[x] Ideally, include relevant tests that fail without this PR but pass with it.

@JSerFeng would you add a test case in the HMR playground for this issue?
https://github.com/vitejs/vite/blob/main/CONTRIBUTING.md#extending-the-test-suite

@JSerFeng would you add a test case in the HMR playground for this issue? https://github.com/vitejs/vite/blob/main/CONTRIBUTING.md#extending-the-test-suite

Done

hi, bro. I'm running into a similar problem right now

Sorry, I'm busy in my school lately, and I don't have time to follow up currently, help needed

Since the PR has gone a bit stale, I'll close this for now and track in this new issue https://github.com/vitejs/vite/issues/16709. That way it's easier to track if anyone would like to contribute a fix.


[Vue] Problem with close Bottom Sheet

Android

After open Bottom Sheet, whene i wan't to close it i get exception:
(this as any).$closeBottomSheet();
Is any way to close bottom sheet manually and pass param to parent view?
Exception:
System.err: Calling js method onTouch failed
System.err: TypeError: Cannot read property '$emit' of null
System.err:
System.err: StackTrace:
System.err: closeCallback(file:///app\src\bottomsheet\vue\index.ts:34:41)
System.err:     at _whenCloseBottomSheetCallback(file:///app\src\bottomsheet\bottomsheet-common.ts:87:38)
System.err:     at dismissCallback(file:///app\src\bottomsheet\bottomsheet.android.ts:247:35)
System.err:     at BottomSheetDialogFragmentImpl.onDismiss(file:///app\src\bottomsheet\bottomsheet.android.ts:185:21)
System.err:     at ViewWithBottomSheet._hideNativeBottomSheet(file:///app\src\bottomsheet\bottomsheet.android.ts:219:38)
System.err:     at _closeBottomSheetCallback(file:///app\src\bottomsheet\bottomsheet-common.ts:100:21)
System.err:     at ViewWithBottomSheetBase.closeBottomSheet(file:///app\src\bottomsheet\bottomsheet-common.ts:117:26)
System.err:     at Vue.$closeBottomSheet(file:///app\src\bottomsheet\vue\index.ts:42:28)
System.err:     at webpackHotUpdate.../node_modules/ts-loader/index.js?!../node_modules/vue-loader/lib/index.js?!./components/GalleryBottomSheet.vue?vue&type=script&lang=ts&.GalleryBottomSheet.onEditTap(file:///app\components\GalleryBottomSheet.vue?479c:68:18)
System.err:     at touch(file:///app\components\GalleryBottomSheet.vue?3c36:29:0)

@wesoly935  what exception?

@farfromrefug updated, sorry, my mistake

@wesoly935 are you sure you are not calling closeBottomSheet twice?

If i debuggin js script in Developers tools _whenCloseBottomSheetCallback is called twice.
But in Bottom Sheet view I have a label with @tap event and in it i calling $closeBottomSheet() only once.

Temporary:
this.$nextTick(() => (this as any).$closeBottomSheet(1));
Resolve my problem, but passed 1 in argument is not received in closeCallback

@wesoly935 right now passed argument is not sent to callback ...
but i am not sure to understand why the tick would solve it

@wesoly935 could you test with latest versions?

No, I had problems with Bottom Sheet and I choosed other solution to display action modal.


COCC should be named something different.

COCC should be named CODE_OF_CONDUCT_COMMITEE.

good catch ...

@mergifyio rebase


InMillisecondsFromNow() sometimes returns a large number

When I change the system time, InMillisecondsFromNow() sometimes returns a large number.This causes SleepConditionVariableSRW() can not  return.I found that the return value of InMillisecondsFromNow() is exactly the system time difference I changed.Is this a problem?

It's a known issue. Hopefully you aren't adjusting your system clock by large amounts time too often.


Make Test Cherry compatible with IntelliJ Idea 2021.3

Make Test Cherry compatible with IntelliJ Idea 2021.3

New version 3.8 jas been uploaded to Jetbrains plugin marketplace


Add contrib filter for validating sha256 checksums

Commit Message: Add contrib filter for validating sha256 checksums
Additional Description: As requested by phlax@ to facilitate using envoy itself to cache github downloads for CI.
Risk Level: Contrib.
Testing: Some unit tests.
Docs Changes: n/a
Release Notes: n/a
Platform Specific Features: n/a

/docs


Issues with getting fastecdsa working in Windows

There are some issues getting the module working in Windows - I found fixes, but they aren't very elegant:

The Microsoft Visual C++ Compiler for Python 2.7 package doesn't seem to support C99 style variables, so I had to move all variable declarations to the start of functions.
Don't bother trying to get GMP working on Windows, just use MPIR instead.
If the MPIR library is compiled against a different runtime than fastecdsa (I used VS2015 for compiling MPIR and the previously mentioned VCC for Python 2.7 on fastecdsa), it will mysteriously crash after free()ing the buffer returned from mpz_get_str() - seems to be because memory allocators in different VC runtimes are sometimes incompatible. Changing the free to __gmp_default_free fixed this issue.

Yes, I suppose it's not explicitly stated in the README (which it probably should be), but the package isn't written with Windows in mind as one of the target OSes. This is precisely because compiling the C extensions on Windows is a major pain, the main issues which you've touched on already (installing GMP on Windows is a nightmare and the C compiler for Python isn't anything to write home about either).
Does MPIR expose the same functions / interface that GMP does or did you have to rewrite all the GMP library calls to MPIR calls?

MIPR was basically a drop-in replacement - just have to rename mipr.h to gmp.h and mipr.lib to gmp.lib in when you place them in your include/lib directories.

Understood. I can try to see if I can make the configuration / setup process play nice with Windows, but I can't promise any results. Ideally it would be nice to be able to just pip install fastecdsa on Windows without any further hassle but that seems a bit unrealistic given my experience writing packages for Windows. I'll keep the issue open until a satisfactory resolution is arrived at.

I try this steps:

Download from http://www.mpir.org/downloads.html   MPIR-2.6.0.source.bz2, unpack to MPIR-2.6.0
Download from  http://yasm.tortall.net/Download.html Win32 .exe (for general use on 32-bit Windows) (Not shure it needed)
rename it to yasm.exe and put to
C:\Users%username%\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\bin
Run cmd.exe, cd to unpacked MPIR-2.6.0 dir
run "C:\Users%username%\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat"
so set Visual C++ for Python\9.0 compiler
cd to unpacked MPIR-2.6.0\win dir
edit configure.bat
add
set ABI=32
set VCTARGET=x86
between :exitlp
and		:: ARCH is native ABI
save and run configure.bat
run make.bat
no errors/warnings
/optional/ run make.bat check -> OK
(make tune and make speed fails)
run gen_mpir_h.bat
copy MPIR-2.6.0\gmp.h to  C:\Users\User\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\include\gmp.h
copy(whith rename) MPIR-2.6.0\win\mpir.lib C:\Users\User\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\lib\gmp.lib

Well, first part done
as ymgve say,

I had to move all variable declarations to the start of functions

after this process
python setup.py build -> builded OK, but have linker "warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library"
python setup.py install
check at my project. It works!

Here is pre compiled versions for Windows https://github.com/ChillMagic/MPIR-Binary

Getting closer... still errors but they're at link time now. Used the 64bit mpir dll file as a gmp dll drop in, compiled via python setup.py build and get -
gmp.lib(mul_basecase.obj) : error LNK2019: unresolved external symbol __gmpn_addmul_2 referenced in function __gmpn_mul_basecase
gmp.lib(sqr_basecase.obj) : error LNK2001: unresolved external symbol __gmpn_addmul_2
build\lib.win-amd64-2.7\fastecdsa\curvemath.pyd : fatal error LNK1120: 1 unresolved externals

Able to build and install but something is still going wrong -
$ python setup.py build
$ python setup.py install
$ python setup.py test
running test
Traceback (most recent call last):
  File "C:\Python27\lib\runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "C:\Python27\lib\runpy.py", line 72, in _run_code
    exec code in run_globals
  File "C:\Users\A\Desktop\fastecdsa\fastecdsa\test.py", line 13, in <module>
    from .ecdsa import sign, verify
  File "fastecdsa\ecdsa.py", line 4, in <module>
    from fastecdsa import _ecdsa
ImportError: DLL load failed: The specified module could not be found.

Continuing to investigate...

Probably, "setup.py install" doesn't pack _ecdsa.pyd to egg file or egg file not yet in Lib\site-packages\
I will try to reproduce steps at fresh windows install to refresh my memory

I'm getting the .pyd files in the install, and indeed ipython recognizes that e.g. curvemath is an importable module, but when I try to import it the DLL load fails. I presume this is because it correctly sees that there is no underlying DLL for curvemath or _ecdsa. I have .exp and .lib and .obj files but I seem to be missing the bin/ folder that would hold the DLLs.

As I checkout my working machine, _ecdsa.dll not used at all. I  have this file only at build dir and after removing this folder, scripts works as usual.
If I remove ecdsa.pyd from Lib\site-packages\fastecdsa-1.6.4-py2.7-win32.egg (7zip helps) scripts fails with
File "d:\Python27\lib\site-packages\pkg_resources_init.py", line 1883, in
_extract_resource
timestamp, size = self._get_date_and_size(self.zipinfo[zip_path])
KeyError: 'fastecdsa\_ecdsa.pyd'
So, it looks like .dll have to be converted to .pyd and .pyd packed to egg

I had the same error. To fix it, just put mpir.dll  from MPIR-Binary-master\dll\x64\Release  in to the directory of package, C:\Python37\Lib\site-packages\fastecdsa

Here is somthing interesting - I have not directory of package, .\Lib\site-packages\fastecdsa just egg file in  .\Lib\site-packages
Different python build/install systems? How to check it?
Also, no mpir.dll at my machine at all. Have mpir.lib at MPIR build dir copyed to VC\lib\gmp.lib
Attached file is build log from scratch. But, from working machine, were exist working fastecdsa pack
build.log

Here is somthing interesting - I have not directory of package, .\Lib\site-packages\fastecdsa just egg file in .\Lib\site-packages
Different python build/install systems? How to check it?
Also, no mpir.dll at my machine at all. Have mpir.lib at MPIR build dir copyed to VC\lib\gmp.lib
Attached file is build log from scratch. But, from working machine, were exist working fastecdsa pack
build.log

You can just copy fastecdsa from egg directory to  site-packages.  Also I dont know about python 2.7. I've tested on 3+ only. My steps were:
copy gmp.h to C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include
copy mpir.lib to package directory, it could be C:\Python37\Lib\site-packages\fastecdsa or C:\Python37\Lib\site-packages\fastecdsa-1.6.5-py3.7-win-amd64.egg\fastecdsa

Hello, I encountered same problem, but solved.
I generate gmp.h, gmp.lib, gmp.def and gmp.dll from GMP.
I check what's name of DLL lack by DependencyWalker.
So I copy  libgmp-10.dll from gmp.dll.

You need to have an microsoft visual 2019 and Microsoft c++ in visual studio
to run the fastedcsa. You cannot install it without Microsoft c++. after that follow this instruction.

Download https://github.com/ChillMagic/MPIR-Binary
Download https://github.com/AntonKueltz/fastecdsa
rename mpir.h to gmp.h from MPIR-Binary-master\include and rename mpir.lib to gmp.lib from MPIR-Binary-master\lib\MD\x64\Release
Copy and paste gmp.lib C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.21.27702\lib\x64
Copy and paste gmp.h C:\Phyton3\include
I don't remember if I do this ( just put mpir.dll from MPIR-Binary-master\dll\x64\Release in to the directory of package, C:\Python37\Lib\site-packages\fastecdsa ) Do it last if you have error. if not working try to rename it again to gmp.dll But I guess it's not needed to install fastedcsa.
Open CMD and cd to where you put your fastecdsa E:\Download\fastecdsa-master
when your cmd is in the directory type: python setup.py build
after installation type again: python setup.py install
Good Luck treasure hunting. Give me and the creator some tip you find one 3LkF5XDiEvW9xbVLAcjPHmq4JL9QPEUNYR

Per @naphy0's suggestion, i've (probably) gotten a build fully working by doing the following steps:

Install Visual Studio 2019 buildtools, and adding the C++ suite from the main menu.
Downloading MPIR-Library, and adding include/** to $pyinstall/include, and MD/win32/Release to $pyinstall/libs
Add extra_link_args=["/NODEFAULTLIB:MSVCRT"] to every extension object in setup.py (since the linker was complaining about it)
Drink some coffee while running python setup.py build
Watch intensely while running python setup.py test
And all of that resulted into a successful test.

Ran 32 tests in 9.355s

OK

I pushed a commit to my fork that has the prerequisites all ready for a windows build, the only thing that needs to be installed is buildtools from here.
https://github.com/ShadowJonathan/fastecdsa-any/commit/041d9f4aecc8461ef75df290b3289f15a2b39d41
If any contributor from here can please pull on a windows machine, build, and confirm the library works as intended, please let me know. This library is required in libp2p, and currently any windows build will fail because of a wheel missing from the pypi repo (see https://github.com/libp2p/py-libp2p/issues/363).

@AntonKueltz

Im currently on travel but will verify on my Windows VM as soon as I am able. Thanks for your work toward getting this package building on Windows!

I've also been poking around looking at automated wheel builds for windows in general, this setup has worked on my normal desktop computer (due to some other options not wanting to work before), so I am not 100% sure either about this configuration working all the time, nor if the produced library is stable enough for use.

Thanks for your work toward getting this package building on Windows!
No problem!

I've confirmed that building it like this only works with 32-bits python installs, anything 64-bit (amd64) fails while spitting this:
...
curveMath.c
src/curveMath.c(81): warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data
src/curveMath.c(115): warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data
src/curveMath.c(116): warning C4267: 'initializing': conversion from 'size_t' to 'int', possible loss of data
...
   Creating library build\temp.win-amd64-3.8\Release\src\curvemath.cp38-win_amd64.lib and object build\temp.win-amd64-3.8\Release\src\curvemath.cp38-win_amd64.exp
gmp.lib(mulmod_2expm1.obj) : error LNK2001: unresolved external symbol __security_check_cookie
gmp.lib(mulmid.obj) : error LNK2001: unresolved external symbol __security_check_cookie
gmp.lib(mulmid_n.obj) : error LNK2001: unresolved external symbol __security_check_cookie
gmp.lib(toom42_mulmid.obj) : error LNK2001: unresolved external symbol __security_check_cookie
gmp.lib(mulmod_2expp1.obj) : error LNK2001: unresolved external symbol __security_check_cookie
gmp.lib(inv_divappr_q_n.obj) : error LNK2001: unresolved external symbol __security_check_cookie
gmp.lib(dc_divappr_q.obj) : error LNK2001: unresolved external symbol __security_check_cookie
gmp.lib(hgcd_appr.obj) : error LNK2001: unresolved external symbol __security_check_cookie
gmp.lib(dc_bdiv_q.obj) : error LNK2001: unresolved external symbol __security_check_cookie
gmp.lib(hgcd_step.obj) : error LNK2001: unresolved external symbol __security_check_cookie
(etc.)

(this is after adding extra libraries under lib/MD/x64 and placing their folders first)

I changed all libraries from MD to MT ones, and added a if-else chain that looks at distutils.utils.get_platform() to automatically add the right library dirs.
32-bit and 64-bit compile now (on one windows machine), the 64-bit one spits many warnings that're probably interesting to look at, but other than that, tests for both succeed.

Was able to get your branch to build locally (only with python3, the compiler python2 wants is quite old). Since python2 is EOL in less than a month I will fold this into the 2.0 release that will only support python3 and make some backwards incompatible changes. Will also build and distribute wheels for ease. Will have to figure out how to get around bundling the GMP / MPIR code since having it in the repo will be incompatible with the public domain license.
Thanks for everyone's efforts towards getting this working on Windows, it took some time but we're almost there.

All of my efforts are in https://github.com/ShadowJonathan/fastecdsa-any/tree/win32 and instructions on how to make it work are this and this comment (disregard the commit link in the last comment)
I've only bundled MPIR with that branch to quickly test it on multiple machines, the exact instructions on where which files come from are in my previous comments, the actual repository where the binary files are stored is https://github.com/ChillMagic/MPIR-Binary
I've managed to build this on 3.7-32-bit, 3.8-32-bit, and 3.8-64-bit, altough the latter build worked and tested, it gave a few warnings.
I've not been able to discern any stability issues whatsoever, but that doesn't mean they cannot be there, I've never tested the builds beyond the default test suite.

(oh whoops, did not read message in its entirety)

Yeah I think the way forward is to update the documentation to state which steps need to be taken if you wish to build from source on Windows rather than via a wheel. The test suite has pretty good coverage so I'm not too worried about stability issues (beyond the known issues in the tracker here) but I suppose as more people use it on Windows things will be reported if they're there.
I should also clarify that I can't speak to 32 bit machines as I only have a 64 bit machine available to test with currently.

You need to have an microsoft visual 2019 and Microsoft c++ in visual studio
to run the fastedcsa. You cannot install it without Microsoft c++. after that follow this instruction.

Download https://github.com/ChillMagic/MPIR-Binary
Download https://github.com/AntonKueltz/fastecdsa
rename mpir.h to gmp.h from MPIR-Binary-master\include and rename mpir.lib to gmp.lib from MPIR-Binary-master\lib\MD\x64\Release
Copy and paste gmp.lib C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.21.27702\lib\x64
Copy and paste gmp.h C:\Phyton3\include
I don't remember if I do this ( just put mpir.dll from MPIR-Binary-master\dll\x64\Release in to the directory of package, C:\Python37\Lib\site-packages\fastecdsa ) Do it last if you have error. if not working try to rename it again to gmp.dll But I guess it's not needed to install fastedcsa.
Open CMD and cd to where you put your fastecdsa E:\Download\fastecdsa-master
when your cmd is in the directory type: python setup.py build
after installation type again: python setup.py install
Good Luck treasure hunting.

I had to do an additional step:
Copy and paste gmp.lib C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64
It was looking for gmp.lib there, not in C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.21.27702\lib\x64

I hope it will be helpful for those who build with github actions.
https://github.com/eqlabs/pathfinder/pull/389/files

Compilation of [gmp] is now very easy, and [mingw64 + msys2 + vcpkg] can be mixed with future tool chains. But [fastecdsa] still can't compile, very distressed

Tbh at this point in time I would just recommend getting it working in GHA with cibuildwheel and call it a day

Building a wheel vi cibuildwheel for windows is non trivial because of the third party native libs that need to be set up. We can't use e.g. brew or apt-get to install GMP. FWIW on the latest main branch there is integration with GHA that builds wheel for linux and macos, still ironing out the kinks there.
I did manually build a wheel for tag v2.3.0 and CPython3.10 that can be downloaded here or via pip install fastecdsa==2.3.0 (note you have to be using a CPython3.10 interpreter / pip for the wheel to be used). Was able to install and run benchmark successfully on x64 Windows 10 locally. Is anyone able to verify that this wheel works for them as well?
Steps I used are what @naphy0 recommended above -

Install python - https://www.python.org/ftp/python/3.10.9/python-3.10.9-amd64.exe
Install build tools - https://visualstudio.microsoft.com/visual-cpp-build-tools/
Copy headers to python include directory - cp gmp.h C:\<path to install>\Python\Python310\include\
Copy lib to MSVC build tools libs - cp gmp.lib 'C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\<version>\lib\x64\'
Clone this repo and run pip setup.py build_ext --inplace to check that compiling C extensions works

The trickiest part about building locally IMO is getting GMP into a directory that the C compiler / linker has on its path when it builds the project. I don't know enough about windows wheels to be able to say if wheels solve this problem by normalizing the path for the native third party libs. If someone is who is not able to build the project from source could check if the wheel solves their issues that would be appreciated.

We can't use e.g. brew or apt-get to install GMP.

...why is that a problem? You can use choco / winget if it's stored there, or manually download and run the installer from the command line (yes, it's possible if it's based off of installshield and the likes), or just hack around and store files in the correct locations.
It only needs to be reproducible once for it to be reproducible forever after, I highly recommend looking into it.

Are any of those tools available on the build hosts that cibuildwheel uses? Feel free to create a PR to update the existing build config to do this. Again, Windows isn't my standard development OS, and while I do want to support Windows developers in this package I'm not the best person to implement the tooling.

I might make a PR, I'll add it to my todo list

Update: I've taken a look at the package manager options, and so far only vcpkg seems to support a simple install, according to this SO answer

更新：根据这个 SO answer，我查看了包管理器选项，到目前为止，似乎只有 vcpkg 支持简单安装
Just take a look, when vcpkg is successfully installed gmp, and see how to make fastecdsa support windows

I've come basically as far as this CI run, with this workfile, but it gets stuck on some building error/problems wrt it not finding __imp____gmpz_clears and the likes.
if anyone can take a look that'd be swell

Taking a look, it seems like it's able to find the GMP headers but not the library. The output is showing that the object files are being created, but it appears linking is failing when it tries to resolve the GMP symbols.


DLT files extractor integration

Feature

scanning DLT file and detecting files
possibility to extract file from DLT file and save it
detecting metadata of file and preview supported formats (like images, videos and audio - all formats, which are supported by webkit)

Integration steps

create implementation of "scanner/extractor" as module into application/apps/indexer/parsers/src/dlt
scanning method should take as argument (optionally) filters settings (dlt_core::filtering::DltFilterConfig crate dlt_core). If filters are provided, the scanner should consider only filtered messages.
scanner should also takes as an argument cancelation token (tokio_util::sync::CancellationToken). It should allow canceling scanning operations.
create unit tests (in the scope of application/apps/indexer/parsers/src/dlt) (here probably we need some DLT files for automatic testing)
create a module in rs-bindings with public API scanner's methods (as an example - application/apps/rustcore/rs-bindings/src/js/mods/dlt.rs).
create representation for module in ts-bindings (as example can be used application/apps/rustcore/ts-bindings/src/native/native.dlt.ts)
add jasmin test-specification into: application/apps/rustcore/ts-bindings/spec (test should not only scan a file, but also create a session, open target DLT file with some filters, scan it and at the end we should make sure - session and scanner operated with same data)
include jasmin-test into build-tasks scripts/tasks.rb and into interactive developer menu scripts/interective/menu.rb

done with 3.9.x


Expand skeleton height config

Replaces the basic height configuration that is part of AutoBone with one that includes the floor height. This value is also used when resetting proportions, so you no longer need to be in a specific pose for that.
Requires https://github.com/SlimeVR/SolarXR-Protocol/pull/147.
Remaining tasks:

[x] Handle not having positional trackers
[x] Load current height/floor values from config

Loaded values are valid if height - floor > 0.4

[x] Value validation

Values are valid if height - floor > 0.4
Must warn user they cannot continue because the resulting height is invalid

[x] Warn user if no height is configured when resetting proportions (default will be used)

One issue with this currently is there's no proper way to configure the user's height without going through the setup wizard or AutoBone... This is not ideal as the height is also used for resetting the proportions and there are cases where you cannot do AutoBone. We need to have the setup section available on its own in some capacity.

Ok, butter, i think we should stop for now on this PR and merge it, and make a new PR on refactoring how Body proportions menu looks, much better on the objective being able to adjust your height, or doing autobone or manual proportions in a more intuitive way instead of the current choose menu


help

Hello,
can you support with this app?
In Fibaro I'm retrieving:
[03.02.2022] [11:38:16] [DEBUG] [QUICKAPP919]: Get Google refresh token
[03.02.2022] [11:38:16] [ERROR] [QUICKAPP919]: getRefreshToken() status is 400: { "error
[03.02.2022] [11:39:16] [ERROR] [QUICKAPP919]: Need to refresh Nest Authentication code for quickApp 919 with https://nestservices.google.com/partnerconnections/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/auth?redirect_uri=https://www.google.com&access_type=offline&prompt=consent&client_id=xxx-xxx.apps.googleusercontent.com&response_type=code&scope=https://www.googleapis.com/auth/sdm.service

Hello,
Have you follow the installation guide and set the Variables (projectId, clientId, clientSecret) in the Fibaro Home Center
https://github.com/GuillaumeWaignier/fibaro/blob/master/quickApp/Nest/README.md
Then this URL in the log will be used to get the Authentication code.

Thank you!
We tried from beginning, step by step.
qapp received token but has an error with the new device creation:
[09.02.2022] [09:36:40] [DEBUG] [QUICKAPP487]: QuickApp:onInit
[09.02.2022] [09:36:40] [TRACE] [QUICKAPP487]: Child devices:
[09.02.2022] [09:36:40] [ERROR] [QUICKAPP487]: getAccessToken() status is 400: { "error
[09.02.2022] [09:37:40] [DEBUG] [QUICKAPP487]: Get Google refresh token
[09.02.2022] [09:37:40] [DEBUG] [QUICKAPP487]: getRefreshToken() succeed
[09.02.2022] [09:37:40] [TRACE] [QUICKAPP487]: Bearer ya29.A0ARrdaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[09.02.2022] [09:38:41] [ERROR] [QUICKAPP487]: listNestDevice() status is 403: { "error
[09.02.2022] [09:38:54] [DEBUG] [QUICKAPP487]: QuickApp:onInit
[09.02.2022] [09:38:54] [TRACE] [QUICKAPP487]: Child devices:
[09.02.2022] [09:39:54] [ERROR] [QUICKAPP487]: listNestDevice() status is 403: { "error
[09.02.2022] [09:40:54] [ERROR] [QUICKAPP487]: listNestDevice() status is 403: { "error
[09.02.2022] [09:41:54] [ERROR] [QUICKAPP487]: listNestDevice() status is 403: { "error
[09.02.2022] [09:42:35] [DEBUG] [QUICKAPP487]: QuickApp:onInit
[09.02.2022] [09:42:35] [TRACE] [QUICKAPP487]: Child devices:

It seems there is a problem with Authorization (the code is 403 --> it correspond to a forbidden access).
With the URL of the form https://nestservices.google.com/partnerconnections/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/auth?redirect_uri=https://www.google.com&access_type=offline&prompt=consent&client_id=xxx-xxx.apps.googleusercontent.com&response_type=code&scope=https://www.googleapis.com/auth/sdm.service
which rights have you selected ?

Have you several Google accounts ?
You need to use the same google Account for all processes
(https://developers.google.com/nest/device-access/authorize#link_your_account)
If you call the API in a sheel command line (cmd tool), what is the result ?
curl -X GET -H "Content-Type: application/json"  -H "Authorization: Bearer access-token"  https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices

You need to replace the project-id and the access-token with your custom values. The  access-token is logged inside Fibaro log.
https://developers.google.com/nest/device-access/authorize#make_a_device_list_call
else, you can modify the folowing line of code in the quickApp:
Replace
else
     self:error("listNestDevice() status is " .. response.status .. ": ", response.data)
 end

by
else
     self:error("listNestDevice() status is " .. response.status .. ": ", json.encode(json.decode(response.data)))
 end

You will have a better error log.


Add note about memory layout in .to_owned() docs

Questions:

Is this the right place to put this?
Can we improve upon these example implementations? They're pretty verbose.

My feelings:

to_owned is one of the places I looked; I think it is a good location

This location has the advantage of also being to describe Fortran layout, which wouldn't work so well on is_standard_layout

I'm also glad that it includes the search phrase "standard layout"

I would consider #441 to be solved by this.


Version update to 1.0.1

Coverage decreased (-0.9%) to 88.664% when pulling b7ff3961372542c9431f2670beac88cbbd3323ee on jeronimoalbi:develop into d951534848f92457cd8812bbb10e581e617bf32e on kusanagi:master.


New to Ember.Net - advice needed

I've gone through the console application tutorial and can parse the tree loaded into TinyEmber+. I'm struggling to get data changes once running - creating a handler for PropertyChanged of a Parameter is not getting called. I can get a data update by using the same method as described in the static approach to reacting to changes. However, my driver will need to receive all parameter changes for a dynamic environment. I am wondering if I am missing a trick to get my consumer updated? I am running the Ember+ Viewer and can see update messages received as I change data in TinyEmber+ - this is what I need in my application :-)

I've gone through the console application tutorial and can parse the tree loaded into TinyEmber+. I'm struggling to get data changes once running - creating a handler for PropertyChanged of a Parameter is not getting called.

Strange, you should be able to get exactly the same notifications through the dynamic Interface as you do through the static interface (it's the same implementation after all).

However, my driver will need to receive all parameter changes for a dynamic environment. I am wondering if I am missing a trick to get my consumer updated? I am running the Ember+ Viewer and can see update messages received as I change data in TinyEmber+ - this is what I need in my application :-)

For this purpose you will need to subscribe to the PropertyChanged event of all parameters.

I've parsed the tree down to the Parameter level and attached a handler to the PropertyChanged event. After changing the same parameter value in TinyEmber+, the PropertyChanged event does not fire. Re-reading the documentation it says that the consumer will automatically send GetDirectory commands to get updates for all declared parameters. If you could update your dynamic console application example to show this working that would be great.

If you could update your dynamic console application example to show this working that would be great.

I'll do that, stay tuned.

On a slightly different subject - I used the sample code to try and walk a Junger frame at a customer site and it threw and exception with: "The remote host has failed to answer a KeepAliveRequest within half the timeout period". The Enmber+ Viewer can connect and I am able to view the tree. However, in the message window it reports a Glow Error: Glow DTD version mismatch: found version 2.10, expected 2.31!

If you could update your dynamic console application example to show this working that would be great.

http://lawo.github.io/ember-plus-sharp/html/7cdb703a-14dd-42d3-8ea2-28a9b8af6663.htm

On a slightly different subject - I used the sample code to try and walk a Junger frame at a customer site and it threw and exception with: "The remote host has failed to answer a KeepAliveRequest within half the timeout period".

The standard keep-alive timeout is 3 seconds. Some providers struggle to answer KA requests when they are busy, please see whether increasing the timeout changes anything.
http://lawo.github.io/ember-plus-sharp/html/7345C981.htm

The Enmber+ Viewer can connect and I am able to view the tree. However, in the message window it reports a Glow Error: Glow DTD version mismatch: found version 2.10, expected 2.31!

I'm not the author of the Ember+ Viewer, but I believe you can safely ignore that message.

I assume this has been resolved. If not, feel free to reopen.

Yes, thank you. With our driver architecture I will investigate the S101 interface as I need a more polling style approach

Yes, thank you. With our driver architecture I will investigate the S101 interface as I need a more polling style approach

You can do polling with Ember+ Sharp, I just don't understand why you'd want that? Can you please explain?

The drivers run as hidden console applications. They handle multiple physical devices with each Device being polled at a custom frequency. When the polling is due, a worker thread is launched that runs to completion. I'd therefore want to create the connection to the Ember device on start-up (or after an error), and then read the contents of the configured tree items during the poll task.

When the polling is due, a worker thread is launched that runs to completion. I'd therefore want to create the connection to the Ember device on start-up (or after an error), and then read the contents of the configured tree items during the poll task.

You can certainly do that, namely by awaiting Consumer.CreateAsync and then immediately calling Consumer.Dispose. You can still call the Consumer.Root getter afterwards and process the retrieved data.
However, as you might have noticed already, Consumer.CreateAsync is often rather resource-hungry, especially for large trees. This is because the data describing the part of the tree you are interested in needs to be queried, received and parsed. But, after this initial setup phase, only changes are sent back and forth, which tends to be orders of magnitude cheaper. So, if at all possible, I would advise you to keep your Consumer objects connected, which gives you immediate access to all the current data when the polling is due.

Thanks. I did run tests based on your description above but I only got updated parameter data if I disposed of the consumer and then re-created it (I can't await the on-change method described in the documentation as it blocks until the data changes). If I still use the consumer approach I will look to implement a static interface to greatly reduce the number of tree elements.

I did run tests based on your description above but I only got updated parameter data if I disposed of the consumer and then re-created it

No, if you keep your consumer alive then the values of all parameters should always be identical to the values of their respective provider parameters. Changes are automatically and continually propagated back and forth until you call Consumer.Dispose(). If that doesn't work for you then this sounds like a bug.

(I can't await the on-change method described in the documentation as it blocks until the data changes).

If I understand your scenario correctly, then you don't have to wait for the PropertyChanged event to fire. In your polling handler, you'd simply take the already existing Consumer object and grab whatever data you need from the tree and process it (remember that all properties of all elements are continually kept in sync).

OK, I'll re-run my test and if it doesn't work I'll post the code here. Thanks again!

Quick question: To implement the polling interval, are you by any chance calling Thread.Sleep?

Yes, it was used in my previous test where I created a loop to monitor the tree values.

Yes, it was used in my previous test where I created a loop to monitor the tree values.

Ahh, this is almost certainly the problem then. Thread.Sleep blocks the current thread, which is something you should almost never do in code that uses async and await. Please try Task.Delay instead.

Good spot! Using Task.Delay allows the tree updates to come through (it shows my lack of knowledge of the async environment). I'll need to think about a different driver implementation as the code has to be wrapped by an AsyncPump.Run() and this doesn't exit unless the client/consumer is disposed. I could implement a poll-style with static elements to reduce the tree size but connecting/disconnecting seems every inefficient and will put a needless load on the remote device. The other approach is to have the AsyncPump.Run() active for the lifetime of the driver. Now that I am getting updates this seems the best approach.
Thanks for your patience!

I'll need to think about a different driver implementation as the code has to be wrapped by an AsyncPump.Run() and this doesn't exit unless the client/consumer is disposed.

Right, you must call both Consumer.Dispose() and S101Client.Dispose(), otherwise AsyncPump.Run() will never complete.

The other approach is to have the AsyncPump.Run() active for the lifetime of the driver. Now that I am getting updates this seems the best approach.

Correct.

Using the updated test application to try against a real Junger frame, I am getting an error of form: 'The provider failed to send the children for the element with the path..."
The S101Client timeout is set to 30000 and the buffer size is set to 32000.
I've also set the TcpClient receive timeout to 30000.
Are there any other timeouts that can be configured, assuming this is a timeout issue?

The S101Client timeout is set to 30000 and the buffer size is set to 32000.

The default for the buffer size of 8192 should be adequate for pretty much all applications.

I've also set the TcpClient receive timeout to 30000.

That's probably not necessary either...

Are there any other timeouts that can be configured, assuming this is a timeout issue?

Yes, most likely you need to increase the default of 10000 passed to Consumer.CreateAsync:
http://lawo.github.io/ember-plus-sharp/html/8F30E950.htm

I've set all timeouts to 60000 and now I don't get an error but the Consumer.CreateAsync hasn't returned (after apprimately 5 minutes of waiting). The Ember+ Viewer can connect and view all items. Note that the Junger Frame has 20 modules present.

I've set all timeouts to 60000 and now I don't get an error but the Consumer.CreateAsync hasn't returned (after apprimately 5 minutes of waiting).

Hmm, that's odd. Can you please share the snippet of code that you use to connect? Thanks.

I have the variable outside a using as I was testing having a separate  connection process:
    private sealed class MyRoot : DynamicRoot<MyRoot> {}
    private static S101Client client;
    private static Consumer<MyRoot> consumer;

    static void Main(string[] args)
    {
        if (args.Count() == 1)
        {
            try
            {
                AsyncPump.Run(
                    async () =>
                    {
                        // Create TCP connection
                        var tcpClient = new TcpClient();
                        await tcpClient.ConnectAsync(args[0], 9000);
                        tcpClient.ReceiveTimeout = 60000;

                        // Establish S101 protocol
                        // S101 provides message packaging, CRC integrity checks and a keep-alive mechanism.
                        var stream = tcpClient.GetStream();
                        client = new S101Client(tcpClient, stream.ReadAsync, stream.WriteAsync, null, 60000, 32000);
                        consumer = await Consumer<MyRoot>.CreateAsync(client, 60000);
                        while (true)
                        {
                            WriteChildren(consumer.Root, 0);
                            await Task.Delay(1000);
                            if (Console.KeyAvailable)
                            {
                                consumer.Dispose();
                                client.Dispose();
                            }
                        }
                    });
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        else
        {
            Console.WriteLine("No address specified");
        }
        Console.WriteLine("Hit any key to close...");
        Console.ReadKey(true);
    }

At first glance, the code looks fine. I can't test it right now, as I don't currently have access to a provider with sufficiently many elements in its tree. I'll get back to you on that later. In the mean time, can you please try without the line tcpClient.ReceiveTimeout = 60000;? It seems unlikely that this will change anything, but just to make sure...
I suspect part of the problem lies in the amount of data transferred. Can you please also try with the static interface, requesting only the data you really need.

Using Ember+ Viewer, the tree structure identifiers are:
IP Address
__C8000
____c8087[00h]
______status
________preset
__________value
Can you confirm that the definitions are correct please as I am getting the following error:
No data value available for the required property EmberTest.Program+C8000.C8087
in the node with the path /C8000/c8087[00h].
    private sealed class C8000Root : Root<C8000Root>
    {
        internal C8000 C8000 { get; private set; }
    }

    private sealed class C8000 : FieldNode<C8000>
    {
        [Element(Identifier = "c8087[00h]")]
        internal C8000 C8087 { get; private set; }
    }

    private sealed class C8087 : FieldNode<C8087>
    {
        internal Status Status { get; private set; }
    }

    private sealed class Status : FieldNode<Status>
    {
        internal IntegerParameter Preset { get; private set; }
    }

I guess this line
internal C8000 C8087 { get; private set; }
should rather be
internal C8087 C8087 { get; private set; }
?

I still got and error but it is further down the tree:
No data value available for the required property EmberTest.Program+C8000.C8087.Status
in the node with the path /C8000/c8087[00h].

I still got and error but it is further down the tree:

Ahh yes, I missed the other errors first time round: Both the Status and Preset property must be decorated with an appropriate Element attribute (the identifier is case-sensitive).

One step further:
No data value available for the required property EmberTest.Program+Status.Preset in the node with the path /C8000/c8087[00h]/status.
It takes 30 seconds before the error is reported.
    private sealed class C8000Root : Root<C8000Root>
    {
        internal C8000 C8000 { get; private set; }
    }

    private sealed class C8000 : FieldNode<C8000>
    {
        [Element(Identifier = "c8087[00h]")]
        internal C8087 C8087 { get; private set; }
    }

    private sealed class C8087 : FieldNode<C8087>
    {
        [Element(Identifier = "status")]
        internal Status Status { get; private set; }
    }

    private sealed class Status : FieldNode<Status>
    {
        [Element(Identifier = "preset")]
        internal IntegerParameter Preset { get; private set; }
    }

Can you please post a screen shot of the tree in the Ember+ Viewer? Thanks.

I have a suspicion, it appears that the provider sends the identifier out of order: C-0 appears in the fifth position instead of the first. Due to an oversight in the Ember+ specification this is technically allowed, but all providers I have so far seen send the identifier in the first position. Unfortunately, the Ember+ Sharp Library currently requires that the identifier is sent first. I can probably fix this, but not without sacrificing a fair bit of processing performance.
To confirm my suspicion, can you please connect as you did before, but this time with a logger...
using Lawo.EmberPlusSharp.Glow;
...
var logger = new S101Logger(GlowTypes.Instance, File.CreateText("log.xml"));
client = new S101Client(tcpClient, stream.ReadAsync, stream.WriteAsync, logger, 60000, 32000);
... and attach the log file to your next post?
Thanks!

Please find attached log file as requested:
log.zip

Thank you very much, this confirms my suspicion. I will fix this as soon as I can.

No problem. Thank you for your support.

The bug should be fixed. As expected, the performance hit is rather hefty (+~70%). I will try to optimize this further. May I ask you to try again with the current release?
Thanks for your patience!

Using the static tree data is being returned :+1:
When I tried to use the dynamic tree I got the error: 'The remote host has failed to answer a KeepAliveRequest within half the timeout period'
Is it possible to create a static tree programmatically as I could convert my driver configuration to a tree before the CreateAsync?

When I tried to use the dynamic tree I got the error: 'The remote host has failed to answer a KeepAliveRequest within half the timeout period'

Depending on how long you can afford to wait for Consumer.CreateAsync to return, you might be able to fix this by increasing the timeout passed to S101Client. Your mileage may vary though, internally we have providers where the retrieval of the full tree takes more than 5 minutes and the resulting in-memory data structure uses more than 100MB. Consequently, nobody ever downloads the full tree for these providers.

Is it possible to create a static tree programmatically as I could convert my driver configuration to a tree before the CreateAsync?

Not currently, but it shouldn't be too hard to implement.

Let me clarify: There's no way to use the static interface programmatically. After all, the compiler must know the types so that you can access their properties in your program. However, the dynamic interface can be extended, so that only the relevant nodes are requested from the provider.

Let me clarify: There's no way to use the static interface programmatically. After all, the compiler must know the types so that you can access their properties in your program. However, the dynamic interface can be extended, so that only the relevant nodes are requested from the provider.

This was my understanding. It would be the most efficient approach for my driver interface too. Is this something you could implement in the near future?

Is this something you could implement in the near future?

Define "near future" ;-). Seriously, I'm currently swamped with other work, but I'll probably have something usable in two weeks. Can you test and implement with the static interface in the mean time?

If you could have something to test in two weeks that would be fantastic - I am not wishing to add to your stress levels and thank you for your continued support. I can perform some more basic testing but with the configurable nature of our system there can be many permutations of driver setup so the static approach isn't really a viable solution.

BTW, have you had a look at the mixed interface part of the tutorial yet? Depending on how configurable your system is, the mixed interface approach could help you to confine the full retrieval of data to the branches you're interested in.

I have taken another look at the mixed mode. I would need to perform a detailed site survey to review how all the frames are populated (currently not all the equipment has Ember enabled). This would only be a temporary solution as it would be fixed for one manufacturer.

Ok, understood. I'll let you know as soon as I have something usable.

As always, things took longer than anticipated. Now that I'm on it, it turns out that #21 will require quite a bit of effort to get right. With all the other stuff that's currently on my plate, I'm afraid it will be at least another two weeks before I might have something for you to try. Sorry!

Ok. Thanks for your continued support.

I've pushed a commit that shows how the interface for #21 will probably look like. If you like, you can have a look at:

ChildrenRequestPolicy.cs
INode.cs, lines 20-28
Consumer.cs, lines 188-198

It looks like I'm done. Please have a look at the new release and let me know whether the new feature works as you would expect. Here are direct links to the documentation:

ChildrenRetrievalPolicy
INode.ChildrenRetrievalPolicy
Consumer.CreateAsync, also see other overloads.

Sorry, I've been busy on other projects. I'll try and test this later today.
Thanks

Sorry for the delay. I've rebuilt by solution and confirmed that by testing with TinyEmber the original approach works. I'm trying to understand how I define the items I am interested in. For example, using the Sapphire example, if I just wanted to access "Sapphire/Sources/FPGM 1/Fader/dB Value" and "Sapphire/Sources/FPGM 2/Fader/dB Value" how would this be achieved?

In the Main Method you'd call CreateAsync and pass ChildrenRetrievalPolicy.DirectOnly. When CreateAsync returns, the Children property of Consumer.Root will contain the node with the identifier "Sapphire", but the "Sapphire" node itself does not yet have any children. You'd then set the ChildrenRetrievalPolicy property of the "Sapphire" node to ChildrenRetrievalPolicy.DirectOnly and await Consumer.SendAsync. When SendAsync returns the Children property of the "Sapphire" should contain its direct children (the nodes "identity" and "Sources"). You'd then repeat the process with the "Sources" node and so forth until you have all children you are interested in.

Perfect. I'll implement and report back

This is working fine with TinyEmber :+1: . I'll now test it with a Junger frame

Pulling Meter data back from a Junger frame:

Congratulations! 👍

Thank you so much for your support

You're welcome, I'm glad I could help.


Number of documents to retrieve from cognitive search (RAG)

Hi,
it would be cool, if we could configure the maximal amount of documents to retrieve from AI Search/Cognitve Search in the RAG process, like it is common in many other "chat with your data" reference implementations.
Could this be an enviroment variable?
Kind regards,
sxlabs

We found the solution in ISemanticMemoryClient Extension.


Change to use dbt-core-interface instead of vendering

ref: https://github.com/z3z1ma/dbt-osmosis/issues/93

I tried to replace the code under src/dbt_osmosis/vendored/dbt_core_interface with https://github.com/z3z1ma/dbt-core-interface. However, there is a subtle difference between these codes, and I expect this difference to grow again in the future, as there are likely to be more recent modifications to the code under vendering.

https://github.com/z3z1ma/dbt-osmosis/pull/107

In order to continue to make dbt-osmosis a good tool, I think changes are needed to stop vendering and use dbt-core-interface. I will do the following to accomplish this, but would like to hear your thoughts.

Send several pull requests to delete the differences between src/dbt_osmosis/vendored/dbt_core_interface and https://github.com/z3z1ma/dbt-core-interface to the dbt-core- interface repository
After the difference is eliminated, delete the code in src/dbt_osmosis/vendored/dbt_core_interface and switch to importing dbt-core-interface.

If it looks good, I will start with small steps.

I agree. The original intent of the dbt-core-interface and the fact it even exists as a single file was actually to drive this: https://github.com/AltimateAI/vscode-dbt-power-user/blob/master/dbt_integration.py
So vendoring it in dbt-osmosis was just proof of concept that anyone can work with dbt api since this file will handle the plumbing. I think its totally fine to simply depend on it and keep changes in one place.

Thank you very much. Now, I will work on sending a pull request to the https://github.com/z3z1ma/dbt-core-interface repository little by little to eliminate the differences!


Only 30 videos found

Describe the bug
It says 30 video found but there are more videos. I picked Mass Download (Username) and Without Watermark.
Expected behavior
Download all videos.
This is with latest code from GitHub. I tested with different TikTok accounts - always limited to 30 videos.

I haven't had time to make a TikTok captcha bypass yet. So I made the browser visible, and you can fill in the captchas manually

So I made the browser visible,

Sorry, is this documented somewhere?  I don't know how this works.

clone this repository again, then do it as usual. Then you will see a browser appear. If there is a request to fill in the captcha, fill in the captcha quickly. Because you only have a few seconds before the program terminates with an error.
If you have successfully filled in the captcha, the program will run normally.
Let me know if you find another error

Oh, I didn't do git pull.
I get the browser now...  I did 2 captchas but I still only get 30 downloads.
At the end I get:
[*] URL: https://www.tiktok.com/XXXXXXXXXXXXXXXXXX
[+] Downloaded successfully

node:events:491
      throw er; // Unhandled 'error' event
      ^

Error: ENOENT: no such file or directory, open 'downloads/72XXXXXXXXXXXXXXX.mp4'
Emitted 'error' event on WriteStream instance at:
    at emitErrorNT (node:internal/streams/destroy:151:8)
    at emitErrorCloseNT (node:internal/streams/destroy:116:3)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: 'downloads/72XXXXXXXXXXXXXXXXXXXXXXX.mp4'
}

Node.js v18.13.0

reclone this repo sir

I have the latest version:
[*] Total video found: 30
[!] Found 30 video
[*] Downloading video 1 of 30
...
[*] Downloading video 30 of 30
[*] URL: https://www.tiktok.com/.......
[+] Downloaded successfully

The error is gone but it's still limited to 30.

I wonder if this is a timing issues because sometimes it finds all videos and sometimes only 30.