RedisBuffer pointer storing problem

Hello,
It would be very practical to provide a version of RedisBuffer that would store a copy of the data, not only pointer/reference to it.
Pointers/references are great to avoid copying, however in the asynchronous case they are an enormous pain to manage. The caller needs to maintain a std::deque of the arguments until completely sure that the request has been executed and the data are not needed anymore. That makes the asynchronous programming much more difficult and bug prone than it needs to be.
The argument lists is typically converted from some other data when preparing the Redis command anyway, so not copying it doesn't really save anything. If RedisBuffer allowed to copy the data (and thus acted as a true buffer instead of a wrapper), the application wouldn't need to store any temporary data and it would allow a true "fire & forget" Redis command execution.

Hello.
RedisBuffer not make a copy data because it is already making on the RedisAsyncClient::command before sending command to the queue.
void RedisAsyncClient::command(const std::string &cmd, std::deque<RedisBuffer> args,
                          std::function<void(RedisValue)> handler)
{
    if(stateValid())
    {
        args.emplace_front(cmd);

        pimpl->post(std::bind(&RedisClientImpl::doAsyncCommand, pimpl,
                    std::move(pimpl->makeCommand(args)), std::move(handler)));
    }
}

std::vector<char> RedisClientImpl::makeCommand(const std::deque<RedisBuffer> &items)
{
    static const char crlf[] = {'\r', '\n'};

    std::vector<char> result;

    append(result, '*');
    append(result, std::to_string(items.size()));
    append<>(result, crlf);

    for(const RedisBuffer &item: items)
    {
        append(result, '$');
        append(result, std::to_string(item.size()));
        append<>(result, crlf);
        append(result, item);
        append<>(result, crlf);
    }

    return result;
}

You can already do "fire & forget" Redis command execution.
PS: It's not intuitive, and I should document this behavior.

Well, that doesn't really solve the problem of having to build up a complete temporary data structure so that makeCommand() can copy it.
I had a code like this:
std::deque<RedisBuffer> args;
args.emplace_front(key_buf);
for (auto index : result)
{
    std::string index_s = boost::lexical_cast<std::string>(index);
    RedisBuffer index_buf(index_s);
    args.emplace_back(index_buf);
}

m_redis->command("LPUSH", args, std::bind(&RedisLink::result_handler, this, _1));

Basically, I am taking some data from result and trying to store them in the deque to send to Redis.
This, of course, fails, because by the time the command is being prepared, the temporaries used to build the individual entries are gone. So with your setup I now have to prepare the entire throw away list of strings (few hundred thousands) in memory so that you can copy them in makeCommand().
It would be much more logical if the RedisBuffer kept the actual data already (and you wouldn't need to copy it later!)

I will think how to solve this problem.

Thanks. I have worked the issue around by changing my data representation for now, but I am pretty sure someone else will get tripped up by this as well. Other Redis clients that I have seen collect the arguments into a list/array/something that "owns" them (copies them), so they would likely expect the same.


CLI utility for compiling and deploying smart contracts

We should have an utility that allows one to quickly compile and deploy smart contracts.

This was done in #595.


ArmA 3 not listening on TCP

Hey everyone.
I am having an issue with allowing traffic to my ArmA 3 server, it doesn't appear in the Multiplayer server list and direct connect isn't resolving the host aswell as yougetsignal.com/tools/open-ports/. It also appears as the server doesn't listen on any TCP port.

In above screenshot only UDP is listed, here are my system details:

Dedicated server running Debian 8.4 Jessie.
Network: 1gbps.
No firewalls, iptables are uninstalled.
IP and port (2302) are defined in arma3server.

Please let me know if anyone knows what's wrong :)!

Have you opened udp ports 2302,2303,2304,2305 in the router ?

@igeighty Seems like he's got a gigabit network, so it's probably a dedicated server, so no router. + not forwarding ports doesn't prevent the machine from listening to it.
Any mods installed ?
Any logs to provide ? (strip any sensitive information)
Also, please use the steam group for general support http://steamcommunity.com/groups/linuxgsm/discussions/0/

agreed,
not port forwarding would only disable the server from appearing in the online server browser.
on my own installation which is a linux machine connected to a local network via an apple time capsule router. when using arma3server script i can see my server in the online browser, but not the LAN browser (weird) yet i am able to use the direct connect feature to manually connect to the local address <IP_ADDRESS>:2302 <- in my case.
also, arma uses UDP rather than TCP for the a3 server,

So there is no TCP port listening for Arma ?
So everything is normal for him in the end ?
So there might be another firewall, like OVH game servers have. :)

Yes correct, no TCP for arma 3 (except 2344 and 2345 for battleeye which is not required for the game to function)

But for the game itself and its query ports all traffic is on UDP
https://community.bistudio.com/wiki/Arma_3_Dedicated_Server#Port_Forwarding
this is how i have mine configured on both servers, one running arma3server script, the other just running install from bohemia with no fancy scripting for testing,

Thanks for all the wonderful replies guys! I also went over to the Steam group.
@igeighty

Have you opened udp ports 2302,2303,2304,2305 in the router ?
I am using a dedicated server like @UltimateByte said, however my host does not filter any ports or use any backend firewalls such as the one which OVH provide.

@UltimateByte

Any mods installed ?
Any logs to provide ? (strip any sensitive information)
OR, the process is launched 2 times or one of the ports is used by another process
OR, iptables isn't correctly disabled
Here's the log file, I don't see anything abnormal in it http://pastebin.com/iSfJJsEz, also no mods are installed.

The process should be launched correctly and iptables are gone for good:
$ apt-get remove --purge --auto-remove iptables && apt-get update

Here is arma3server config:
http://pastebin.com/xteU0xQ6
My host provider says that this is a software related issue, I'm unsure about that as it works for you guys.

Delete your pastebin and change your steam password :)
Best to remove that info from your pastes

@igeighty

Delete your pastebin and change your steam password :)
Best to remove that info from your pastes

I accidentally left it there, thanks for mentioning that :)
I posted this discussion here as suggested! http://steamcommunity.com/groups/linuxgsm/discussions/0/358415738180885929/

i notice this line in your arma3server script
ip="my.ipv4.is.specified.here"
my installation i have this
# Start Variables
ip="<IP_ADDRESS>"
port="2302"
updateonstart="off"
i am running debian on a local machine though and the using port forward in my router to translate my outside IP. users are able to connect to my real world ip and through the server browser even though i have a LOCAL address in my config line
./arma3server -netlog -ip=<IP_ADDRESS> -port=2302 -cfg=/home/arma3server/serverfiles/cfg/arma3-server.network.cfg -config=/home/arma3server/serverfiles/cfg/arma3-server.server.cfg -mod= -servermod= -bepath= -autoinit -loadmissiontomemory
it is just a thought, but try edit you IP to be 0,0,0,0 and see how she goes ?

@igeighty

it is just a thought, but try edit you IP to be 0,0,0,0 and see how she goes ?
I have no clue why this isn't working, any other service on the machine got a public port with no further issues. Like I said in the steam group, I tried that and it didn't solve the issue but thanks anyway!

this issue wasn't a script issue, it was solved by the hosting company.
This can be closed


Tensor documentation update. (#TF-448)

Updated documentation for Tensor in Tensor.swift file

Resolves TF-448.

I have some thoughts on writing style here that could build on what you've written:

You're missing spaces after periods in a couple spots.
The summary/abstract should be a single sentence fragment; so I'd separate out the rest of your additions by adding a blank /// doc comment line in between the first sentence and the rest.
Usually it's helpful to avoid duplicating the symbol name in its summary. You might say "A multidimensional array that's a generalization of vectors and […]" or something along those lines.

Thanks for the feedback, I have made updates as per the suggestions.

Please advise of any changes/updates that would be needed so that this pull request can be taken to closure.

Sorry for the delay! We've recently moved the entire TensorFlow library to https://github.com/tensorflow/swift-apis. Would you mind starting a PR there?

This no longer applies so closing.  Thank you!


[dart2js] Missing semicolon at end of main output file(main.dart.js).

Main output file(main.dart.js) generated using dart compile js -O4 doesn't have a semicolon at the end. It now ends with (...)() and part files begin with (...)(). After concatenating a part file to main, I get ...) (... and browser:

Uncaught TypeError: (intermediate value)() is not a function

> dart --version
Dart SDK version: 3.1.5 (stable) (Tue Oct 24 04:57:17 2023 +0000) on "linux_x64"

Same behavior on the newest dev release(3.3.0-57.0.dev).
It used to work fine. It still works fine if I add a semicolon before concatenating.
Example(thinking it's irrelevant):
main.dart
import 'log.dart' deferred as lib_log;

Future<void> main() async {
  await lib_log.loadLibrary();
  lib_log.saysmth();
}

log.dart
void saysmth() => print('saysmth');

Compile it using dart compile js -O4 main.dart or webdev build --release (semicolon exists when flag --no-minify used).

cc @natebiggs - this sounds similar to the fix you had in https://dart-review.googlesource.com/c/sdk/+/309361/1..2/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart


My Students: Fix sort order for program

Support sorting by program properly, since the "pretty" text isn't the same as the raw field value.

selfie


⚠ Bofrost.lu has degraded performance

In 1ebfa9a, Bofrost.lu (https://www.bofrost.lu) experienced degraded performance:

HTTP code: 200
Response time: 1762 ms

Resolved: Bofrost.lu performance has improved in 93d905a after 6 minutes.


Datasets Code

Hi!
First, I'd like to congratulate the team for the work described in the repository, it's been a really interesting reading.
Navigating through it I found that there's only 2 datasets available. I found it hard to generate myself some extra datasets, so it would be really useful if the code used to generate those could be also share in this repository.
It would be great to explore some other Quantum Computer architectures with different number of qubits or to replicate the original 27 qubit experiment.
Thanks in advance for the help!
Kind regards,
Pablo.

Hi Pablo! You're correct that we currently only provide those two datasets (for the "labeling cosets with error" learning problem with a covariant quantum kernel). It's a great suggestion to include more datasets (or the code to generate them) -- we will look into this and see if we can make this available. Thanks!

Looking forward for updates on this!
Thanks in advance.
Pablo.

Hi!
Sorry for reaching out again on this same issue.
I'm still studying the problem discussed in this repo and its associated paper.
Is there any chance to have access to the code used to generate the 27 qubit data used in the paper (or the 7/10 qubit examples in the notebook)? I'm developing my masters' thesis and it would be great to be able to replicate the process you have followed.
Again congratulations for the great job, it's really interesting and I'm really enjoying diving into this world of QML.
Thanks in advance,
Best regards,
Pablo

Hi Pablo, I'm afraid we don't yet have an update on making this available. We do appreciate your interest in this and will be sure to let you know if anything changes!


Intermittent hang on FD WH test

This seems to be a recent problem, don't think it's a machine issue:
https://github.com/tenstorrent-metal/tt-metal/actions/runs/8076153511/job/22064168217
2024-02-28T07:34:16.8001383Z 2024-02-28 07:34:16.796 | INFO     | __main__:run_single_tt_eager_test:101 - ========= RUNNING TT EAGER CPP TEST - TestEntry(test_name='tt_eager/tests/ops/test_transpose_op', executable_name='ops/test_transpose_op', extra_params='')
2024-02-28T07:34:16.8097314Z 2024-02-28 07:34:16.807 | WARNING  | tests.scripts.common:build_executable_command_for_test:121 - tt-arch not implemented for tt_eager-type tests
2024-02-28T07:34:16.8272864Z                   Metal | INFO     | Initializing device 0
2024-02-28T07:34:16.8276999Z                  Device | INFO     | Opening user mode device driver
2024-02-28T07:34:18.0290168Z CHECKING: [0, 0, 0, 0]
2024-02-28T07:34:18.1914227Z 2024-02-28 07:34:18.191 | INFO     | SiliconDriver   - Detected 1 PCI device : {0}
2024-02-28T07:34:18.2267942Z 2024-02-28 07:34:18.226 | WARNING  | SiliconDriver   - init_detect_tt_device_numanodes(): Could not determine NumaNodeSet for TT device (physical_device_id: 0 pci_bus_id: 0000:00:08.0)
2024-02-28T07:34:18.2270669Z 2024-02-28 07:34:18.226 | WARNING  | SiliconDriver   - Could not find NumaNodeSet for TT Device (physical_device_id: 0 pci_bus_id: 0000:00:08.0)
2024-02-28T07:34:18.2288135Z 2024-02-28 07:34:18.228 | WARNING  | SiliconDriver   - bind_area_memory_nodeset(): Unable to determine TT Device to NumaNode mapping for physical_device_id: 0. Skipping membind.
2024-02-28T07:34:18.2291143Z ---- ttSiliconDevice::init_hugepage: bind_area_to_memory_nodeset() failed (physical_device_id: 0 ch: 0). Hugepage allocation is not on NumaNode matching TT Device. Side-Effect is decreased Device->Host perf (Issue #893).
2024-02-28T07:34:18.3394636Z 2024-02-28 07:34:18.339 | INFO     | SiliconDriver   - Software version 6.0.0, Ethernet FW version 6.3.0 (Device 0)
2024-02-28T07:34:18.4153697Z                   Metal | INFO     | AI CLK for device 0 is:   1000 MHz
2024-02-28T07:43:44.9949411Z ##[error]The action has timed out.
2024-02-28T07:43:45.0059019Z Post job cleanup.

no longer see this issue


Possible improvements

[x] <Text size="large"/> results in 18px, while <Paragraph size="large"/> results in 20px

Good spot, ill be ticking the checkboxes to indicate i have fixed it

or create a new issue if there are more :P


Warn if a package is known bad

Also, gracefully handle HTTP errors instead of crashing.

@jelly, can you take a look and merge?

Merged via Git.


📝 Add placeholder poster for shows that do not have one

Find a high quality image asset that can be used as a show poster placeholder. It should be ~150x250. This will help make styling show cards easier.

Closed by #280


Fitting on GRSISort

Hello Everyone,
Can I ask what is the shortcut key for fitting the doublets on GRSISort?
I am using " shift+f " for fitting the single peaks of my spectrum. Is there any shortcut key like this, for fitting the doublets or triplets?
Thanks,
Nastaran

There is no shortcut to fit multiplets. For this you would want to use the TPeakFitter class.

Sure. Thank you for your explanation.


Allow audit activities via Go SDK

I'd like to perform audit activities operation described here: https://www.strongdm.com/docs/automation/auditing/audit-activities
However, I see that current Go SDK do not allow to create client based on SDM_ADMIN_TOKEN as well as there's no utilities which allow to execute audit activities mechanism.

Hi Simon, thanks for reaching out. About your questions:

In order to create an SDM_ADMIN_TOKEN you'd need to use the web UI
At the moment we're not offering sdm audit capabilities via SDK, hoewever, it's part of our current backlog

Please don't hesitate to reach us directly via email (support at strongdm.com) if you need further assistance.
Thanks,


Add the possibility to record the moments

For the moment, here is the typical pipeline to obtain the blood flow in the retina's blood vessels :

Use the real-time visualisation of the eye with Holovibes to get a good focus on the eye of the patient, and then record the high throughput of the camera with Holovibes. The calculus to obtain a real-time visualisation is usually a spatial fourier transform (fresnel transform) followed by a PCA. Those computations don't enable to access the moments and the doppler shift enabling the estimation of the blood flow.

Load the interferograms in Holowaves (Matlab), and then pursue the following computations :

Fresnel transformation to propagate the signal in the retina's plane
apply SVD filtering on the matrix formed by the sequence of flattened frames (grouped by batches of usually 512 frames). This operation takes out the first singular components corresponding to reflection noise.
STFT : FFT time fourier transform on the resulting grouped batch matrices
On the frequency signal obtained from the STFT, compute the moment 0, moment 1 and moment 2.
For a complex signal with fequencies $$f$$ going from $$-\infty$$ to $$+\infty$$, a moment $$m$$ of order $$k$$ will be equal to $$m_k=\int\limits_{-\infty}^{\infty}f^kX(f)df$$. To remove signal parts cause by movements of the eye we select frequencies via parameters $f_1$ and $f_2$ and calculate $$m_k=\int\limits_{-f_2}^{-f_1}f^kX(f)df + \int\limits_{f_1}^{f_2}f^kX(f)df$$ for $k=0,1,2$.

In PulseWave (MatLab), by using the moments, a segmentation mask is computed, as well as the doppler shift in the vessels. This doppler shift allows to estimate the blood velocity. Then, the blood flow is estimated using he blood velocity and the estimated volume of the vessels deducted from the diameter of the segmented mask.

In this pipeline, the longest step is by far the second one. We would like to use the performance of Holovibes to accelerate this step ; by incorporating it to the CLI, we could even use the ProcessHoloFiles.ps1 to automatically generate the moments for all the interferograms stored in a directory.
Here are the steps to achieve such a dream :

[ ] Make the .holo format compatible with the recording of the moments. This necessitates to create a new ImageType , and to organize the data differently (since there will be 3 matrices, the simplest may be to write each matrix one after the other)
[ ] Handle the reading of such .holo by Holovibes (display an error for the moment)
[ ] Code the backend computations to obtain the moments
[ ] Create the API functions, and the GUI methods as well as the CLI options
[ ] Make it work with the ProcessHolovibes.ps1, with default parameters

In the branch fix_write_moments:

[ ] Problem  with CUDA, in hsv.cu, there is these errors: __copy:: D->D: failed: cudaErrorInvalidValue: invalid argument and [Thrust] Error while computing a percentile. This is linked to the usage of the function "apply_operations_on_hsv" with gpu_output as a parameter
[ ] When using ImageType Moments, It needs to use "Composite image" before showing a result.
[ ] When trying to record Moments, it doesn t record anything while saying 2048 image to be record

Question:

Why does RecordMode Processed takes twice as much space than Raw, how are data stored ? I only see this for raw AND processed: std::fwrite(frame, 1, frame_size, file_);
Do we need to apply operations on the hsv after computing them ?
Linked to the first question; why do we need to store the Moments in float*, while processed and raw store the data in char*


Hortizontal nav

Introduce horiztonal nav

https://drive.google.com/open?id=1jhcS86VwivuhcmsXNKJam8uCxe8hgLQN

Closing this issue as it will be addressed within #207

Hmmm... Up to you @LHinson but you may want to keep this open to track Horizontal Nav as a separate component. I see the PF-Next nav system as including a Primary Horz Navbar, and Multi-Level Vertical Navbar, and a tab bar that can be used for local sub-nav. These can be combined in various combinations to create different page templates per the wireframes I created. Sorry if that wasn't clear.


0.8.0 rc2

Update to new 0.8.0 version. Thanks in advance for @perfalle and @m29h for the contributions.

I just noticed that the example in Readme.md is not compatible with the v0.8.0 API at all any more due to breaking changes. I recommend merging pull request #9 before releasing the branch.

Can you merge this?

Hi @vaphes. Do you go modify it? Or need help to fix the conflicts?

Hi @vaphes. Do you go modify it? Or need help to fix the conflicts?

I´d really appreciate if you could help me out on this one!
Already added you as a collaborator.
Thanks in advance!


loginchange

Thank you how about making the logo slightly bigger?? I'd really appreciate if you consider it! :)

Well done! I think it will attracts many students!!


System tests for resource manager

After #1083, we now need system tests for the Resource Manager API.
Since the API requires using a user account (not a service account), this is a bit hairy.
For oauth2client's system tests, we ended up just using a simple refresh token for my personal GMail account. The token is only authorized with the email scope, so it's not a very big deal, but for this one, it may be a bigger deal?

Later this yea, I hear that service accounts will be able to own (and therefore create) projects -- and then this problem goes away.
In the meantime, we could always make the choice to punt on this and just "not have system tests for RM" ...? I suspect this isn't going to be a frequently used API...

OK.

Apparently #1614 is due to a similar policy (sinks can only be created by user accounts).  @jgeewax can you lean on the teams responsible to fix that issue?

Hello,
One of the challenges of maintaining a large open source project is that sometimes, you can bite off more than you can chew. As the lead maintainer of google-cloud-python, I can definitely say that I have let the issues here pile up.
As part of trying to get things under control (as well as to empower us to provide better customer service in the future), I am declaring a "bankruptcy" of sorts on many of the old issues, especially those likely to have been addressed or made obsolete by more recent updates.
My goal is to close stale issues whose relevance or solution is no longer immediately evident, and which appear to be of lower importance. I believe in good faith that this is one of those issues, but I am scanning quickly and may occasionally be wrong. If this is an issue of high importance, please comment here and we will reconsider. If this is an issue whose solution is trivial, please consider providing a pull request.
Thank you!


[ethers-v5] Add events support

This PR adds the missing events support to the ethers v5 target and intends to close #303 and close #249. Thanks @quezak for https://github.com/ethereum-ts/TypeChain/issues/303#issuecomment-729030874
Usage
const filter = contract.filters.Transfer(); // TypedEventFilter<>
const result = await contract.queryFilter(filter); // TypedEvent<>

result[0].args.from // type support for named event parameters
result[0].args[0] // type support by index

contract.on(filter, (from, to, value, event) => {
  from; // string
  to; // string
  value; // BigNumber
  event; // TypedEvent<>
})

To test this in your project

git clone -b 303-ethers-v5-add-event-support https://github.com/zemse/TypeChain.git
cd TypeChain
yarn (you need yarn installed if you don't)
yarn build (this generates dist dir which is imp)
Link this custom target to your project by placing the appropriate path to the target: typechain --target ../TypeChain/packages/target-ethers-v5/ (Docs)

Just in case if that sounds too much, I have temporarily published it to npm for testing:

npm install typechain-target-ethers-v5 --save-dev (later you can just replace the package with official one)
typechain --target ethers-v5 (Docs)

Hi @krzkaczor, there is the following error when running the typecheck script (failing in CI) but my typescript compiler (v4.1.3) does not complain about it and seems to work fine. Can you help how this issue can be resolved?
types/commons.ts(15,20): error TS1256: A rest element must be last in a tuple type.
error Command failed with exit code 1.

Hi @krzkaczor, there is the following error when running the typecheck script (failing in CI) but my typescript compiler (v4.1.3) does not complain about it and seems to work fine. Can you help how this issue can be resolved?
types/commons.ts(15,20): error TS1256: A rest element must be last in a tuple type.
error Command failed with exit code 1.

@zemse as for this TS error, it seems that it works in TS 4.0+.
You should get the same error if you use yarn.lock 🤔 Anyway, it doesn't matter, we can bump TS to 4.0 (or even newer?). And bump peer dependency from "typescript": ">=3.8.0",to 4+ inpackages/target-ethers-v5/package.json`.
Soo, could you:

Normalize all package.json dependencies on typescript to 4.0
Bump peer dependency? in packages/target-ethers-v5/package.json

I will deploy it as major version of ethers-v5 to avoid breaking something.
Thanks!

@zemse can we add a test (can be the same thing as you put in this PR description) proofing that this works?

I've added some tests pls review

@zemse thanks for this! Released in: https://github.com/ethereum-ts/TypeChain/releases/tag/%40typechain%2Fethers-v5%406.0.0

@zemse how is this supposed to work? Maybe I'm missing something but the first line in your example contract.filters.Transfer() is invalid because the declaration of that function is generated with arguments:
Transfer(
  from: string | null,
  to: string | null,
  value: null
): TypedEventFilter<
  [string, string, BigNumber],
  { from: string; to: string; value: BigNumber }
>;

Which means those 3 arguments are required.

Oh right, you need to do the following, will update the description too.
contract.filters.Transfer(null, null, null)

As a side note: Actually ethers.js on it's core is fine without passing any args, so the args should be made optional in the target too. Will make a PR soon.

@zemse sounds good, thanks!


The "Contact Me" page on your web site it's working

Hi, Frank,
I enter a message on your Web site, select the "Submit" button, and I always get stopped by a Capcha validation failure.
Capcha is evil.  It does more harm than good.

That is not my decision.  That is squarspace policy
I have a direcr email me button you should use of you feel different
On Wed, Dec 25, 2024, 3:37 PM TDunnavant @.***> wrote:

Hi, Frank,
I enter a message on your Web site, select the "Submit" button, and I
always get stopped by a Capcha validation failure.
Capcha is evil. It does more harm than good.
—
Reply to this email directly, view it on GitHub
https://github.com/setiastro/pixinsight-updates/issues/3, or unsubscribe
https://github.com/notifications/unsubscribe-auth/BIBBIZPIWVLYINS3ZXXSBHL2HMQSTAVCNFSM6AAAAABUGLNS22VHI2DSMVQWIX3LMV43ASLTON2WKOZSG42TSMBZHA4TSNQ
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>


Add closed-loop position auto command for new drivebase

This will require issue #30 to be completed first, and can be based on previous year's code for inspiration.

This will be the inner loop of position control, where we tell the SparkMax what to do it. This inner loop will be integrated with the outer loop of PathFinder, which big picture says where to go and when.


Add SortDescriptor and SortComparator

Ports the SortComparator protocol to FoundationEssentials and the SortDescriptor type to FoundationInternationalization. The latter is only really useful with localized sorting.

@swift-ci test

@swift-ci test


Feature Request: PowerToys Run > Folder > Respect Default Terminal Settings

Description of the new feature / enhancement
When using PowerToys Run, one of the folder context menu options is "open path in console", which defaults to CMD. I would like this to default to run using the default profile set up in windows terminal. To be clear, IF I have windows terminal setup as my default terminal (refer to this dev blog), then this action DOES open windows terminal, however it runs under "cmd.exe". I would prefer that it ran under my default profile (i.e. powershell). Would also be nice if it would respect other windows terminal settings such as the "New instance behavior" setting (i.e. "attach to most recently used window on this desktop").
Scenario when this would be used?
Would be the new default behavior, but I suppose it could be added as an options in the PowerToys Run settings panel. The goal being that we respect the default settings set by the user (use windows terminal as default terminal, use default profile on "new instance", AND respect any other windows terminal settings).
Supporting information
I tried searching for existing issues created on this specific request, but closest I found was this one #20834 which refers to some other adjustments with this action.

Looks like this was closed as "won't fix" in https://github.com/microsoft/PowerToys/issues/15006 with the reasoning that "you set your default console and your default profile" in Windows Settings, which is only partly true. As mentioned by OP, even though the default terminal is launching, the default profile is not, which I would consider a "bug" in this context.


bundler: command not found: docker-template

我git clone源码后，在根目录执行bundle exec docker-template build，却报错如下：bundler: command not found: docker-template。请问这是什么情况？

You need to install docker-template yourself if building our images.

How do I install docker-template？

gem install docker-template --no-ri --no-rdoc -- docker-template build

How do i install  docker-template？

Or you can bundle install after cloning this repository, which will install it too.

Can you explain the meaning of each part of this command? Thank you！gem install docker-template --no-ri --no-rdoc -- docker-template build

Please read the RubyGems documentation if you have any further questions about how RubyGems works.  I do not provide support for other people's software.
Thanks!

I have successfully installed docker-template.
When I execute the command “bundle exec docker-template build”, the error is as follows：
/var/lib/gems/2.3.0/gems/docker-api-1.34.0/lib/docker/connection.rb:42:in rescue in request': squash is only supported with experimental mode (Docker::Error::ClientError) 	from /var/lib/gems/2.3.0/gems/docker-api-1.34.0/lib/docker/connection.rb:38:in request'
from /var/lib/gems/2.3.0/gems/docker-api-1.34.0/lib/docker/connection.rb:65:in block (2 levels) in <class:Connection>' 	from /var/lib/gems/2.3.0/gems/docker-api-1.34.0/lib/docker/image.rb:274:in build_from_tar'
from /var/lib/gems/2.3.0/gems/docker-api-1.34.0/lib/docker/image.rb:293:in build_from_dir' 	from /var/lib/gems/2.3.0/gems/docker-template-0.19.0/lib/docker/template/builder.rb:208:in block in chdir_build'
from /var/lib/gems/2.3.0/gems/pathutil-0.16.1/lib/pathutil.rb:363:in block in chdir' 	from /var/lib/gems/2.3.0/gems/pathutil-0.16.1/lib/pathutil.rb:362:in chdir'
from /var/lib/gems/2.3.0/gems/pathutil-0.16.1/lib/pathutil.rb:362:in chdir' 	from /var/lib/gems/2.3.0/gems/docker-template-0.19.0/lib/docker/template/builder.rb:193:in chdir_build'
from /var/lib/gems/2.3.0/gems/docker-template-0.19.0/lib/docker/template/builder.rb:104:in block in build' 	from /var/lib/gems/2.3.0/gems/docker-template-0.19.0/lib/docker/template/notify.rb:39:in build'
from /var/lib/gems/2.3.0/gems/docker-template-0.19.0/lib/docker/template/builder.rb:103:in build' 	from /var/lib/gems/2.3.0/gems/docker-template-0.19.0/lib/docker/template/cli/build.rb:21:in map'
from /var/lib/gems/2.3.0/gems/docker-template-0.19.0/lib/docker/template/cli/build.rb:21:in block (2 levels) in start' 	from /var/lib/gems/2.3.0/gems/docker-template-0.19.0/lib/docker/template/cli/build.rb:21:in tap'
from /var/lib/gems/2.3.0/gems/docker-template-0.19.0/lib/docker/template/cli/build.rb:21:in block in start' 	from /var/lib/gems/2.3.0/gems/docker-template-0.19.0/lib/docker/template/cli/build.rb:67:in _profile'
from /var/lib/gems/2.3.0/gems/docker-template-0.19.0/lib/docker/template/cli/build.rb:18:in start' 	from /var/lib/gems/2.3.0/gems/docker-template-0.19.0/lib/docker/template/cli.rb:88:in build'
from /var/lib/gems/2.3.0/gems/thor-0.20.0/lib/thor/command.rb:27:in run' 	from /var/lib/gems/2.3.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in invoke_command'
from /var/lib/gems/2.3.0/gems/thor-0.20.0/lib/thor.rb:387:in dispatch' 	from /var/lib/gems/2.3.0/gems/thor-0.20.0/lib/thor/base.rb:466:in start'
from /var/lib/gems/2.3.0/gems/docker-template-0.19.0/bin/docker-template:35:in <top (required)>' 	from /usr/local/bin/docker-template:23:in load'
from /usr/local/bin/docker-template:23:in `'

I have successfully build it. Thank you!


Another simple nesting fix.

Can we please begin working to make each file's code cleaner using basic nesting rules?

Thank you for the contribution.  Unfortunately, we cannot accept it.  These style guides are generated from markdown and the HTML is not intended to be consumed by humans.  While we can sometimes consider mirroring content changes/corrections internally, it's simply not feasible to adjust this generated output.


Error while monitoring ECS task due to missing log stream

botocore.errorfactory.ResourceNotFoundException: An error occurred (ResourceNotFoundException)
when calling the GetLogEvents operation: The specified log stream does not exist.

Replicating a report from a user in the community: https://prefect-community.slack.com/archives/CL09KU1K7/p1671026163262599
I've seen a couple reports of this. Perhaps the log stream takes a bit to be populated? It'd be good to retry here. Unclear if this is an issue with the way the users are configuring their task definitions without more details.

Also seeing this issue when setting:
    stream_output=True,
    configure_cloudwatch_logs=True

in the ECSTask Block.
Currently no other logging configuration. I've checked both versions 0.2.0 and 0.2.1.

I also have this issue.
I'm trying to initialize an ECS task object in my flow, and immediately run the ecs task. I have image set to None and configure_cloudwatch_logs set to False to prevent prefect from registering a new task definition, but even with configure_cloudwatch_logs set to True I get the same error.
from prefect import flow, task, get_run_logger
from prefect_aws.ecs import ECSTask

@task
def ecs_flow_task():
    ecs_task = ECSTask(
        cluster="prefect-default-cluster",
        task_definition_arn="arn:aws:ecs:eu-central-1:*********:task-definition/default-adhoc-task",
        vpc_id="vpc-*********",
        stream_output=True,
        configure_cloudwatch_logs=False,
        image=None,
        task_customizations=[
            {
                "op": "add",
                "path": "/networkConfiguration/awsvpcConfiguration/subnets",
                "value": [
                    "subnet-*********",
                    "subnet-*********",
                    "subnet-*********",
                ],
            },
            {
                "op": "add",
                "path": "/networkConfiguration/awsvpcConfiguration/securityGroups",
                "value": ["sg-*********"],
            },
        ],
    )
    ecs_task.run()
    logger = get_run_logger()
    logger.info("Triggered ECS Task")

@flow()
def ecs_flow():
    ecs_flow_task()

if __name__ == "__main__":
    ecs_flow()

Here's the configuration of the task definition being passed in the fllow:
{
    "taskDefinitionArn": "arn:aws:ecs:eu-central-1:*********:task-definition/default-adhoc-task:5",
    "containerDefinitions": [
        {
            "name": "prefect",
            "image": "*********.dkr.ecr.eu-central-1.amazonaws.com/adhoc-task",
            "cpu": 64,
            "memory": 256,
            "memoryReservation": 128,
            "portMappings": [],
            "essential": true,
            "environment": [],
            "mountPoints": [],
            "volumesFrom": [],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "prefect-default-agent-logs",
                    "awslogs-region": "eu-central-1",
                    "awslogs-stream-prefix": "adhoc-task-definition"
                }
            }
        }
    ],
    "family": "default-adhoc-task",
    "taskRoleArn": "arn:aws:iam::*********:role/prefect-default-ECSTaskRole",
    "executionRoleArn": "arn:aws:iam::*********:role/prefect-default-ECSExecutionTaskRole",
    "networkMode": "awsvpc",
    "revision": 5,
    "volumes": [],
    "status": "INACTIVE",
    "requiresAttributes": [
        {
            "name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
        },
        {
            "name": "ecs.capability.execution-role-awslogs"
        },
        {
            "name": "com.amazonaws.ecs.capability.ecr-auth"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.21"
        },
        {
            "name": "com.amazonaws.ecs.capability.task-iam-role"
        },
        {
            "name": "ecs.capability.execution-role-ecr-pull"
        },
        {
            "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
        },
        {
            "name": "ecs.capability.task-eni"
        }
    ],
    "placementConstraints": [],
    "compatibilities": [
        "EC2",
        "FARGATE"
    ],
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "cpu": "512",
    "memory": "1024",
    "registeredAt": "2022-12-30T21:25:43.736Z",
    "deregisteredAt": "2023-01-02T12:34:13.559Z",
    "registeredBy": "arn:aws:sts::*******:assumed-role/terraformExecutionRole/aws-go-sdk-1672435543204924000",
    "tags": []
}

I deploy the flow using a different ECS task definition, saved as an ECS task block in Prefect Cloud. I can see the logs created by the task run, but prefect seems to be trying to read from a log stream that doesn't exist. As far as I can tell the full log stream for task definition run cannot be manipulated by the user, and matches what AWS specified in the documentation.
Is there a basis for prefect trying to read from this log stream:
stream_name = "/".join(
                    [
                        log_config["awslogs-stream-prefix"],
                        task_definition["family"],
                        task_arn.rsplit("/")[-1],
                    ]
                )

Instead of this:

Thanks for getting this fixed! I guess I'll be able to test this once the fix is merged.

@boseoladipo np! fyi you can always install from a git branch i.e. pip install git+https://github.com/PrefectHQ/prefect-aws@fix/ecs-log-stream.


Take two passes at decoding entities

If we only take one pass &quot; will be output as ". So we want &quot; (1st pass) -> " (second pass) -> "

fixed in 97563b8efbc51f7f8ce0dd7e2738bbfac4c347c6


Add option to print stacktrace upon abort during Move tests

It can be very useful to see the stacktrace when a test aborted.
Added a stacktrace field to the vm error types, and propagate it if the testing feature is enabled.
Add an option to the test config to turn it on. If the option is not enabled, we remove the stacktrace so it's not printed.

Test failure doesn't seem to be related. Let me push to re-trigger tests.

I can reproduce the test failure on latest main:
cargo test --package move-stdlib

I can reproduce the test failure on latest main:
cargo test --package move-stdlib

Tests on main passing fine for me, another PR I have pending also succeeded CI 3/4 evening.

@wrwg
This is the minimum PR that could trigger this error in CI: https://github.com/diem/move/pull/98
A few things to notice:

I can repro this error without any change on main on my Mac M1.
However CI works fine on main.
The changes in https://github.com/diem/move/pull/98 seems incapable to cause a stack overflow.

At this point I am not sure what's going on.

@wrwg This is the minimum PR that could trigger this error in CI: #98 A few things to notice:

I can repro this error without any change on main on my Mac M1.
However CI works fine on main.
The changes in Test CI #98 seems incapable to cause a stack overflow.

At this point I am not sure what's going on.

I put up PR #99 which configures CI to run tests in release mode, and also enables all our crates to support release mode operation.
I'm not sure whether this fixes the issue but (a) it is well known that Rust debug builds have extensive stack consumption. When build in release mode, our tests run 10x faster, so this should improve CI timing (b) I also see some rumors that M1 Macs have issues with stack size restrictions. This may explain the weird behavior you are seeing:

Running tests on clean main failing: probably because we are already close to stack limit, but right now you only see it on M1
The CI tests for this PR (or some other) failing: uour changes pushed us over the limit, which hopefully this PR will fix.

Thanks for looking into it.
Although changing to release build may help fix the stack overflow issue, it will also reduce the amount of issues we could catch? (e.g. all these debug_asserts https://github.com/diem/move/search?p=3&q=debug_assert)
I wonder if this is worth investigating (a bit weird that there can be stack overflow just by running Move stdlib unit tests)

Thanks for looking into it. Although changing to release build may help fix the stack overflow issue, it will also reduce the amount of issues we could catch? (e.g. all these debug_asserts https://github.com/diem/move/search?p=3&q=debug_assert) I wonder if this is worth investigating (a bit weird that there can be stack overflow just by running Move stdlib unit tests)

Good point.
I cannot reproduce the problem, so if you could generate a stack trace, that would be very helpful. AFAICT, the only way to do so is using gdb.

This is the full stacktrace when running the unittests on #98:
https://gist.github.com/lxfind/a4cf06ad6eb3319a63f0f2c8a3874e17

This is the full stacktrace when running the unittests on #98: https://gist.github.com/lxfind/a4cf06ad6eb3319a63f0f2c8a3874e17

Thanks, this helped to identify the issue. #100 should fix it.

:broken_heart: Test Failed - ci-test

/land

We need to land #100 first. This is a new one which fixes the underlying problem of stackoverflow.

Rebased. All tests passing.

/land


Bug 2000268: Block cluster upgrades

This PR fixes https://bugzilla.redhat.com/show_bug.cgi?id=2000268
It will block cluster upgrades if one of the following conditions is met:

One or more VMs are on HW version < 15
One or more of ESXi hosts are on version < 6.7u3
vCenter server is on version <6.7u3

/retitle Bug 2000268: Block cluster upgrades

/bugzilla refresh

/bugzilla refresh

/lgtm


Fix build with some clang installations when openmp is enabled

There are two instances when building the tests where OpenBLAS fails to build with OpenMP and clang due to library paths getting reset as flags are set rather than appended. This seems to only affect certain clang/libomp installations, but if it's already grabbing the correct library paths we might as well use them.

Curious what else is in your CEXTRALIB that needs to be preserved for the build to work ? Or do you just have libomp in an unusual location that makes it necessary to pass a -L ... as well ?

Yes. The llvm apt repos puts the shared objects at /usr/lib/llvm-<major version number>/lib/libomp.so which doesn't get picked up by default by the compiler. There are a couple extra -L... directives in CEXTRALIB before it is overwritten that contain the correct include paths (although I'm not sure exactly where they're coming from).
The compilation command for zblat1.o looks like the following before this patch:
gfortran -O2 -Wall -frecursive -fno-optimize-sibling-calls -m64 -fopenmp  -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mavx2 -fno-tree-vectorize  -o zblat1 zblat1.o ../libopenblas_zenp-r0.3.23.dev.a -lm -lpthread -lgfortran -lm -lpthread -lgfortran -lomp

and then like this after the patch:
gfortran -O2 -Wall -frecursive -fno-optimize-sibling-calls -m64 -fopenmp  -msse3 -mssse3 -msse4.1 -mavx -mavx2 -mavx2 -fno-tree-vectorize  -o zblat1 zblat1.o ../libopenblas_zenp-r0.3.23.dev.a -lm -lpthread -lgfortran -lm -lpthread -lgfortran -L/usr/bin/../lib/gcc/x86_64-linux-gnu/11 -L/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/lib -L/usr/lib -L/usr/lib/llvm-16/lib  -lpthread -lc -lomp

Others file show the exact same changes.


Fix InheritableBehavior and Tests

A single commit, including the following:

Fixed name/alias mix-up in InheritableBehavior::afterFind(). Tests were failing.
Added merge for parent/child $validate. Validation tests now pass, as both set of rules are merged.
Fixed Tests
GravatarHelperTest - white space.
CsvImportTest - case typo.
InheritableTest - models are now instantiated using an alias.
Updated .travis to CakePHP version 2.7.

I hope the above is compliant. If not, please let me know.
Thanks

From what I see alias usage was correct.
Do you have any arguments why did you change alias to name?

The original motivation to contribute a fix had to do with the tests failing (almost all of them).
Most of them were fixed by instantiating the models specifying an alias. However tests such as testAfterFind() where still failing.
Enabling output and debugging:
debug($expected)
Array
(
    [0] => Array
        (
            [Link] => Array
                (
                    [id] => 11
                    [url] => http://cakephp.org
                    [title] => home page link
                    [description] => link back to home page
                )
        )
)

debug($result)
Array
(
    [0] => Array
        (
            [Link] => Array
                (
                    [id] => 11
                    [url] => http://cakephp.org
                    [Asset] => Array
                        (
                            [id] => 11
                            [title] => home page link
                            [description] => link back to home page
                        )
                )
        )
)

Other vars in afterFind() for this particular test.
echo $Model->parent->alias;
InheritableAsset

echo $Model->parent->name;
Asset

echo $Model->alias;
Link

Which suggests that the right var to use is $Model->parent->name.
I might be wrong, but I believe it only makes sense to refer to an alias on classes that are to be instantiated (not on parent classes).
$this->alias defaults to the name of the class, except when it's instantiated with an alias. Parent classes are not instantiated.
All of the above holds true for CakePHP 2.7. Not sure for previous versions.
If the above is correct, I have just noticed some other bits might need to be amended too (code that includes a reference to $Model->parent->alias). Not all code is covered by the tests.

Hi @inigoflores, we must maintain compatibility with versions < 2.7, in addition, @skie, in previous comments, mentioned that is wrong replace the alias with name.

Ok. While my fix won't suit you, the behavior is still broken (run the tests an see for yourself) ¿Is there anything you suggest?


Battery Levels Never Update

Not sure if this is an issue with my Kwikset (910, IIRC) deadbolt, the batteries inside, or something to do with the lock-manager.
The initial batteries in the lock drained pretty quickly, so I swapped for some rechargeable AA batteries fully charged. They've been working great in the lock for 4 months now. Still, the battery shows in the developer dashboard as 1, and there appear to be no events related to battery status. Smartthings iOS app shows the battery level as 1% as well.
Have you heard anything about this? Others in the forum have seen battery levels not updating for hours or days, but never 4 months.
Any tips for debugging are much appreciated!

I believe this to be a platform bug, not a bug in this app. (it also effects the default ST DTH)

Hi - same problem with battery status not updating on Yale locks. Changed batteries 2 weeks ago and status never changed from 1%  Any thoughts?

I have four Kwikset 916 Z-Wave locks. Two of the locks appear to be reporting the battery level correctly. One lock does not report battery level at all. Another reports 1 percent even after installing a new set of batteries ...


'nothing' type union in error pathway not considered

I am having a problem with a prepared statement of mine, and in the process ran into a bug in the error handling path. Instead of a useful error message, I get a cryptic library error:
ERROR: MethodError: no method matching getindex(::Nothing, ::UnitRange{Int64})
Stacktrace:
 [1] #PQResultError#1(::Bool, ::Type, ::LibPQ.Result) at /home/glynch/.julia/dev/LibPQ/src/exceptions.jl:92
 [2] Type at /home/glynch/.julia/packages/LibPQ/uzraq/src/exceptions.jl:89 [inlined]
 [3] #handle_result#46(::Bool, ::Function, ::LibPQ.Result) at /home/glynch/.julia/dev/LibPQ/src/results.jl:215
 [4] #handle_result at ./none:0 [inlined]
 [5] #execute#63(::Bool, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::LibPQ.Statement, ::Array{Any,1}) at /home/glynch/.julia/dev/LibPQ/src/statements.jl:130
 [6] execute(::LibPQ.Statement, ::Array{Any,1}) at /home/glynch/.julia/dev/LibPQ/src/statements.jl:122
 [7] top-level scope at none:0

The problem is with handling the output of error_field in one of the outer constructors for PQResultError:
https://github.com/invenia/LibPQ.jl/blob/d6d5c3830522317a87c2b9670c75735ce9d49fda/src/exceptions.jl#L88-L96
error_field can return either a nothing or an unsafe string:
https://github.com/invenia/LibPQ.jl/blob/d6d5c3830522317a87c2b9670c75735ce9d49fda/src/results.jl#L173-L176
But if the result is nothing then the line following the call to error_field is an error:
https://github.com/invenia/LibPQ.jl/blob/d6d5c3830522317a87c2b9670c75735ce9d49fda/src/exceptions.jl#L92

Hmm, I was following the PostgreSQL docs:

This field is not localizable, and is always present.

If you can, I'd like to see your error message and know any other information about your result that you can provide, as well as your version of PostgreSQL on the server side. I will have to fix this in general, but it would be nice to know what these cases actually look like. And if I can reproduce it, maybe I can file a PostgreSQL bug report!

I'm not sure what the exact problem was, I got the prepared statement to work at some point and now I can't seem to reproduce the problem. I'll see if I can recreate it this weekend.

Thanks for fixing this! I'm trying to defend imminently: I'll try to track down what caused this in the first place after I do.


feat(core): add container info in property scope

Codecov Report
Attention: Patch coverage is 80.00000% with 1 lines in your changes are missing coverage. Please review.

Project coverage is 77.67%. Comparing base (7dfaaad) to head (01fb403).

Files
Patch %
Lines

...ava/dev/anhcraft/config/context/PropertyScope.java
66.66%
1 Missing :warning:

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@             Coverage Diff              @@
##               main      #19      +/-   ##
============================================
- Coverage     77.71%   77.67%   -0.04%
  Complexity      585      585
============================================
  Files            67       67
  Lines          1557     1559       +2
  Branches        338      338
============================================
+ Hits           1210     1211       +1
- Misses          238      239       +1
  Partials        109      109

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


More Bloat To Remove

Thank you for building and maintaining this wonderful script. I'm setting up some new Windows 11 machines for my family and have been astonished with just how much bloat Windows now has preinstalled. This script has already saved me HOURS of configuration so, again, bless you :)
I just wanted to bring to your attention that after doing a fresh install of Windows 11 and running your script I still have links to the following apps in the start menu under the "Pinned" heading:

Spotify
WhatsApp
LinkedIn
Outlook

I don't think these apps are actually installed by default, but the links (bloat) are put there by default. Was hoping maybe the script could be updated to remove these types of unwanted links along with all of the other bloat it removes.
Thanks again for the awesome script!

Heya,
First of, glad to hear this script has been helpful to you!
I share your pain with the pinned apps in the start menu, it's a difficult problem to tackle, because the pinned apps are stored in a binary file that can't really be edited.
The script does however have an option to completely clear all pinned apps in the startmenu by completely replacing the binary file. This option is available when you select custom setup when you run the script. I hope that works for you!


feat: added sonarcloud from github templates

Implementation using SonarCloud template succeeded. GitHub template no longer needed.


⚠ Mobitopup has degraded performance

In 60ffac8, Mobitopup (https://napcard.voz.tech) experienced degraded performance:

HTTP code: 200
Response time: 10740 ms

Resolved: Mobitopup performance has improved in b9b046e after 5 minutes.


Support for Java modularity

Description
Hello, I am currently integrating meilisearch-java into my development work, but I've encountered an issue where it does not support Java's modular system. Additionally, my attempts to use some plugins for conversion have failed. I was wondering if there are any plans from the official side to support modularity?

Hello @AlphaFoxz
Thanks for the suggestion
We don't know this modularity concept. What modularity would bring to our library? How could it improve the user experience or the maintainer experience?
What are the drawbacks?
Also, you have to know we support Javai 8 so far, so maybe it's not compatible with modularity
Java 8 is old, so we might consider not supporting it anymore, but it's a discussion for another issue 😇

Okay, thx your reply @curquiza
My description was not clear enough before. When I writing a springboot3-meilisearch-starter, there is a problem at module-info.java when exec gradle build.
module starter.meilisearch {
    requires meilisearch.java;
             ^ no module named 'meilisearch.java'
    requires others ...
}

Now I know it won't be modular anytime soon. And I just need remove module-info.java. it's not a big problem.


Device does not appear with the intermediate firmware.

Trying to flash a LSC movement sensor (https://www.mikrocontroller.net/attachment/426891/Bauteilseite1_klein.jpg)
It does not seem to flash the firmware. It starts the web server fine, I can connect to it, SmartConfig completes and then the device does not appear with the intermediate firmware.
All help is appreciated.
Logs:
root@ubuntu:/home/ubuntu/tuya-convert/scripts# cat smarthack-mqtt.log
1581864064: mosquitto version 1.6.6 starting
1581864064: Using default config.
1581864064: Opening ipv4 listen socket on port 1883.
1581864064: Opening ipv6 listen socket on port 1883.
1581864101: New connection from <IP_ADDRESS> on port 1883.
1581864101: New client connected from <IP_ADDRESS> as<PHONE_NUMBER>62ab111c2b (p1, c1, k60, u'038880662462ab111c2b').
1581864101: No will message specified.
1581864101: Sending CONNACK to<PHONE_NUMBER>62ab111c2b (0, 0)
1581864101: Received SUBSCRIBE from<PHONE_NUMBER>62ab111c2b
1581864101:     smart/device/in/038880662462ab111c2b (QoS 0)
1581864101:<PHONE_NUMBER>62ab111c2b 0 smart/device/in/038880662462ab111c2b
1581864101: Sending SUBACK to<PHONE_NUMBER>62ab111c2b
1581864111: New connection from <IP_ADDRESS> on port 1883.
1581864111: New client connected from <IP_ADDRESS> as auto-55783521-FDFF-89B1-1C7B-072AF80ABF1B (p2, c1, k60).
1581864111: No will message specified.
1581864111: Sending CONNACK to auto-55783521-FDFF-89B1-1C7B-072AF80ABF1B (0, 0)
1581864111: Received PUBLISH from auto-55783521-FDFF-89B1-1C7B-072AF80ABF1B (d0, q0, r0, m0, 'smart/device/in/038880662462ab111c2b', ... (111 bytes))
1581864111: Sending PUBLISH to<PHONE_NUMBER>62ab111c2b (d0, q0, r0, m0, 'smart/device/in/038880662462ab111c2b', ... (111 bytes))
1581864111: Received DISCONNECT from auto-55783521-FDFF-89B1-1C7B-072AF80ABF1B
1581864111: Client auto-55783521-FDFF-89B1-1C7B-072AF80ABF1B disconnected.
1581864192: Client<PHONE_NUMBER>62ab111c2b has exceeded timeout, disconnecting.
1581864225: New connection from <IP_ADDRESS> on port 1883.
1581864225: New client connected from <IP_ADDRESS> as<PHONE_NUMBER>62ab111c2b (p1, c1, k60, u'038880662462ab111c2b').
1581864225: No will message specified.
1581864225: Sending CONNACK to<PHONE_NUMBER>62ab111c2b (0, 0)
1581864225: Received SUBSCRIBE from<PHONE_NUMBER>62ab111c2b
1581864225:     smart/device/in/038880662462ab111c2b (QoS 0)
1581864225:<PHONE_NUMBER>62ab111c2b 0 smart/device/in/038880662462ab111c2b
1581864225: Sending SUBACK to<PHONE_NUMBER>62ab111c2b
1581864235: New connection from <IP_ADDRESS> on port 1883.
1581864235: New client connected from <IP_ADDRESS> as auto-9C5F5CEE-B1FE-9421-D441-EA9EF89A2892 (p2, c1, k60).
1581864235: No will message specified.
1581864235: Sending CONNACK to auto-9C5F5CEE-B1FE-9421-D441-EA9EF89A2892 (0, 0)
1581864235: Received PUBLISH from auto-9C5F5CEE-B1FE-9421-D441-EA9EF89A2892 (d0, q0, r0, m0, 'smart/device/in/038880662462ab111c2b', ... (111 bytes))
1581864235: Sending PUBLISH to<PHONE_NUMBER>62ab111c2b (d0, q0, r0, m0, 'smart/device/in/038880662462ab111c2b', ... (111 bytes))
1581864235: Received DISCONNECT from auto-9C5F5CEE-B1FE-9421-D441-EA9EF89A2892
1581864235: Client auto-9C5F5CEE-B1FE-9421-D441-EA9EF89A2892 disconnected.
1581864316: Client<PHONE_NUMBER>62ab111c2b has exceeded timeout, disconnecting.
1581864318: New connection from <IP_ADDRESS> on port 1883.
1581864318: New client connected from <IP_ADDRESS> as<PHONE_NUMBER>62ab111c2b (p1, c1, k60, u'038880662462ab111c2b').
1581864318: No will message specified.
1581864318: Sending CONNACK to<PHONE_NUMBER>62ab111c2b (0, 0)
1581864318: Received SUBSCRIBE from<PHONE_NUMBER>62ab111c2b
1581864318:     smart/device/in/038880662462ab111c2b (QoS 0)
1581864318:<PHONE_NUMBER>62ab111c2b 0 smart/device/in/038880662462ab111c2b
1581864318: Sending SUBACK to<PHONE_NUMBER>62ab111c2b
^C1581864320: Socket error on client<PHONE_NUMBER>62ab111c2b, disconnecting.
1581864320: mosquitto version 1.6.6 terminating

root@ubuntu:/home/ubuntu/tuya-convert/scripts# cat smarthack-psk.log
new client on port 443 from <IP_ADDRESS>:46960
could not establish sslpsk socket: [SSL: NO_SHARED_CIPHER] no shared cipher (_ssl.c:1076)
don't panic this is probably just your phone!
new client on port 443 from <IP_ADDRESS>:46962
could not establish sslpsk socket: [SSL: NO_SHARED_CIPHER] no shared cipher (_ssl.c:1076)
don't panic this is probably just your phone!
new client on port 443 from <IP_ADDRESS>:46964
could not establish sslpsk socket: [SSL: NO_SHARED_CIPHER] no shared cipher (_ssl.c:1076)
don't panic this is probably just your phone!
new client on port 443 from <IP_ADDRESS>:46974
could not establish sslpsk socket: [SSL: NO_SHARED_CIPHER] no shared cipher (_ssl.c:1076)
don't panic this is probably just your phone!
new client on port 443 from <IP_ADDRESS>:46978
could not establish sslpsk socket: [SSL: NO_SHARED_CIPHER] no shared cipher (_ssl.c:1076)
don't panic this is probably just your phone!
new client on port 443 from <IP_ADDRESS>:6456
ID: 0142416f68626d64366147393149465231b94f046466691fff7fcefe95153588935f272631b47c414295878141533faaec27
PSK: e83bae9f159f8a02d7ce968042d1cb99c7a3287e4d5ef6e083c0c4c9c0664128
new client on port 443 from <IP_ADDRESS>:5123
ID: 0142416f68626d64366147393149465231b94f046466691fff7fcefe95153588935f272631b47c414295878141533faaec27
PSK: e83bae9f159f8a02d7ce968042d1cb99c7a3287e4d5ef6e083c0c4c9c0664128
new client on port 8886 from <IP_ADDRESS>:5302
ID: 0142416f68626d64366147393149465231b94f046466691fff7fcefe95153588935f272631b47c414295878141533faaec27
PSK: e83bae9f159f8a02d7ce968042d1cb99c7a3287e4d5ef6e083c0c4c9c0664128
new client on port 443 from <IP_ADDRESS>:10579
ID: 0142416f683f3f3f3f3f3f3f3f3f3f3f3fb94f046466691fff7fcefe95153588935f272631b47c414295878141533faaec27
Prefix: b'BAoh????????????'
PSK: 56c22cf7897207c4709797f5c04c5bcf7755a154bd804cf390735e1e68378560
new client on port 443 from <IP_ADDRESS>:46984
could not establish sslpsk socket: [SSL: NO_SHARED_CIPHER] no shared cipher (_ssl.c:1076)
don't panic this is probably just your phone!
new client on port 443 from <IP_ADDRESS>:46990
could not establish sslpsk socket: [SSL: NO_SHARED_CIPHER] no shared cipher (_ssl.c:1076)
don't panic this is probably just your phone!
new client on port 443 from <IP_ADDRESS>:46996
could not establish sslpsk socket: [SSL: NO_SHARED_CIPHER] no shared cipher (_ssl.c:1076)
don't panic this is probably just your phone!
new client on port 8886 from <IP_ADDRESS>:13634
[Errno 104] Connection reset by peer
new client on port 443 from <IP_ADDRESS>:4114
ID: 0142416f68626d64366147393149465231b94f046466691fff7fcefe95153588935f272631b47c414295878141533faaec27
PSK: e83bae9f159f8a02d7ce968042d1cb99c7a3287e4d5ef6e083c0c4c9c0664128
new client on port 443 from <IP_ADDRESS>:24439
ID: 0142416f68626d64366147393149465231b94f046466691fff7fcefe95153588935f272631b47c414295878141533faaec27
PSK: e83bae9f159f8a02d7ce968042d1cb99c7a3287e4d5ef6e083c0c4c9c0664128
new client on port 8886 from <IP_ADDRESS>:9798
ID: 0142416f68626d64366147393149465231b94f046466691fff7fcefe95153588935f272631b47c414295878141533faaec27
PSK: e83bae9f159f8a02d7ce968042d1cb99c7a3287e4d5ef6e083c0c4c9c0664128
new client on port 443 from <IP_ADDRESS>:11953
ID: 0142416f68626d64366147393149465231b94f046466691fff7fcefe95153588935f272631b47c414295878141533faaec27
PSK: e83bae9f159f8a02d7ce968042d1cb99c7a3287e4d5ef6e083c0c4c9c0664128
new client on port 443 from <IP_ADDRESS>:47010
could not establish sslpsk socket: [SSL: NO_SHARED_CIPHER] no shared cipher (_ssl.c:1076)
don't panic this is probably just your phone!
new client on port 443 from <IP_ADDRESS>:47012
could not establish sslpsk socket: [SSL: NO_SHARED_CIPHER] no shared cipher (_ssl.c:1076)
don't panic this is probably just your phone!
new client on port 8886 from <IP_ADDRESS>:33074
ID: 0142416f68626d64366147393149465231b94f046466691fff7fcefe95153588935f272631b47c414295878141533faaec27
PSK: e83bae9f159f8a02d7ce968042d1cb99c7a3287e4d5ef6e083c0c4c9c0664128
new client on port 443 from <IP_ADDRESS>:17068
ID: 0142416f68626d64366147393149465231b94f046466691fff7fcefe95153588935f272631b47c414295878141533faaec27
PSK: e83bae9f159f8a02d7ce968042d1cb99c7a3287e4d5ef6e083c0c4c9c0664128
^CTraceback (most recent call last):
  File "./psk-frontend.py", line 113, in <module>
    main()
  File "./psk-frontend.py", line 106, in main
    r,_,_ =  select.select(readables, [], [])
KeyboardInterrupt

root@ubuntu:/home/ubuntu/tuya-convert/scripts# cat smarthack-udp.log
Listening for Tuya broadcast on UDP 6666
Listening for encrypted Tuya broadcast on UDP 6667

root@ubuntu:/home/ubuntu/tuya-convert/scripts# cat smarthack-web.log
Listening on <IP_ADDRESS>:80
[I 200216 14:41:07 web:2246] 302 GET /generate_204 (<IP_ADDRESS>) 1.60ms
[I 200216 14:41:07 web:2246] 302 GET /generate_204 (<IP_ADDRESS>) 1.00ms
[I 200216 14:41:09 web:2246] 302 GET /generate_204 (<IP_ADDRESS>) 0.96ms
[I 200216 14:41:09 web:2246] 302 GET /generate_204 (<IP_ADDRESS>) 0.98ms
[I 200216 14:41:09 web:2246] 200 GET / (<IP_ADDRESS>) 1.69ms

GET /gw.json?a=s.gw.token.get&et=1&gwId=038880662462ab111c2b&other={"token":"00000000","region":"US","tlinkStat":{"configure":"smartconfig","time":0,"source":"ap","path":"multicast"}}&t=3&v=3.0&sign=7a18f1bd9173251d86644c1155a12726
Host: a3.tuyaus.com
User-Agent: ESP8266SDK
Connection: keep-alive

Answer s.gw.token.get
reply {"t":1581864100,"e":false,"success":true,"result":{"gwApiUrl":"http://<IP_ADDRESS>/gw.json","stdTimeZone":"-05:00","mqttRanges":"","timeZone":"-05:00","httpsPSKUrl":"https://<IP_ADDRESS>/gw.json","mediaMqttUrl":"<IP_ADDRESS>","gwMqttUrl":"<IP_ADDRESS>","dstIntervals":[],"mqttsUrl":"<IP_ADDRESS>","mqttsPSKUrl":"<IP_ADDRESS>","mediaMqttsUrl":"<IP_ADDRESS>","aispeech":"<IP_ADDRESS>"}}
[I 200216 14:41:40 web:2246] 200 GET /gw.json?a=s.gw.token.get&et=1&gwId=038880662462ab111c2b&other={"token":"00000000","region":"US","tlinkStat":{"configure":"smartconfig","time":0,"source":"ap","path":"multicast"}}&t=3&v=3.0&sign=7a18f1bd9173251d86644c1155a12726 (<IP_ADDRESS>) 16.03ms

POST /gw.json?a=s.gw.dev.pk.active&et=1&gwId=038880662462ab111c2b&other={"token":"00000000"}&t=3&v=3.0&sign=129f0bf7999b1e5a5e7681fb85c2ac77
Host: <IP_ADDRESS>
User-Agent: ESP8266SDK
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 549

payload AE88E2892452EDCA75C90758BEE49B657707B8BAD956CEA14897CFC590792F478B17E0D836D3E2E8553C1F84354BC250E045E117BFFFAB6D4F920F161F7AA78AB52CC746D81D40208CF914205CAA917FF97DE59D365F6B4527C8EE9DA1147EB6AD099401ED40C52F730A5924DCD34A4364373555647D000321EB55D29D916070F7D844D842B47B069C08FC8751874EEF359EB94F7B28918AB501FAA2753B922CC452080D9B85B7E37AA8BCE1F466F502FAB78256AE9578921A74FAB0EDA4BD8E356AC5919EEE49C2603CC6AF38CD5EB5A4081F00A3738D9462DFA3AABC5F104FB74A75D46AA08343782FF5EE2A436FE4BF4B367AB473F78379CF015B138E5C33729C6857C7494CB1A7BECE4D62E741AF
Answer s.gw.dev.pk.active
reply {"t":1581864101,"e":false,"success":true,"result":{"schema":"[{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"},{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"}]","uid":"00000000000000000000","devEtag":"0000000000","secKey":"0000000000000000","schemaId":"0000000000","localKey":"0000000000000000"}}
TRIGGER UPGRADE IN 10 SECONDS
[I 200216 14:41:41 web:2246] 200 POST /gw.json?a=s.gw.dev.pk.active&et=1&gwId=038880662462ab111c2b&other={"token":"00000000"}&t=3&v=3.0&sign=129f0bf7999b1e5a5e7681fb85c2ac77 (<IP_ADDRESS>) 16.19ms

POST /gw.json?a=tuya.device.dynamic.config.get&et=1&gwId=038880662462ab111c2b&t=4&v=1.0&sign=720b29dfd78c72ea7d98b6c25fd73dd6
Host: <IP_ADDRESS>
User-Agent: ESP8266SDK
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 0

Answer tuya.device.dynamic.config.get
reply {"result":"fn8oBaEAaJe3I+enO7OkYdd0LkD9WHnY6k8vmvctrJZ79OqzO0IbzlVUd0tTKMnF9F2VBmqNqTqJcWuiX4YubMiKKrHRIXgDq5V5F8gQkRm7mevrGF2WUpAllBDW/Q5l","t":1581864101,"sign":"cb4ebaddc3cb0a2c"}
[I 200216 14:41:41 web:2246] 200 POST /gw.json?a=tuya.device.dynamic.config.get&et=1&gwId=038880662462ab111c2b&t=4&v=1.0&sign=720b29dfd78c72ea7d98b6c25fd73dd6 (<IP_ADDRESS>) 1.83ms
encoding {"data":{"gwId":"038880662462ab111c2b"},"protocol":15,"s":"1523715","t":"1581864111"} using protocol 2.2
b"2.2\xb03i\x7f86411127\xb7\x98\xa7\x08\xc0\xc7\xa5\xc2JB\x9c_9\xed\x91m\x07'\x00\x92\x15{j^BCV\xa7\xf5\xb7p\x80Z\xd2\xa3\xd0\xd87]9z\x15-\xef\xdf\x19\xaeu\x91\xfa\xef\xd4\xa8\xffL\x1a\xef\x01\r\x8e\xbd\xf5EL\xc4\x8f\x18\xa2\x86\xceFj\xb4\xe1\xf2 \x94\x9e\x9d\x82\x95S}\xe3\xa8\xe9\xa0c\x16\xa5\x8b\xa9`\x0e\xdf\xfe"
[I 200216 14:42:13 web:2246] 302 GET /generate_204 (<IP_ADDRESS>) 0.92ms

GET /gw.json?a=s.gw.token.get&et=1&gwId=038880662462ab111c2b&other={"token":"00000000","region":"US","tlinkStat":{"configure":"smartconfig","time":0,"source":"ap","path":"multicast"}}&t=4&v=3.0&sign=189cc10bf213ccd7bb2f2edb80a24e7c
Host: a3.tuyaus.com
User-Agent: ESP8266SDK
Connection: keep-alive

Answer s.gw.token.get
reply {"t":1581864224,"e":false,"success":true,"result":{"gwApiUrl":"http://<IP_ADDRESS>/gw.json","stdTimeZone":"-05:00","mqttRanges":"","timeZone":"-05:00","httpsPSKUrl":"https://<IP_ADDRESS>/gw.json","mediaMqttUrl":"<IP_ADDRESS>","gwMqttUrl":"<IP_ADDRESS>","dstIntervals":[],"mqttsUrl":"<IP_ADDRESS>","mqttsPSKUrl":"<IP_ADDRESS>","mediaMqttsUrl":"<IP_ADDRESS>","aispeech":"<IP_ADDRESS>"}}
[I 200216 14:43:44 web:2246] 200 GET /gw.json?a=s.gw.token.get&et=1&gwId=038880662462ab111c2b&other={"token":"00000000","region":"US","tlinkStat":{"configure":"smartconfig","time":0,"source":"ap","path":"multicast"}}&t=4&v=3.0&sign=189cc10bf213ccd7bb2f2edb80a24e7c (<IP_ADDRESS>) 15.68ms

POST /gw.json?a=s.gw.dev.pk.active&et=1&gwId=038880662462ab111c2b&other={"token":"00000000"}&t=5&v=3.0&sign=19bf89ee23f41c7c651d4c778fcfd8a1
Host: <IP_ADDRESS>
User-Agent: ESP8266SDK
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 549

payload AE88E2892452EDCA75C90758BEE49B657707B8BAD956CEA14897CFC590792F478B17E0D836D3E2E8553C1F84354BC250E045E117BFFFAB6D4F920F161F7AA78AB52CC746D81D40208CF914205CAA917FF97DE59D365F6B4527C8EE9DA1147EB6AD099401ED40C52F730A5924DCD34A4364373555647D000321EB55D29D916070F7D844D842B47B069C08FC8751874EEF359EB94F7B28918AB501FAA2753B922CC452080D9B85B7E37AA8BCE1F466F502FAB78256AE9578921A74FAB0EDA4BD8E356AC5919EEE49C2603CC6AF38CD5EB5A4081F00A3738D9462DFA3AABC5F104FB74A75D46AA08343782FF5EE2A436FE4BF4B367AB473F78379CF015B138E5C33729C6857C7494CB1A7BECE4D62E741AF
Answer s.gw.dev.pk.active
reply {"t":1581864225,"e":false,"success":true,"result":{"schema":"[{\"mode\":\"rw\",\"property\":{\"type\":\"bool\"},\"id\":1,\"type\":\"obj\"}]","uid":"00000000000000000000","devEtag":"0000000000","secKey":"0000000000000000","schemaId":"0000000000","localKey":"0000000000000000"}}
TRIGGER UPGRADE IN 10 SECONDS
[I 200216 14:43:45 web:2246] 200 POST /gw.json?a=s.gw.dev.pk.active&et=1&gwId=038880662462ab111c2b&other={"token":"00000000"}&t=5&v=3.0&sign=19bf89ee23f41c7c651d4c778fcfd8a1 (<IP_ADDRESS>) 13.36ms

POST /gw.json?a=tuya.device.dynamic.config.get&et=1&gwId=038880662462ab111c2b&t=5&v=1.0&sign=cde96037431ed8cf0c57f5c476d4f15e
Host: <IP_ADDRESS>
User-Agent: ESP8266SDK
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 0

Answer tuya.device.dynamic.config.get
reply {"result":"fn8oBaEAaJe3I+enO7OkYdd0LkD9WHnY6k8vmvctrJbQCxh4judzUSo0b/mGpQna9F2VBmqNqTqJcWuiX4YubKp8gKIh2m7gghAuFgB4mkG7mevrGF2WUpAllBDW/Q5l","t":1581864225,"sign":"5cbc84616e96dd76"}
[I 200216 14:43:45 web:2246] 200 POST /gw.json?a=tuya.device.dynamic.config.get&et=1&gwId=038880662462ab111c2b&t=5&v=1.0&sign=cde96037431ed8cf0c57f5c476d4f15e (<IP_ADDRESS>) 1.61ms
encoding {"data":{"gwId":"038880662462ab111c2b"},"protocol":15,"s":"1523715","t":"1581864235"} using protocol 2.2
b"2.2\xe5\x9c\xeb)86423542\xb7\x98\xa7\x08\xc0\xc7\xa5\xc2JB\x9c_9\xed\x91m\x07'\x00\x92\x15{j^BCV\xa7\xf5\xb7p\x80Z\xd2\xa3\xd0\xd87]9z\x15-\xef\xdf\x19\xaeu\x91\xfa\xef\xd4\xa8\xffL\x1a\xef\x01\r\x8e\xbd\xf5EL\xc4\x8f\x18\xa2\x86\xceFj\xb4\xe1\xf2 \x94\x9e\x9d\x82\x91\xf5:\xd9\xa4\xb1\xad\xbf\xbcZN\xb0\xf5S\x15\xa1"

POST /gw.json?a=tuya.device.dynamic.config.get&et=1&gwId=038880662462ab111c2b&t=2&v=1.0&sign=49a18a8d146d76628df5adcf12d6729a
Host: <IP_ADDRESS>
User-Agent: ESP8266SDK
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 0

Answer tuya.device.dynamic.config.get
reply {"result":"fn8oBaEAaJe3I+enO7OkYdd0LkD9WHnY6k8vmvctrJYp+ePxNMsX4itndW3MwLoS9F2VBmqNqTqJcWuiX4YubABcg76uhHshf1zz+g45DB+7mevrGF2WUpAllBDW/Q5l","t":1581864318,"sign":"e382285bfe2069fb"}
[I 200216 14:45:18 web:2246] 200 POST /gw.json?a=tuya.device.dynamic.config.get&et=1&gwId=038880662462ab111c2b&t=2&v=1.0&sign=49a18a8d146d76628df5adcf12d6729a (<IP_ADDRESS>) 1.61ms
^CReceived SIGINT, exiting...

root@ubuntu:/home/ubuntu/tuya-convert/scripts# cat smarthack-wifi.log
System info
===========
31856ad
Linux ubuntu 5.3.0-18-generic #19-Ubuntu SMP Tue Oct 8 20:14:06 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
OpenSSL 1.1.1c  28 May 2019
Dnsmasq version 2.80  Copyright (c) 2000-2018 Simon Kelley
Compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify dumpfile

This software comes with ABSOLUTELY NO WARRANTY.
Dnsmasq is free software, and you are welcome to redistribute it
under the terms of the GNU General Public License, version 2 or 3.
hostapd v2.9
User space daemon for IEEE 802.11 AP management,
IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
Copyright (c) 2002-2019, Jouni Malinen<EMAIL_ADDRESS>and contributors
Python 3.7.5
===========
Attempting to stop wpa_supplicant
Stopping NetworkManager...
Configuring AP interface...
RTNETLINK answers: File exists
RTNETLINK answers: File exists
Starting DNSMASQ server...
Starting AP on wlo1...
Configuration file: /dev/stdin
Using interface wlo1 with hwaddr 98:2c:bc:ab:54:5a and ssid "vtrust-flash"
wlo1: interface state UNINITIALIZED->ENABLED
wlo1: AP-ENABLED
wlo1: AP-STA-CONNECTED 72:f0:0c:e2:6e:2a
wlo1: AP-STA-CONNECTED 24:62:ab:11:1c:2b
wlo1: AP-STA-DISCONNECTED 24:62:ab:11:1c:2b
wlo1: AP-STA-CONNECTED 24:62:ab:11:1c:2b
wlo1: AP-STA-DISCONNECTED 24:62:ab:11:1c:2b
wlo1: AP-STA-CONNECTED 24:62:ab:11:1c:2b
wlo1: AP-STA-DISCONNECTED 24:62:ab:11:1c:2b
wlo1: AP-STA-CONNECTED 24:62:ab:11:1c:2b
wlo1: interface state ENABLED->DISABLED
wlo1: AP-STA-DISCONNECTED 24:62:ab:11:1c:2b
wlo1: AP-STA-DISCONNECTED 72:f0:0c:e2:6e:2a
wlo1: AP-DISABLED
wlo1: CTRL-EVENT-TERMINATING
nl80211: deinit ifname=wlo1 disabled_11b_rates=0
AP closed
Stopping DNSMASQ server...
Restarting NetworkManager...

Same issue here with a pi3 on the latest raspbian buster version 2020-02-05 and 2019-04-08 raspbian stretch.

Duplicate of #135. These devices have a secondary MCU that powers down the ESP until there is data to send, so it is a tricky matter to keep the device online long enough to flash.


New Blazor JS interop

Per https://github.com/dotnet/blazor-samples/issues/41 ...

there is new JavaScript interop available for .Net 7.
I created simple demo to show the new JavaScript interop in Blazor.
I'm not sure if you want to adopt it as is, but perhaps you could have look at it and extend one of the existing sample apps.
https://github.com/pavelsavara/blazor-wasm-hands-pose
There is also non-Blazor demo which has more complex interop logic
https://github.com/pavelsavara/dotnet-wasm-todo-mvc
(also please ping me on IM to discuss how to collaborate on further docs about the feature, thank you)

It's best if we have a section and extend the snippet sample apps, as opposed to adding a new sample app. Every sample app adds overhead costs 💸☹.
cc: @pavelsavara

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

ID: 57ed3088-2f9b-f51a-fd17-0c0de2949c57
Version Independent ID: 49fa31d8-72a6-01a1-027d-6edeac9e0fc4
Content: ASP.NET Core Blazor JavaScript interoperability (JS interop)
Content Source: aspnetcore/blazor/javascript-interoperability/index.md
Product: aspnet-core
Technology: aspnetcore-blazor
GitHub Login: @guardrex
Microsoft Alias: riande

@pavelsavara ... The first step for updates is merely to convert the obsolete explanations and examples for unmarshalled JS calls for the 7.0 docs. There are two sections/examples, a simple example with general remarks and a more complicated example in another article.
Let's see if we can get me straight on the simple example first, then I'll see what I can do with the other example. After that, I'll chat with Dan to see how much coverage we'll host beyond that and ask about the sample app situation on your original dotnet/blazor-samples repo issue.
I tried something here, but it 💥😢 on me. Obviously, I didn't wire it up right! 🙈🤣
Our 6.0 demo of the simple use case is ...
https://docs.microsoft.com/en-us/aspnet/core/blazor/performance?view=aspnetcore-6.0#consider-the-use-of-unmarshalled-calls
Here's what I set up ...

Use <AllowUnsafeBlocks>true</AllowUnsafeBlocks> in the  project file.

I'll show this JS both ways because I wasn't sure which way might work (a raw FN, as we have today in that section example -AND- a global FN version). BTW ... We're not using modules in most cases because (1) we want to show the lowest common demoninator for implementing JS code, and (2) we want to preserve as much doc space as we can in code examples. If you end up telling me that this approach MUST involve the JS in a module, ok then ... yeah ... that will probably explain my problem.
In wwwroot/index.html below the Blazor script link:

RegisteredComponentsInterop.cs:
using System.Runtime.InteropServices.JavaScript;

internal sealed partial class RegisteredComponentsInterop
{

    [JSImport("jsInteropCall")]
    public static partial string JSInteropCall();
}

In the Index component ...
@page "/"
@using System.Runtime.InteropServices.JavaScript

Unmarshalled interop

    value: @value

@code {
    private string? value;

    protected override void OnInitialized()
    {
        value = RegisteredComponentsInterop.JSInteropCall();
    }
}

BTW --- Tried that in OnAfterRender, too ... no 🎲🎲.
🥁🥁🥁🥁 plz ... and the error is ......

Unhandled exception rendering component: Error: Assert failed: jsInteropCall2 must be a Function but was undefined

So, where did I go off the rails there? 😄

@pavelsavara ... Ok ... Came back this afternoon to try again, and I had better luck 🍀 ...

<AllowUnsafeBlocks>true</AllowUnsafeBlocks> in the project file.

wwwroot/js/scripts.js:
export function jsInteropCall() {
  return 'Hello World!';
}

RegisteredComponentsInterop.cs:
using System.Runtime.InteropServices.JavaScript;

internal sealed partial class RegisteredComponentsInterop
{
    [JSImport("jsInteropCall", "RegisteredComponentsInterop")]
    public static partial string JSInteropCall();
}

Pages/Index.razor:
@page "/"
@using System.Runtime.InteropServices.JavaScript

Unmarshalled interop

    value: @value

@code {
    private string? value;

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            await JSHost.ImportAsync("RegisteredComponentsInterop", "../js/scripts.js");
            value = RegisteredComponentsInterop.JSInteropCall();
            StateHasChanged();
        }
    }
}

... and that seems to work 🎉.
Lot's of ❓tho about what devs need to read on it ... best practices and critical info on things like ...

<AllowUnsafeBlocks> ... Security concerns?
You want .mjs? ... or is just .js ok in this context?
Anything in particular to say about the module and its exports for this approach?
Naming remarks on the class and module (e.g., where I just placed RegisteredComponentsInterop to get this working)?
Do you like using OnAfterRender for module import, or would initialization be better?

... stuff like that. Whatever you feel is the best general approach for the most common basic use case.

2. `wwwroot/js/scripts.js`:

All previous options how Blazor could deploy the JS file are still there. My favorite is next to the razor component.

   ```
       protected override async Task OnAfterRenderAsync(bool firstRender)
               await JSHost.ImportAsync("RegisteredComponentsInterop", "../js/scripts.js");
   ```

I'm not really Blazor expert yet, but this seems that the script download would be delayed too late and slow down the first render with the JS code impact. Is there event which could do it earlier ?

* First of all, is this even unmarshalled interop at all???? ... or is this just ✨ **_NEW and IMPROVED_** ✨ JS interop? If that's the case, then we'll need to discuss what the actual replacement is for the **unmarshalled** approach with the new API, if that's even a thing any longer. My first goal for the updates is to deal with the two sections we have for unmarshalled interop at ...

This is marshaled interop and it's so fast you could replace any legacy unmarshaled interop with it. And you should because IJSUnmarshalledRuntime is now obsolete.
@danroth27 would be better guide to help you to express Blazor oficial position and wording on this.

* `<AllowUnsafeBlocks>` ... Security concerns?

It means that (user and) the code generator in Roslyn compiler could use pointers. Not a security concern. Rather developer would not be prevented from using lower level concepts in that assembly.

* You want `.mjs`? ... or is just `.js` ok in this context?

.js is ok on the web. It makes difference on NodeJS, which you are not targeting with Blazor.

* Anything in particular to say about the module and its exports for this approach?

It's standard ES6 module. The module name in the JSImport and ImportAsync should match each other and they need to be unique in the app. Therefore is you are authoring NuGet package, you should use your namespace/prefix.

* Naming remarks on the class and module (e.g., where I just placed `RegisteredComponentsInterop` to get this working)?

So far I did my as public static class Interop nested in the real class which is using it.

* Do you like using `OnAfterRender` for module import, or would initialization be better?

As early as possible. JS download takes time.

Link to ES6 modules doc, you could probably even link it from our docs https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules

Also the new API is only available in the browser (not on server side). The code analyzer would complain about it with CA1416.
The correct way how to solve it is to use
if (OperatingSystem.IsBrowser())
{
    //only call the new interop from here
}

There is also JSExport which you should explore.
Could should show how to pass callback on JSImport method and how to register DOM event.

I don't know what was Blazor previous guidance on Blazor component instances together with JSInProcessRuntime calls. For example when you have grid on the page where each row is Blazor component with the JS interop. How does the DOM event handler hit the correct C# instance of the row ?

With this new interop we could marshal C# instance during registration and pass it back on the JSExport call
We could also capture it in C# closure of the callback passed to JSImport call
We could use existing ways how Blazor does this with JSInProcessRuntime - I don't know what it is, sorry

  * https://docs.microsoft.com/en-us/aspnet/core/blazor/performance?view=aspnetcore-6.0#consider-the-use-of-unmarshalled-calls
  * https://docs.microsoft.com/en-us/aspnet/core/blazor/javascript-interoperability/call-javascript-from-dotnet?view=aspnetcore-6.0#unmarshalled-javascript-interop

Ideally these 2 articles would not be part of Net 7 because we don't want people to use it for new code. The JS APIs on BINDING and MONO objects are now also deprecated. They are also un-fixably unsafe during GC.

My favorite is next to the razor component.

We cover that, too. I'll be sure to link our module coverage in the new sections. One thing that I need to discuss with Dan and Artak is how we still favor the easy/quick placement of scripts in the index/html/_Host.cshtml files. It's good for doc examples, but it really isn't the best practice. We might favor going with modules everywhere. We have at least a dozen updates to make across the whole Blazor doc set to pull that off. However, I'll ask about it. If they want to do that, I can take it on near EOY or 23Q1. For now, we can go with modules in JS companion files to the components. I'll angle the PR that way.

the script download would be delayed too late and slow down the first render

It won't because it's after render (hence the need to call StateHasChanged in that hacked example I wrote about). Steve provided an example with Mapbox, and he says that it's good in cases where the dev has to interact with the UI ... i.e. ... wait until Blazor is done rendering on the first pass, then go for module/JS FNs that interact with the UI. But to answer your question, Yes! We can go with init. We'll see on the PR if Javier/Tanay/Steve confirm that it should say that when interacting with the UI that OnAfterRender is better. I'll go with init but make a remark about it in the text.

This is marshaled interop and it's so fast you could replace any legacy unmarshaled interop with it. And you should because IJSUnmarshalledRuntime is now obsolete.

This means that we can just drop the existing unmarshalled interop coverage from the 7.0 and later docs in favor of two new sections on the new interop approaches. That's cool. :+1:

@danroth27 would be better guide to help you to express Blazor oficial position and wording on this.

No need at this point. I'm aware of how the draft should be assembled. We'll get feedback from Dan on the PR later.
I'll work up a 2nd example the other way with [JSExport].
As for the rest, LGTM. I think I have enough to draft the PR now. I'll ping u back here if I have more ❓.
I'm about out of hours ... and 🧠 power 😩 ... for the week. I'm going to pick back up with this on Monday morning, and I think the PR would will be ready no later than Wednesday of next week, as long as nothing high priority hits me in the meantime ⛰⛏😅.

I'm BACK. 🏃♂🏃♂🏃♂🏃♂

previous guidance on Blazor component instances together with JSInProcessRuntime calls.

Not recommended for general use because it isn't hosting model agnostic. I think 🤔 we only cover it in one spot at ...
https://docs.microsoft.com/en-us/aspnet/core/blazor/javascript-interoperability/call-javascript-from-dotnet?view=aspnetcore-6.0#synchronous-js-interop-in-blazor-webassembly-apps
For the use cases you mentioned in your bullet points, we'd cover basic use cases but probably not advanced ones ... probably not initially anyway. I'll put the simple, basic use cases on the PR, then we can see what the team thinks about additional use cases to add.

these 2 articles would not be part of Net 7

I'm happy to hear that 👍. That's easy. We'll be swapping the old sections for the new bits. What I'll probably do is keep a section and/or NOTE for one or two release cycles (.NET 7 to .NET 8 or 9) that tells readers about how that API is obsolete and recommends the new bits with a cross-link. If you put up an aspnet/Announcements issue on the obsolete API, I'll cross-link that. At .NET 8 (or 9), I'd pull the section/NOTE for future docs. We don't need to keep info on old bits forever.
I'm feel'in good about this. I think I have enough to get the PR set up. I think it will be up on ... mmmm 🤔 ... Wednesday/Thursday. I'll work on it locally for a few days before putting up something that I'm not embarrassed to show to the PU 🙈😆.  Otherwise, I'll ping u on the PR next week.

Note to self:

add list of all marshaled types
add details about working with buffers without copy

... and a quick update. I've been held up just a little bit by new Blazor issues, but the JS interop work is proceeding. I have the code examples for the PR. I plan to start writing the section today (Tuesday). I still think it will be up by Thursday for review. It will be helpful if fewer Blazor issues come in, but you know how that goes. I can go weeks without a peep from the readership, and then get slammed with a dozen issues in just a couple of days 🏃♂😅.

Another PR + a gRPC review (https://github.com/dotnet/AspNetCore.Docs/pull/27053) cut into my writing time today. It's looking more like Friday for the PR. Sorry for the delays ... it's a very 🏃♂🏃♂🏃♂🏃♂🏃♂😅 time of year!

@pavelsavara ... Update: It's going well. I think the PR will be up on Friday morning.
Pavel, I see that the the API and the syntactic approach ([JSImport]/[JSExport]) is for WASM at this time. I also think I see that significant parts of the framework will change over its internal JS interop to use the new API for .NET 8. What's not clear is if the general syntax and approach will ever be mirrored for Blazor Server JS interop. I don't mean the underlying mechanisms that the framework would use to make it work, I just mean from the standpoint of how developers implement JS interop in their Blazor Server apps. Can you let me know a little more about the long-range plan for this API approach (the dev implementation of JS interop in their apps)?
Otherwise ...
It seems more reasonable to create a new temporary for .NET 7 article to cover this for a couple of reasons:

I assume that at least for WASM that all of the Blazor docs and examples will adopt the new API for .NET 8 because the framework itself seems like it's headed that direction.
There's no new name for this API: It's just "new JS interop," which is much easier to cover SxS with the existing coverage in a new topic, not by trying to shoehorn the coverage into the existing coverage. Note that we can still do that tho ... we can still just create new sections in the existing Call JS from .NET and Call .NET from JS topics. Let's see on the first draft if using a new article just for .NET 7 makes sense with the long-range plan to move the coverage into the existing articles and dropping this new topic at .NET 8.

This is question for @danroth27 . Technically it would need it's own Roslyn code generator and the low level behavior of the marshaler would be different as it's a remote protocol via JSON. It would be another attribute. Somebody would need to do a prototype to see if it's good idea. I don't know.
Also do we commit our future plans in the documentation ?
The "new JS interop" is rather the "JS interop" from runtime perspective, because the previous API was private and undocumented.
From runtime perspective there is nothing temporary about it. Maybe we need to separate what is Blazor specific and what is general runtime into separate article for runtime ?
I work on an article for dotnet blog which describes many details of it. Do you have access to https://github.com/microsoft/dotnet-blog/pull/903 ?

Also do we commit our future plans in the documentation ?

No, only what's available, and we don't usually say in one version of the docs what's going on in another version. For example, we would rarely tell devs in a 6.0 doc, 'if you update to 7.0, you can do this better with new 7.0 bits.' It's too much work to do that constantly across the docs and for new releases. What we do is cover everything in the What's New doc for a given release and cross-link the new doc sections there. In the Migration topic we'd cover aspects like this, too. For example, we'll say that unmarshalled interop is obsolete and cross-link the new coverage for devs to migrate to 7.0.

nothing temporary about it

No, I mean just for coverage. I just mean that a new topic in the JS interop folder SxS would be a good temporary bridge to JS interop changing (perhaps only ever for WASM) to use [JSImport]/[JSExport] in .NET 8. I can't tell from your, @danroth27, blog post where this is headed for Blazor WASM JS interop insofar as the coverage is concerned.

separate what is Blazor specific and what is general runtime into separate article for runtime ?

That sounds right to me 👂 because we focus on Blazor things here almost exclusively. However, @danroth27 will inform me if that's not going to be the case ... and then if not ... how the coverage should be laid out in the Blazor node (or another node perhaps). I'll be 👂 for that guidance.
In the meantime tho, I can at least get all of the pieces put together by Friday so that we have a full explanation of the basics, and then you and Dan can see what else you'd like to change and add to that.

Do you have access to https://github.com/microsoft/dotnet-blog/pull/903 ?

No ... it 404s for me.

UPDATE (Thursday, 2pm CST): Looking good! :+1: I have a first draft now. I'll sleep 🛌💤 on it, make a final round of updates on Friday morning, and have it up in a PR no later than mid-morning (11am CST).
If you're going OOF for the weekend and want to hit it on Monday, that's cool. I'll be going OOF myself Friday afternoon for the weekend and back on Monday. I don't think we're in a super-rush for this given that we're still only in RC1 times.
It will be a bit rough, no doubt with some broken technical remarks to address 🙈 and lacking aspects that you'll want to add to it, including perhaps additional examples, but it should get us going in the right direction.
If it turns out that a new article for this in the JS interop folder SxS with current coverage isn't the best approach, no problem. This article breaks down cleanly into ...

Introductory content that can easily slip into the JS interop Overview article.
A call JS from .NET bit that can go into the existing Call JS from .NET article.
A call .NET from JS bit that can go into the Call .NET from JS article.

My recommendation is that you and I should make this content as nice as we can before pinging Dan and Artak on the PR. That way, they won't get pinged to death 🗣💀 with a lot of back-and-forth discussion if we need to do a lot of work to it.

I wonder if the "new" JS interop could be named ...
JavaScript Import/Export interop
... to distinguish it from the existing interop. I'm a little bit resistant to rolling in the actual attributes. I considered ...
JavaScript [JSImport]/[JSExport] interop
... but that seems a bit unwieldy, and the attributes wouldn't localize.
If it can be distinguished in some way like that, it would be easy to add it to the existing topics without causing confusion or requiring unusual adjectives like "new" or "alternative" JS interop.

❓ @pavelsavara ...
For an Interop class ... e.g. ...
[SupportedOSPlatform("browser")]
public partial class Interop
{
    [JSImport("getMessage", "Interop")]
    internal static partial string GetWelcomeMessage();
}

... IIRC, you had [SupportedOSPlatform("browser")] on there in the framework PR but commented out ... is that needed ... or should I take that off because it's a no-op?

Why JSImport not support Blazor Server?


OCPBUGS-6254: bump(k8s): 1.26.1

bump(k8s): use go1.19
bump(k8s): bump kube deps to 1.26.1
bump(k8s): react to SharedInformer interface changes
bump(k8s): update TestObserveFeatureFlags/techpreview test

@sanchezl , I was working to do a rebase in CNO for k8s 1.26, but I think I will need to wait on this PR for lib-go.
If there is something I can do to help move this along, let me know and I'll find some cycles.

/hold for:

https://github.com/openshift/api/pull/1375
https://github.com/openshift/client-go/pull/235

/hold cancel

/test unit

/test unit


Upload is done but I can't see the build in app control

First of all, many thanks for this great tool!!!!! I can't wait to upload my app to app store.
I used the $ ios-uploader -u  -p  -f <path/to/app.ipa> command and it seems that everything went OK as you can see in the enclosed image:

Unfortunately when I get to AppConnect and search for the build I don't see anything:

What did I do wrong? :(

I just had to wait! it works perfectly. Many thanks!

@ornakash Yes it usally takes a short time before it is visible in Apples interface because they do some initial automated checks on the uploaded package.
Note that your password is visible in your screenshot, if you have not already done so you should probably revoke that password.