Failing to induce memory errors with Row Hammer

I prepared a basic setup for running a Row Hammer attack using EtherBone to fill/check the memory and a simple DMA reader module. I did several tests on the Arty A7 board but was not able to induce any errors in the memory.
Testing procedure
The attack procedure is as follows:

DRAM initialization, leveling and a memory test (mem.py)
For each row, fill the memory corresponding to that row (all columns) with a given pattern (repeated 32-bit word).
Read all the written memory and verify that the data is correct.
For each rows pair, perform a row hammer attack, i.e. set the addresses to address0=address(row=row0, col=512) and address1=address(row=row1, col=512) and run alternating DMA reads from these addresses.
Read all the written memory once again and find if there were any errors induced.

The pattern, the number of rows, the number of row toggles per rows pair and the choice of row pairs were being changed in different test cases.
Test cases
The initial tests were being run on 1024 rows, attacked in pairs (2n, 2n+1), so (0,1), (2,3), (4,5), ... The pattern used for filling the rows was just 0x55555555, so alternating 1s and 0s in a single row. For each pair there were ~10M row toggles.
Later I did some tests with similar number of rows with the following modifications (added one by one):

Filling the data with the best pattern according to the paper, i.e. with 1s and 0s per row (odd rows filled with all 1s, even rows filled with all 0s).
Disabling Auto Precharge to have an explicit ACT+READ+PRE. This didn't in fact affect performance (controller was limited by module timings anyway) and from my understanding shouldn't really make any difference at all.
Changing the sequence of attacked row pairs to (0, n). To my knowledge this shouldn't make a difference as we still perform the toggling on each row, so we should still be able to induce an error.

Finally I ran longer tests on all 16384 rows of the DRAM chip and ~1.5M row toggles per rows pair (took slightly over 1h per run):

Filling even/odd rows with all 0s/1s; attacking pairs of rows (0, n).
Filling even/odd rows with all 0s/1s; attacking random pairs of rows (rand(), rand()).
Filling each row with a single random 32-bit word, repeated for all the memory corresponding to that row. Attacking pairs (rand(), rand()).

For none of the tests I could identify any error.
I also verified that the reading procedure actually identifies errors by flipping a single bit manually.
Verification in simulation
To verify the correctness of our system I have run it with a simulation model of DRAM in Verilator. I was able to see correct command sequences in waveform dumps. Then I configured the model to log each DFI command that is being sent, printing time/bank/row/column/etc. I prepared a wrapper script that parses all the information and calculates the performance of our DMA reads.
In our setup we run at DDR3-800, with a refresh period of tREF=64ms and refresh command interval of tREFI=64ms/8192. The wrapper script counts the number of row toggles (i.e. of ACT commands) between two REF commands. From my tests we have a median of 93 row toggles between two subsequent REF commands. This gives 764k toggles per tREF, so before that particular row is being refreshed. Following, we have 11.9M toggles per second, which is in the range of frequencies that have been used in "4. Real System Demonstration" of the paper (11.6M, 11.7M, 12.3M and 6.1M).
Side notes
We are currently doing the tests on a single bank. The Row Hammer module could be extended to support attacking all banks at once, which should slightly increase the performance.
During the tests I was able to measure the speed at which we can currently write/read the DRAM memory over EtherBone. From my tests reading 1MB takes ~22 seconds, so reading the whole memory (256MB) should take ~1.5h. Writing is several times faster.
As for the time taken by the above tests on 16384 rows, we were using only 1 bank our of 8, so reading should take 0.1875h, which I measured and it did. Then each attack with ~1.5M toggles took ~0.16 seconds (1.5M/11.9M ~= 0.13s, so a bit of overhead there). Multiplying 0.16s*16833 = 0.728h. So adding everything together (with ~1min of writing) we have around 1h 10min.

Are there any obvious mistakes in the testing methodology used? Do we need better performance or different access patterns? Or is it possible that the DRAM chip we use (MT41K128M16) is not vulnerable?

Thanks for the update! Sounds like you guys are making good progress.
I'd start with just a single aggressor: issuing ACT + PRE to the same row over and over again. It seems like you can toggle auto-precharge, so this can be done using ACT + READ (w/ auto-precharge). The intervening READ doesn't matter at all.
Can you guys also control the refresh interval, or even turn it off? I'd set it to a very large value (e.g., 64ms -> 1sec) and repeat the experiment. Here you'll get retention errors as well, but those should be randomly distributed whereas the rowhammer errors should be concentrated around the row you're activating.
It's hard to recommend a particular data pattern, but solid (all ones or all zeros) or striped (ones/zeros in even/odd, ones/zeros in odd/even) are good bets.
The first thousand rows on a single bank sounds like a good sample population. Just make sure that you read out the entire bank when checking for errors because we don't yet know which rows are adjacent to what.

Yes, we can easily change the refresh interval or disable the refresh entirely. I'll run the tests with your suggestion and let you know when I have some results.

Thanks Jedrzej. One question -- why is EtherBone so slow? 1MB/22s = 45KB/s. I was expecting a bandwidth that's two orders of magnitude larger. If reading out the module takes an hour, that's going to really slow down experiments. Will this get faster for future implementations and/or for higher-speed FPGA boards?

Hi @yoongu, I'm split the wishbone bridge question into a seperate GitHub issue #4 so we can keep this issue discussion to replicating Row Hammer stuff itself. Will answer your question there.

Comments from Salman,
Salman Qazi, 9:04 AM
Couple of things right off the bat.  First, traditional row hammer, when there are no DRAM mitigations, requires attacking rows with a gap of 1.  In other words, you don't hammer rows 0 and 1, you hammer rows 0 and 2.  Secondly, for data pattern, the optimal pattern is to have the victim row (in this case row 1) be the inverse pattern of the aggressor rows (0 and 2).
Salman Qazi, 9:08 AM
(this is for double-sided hammer, which is somewhat more effective than single sided hammer)
I read the later part of the bug, and I saw that you guys did figure out that alternating pattern for the rows.  Awesome.

Since we don't have row adjacency information, it'll be hard to stage a double-sided attack. There could be unintentional address swizzling that's happening on the FPGA board.
Disabling refreshes and pummeling a single row a million times should do the trick. In DDR3, it is known that several hundred thousand activations will flip a bit. Not for all rows, but for a significant portion of them.

I performed some attacks with refresh disabled and was able to see the expected behavior. In the tests we were attacking only a single pair of rows 1000M times. The pattern was 010101... in each row.
Results for the pair (32, 34):

Results for the pair (99, 200) (plot zoomed in):

I believe that these results show that the rows are placed sequentially (at least the tested ones) as errors happen in the adjacent row numbers.

Since we don't have row adjacency information, it'll be hard to stage a double-sided attack. There could be unintentional address swizzling that's happening on the FPGA board.
Disabling refreshes and pummeling a single row a million times should do the trick. In DDR3, it is known that several hundred thousand activations will flip a bit. Not for all rows, but for a significant portion of them.

In the LiteDRAM controller there is no address/data swizzling, so that shouldn't be an issue. The only thing that the controller does is to map the address space bits as ROW_BANK_COL, but no additional changes are being done.

Woot! This is great news, thanks Jedrzej.
Regarding swizzling, have you guys checked the Arty board traces too? Actually, if you could link/upload the board schematic that'd be great.

@yoongu you can find the schematic here https://reference.digilentinc.com/_media/reference/programmable-logic/arty/arty_sch.pdf

the lines don't seem to be swizzled

Could you also double-check that the bus-numbers in the RTL match those from the FPGA pin-out? For example, the ADDR[0] should map to R2, and so on and so forth.

What is the smallest number of hammers required to get an above-noise level of bit flips?

What is the smallest number of hammers required to get an above-noise level of bit flips?

I just did a quick test with only 5M row toggles, on a single pair of rows (54, 133) and with refresh disabled only during the attack. This resulted in 3 errors for row 55, 1 error for rows (53, 132, 134) and no errors for all other rows (was testing only the first 512 rows).

@yoongu I verified that the pins are mapped correctly. Just for reference, the RTL mappings for Arty are defined here and the pin names go from LSB to MSB.
I think we can now set up the environment on your side and try to reproduce the results. The current version on the master branch should work without issues. The setup and usage instructions are in the README. If anything is unclear just let me know here or open an issue.
If you have access to the Arty A7 board you can try to reproduce the results which I posted earlier. If not it would be good to try setting up the simulation, which will be helpful when testing Payload Execution. The simulator will print all the commands registered on PHY's DFI interface.

Almost there:
(venv) sqazi@sqazi-glaptop:~/fpga/litex-rowhammer-tester/scripts$ python
./rowhammer.py --nrows 512 --read_count 10e6 --pattern 01_in_row
--row-pairs const --const-rows-pair 54 133 --plot --no-refresh
Preparing ...
Filling memory with data ...
................................
Disabling refresh ...
Running row hammer attacks ...
Iter 0 / 1 Rows = (   54,  133), Count = 10.07M / 10.00M
Reenabling refresh ...
Verifying attacked memory ...
................................
row_errors for row=   53: 3
row_errors for row=   55: 3
row_errors for row=  132: 42
row_errors for row=  134: 28
Traceback (most recent call last):
File "./rowhammer.py", line 290, in
row_hammer.run(row_pairs=row_pairs, read_count=args.read_count,
pattern_generator=pattern)
File "./rowhammer.py", line 198, in run
self.display_errors(errors)
File "./rowhammer.py", line 151, in display_errors
from matplotlib import pyplot as plt
ModuleNotFoundError: No module named 'matplotlib'
I tried installing python3_matplotlib (outside the environment) but it
didn't help.  Any suggestions?
On Wed, Oct 28, 2020 at 5:20 AM Jędrzej Boczar<EMAIL_ADDRESS>wrote:

@yoongu https://github.com/yoongu I verified that the pins are mapped
correctly. Just for reference, the RTL mappings for Arty are defined here
https://github.com/enjoy-digital/litex/blob/517a49253f8c0aff48924aa957acb8c0ab6e9766/litex/boards/platforms/arty.py#L101-L104
and the pin names go from LSB to MSB.
I think we can now set up the environment on your side and try to
reproduce the results. The current version on the master branch should
work without issues. The setup and usage instructions are in the README
https://github.com/antmicro/litex-rowhammer-tester/#installing-dependencies.
If anything is unclear just let me know here or open an issue.
If you have access to the Arty A7 board you can try to reproduce the
results which I posted earlier. If not it would be good to try setting up
the simulation, which will be helpful when testing Payload Execution. The
simulator will print all the commands registered on PHY's DFI interface.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/antmicro/litex-rowhammer-tester/issues/3#issuecomment-717896120,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AABOQAK7YTDHJXIUZYNC2J3SNAD77ANCNFSM4SZX2M2Q
.

Nevermind, I got it.  See attached figure.
$ python ./rowhammer.py --nrows 512 --read_count 10e6 --pattern 01_in_row
--row-pairs const --const-rows-pair 54 133 --plot --no-refresh
Preparing ...
Filling memory with data ...
................................
Disabling refresh ...
Running row hammer attacks ...
Iter 0 / 1 Rows = (   54,  133), Count = 10.03M / 10.00M
Reenabling refresh ...
Verifying attacked memory ...
................................
row_errors for row=   53: 3
row_errors for row=   55: 3
row_errors for row=  132: 41
row_errors for row=  134: 28
Matplotlib is building the font cache; this may take a moment.
On Wed, Oct 28, 2020 at 10:54 AM Salman Qazi<EMAIL_ADDRESS>wrote:

Almost there:
(venv) sqazi@sqazi-glaptop:~/fpga/litex-rowhammer-tester/scripts$ python
./rowhammer.py --nrows 512 --read_count 10e6 --pattern 01_in_row
--row-pairs const --const-rows-pair 54 133 --plot --no-refresh
Preparing ...
Filling memory with data ...
................................
Disabling refresh ...
Running row hammer attacks ...
Iter 0 / 1 Rows = (   54,  133), Count = 10.07M / 10.00M
Reenabling refresh ...
Verifying attacked memory ...
................................
row_errors for row=   53: 3
row_errors for row=   55: 3
row_errors for row=  132: 42
row_errors for row=  134: 28
Traceback (most recent call last):
File "./rowhammer.py", line 290, in
row_hammer.run(row_pairs=row_pairs, read_count=args.read_count,
pattern_generator=pattern)
File "./rowhammer.py", line 198, in run
self.display_errors(errors)
File "./rowhammer.py", line 151, in display_errors
from matplotlib import pyplot as plt
ModuleNotFoundError: No module named 'matplotlib'
I tried installing python3_matplotlib (outside the environment) but it
didn't help.  Any suggestions?
On Wed, Oct 28, 2020 at 5:20 AM Jędrzej Boczar<EMAIL_ADDRESS>wrote:

@yoongu https://github.com/yoongu I verified that the pins are mapped
correctly. Just for reference, the RTL mappings for Arty are defined here
https://github.com/enjoy-digital/litex/blob/517a49253f8c0aff48924aa957acb8c0ab6e9766/litex/boards/platforms/arty.py#L101-L104
and the pin names go from LSB to MSB.
I think we can now set up the environment on your side and try to
reproduce the results. The current version on the master branch should
work without issues. The setup and usage instructions are in the README
https://github.com/antmicro/litex-rowhammer-tester/#installing-dependencies.
If anything is unclear just let me know here or open an issue.
If you have access to the Arty A7 board you can try to reproduce the
results which I posted earlier. If not it would be good to try setting up
the simulation, which will be helpful when testing Payload Execution. The
simulator will print all the commands registered on PHY's DFI interface.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/antmicro/litex-rowhammer-tester/issues/3#issuecomment-717896120,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AABOQAK7YTDHJXIUZYNC2J3SNAD77ANCNFSM4SZX2M2Q
.

On Wed, Oct 28, 2020 at 11:10 AM Salman Qazi<EMAIL_ADDRESS>wrote:

Nevermind, I got it.  See attached figure.
$ python ./rowhammer.py --nrows 512 --read_count 10e6 --pattern 01_in_row
--row-pairs const --const-rows-pair 54 133 --plot --no-refresh
Preparing ...
Filling memory with data ...
................................
Disabling refresh ...
Running row hammer attacks ...
Iter 0 / 1 Rows = (   54,  133), Count = 10.03M / 10.00M
Reenabling refresh ...
Verifying attacked memory ...
................................
row_errors for row=   53: 3
row_errors for row=   55: 3
row_errors for row=  132: 41
row_errors for row=  134: 28
Matplotlib is building the font cache; this may take a moment.
On Wed, Oct 28, 2020 at 10:54 AM Salman Qazi<EMAIL_ADDRESS>wrote:

Almost there:
(venv) sqazi@sqazi-glaptop:~/fpga/litex-rowhammer-tester/scripts$ python
./rowhammer.py --nrows 512 --read_count 10e6 --pattern 01_in_row
--row-pairs const --const-rows-pair 54 133 --plot --no-refresh
Preparing ...
Filling memory with data ...
................................
Disabling refresh ...
Running row hammer attacks ...
Iter 0 / 1 Rows = (   54,  133), Count = 10.07M / 10.00M
Reenabling refresh ...
Verifying attacked memory ...
................................
row_errors for row=   53: 3
row_errors for row=   55: 3
row_errors for row=  132: 42
row_errors for row=  134: 28
Traceback (most recent call last):
File "./rowhammer.py", line 290, in
row_hammer.run(row_pairs=row_pairs, read_count=args.read_count,
pattern_generator=pattern)
File "./rowhammer.py", line 198, in run
self.display_errors(errors)
File "./rowhammer.py", line 151, in display_errors
from matplotlib import pyplot as plt
ModuleNotFoundError: No module named 'matplotlib'
I tried installing python3_matplotlib (outside the environment) but it
didn't help.  Any suggestions?
On Wed, Oct 28, 2020 at 5:20 AM Jędrzej Boczar<EMAIL_ADDRESS>wrote:

@yoongu https://github.com/yoongu I verified that the pins are mapped
correctly. Just for reference, the RTL mappings for Arty are defined
here
https://github.com/enjoy-digital/litex/blob/517a49253f8c0aff48924aa957acb8c0ab6e9766/litex/boards/platforms/arty.py#L101-L104
and the pin names go from LSB to MSB.
I think we can now set up the environment on your side and try to
reproduce the results. The current version on the master branch should
work without issues. The setup and usage instructions are in the README
https://github.com/antmicro/litex-rowhammer-tester/#installing-dependencies.
If anything is unclear just let me know here or open an issue.
If you have access to the Arty A7 board you can try to reproduce the
results which I posted earlier. If not it would be good to try setting up
the simulation, which will be helpful when testing Payload Execution. The
simulator will print all the commands registered on PHY's DFI interface.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/antmicro/litex-rowhammer-tester/issues/3#issuecomment-717896120,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AABOQAK7YTDHJXIUZYNC2J3SNAD77ANCNFSM4SZX2M2Q
.

Looks like we're able to reproduce it on our side. Thanks @jedrzejboczar and @sqazi. My Arty is currently on the way.

Another nice-to-have would be to somehow isolate IP address/ MAC address so
that they are easy to modify.  Currently, I am changing the IP address in
two places: in the Makefile and in arty.py to work with my network setup.
On Wed, Oct 28, 2020 at 11:13 AM Salman Qazi<EMAIL_ADDRESS>wrote:

Regarding clarity, I would say that it wasn't clear to me that the
environment had to be entered to run the scripts and I spend a bunch of
time fumbling there.
On Wed, Oct 28, 2020 at 11:10 AM Salman Qazi<EMAIL_ADDRESS>wrote:

Nevermind, I got it.  See attached figure.
$ python ./rowhammer.py --nrows 512 --read_count 10e6 --pattern 01_in_row
--row-pairs const --const-rows-pair 54 133 --plot --no-refresh
Preparing ...
Filling memory with data ...
................................
Disabling refresh ...
Running row hammer attacks ...
Iter 0 / 1 Rows = (   54,  133), Count = 10.03M / 10.00M
Reenabling refresh ...
Verifying attacked memory ...
................................
row_errors for row=   53: 3
row_errors for row=   55: 3
row_errors for row=  132: 41
row_errors for row=  134: 28
Matplotlib is building the font cache; this may take a moment.
On Wed, Oct 28, 2020 at 10:54 AM Salman Qazi<EMAIL_ADDRESS>wrote:

Almost there:
(venv) sqazi@sqazi-glaptop:~/fpga/litex-rowhammer-tester/scripts$
python ./rowhammer.py --nrows 512 --read_count 10e6 --pattern 01_in_row
--row-pairs const --const-rows-pair 54 133 --plot --no-refresh
Preparing ...
Filling memory with data ...
................................
Disabling refresh ...
Running row hammer attacks ...
Iter 0 / 1 Rows = (   54,  133), Count = 10.07M / 10.00M
Reenabling refresh ...
Verifying attacked memory ...
................................
row_errors for row=   53: 3
row_errors for row=   55: 3
row_errors for row=  132: 42
row_errors for row=  134: 28
Traceback (most recent call last):
File "./rowhammer.py", line 290, in
row_hammer.run(row_pairs=row_pairs, read_count=args.read_count,
pattern_generator=pattern)
File "./rowhammer.py", line 198, in run
self.display_errors(errors)
File "./rowhammer.py", line 151, in display_errors
from matplotlib import pyplot as plt
ModuleNotFoundError: No module named 'matplotlib'
I tried installing python3_matplotlib (outside the environment) but it
didn't help.  Any suggestions?
On Wed, Oct 28, 2020 at 5:20 AM Jędrzej Boczar<EMAIL_ADDRESS>wrote:

@yoongu https://github.com/yoongu I verified that the pins are
mapped correctly. Just for reference, the RTL mappings for Arty are defined
here
https://github.com/enjoy-digital/litex/blob/517a49253f8c0aff48924aa957acb8c0ab6e9766/litex/boards/platforms/arty.py#L101-L104
and the pin names go from LSB to MSB.
I think we can now set up the environment on your side and try to
reproduce the results. The current version on the master branch should
work without issues. The setup and usage instructions are in the README
https://github.com/antmicro/litex-rowhammer-tester/#installing-dependencies.
If anything is unclear just let me know here or open an issue.
If you have access to the Arty A7 board you can try to reproduce the
results which I posted earlier. If not it would be good to try setting up
the simulation, which will be helpful when testing Payload Execution. The
simulator will print all the commands registered on PHY's DFI interface.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/antmicro/litex-rowhammer-tester/issues/3#issuecomment-717896120,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AABOQAK7YTDHJXIUZYNC2J3SNAD77ANCNFSM4SZX2M2Q
.

@sqazi Feel free to file issues.

@sqazi -- That reminds me I have some very old code I never finished which adds DHCP support to LiteEth...

@sqazi Thanks for feedback. I updated the README to be more explicit about the virtual environment and made IP/MAC configurable via Makefile variables.


swin example tensorrt plugin output only feature ?

Branch/Tag/Commit
main
Docker Image Version
nvcr.io/nvidia/pytorch:22.08-py3
GPU name
3080TI
CUDA Driver
515
Reproduced Steps
output = model.forward_features(images)
why output = model(images)

Sorry, we don't get your question.

the plugin output is features，we need [batch, num_classes]  end to end

head function can be implemented in tensorrt api

As you say, head function can be implemented in tensorrt api, so we don't provide it in FT because the plugin only optimizes the transformer blocks, and provide flexibility for different downstream tasks.

As you say, head function can be implemented in tensorrt api, so we don't provide it in FT because the plugin only optimizes the transformer blocks, and provide flexibility for different downstream tasks.
think you， i get

can you tell me how to implement it
sw = network.add_plugin_v2(inputs, fn)
fullyConnectedLayer = network.add_fully_connected(sw.get_output(0), num_classes, weight, bias)

fullyConnectedLayer = network.add_fully_connected(sw.get_output(0), num_classes, weight, bias)
but the weight and bias ,where to get it ？
examples/tensorrt/swin/builder.py 145
SwinTransformerWeightTransposeQKVWeight

fullyConnectedLayer = network.add_fully_connected(sw.get_output(0), num_classes, weight, bias) but the weight and bias ,where to get it ？
examples/tensorrt/swin/builder.py 145 SwinTransformerWeightTransposeQKVWeight
See here as a reference, we have the head in previous version (v5.0), but from v5.1 for generality it is removed.
https://github.com/NVIDIA/FasterTransformer/blob/release/v5.0_tag/examples/tensorrt/swin/builder_int8.py#L259-L260
We plan to add it back, but as an option --with_head.

fullyConnectedLayer = network.add_fully_connected(sw.get_output(0), num_classes, weight, bias) but the weight and bias ,where to get it ？
examples/tensorrt/swin/builder.py 145 SwinTransformerWeightTransposeQKVWeight

See here as a reference, we have the head in previous version (v5.0), but from v5.1 for generality it is removed. https://github.com/NVIDIA/FasterTransformer/blob/release/v5.0_tag/examples/tensorrt/swin/builder_int8.py#L259-L261 We plan to add it back, but as an option --with_head.

thank you , so much!


Added [Cirrus] CI badge support

Fixes https://github.com/cirruslabs/cirrus-ci-docs/issues/283

Okay, going to need a little help now here @fkorotkov 😅

This pull request introduces 1 alert when merging 2d4128e9b79bafc69b3c3871845e3b56305ae76d into f50fcac107494fd529245e696e326b0aaeb31828 - view on LGTM.com
new alerts:

1 for Syntax error

Comment posted by LGTM.com

This pull request introduces 1 alert when merging cc44096b1fc28925b4d143c06c42c6725d6055a6 into f50fcac107494fd529245e696e326b0aaeb31828 - view on LGTM.com
new alerts:

1 for Syntax error

Comment posted by LGTM.com

This pull request introduces 1 alert when merging f568eba2c7235ee4bc35c5e621564195494610d4 into e1029467a1cf71df92f12ba4b9ce2a456cbc773e - view on LGTM.com
new alerts:

1 for Syntax error

This project has automated code review enabled, but doesn't use the LGTM GitHub App. Migrate over by installing the app. Read about the benefits of migrating to GitHub Apps in the blog.

Comment posted by LGTM.com

I'm not familiar with Cirrus CI, so I have a couple questions I'm hoping you can help me with.
Based off some of the content you've added, I take it in addition to adding support for the default build status badge:

Cirrus also provides a status badge for a specific branch (which is obviously common with other CI services and our badges)
Cirrus also provides a status badge for some subset/part/step of a build (which I'm guessing is what you're trying to support with the task and/or script query params?

Is that correct?

Yes
Yes again

Full documentation is at https://cirrus-ci.org

Thanks @RDIL. I've a few suggestions then which I'll add inline

This pull request introduces 1 alert when merging 63a125092524ce41d46db55f90c256d65ee46d1c into e9f24af87845347fbd9ae18406fd941237eaf93b - view on LGTM.com
new alerts:

1 for Syntax error

This project has automated code review enabled, but doesn't use the LGTM GitHub App. Migrate over by installing the app. Read about the benefits of migrating to GitHub Apps in the blog.

Comment posted by LGTM.com

Okay the core issues have been resolved now, you can see the app running with the Cirrus badge addition in the review app for this PR. Once the above inline suggestions have been applied to fix the schema (need to use status instead of message) the below badges should render as expected
https://shields-staging-pr-3502.herokuapp.com/
For example:
https://shields-staging-pr-3502.herokuapp.com/cirrus//github/flutter/flutter.svg

Everything seems to be working now:
https://shields-staging-pr-3502.herokuapp.com/cirrus/github/flutter/flutter.svg

The last item I have for consideration is around whether you'd like to change the badge label when the user specifies a task and/or script query param? I'm guessing based off the static badges you've added for the examples that this is the desired behavior, and we could make that happen with a couple minor tweaks.

Thanks so much for this!


cleanup: update owner

What type of PR is this?
cleanup
What this PR does / Why we need it?
Which Jira/Github issue(s) does this PR fix?
Resolves #
Special notes for your reviewer
Pre-checks (if applicable)

[ ] Validated the changes in a cluster
[ ] Included documentation changes with PR

/retest

/lgtm

/retest

/retest

/retest


Old assessments are not being deleted?

As I remember the process of modifying an assessment it consisted of deleting the old assessment from the database and saving a new copy.  I see new copies going in, but the old ones (at least in the assessments table) are sticking around.
Have to check questions, options, etc.

see server/service/assessmentService.js ~line 84
// get the existing db oldAssessment in order to delete it first
let oldAssessment = await exports.getActiveAssessmentById(assessment.id);
This is where it starts.

Putting this away for now as "Won't Fix" as I believe we want to keep the old history
The fix is actually removing the broken code that would have done the removal.  For now it has been left in the assessmentService.saveAssessment but commented out.


Port other than 80 for domain verification?

I have the sites running on IIS binding to local port 80 and it is exposed as port 8001 (for security) to public through port forwarding at the router. Therefore, it can't be verified by LE server while running LE-win-simple.
Currently, I need to map the public port 80 to a given site for verification and certificate installation.
I would like to know if any way to change or config for domain verification? for each site obtaining LE certificate.
Btw, it will be great to allow non-443 port to be configure while certificate install on IIS. I need to set different port for different secure sites.
Finally, thank for this handy tool and it makes the whole process easy and efficient!

ACME spec is very explicit the HTTP challenge must be over the standard HTTP port 80 for security reasons. You may be better off with the DNS challenge when that becomes supported by the LE project.

ooh i see. but without DNS challenge, how LE verify for the domain ownership?

The DNS challenge just requires you to make a particular DNS entry available for the CA to verify, no need to make any changes on the web server.

it means it still needs both port 80 and 433 directly go thru. to work, correct?!

No, the DNS challenge does not interact with the Web server at all.  It is strictly DNS-based only

https://community.letsencrypt.org/t/shouldnt-verification-via-dns-record-be-a-priority/604/9
is it the one they are talking about?
so that will be much more better to use DNS rather than touching the web server but it may makes those using DDNS have some difficulties.
do you know when DNS challenge will be launched and letsencrypt-win-simple will support too?

Any idea when this will be supported?
I am happy to help...

The problem with automatic DNS authentication is that a different script is needed for every DNS provider, for example getssl does a few, but one of them is a wrapper around lexicon that does loads more.
The main requirement would be to convert all these scripts to something that runs on Windows (probably also adding a script to update Microsoft's DNS server) ... not a small task.
So at this time I would suggest that your best solution for DNS validation is to use a Linux or BSD VM somewhere secure to renew the certificate and then post the signed certificate to the target server using whatever method is most convenient. (Note: The key needs to be transferred over a secure channel but a signed certificate need only be validated at the destination)

I don't mean automatic DNS authentication.
I mean manual.
I.e. Program gets a string to put in a TXT record on your DNS server/provider, you manually put it in, come back to the program and it downloads/installs your certificate.


Resource not provided in example

In the nested Items Repeater example (Display grouped items) there's a resource references {StaticResource MyGroupLayout} but it is not provided.  This makes the example less useful, there's also no picture accompanying it like the other example.

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

ID: d5ae7144-fa89-cd61-6ff7-8bb4a765e6f8
Version Independent ID: 03f41125-77b9-5761-2aba-9b3eef17e121
Content: ItemsRepeater - Windows UWP applications
Content Source: windows-apps-src/design/controls-and-patterns/items-repeater.md
Product: uwp
Technology: design
GitHub Login: @jwmsft
Microsoft Alias: jimwalk

@micahl please take a look?

@micahl @jevansaks any updates on fixing this sample?

Hopefully @anawishnoff can take a look?

Thanks for bringing this to my attention. Working on a patch for this now!

This has been fixed, and the doc is now published: https://docs.microsoft.com/en-us/windows/uwp/design/controls-and-patterns/items-repeater#create-a-custom-collection-control
Turns out the MyGroupLayout was just a simple StackLayout.

Thanks @anawishnoff! Can we get a picture of the expected result as well above it like the next sample has too?

@michael-hawker After looking through the sample, I believe that the first sample under Display grouped items is more of a guideline on how to use nested ItemsRepeaters, and that second example goes into more detail with a full-blown example. The picture in between the two samples accurately reflects the basic layout that both samples would produce. I'll be adding in some more context to the article and sample to articulate this in the doc.


Use the SPDX URL for the MIT License

Description
The current URL (https://raw.githubusercontent.com/apollographql/apollo-kotlin/main/LICENSE) doesn't work with Licensee without explicitly allowing it, and it would be nice to use a standardized URL.

Thanks for reporting this! It appears that removing the URL from the POM and using the standard MIT spdx id will make Licesee happy

Fixed by #6247


Database schema check broken in 0.10.0

Ord 0.10.0 changed the location in the database that the schema number is stored.  See #2541. Before 0.10.0 Schema was the first Statistic enum. In 0.10.0 it's the 9th, and in the current master branch it's the 10th.
It really should be in the same location for every version so we can detect which schema the db was created with.
It's too late now for 0.10.0 but we should put it back to being the first Statistic for 0.10.1 and 0.11.0.

This is the specific change I'm talking about:

Thanks, good catch! Made the fix in #2624.


Generation of Italian Fiscal Code

:white_check_mark: Build Faker.NET (Portable Edition) <IP_ADDRESS>-hljqiuif completed (commit https://github.com/AdmiringWorm/Faker.NET.Portable/commit/cb4b8e155b by @supix)

Current coverage is 95.30% (diff: 100%)

Merging #32 into develop will increase coverage by 1.20%

@@            develop        #32   diff @@
==========================================
  Files            21         21
  Lines           407        511   +104
  Methods         148        187    +39
  Messages          0          0
  Branches         57         61     +4
==========================================
+ Hits            383        487   +104
  Misses           17         17
  Partials          7          7

Powered by Codecov. Last update 2b943e6...1fadca9

hmm, looks like the linux build fails. I'll need to check it out, don't think there is anything wrong from your part. Probably just travis that messes up something.

yup, seems to be just a problem with the build server.
I'm happy to merge this whenever you are ready.

@AdmiringWorm Ok for me. Thanks Kim.

👍

Now I only need to complete the new build system I'm testing out,
and get started on a beer generator and I'll be able to push out a new release.
But that will be continued on tomorrow

If you have something you want implemented, feel free to open up an issue.

@supix version 2.4.0 is now available on nuget.org, unfortunately I made a mistake with the
build script so the italian culture was not added this time.
I've logged it in issue #34 for now, and will push out a fixed release when I got time.

@AdmiringWorm Thanks a lot for the great job, Kim. No problem for the missing translation.

I've already added a new version on nuget which contains the missing translation.
Thank you for all the great code you have added to the library for this release, as well as the translation.
Those code related tasks was something that had bothered me for quite some time, but never knew how
to implement those

@AdmiringWorm My pleasure. It is nice to work in a so accurate and well-designed codebase. Also learning some new development and continuous-integration tools.

I'm glad you think so, well well-designed might not be entirely correct though.
A library just containing static methods is generally considered bad practice,
but since the original faker-cs also used just static method
I didn't really want to change that.
This project originally started out as just a fork of that one, and was intended to be a
drop-in replacement for users who needed a portable library.
On that note though, a future plan of mine is to start another Faker library project,
which will get rid of static methods, add support for .NET Core and changing from
resx resources to json instead.
But that is just in planning stage at the moment while working on some other projects.

@AdmiringWorm Ok as far as portability (and so JSON). Get rid of static classes? Something like (I don't like it)
var name = new Name();
name.First();
…or what?
Static classes are an anti-pattern when you need state. It seems not the case to me.

I'm still thinking about how to model that library, but it won't be like you have to instantiate each class
yourself, you would create the main instance with the culture to use for that all
its subclasses (or however I will model them) and cache the resources located the in the json files
per instance.
What I'm thinking is for example something like this:
var faker = new Faker("en-US");

var firstName = faker.Name.First();

the Name being a property of a NameGenerator class or something which will be lazy initialized.
But as I said, that will be for another library, the Faker.Net.Portable will still stay as it is
with its static classes and methods.

@AdmiringWorm Ok. Does make sense. Actually, it would also solve more naturally some headhaches (e.g. lazy loaded cached resources...).


Remove the deprecated RouteResult::fromRouteMatch(...)

Coverage remained the same at 100.0% when pulling b97b24f29efc95aa50137cb23747fa625edfdb79 on michaelmoussa:dev-2.0.0 into 78e90770f2cd6ba365bc163a7fb6132a1d874236 on zendframework:dev-2.0.0.

Tests pass and this is merely a removal of a deprecated method. Will merge as-is and do a release/2.0.0 -> master PR for full sanity check before major release.


Pull in version 2.0.4 of docker base file

It includes an update to the nginx config for the nginx running next to
the app. Without it status checks to a status endpoing with three or
more forward slashes in the url path will fail.

Coverage remained the same at 92.604% when pulling d66f09c4e506070a416da1ceabbf10bb29355a5e on update-base-docker-version into 830faaa144eef4dbc3f11d3e217b02868df21176 on master.

Coverage remained the same at 92.604% when pulling 6cea09f15d049125e856fafe3d82880fa52e1617 on update-base-docker-version into 830faaa144eef4dbc3f11d3e217b02868df21176 on master.

Coverage remained the same at 92.604% when pulling 6cea09f15d049125e856fafe3d82880fa52e1617 on update-base-docker-version into 830faaa144eef4dbc3f11d3e217b02868df21176 on master.


Controller mapping profile and controller attribute fixes

Overview

Wrap editor specific code in the controller mapping profile in #if / #endif.
Add "using Microsoft.MixedReality.Toolkit.Core.Extensions" when building UWP on .net backend

This does not 100% resolve .net backend build breaks. There are some changes needed in interactables to work around AppDomain usage

moving to target mrtk_developent to give a bit more time to verify all build targets (and ideally get the interactable changes in place as well)


Confguration URL is malformed after return_to parameter is added

The URL generated by the emulator to launch a the configuration URL results in a malformed URL due to an error in the handling of anchors (#'s) for config settings and query string params.
this results in config URLs with anchors duplicated before the query param, which the browser will truncate. for example I see this in the config window address bar:
https://my.config.host/login#%7B%22access-token%22%3A%22some-token%22%7D?return_to=https%3A//cloudpebble.net/ide/emulator/config%3F#%7B%22access-token%22%3A%22some-token%22%7D
What I should see is:
https://my.config.host/login?return_to=https%3A//cloudpebble.net/ide/emulator/config%3F#%7B%22access-token%22%3A%22some-token%22%7D
Looking at libpebble.js the issue seems to be that the URL splitting/joining code does not account for a configuration URL that contains anchors AND it SEEMS (I cannot confirm) that the way the URL is stored and packed/unpacked it includes any config settings as anchors... so I THINK the code in libpebble.js to handle adding the "return_to" param starts by getting a URL that looks like:
<config url>#<JSON formatted config data>
My proposed fix handle_config_message() is:
    /// existing code to fetch and unpack the config URL...then...
    var hash_parts = url.split('#');
    var query_parts = url.split('?');
    console.log(hash_parts, query_parts);
    // note that query_parts[0] will include the hashes if there were no query params
    // if there were query params, the hashes will still be on the end of the last param in query_params
    if (query_parts.length == 2) // there were query params
    {
      //we need to strip the hash parts from the last param if they existed.
      //we do this before testing for length == 1 because that code pushes an empty string into the array making the length == 2 anyway
      var query_string = query_parts[1].split('#');
      console.log('the query and the hashes: ' + query_string);
      // make the query string JUST the query params... leave the hashes to be added separately.
      query_parts[1] = query_string[0];
    }
    if(query_parts.length == 1) {
      //get the base url by getting rid of the hash_parts
      var base_url = query_parts[0].split('#');
      console.log("base =" + base_url[0]);
      // we use query_parts to rebuild the new URL so set the first part to the clean base URL
      query_parts[0] = base_url[0];
      query_parts.push('');
    }

/// no changes to current code past this point...
    if(query_parts[1] != '') {
      query_parts[1] += '&';
    }

    query_parts[1] += 'return_to=' + encodeURIComponent('http' + '//' + 'location.host' + '/ide/emulator/config?');
    var new_url = query_parts.join('?');
    if(hash_parts.length > 1) {
      new_url += '#' + hash_parts[1];
    }
    console.log("new url: " + new_url);

:+1:
My app attempts to open
https://pebbleauth.cpfx.ca/config.html?ver=1.1.0#[]

and instead I end up getting sent to
https://pebbleauth.cpfx.ca/%5B%5D&return_to=https%3A//cloudpebble.net/ide/emulator/config%3F

For Pebble internal tracking purposes: https://pebbletechnology.atlassian.net/browse/PBL-17813


Update Downtime Matrix report to use bootstrap

Update the Downtime Relationship report to use bootstrap and optimise for large projects

Completed

The downtime matrix output is very helpful to share with customers and review the configuration with them.  As the number of equipment, equipment types and causes grows it is really a must-have tool. Thanks for sharing!

Pascal, glad to know that you are using it.  Joseph


[frontend] increase fontsize on splash page buttons

DEV: Splash page buttons are incorrect size
Increase font size on splash page language buttons to match figma designs.

Check out a preview of your pull request here: https://alphasite-appservice-dev-pr-preview-1470619812.azurewebsites.net


Strange error

alasql("SELECT SUM(cnt) AS total FROM ?", [[]])
-----------------------------------------^
Expecting 'LITERAL', 'BRALITERAL', 'NUMBER', 'STRING', 'NSTRING', got 'TOTAL'
at Ei.parseError (alasql.min.js:32:246120)
at Si.parse (alasql.min.js:32:241538)
at e.parse (alasql.min.js:32:271321)
at e.dexec (alasql.min.js:32:272931)
at e.exec (alasql.min.js:32:272685)
at e (alasql.min.js:32:919)
at T (app.js?{bundletime}:1:8299)
at app.js?{bundletime}:1:15135
From what I can see in the docs total should not be a reserved word, or?
The alasql version I'm using is 3.0.0

Yes. Total is a reserved word. Please use backticks to encapsulate Total


[zh] Update pod-topology-spread-constraints.md

Correct wrong syntax

There are new upstream updates to be sync'ed?

No, just to correct a wrong notation，the document is currently in sync.

There are new upstream updates to be sync'ed?
最新版的英文文档今天刚被修改

/lgtm
/approve


Navbar links are not working [GSSoC'23]

Can you assign this to me, I want to work on this under GSSoC'23

@PiyushKalyanpy  can you assign this issue to me . I can fix it very fast.

@PiyushKalyanpy is that firebase issue solved ??


How to associate more than one labels with an image in TFRecord file for training purpose?

Ask on StackOverflow with the tag #tensorflow: http://stackoverflow.com/questions/tagged/tensorflow

Thanks. I got that working. Closing this.


Disable mini map

At this moment it seems the mini map can't be removed and this is a huge issue when it covers the areas where your markers are on.
Is there any solution to this?

I'm not sure what you mean - I have no notion of a "mini-map" - are you sure you're posting in the right project?  Perhaps this library is being included in another project?

Yes this is the correct project. I guess this does count as a bug then and not a feature.
I have always had a mini map even when using the default example with the "house" map.
You can see I have 2 markers, an excavator and a hauler. The mini map on top is always there.
Maybe I think the problem is that the first tile (since this minimap zooms like other tiles, gets bigger when you zoom in) is an image of the whole map instead of the actual first tile.

Relevant code:
tileView = new TileView(mActivity);
tileView.setSize(WIDTH, HEIGHT);
tileView.addDetailLevel(1f, "tiles/1000_%col%%row%.png", "downsamples/map.png");
tileView.addDetailLevel(0.5f, "tiles/500%col%%row%.png", "downsamples/map.png");
tileView.addDetailLevel(0.25f, "tiles/250%col%%row%.png", "downsamples/map.png");
tileView.addDetailLevel(0.125f, "tiles/125%col%_%row%.png", "downsamples/map.png");
tileView.defineRelativeBounds(LEFT, TOP, RIGHT, BOTTOM);
// Set the default zoom (zoom out by 4 => 1/4 = 0.25)
tileView.setScale(0.25);

I think I may know what causes this bug. WIDTH and HEIGHT are 4 times bigger than the original image.
I had to do this because this made it possible to "zoom in more".
But by doing this apparently I get two tileviews. One big that I use and where the markers are placed and one small at the top which matches what I get if I set width and height correctly.
Still, I find this behaviour extrange. I guess the solution will be to make the image bigger with something simple as paint and then redo the tiles and set correct Width and Height values.
At least this gives you and Idea of a simple mini map feature, simply switch the top tiles with the downsampled whole image.

I have made the original image bigger and obtained new tiles, still getting the same problem.
I'll keep looking into it and see if I can fix it by changing some of the code. I'll report back later.

Update:
I probably made some mistake before but now I have made the original image bigger 4 times. I created the tiles and set the width and height values correctly to match the now bigger image.
This way I don't get a "mini map".
However, I also noticed that I shouldn't be needing this, the TileView should allow me to zoom in but it didn't. It barely zoomed in, not even to double the size.
The tileview was inside a LinearLayout with width 900 and height 600. The tileview was of width 6000 and height 3600 but the actual size of the image was 4 times smaller. This gave me a mini map (always when using a bigger size for the tileview than the actual image, no matter what image).
For some reason when the tileview had the real size I could barely zoom in.
Now that the image is 6000 x 3600 I can zoom in without issue and no "mini map".

So you're all set?

I guess so.


DEV-843 Add embedded Daily Prebuilt demo

This PR adds a Daily Prebuilt embed demo to the repository.

@kimberleejohnson Last thing: let's handle the case of being in the prejoin state and getting past the expiry time (I left the demo open after testing and noticed this)

@kimberleejohnson Last thing: let's handle the case of being in the prejoin state and getting past the expiry time (I left the demo open after testing and noticed this)

Sounds good! I think I'll just kick out once the room expires. I think something like this happens in <BasicCall />.

@kimberleejohnson Last thing: let's handle the case of being in the prejoin state and getting past the expiry time (I left the demo open after testing and noticed this)

Sounds good! I think I'll just kick out once the room expires. I think something like this happens in the dailyjs basic call demo.

Confirming this should be handled now! I set the callFrame and room to null once a call has been left!


Corrected compatibility

Updated compatibility to reflect removal of _debugger which will break protractor for node v8 when using browser.pause()

Duplocate of https://github.com/angular/protractor/pull/4345


Input event does not fire in IE11

Describe the bug
In IE11, triggering the checkbox does not fire an input event. This prevents the consumer from knowing when the input updates (e.g. a controlled component in React).
To Reproduce
Steps to reproduce the behavior:

Render the following markup:

<auro-checkbox-group required>
	Group label
	<auro-checkbox
		id="cbx1"
		name="cbxDemo"
		value="yes"
		checked>
		Yes
	</auro-checkbox>
</auro-checkbox-group>

Add an input event listener to the element

document.querySelector('auro-checkbox').addEventListener('input', function() { console.log('input') });

Render in IE. Nothing is logged to the console.

Expected behavior
The input event is triggered in IE when the checkbox is updated.
Screenshots
If applicable, add screenshots to help explain your problem.
Environment

OS: Windows 10
Browser: IE11

Additional context
It seems like IE11 does not fire input events for checkboxes (I think this bit us before with ods-inputoptions). However, adding an event listener on change did not trigger either.
We need a consistent event to fire cross-browser to be able to respond to user input.

We have a few problems here.

the test you are using will not work in IE as even IE9 + does not fully support input events because Microsoft hates the world
lit element does not support the use of change events without creating a custom change event

There is a fix in the works.

Updated this issue from BUG to FEATURE. There is not a bug in the existing code, but a new feature is being added to support an outdated spec on a legacy browser.


[build] on windows 7

According to these descriptions related to : https://github.com/limetext/lime/wiki/Goals and https://github.com/limetext/lime/wiki/Building-on-Windows
NB: gopy currently fails very badly on Windows, so do NOT expect to have working or even fully built code after following these instructions. We are working on solutions.
Cross platform (It appears to be compiling and running on OSX and Linux last I tried, but needs further validation.)
Does it mean that I cannot currently build limetext on windows 7? right?
And I wanna ask a couple of stupid questions:
Will it have installation package(like setup.exe file built from NSI Script) on windows in further future?
Will it have package  on Linux (like ubuntu or Arch .etc) comes with their official source in further future? so that i could kindly install this software without building source.

Want to back this issue? Place a bounty on it! We accept bounties via Bountysource.

Will it have installation package(like setup.exe file built from NSI Script) on windows in further future?
If someone signs up to handle and maintain it.

Will it have package on Linux (like ubuntu or Arch .etc) comes with their official source in further future?
If someone signs up to handle and maintain it.

#228 deals with all things windows, so closing as a dup.


How to disable enter key?

I am using the clipboard2 in one component. That component exists on a page with other input components. When I click enter on a input component, it still copy the field and dont submit the form as it should.

You're right. It is not. I was using the clipboard inside the form, when it should be outside it.
Best regards


chore: bdd-spring-1575578168 to 0.0.1

chore: Promote bdd-spring-1575578168 to version 0.0.1

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by:
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approvers:
If they are not already assigned, you can assign the PR to them by writing /assign  in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment


If pod qos not guaranteed, remove burstable or besteffort prefix.

If pod qos not guaranteed, remove burstable or besteffort prefix.

Coverage remained the same at 33.681% when pulling a062fc8e0d9052b2dbb575798d17d79cc15b1f86 on siaimes:gpu_used_by_external_process_count into 698e3df53024629b93d6d0442fcff2243ed757a8 on microsoft:master.

Can you give more detail? What's the previous behavior and what's the current behavior. Will it affect the metrics?

By default, the QoS of the job started by PAI is set to guarantee, and there is no problem. However, when the user needs to submit a job without guaranteeing to the cluster through the kubectl command, the monitoring system continues to alert GPU used by external processes.
The use case is, for example, I need to run an x-server that allows me to manually adjust the GPU fan speed through a script to keep the GPU safe. Ubuntu's default GPU fan speed is conservative, and the temperature will be maintained at more than 80 degrees, which will affect GPU performance and lifespan.

x@x:~$ cat /proc/7358/cgroup
12:rdma:/
11:cpuset:/kubepods/besteffort/podeaa07b5b-3a1f-436a-a57a-637d908ece58/88a0d9913f0b675134eaed9aa8fd97c8f0a20250f0200ec08dbc73082a1ae480
10:blkio:/kubepods/besteffort/podeaa07b5b-3a1f-436a-a57a-637d908ece58/88a0d9913f0b675134eaed9aa8fd97c8f0a20250f0200ec08dbc73082a1ae480
9:pids:/kubepods/besteffort/podeaa07b5b-3a1f-436a-a57a-637d908ece58/88a0d9913f0b675134eaed9aa8fd97c8f0a20250f0200ec08dbc73082a1ae480
8:hugetlb:/kubepods/besteffort/podeaa07b5b-3a1f-436a-a57a-637d908ece58/88a0d9913f0b675134eaed9aa8fd97c8f0a20250f0200ec08dbc73082a1ae480
7:memory:/kubepods/besteffort/podeaa07b5b-3a1f-436a-a57a-637d908ece58/88a0d9913f0b675134eaed9aa8fd97c8f0a20250f0200ec08dbc73082a1ae480
6:net_cls,net_prio:/kubepods/besteffort/podeaa07b5b-3a1f-436a-a57a-637d908ece58/88a0d9913f0b675134eaed9aa8fd97c8f0a20250f0200ec08dbc73082a1ae480
5:freezer:/kubepods/besteffort/podeaa07b5b-3a1f-436a-a57a-637d908ece58/88a0d9913f0b675134eaed9aa8fd97c8f0a20250f0200ec08dbc73082a1ae480
4:perf_event:/kubepods/besteffort/podeaa07b5b-3a1f-436a-a57a-637d908ece58/88a0d9913f0b675134eaed9aa8fd97c8f0a20250f0200ec08dbc73082a1ae480
3:devices:/kubepods/besteffort/podeaa07b5b-3a1f-436a-a57a-637d908ece58/88a0d9913f0b675134eaed9aa8fd97c8f0a20250f0200ec08dbc73082a1ae480
2:cpu,cpuacct:/kubepods/besteffort/podeaa07b5b-3a1f-436a-a57a-637d908ece58/88a0d9913f0b675134eaed9aa8fd97c8f0a20250f0200ec08dbc73082a1ae480
1:name=systemd:/kubepods/besteffort/podeaa07b5b-3a1f-436a-a57a-637d908ece58/88a0d9913f0b675134eaed9aa8fd97c8f0a20250f0200ec08dbc73082a1ae480
0::/system.slice/containerd.service

example


Buoyancy force appears to be calculated incorrectly

In my opinion the calculation of the buoyancy is incorrect (file pfgen.cpp lines 120 and 121).
I think the correct calculation should look like this:
    force.y = liquidDensity * volume *
        (depth - maxDepth - waterHeight) / (2 * maxDepth);

Current code is missing the parentheses around "2 * maxDepth"

Have you been seeing any anomalies? The way you are presenting it is a different calculation.

Buoyancy here is being calculated by multiplying the maximum buoyancy (volume times density) by the ratio between submerged volume and total volume. This ratio calculation on page 91 of the book is:
d = (y0 - yW - s) / 2s
Note that 2s (which is 2 * maxDepth) is in the denominator. The acual code correctly divides by two but multiplies by maxDepth which appears to be erroneous to me.

I can see what you mean. Why not issue a pull request?

I am just lazy I guess - wanted to report the issue without getting involved at this time :)

Pull requests normally get much more attention than simply reporting the issue, as well as making it easier for the author to test. But it's up to you. :)

I might do that... Meanwhile I am finding more issues:
The ParticleContact::resolveInterpenetration applies the interpenetration corrections in the same direction to both particles involved in the collision. In order to separate interpenetrating particles the corrections should be applied in opposite directions.

Ignore that last comment - it is only related to the book. The actual code is correct...

But I uset that
float d =1 - (x - (waterHeight - maxDepth)) / (2maxDepth);
force.y = liquidDensity * volume *d;

because I want
when x =waterHeight + maxDepth , then d =0
when x =waterHeight - maxDepth , thed d=1
https://www.geogebra.org/m/rnRdPbWn

@xiangwei71
But, what if the x  > (waterHeight - maxDepth) ? In this case, the buoyancy force should be 0. But, your code will make a extra force for that case.

@lch32111
Thanks for your remind. I should clamp it.

force.y = liquidDensity * volume *
        (maxDepth  + waterHeight - depth) / (2 * maxDepth);

depth maxDepth both from center

I think The explanation and implementation of buoyancy force on this book is not stable.
So, I searched for the better theory and implementation. And I happened to see the Erin Catto Demo and describtion on the Game Programming Gems 6. And other reference is also based on the kinds of theory. So, As I'd like to particle buoyancy force, I approximate the Volume of a particle as Y-axis height of part of submerged particle. Therefore, It is working well. Take my code and test. You will get plausible result.
	/**
	 * A force generator that applies a buoyancy force for a plane of
	 * liquid parallel to XZ plane.
	 */
	class ParticleBuoyancy : public ParticleForceGenerator
	{
		/**
		 * Consider a particle as a sphere, and it has a radius
		 * With this variable, the submerged part of a particle is
		 * determined.
		 */
		real particleRadius;

		/**
		 * The height of the water plane above y = 0. The plane will be
		 * parallel to the XZ plane.
		 */
		real waterHeight;

		/**
		 * The linear Drag of Water
		 */
		real linearDrag;

		/**
		 * The density of the liquid.Pure water has a density of
		 * 1000 kg per cubic meter.
		 */
		real liquidDensity;

	public:
		/** Creates a new buoyancy force with the given parameters */
		ParticleBuoyancy(real radius, real linearDrag, real waterHeight, real liquidDensity = 1000.0f);

		/** Applies the buoyancy force to the given particle.*/
		virtual void updateForce(GPEDParticle* particle, real duration);
	};

void GPED::ParticleBuoyancy::updateForce(GPEDParticle * particle, real duration)
{
	// Calculate the submersion depth.
	real depth = particle->getPosition().y;
	real partialMass = particle->getMass();

	// Check if we're out of the water.
	if (depth - particleRadius >= waterHeight) return;
	glm::vec3 force(real(0.0));

	// Fully Submerged
	if (depth + particleRadius <= waterHeight)
	{
		force.y = liquidDensity * (particleRadius * 2) * real(10.0); // gravity 10
	}
	else // Partially Submerged
	{
		real V = (waterHeight - (depth - particleRadius));
		force.y = liquidDensity * V * real(10.0); // gravity 10
		partialMass *= V / (particleRadius * 2);
	}

	// http://www.iforce2d.net/b2dtut/buoyancy
	// Refer to the tutorial of buoyancy. the drag is approximation.
	// water velocity is assumed by (0, 0, 0)
	// https://box2d.org/downloads/
	// Refer to the buoyancy demo of Eric Catto
	// the water linear drag is normally 5.0, according to the demo
	float dragForce = (partialMass * linearDrag) * (-particle->getVelocity().y);
	force.y += dragForce;

	particle->addForce(force);
}

Hi, i might be wrong on this but looking at the book's formula i am pretty sure that the force for partial submersion should be:
force.y = density * volume * (waterHeight + maxDepth - depth) / (2 * maxDepth)
which is the opposite of what is calculated for d as if i want to calculate the amount of the box submerged i would get the center of the object (depth in this case) and subtract from that the maxDepth which will give me the position of the very bottom of the object. subtracting that value from the height of the water plane will then give me the distance from the plane to the bottom of the object which is equivalent to the amount of the box submerged and then obviously we would get the ratio of that to the total size of the object which is 2 * maxDepth


Update troubleshooting documentation for first build

Hi!
Yes, I'm actually using Ubuntu, I could not test this issue on another SO, at least here on the sprint this error was not reported on another SO. Should I add that disclaimer?

@acangiani Yes, something like "if you're using Ubuntu and you experience ... you should do ...", so that macOS/Windows users don't try to tun this command.

@di I had added the specific reference to the SO, if there is any other feedback please do,
thanks!


Connector availability issue

@drc38 do you see this same behavior where the connector availability toggle is off even if the connector is available and not disabled?
E.g. here I'm charging but the new availability switch says disabled:

Any idea what data we should be using for that switches value? It looks to me that in v3 details we could use ocppStatus=UNAVAILABLE, or in api v2 we can see status="DISABLED"

The way its been coded is such that if you are charging the connector is 'unavailable' (as someone is charging) and the switch is in the Off position. If you toggle the switch (to make the connector available) while charging it will stop the charge and the connector then becomes available when the cable is unplugged. If on the other hand the connector status is Available (switch is On) and you toggle the switch it will become Unavailable and prevent charging. On the Evnex portal they term it disable/renable and ignore the current status which is another way to do it (ie remove the is_on property and swap the on/off logic).

If you toggle the switch (to make the connector available) while charging it will stop the charge and the connector then becomes available when the cable is unplugged. On second thoughts it may not behave in this way and may just keep charging... not sure

I had a chat with someone on the team at EVNEX and they told me that feature was designed for disabling chargers when they shouldn't be used for an extended time - for example at a bach.
I suggest we copy that behaviour with this available button, and think about having a "cancel"/"stop current charge" button?

I'd still keep it as a switch rather than use a button so you can disable and re-enable the charger with the 1 entity. But drop the availability name and call it 'disable connector' reversing the current on/off logic.

The stop charge can be a button, as on the Evnex you can't start a charge remotely without unplugging the cable so not much point implementing it in HA.


Can't register functions with abstract const reference as return type

Hello there,
Sorry to bump an old thread but I believe my issue is relatable:
Consider a slightly modified variation:
class A {
public:
    virtual const A& a(const A&) = 0;
};

class B : public A {
public:
    virtual const A& a(const A&) override {
        return *this;
    }
};

int main()
{
    sol::state state;
    state.new_usertype<A>("A", "a", &A::a);
    state.new_usertype<B>("B", sol::base_classes, sol::bases<A>());
}

With MSVC I get:
C2259: 'A': cannot instantiate abstract class
I am missing something there? Or this isn't feasible?
Originally posted by @deadlocklogic in https://github.com/ThePhD/sol2/issues/213#issuecomment-955837873

For now I am solving this with a funny solution:
    state.new_usertype<A>("A", "a", [](A& self) { return &self.a(self); });

Is is the best approach?

Also note, returning concrete const reference to types with deleted copy constructor fails to compile too. So basically, whenever we hit a non-copiable type we should rely on pointer semantics, right?

Returning a const reference basically pushes sol2 to make a copy. It's not ideal given most chaining-based methods use these kinds of things for builder methods and what not.
You can get around this by wrapping it to return a std::ref(*this), which is a std::reference_wrapper<A> instead. I should probably make this much simpler at some point...

Right, Thanks!
Just another little question, is there any kind of mechanism to protect against  nil passed from lua to C++ function expecting value/reference semantics and not pointers/wrappers?

Ok I found it.
#define SOL_ALL_SAFETIES_ON 1 does the trick.


Float images and figures with class containing "right" or "left"

CSS has been recommended as an alternative to align attributes in img tags for a while now, so it would make sense to recognize (heuristically) cases where such styles have been applied.
This would imply changing the rule added in #40.

This will probably be a little tricky if we want to include figures. For example:

Lorem ipsum

...would probably require styling along the lines of:
figure[class =* "right"] { max-width: 50%; float: right; margin: 0; }
/* For images with width attributes: */
figure[class =* "right"] img[width] { width: 100%; height: auto; }


Split UserInput into multiple traits

I had previously considered splitting it into different input kinds: Button, Axis, DualAxis, etc.; and there are corresponding data types for each. Then, modify the ActionState API, something like this:
if let ButtonState(state) = action_state.get(ButtonAction) {
   let pressed = state.pressed;
   let pressure = state.pressure; // Gamepad buttons are ranging from 0 to 1, and others are 0 or 1
}
if let AxisValue(value: f32) = action_state.get(AxisAction) {
}

Originally posted by @Shute052 in https://github.com/Leafwing-Studios/leafwing-input-manager/pull/490#discussion_r1632406354

The basic design I'm going to go with is a core UserInput trait with the bare minimum of functionality.
Then, three other traits that imply UserInput: ButtonlikeInput, SingleAxisInput, DualAxisInput.

I was thinking of having an InputData enum for buttons, single-axis inputs, and dual-axis ones.
However, there's an issue with Chord in that context. It can consist of multiple single-axis inputs and multiple dual-axis inputs (but only considers the first dual-axis data).

Yeah, I think that we need to restrict chords to only contain buttonlike inputs, and then make sure there's general-purpose ways to turn axislikes into buttonlikes.
I'll tackle this and ping you for review :)

I think that we need to restrict chords to only contain buttonlike inputs

But in some cases, Chord with single/dual-axis inputs can be really useful. For instance, in my project, I've implemented mouse drag using a Chord.
Perhaps we could consider making a Chord consist of either only buttons, only buttons with single-axis inputs, or only buttons with dual-axis inputs?

Hmm 🤔 Okay, I'll leave it for now and chew on it.


cache-hit returns true but dependencies are missing

Description:
From your documentation you listed that you're using actions/cache to cache npm packages. Naturally I used cache-hitto skip installation of packages if they're already cached. cache-hit returns indeed true but I get the modules not found error, which means the dependencies are missing.
I have the following workflow:
jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      # install nodejs
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: 12.22.0
          cache: 'npm'
        id: cache-nodemodules

      - if: steps.cache-nodemodules.outputs.cache-hit != 'true'
        run: npm ci

      - run: make check-codeowners
      - run: npm run lint

Action version:
Specify the action version
Platform:

[x] Ubuntu
[ ] macOS
[ ] Windows

Runner type:

[x] Hosted
[ ] Self-hosted

Expected behavior:
I expect the packages to be retrieved from cache
Actual behavior:
I think the issue may be linked to the path of the cache directory

Hello @hamzahamidi. Thank you for your report. We do not use actions/cache inside this action. The action uses toolkit/cache to save/restore dependencies. Besides, the setup-node action does not cache node_modules, it caches global cache directory. For more details please check section Caching packages dependencies in the Advanced usage guide.
For now I'm going to close the issue.


Update to Rust nightly 2015-01-23

Fixes build error in latest Rust nightly.

Thanks.

Ok. I checked, the compiler does not complain. As long as the type inferfence works, I would prefer to leave it like this.
The other changes where already merged by @tomaka.
Thanks for your contribution.


Report fields - All report fields disappear instead of crossed out when deleted offline

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Version Number: 9.0.6-0
Reproducible in staging?: Y
Reproducible in production?: N
If this was caught during regression testing, add the test name, ID and link from TestRail: N/A
Issue reported by: Applause - internal Team
Action Performed:

Go to staging.new.expensify.com
Go to workspace settings > Report fields
Add a few report fields
Go offline
Delete all the report fields

Expected Result:
The report fields should be crossed out when all the report fields are deleted offline (production behavior)
Actual Result:
The report field list is empty when all the report fields are deleted offline
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

Screenshots/Videos
Add any screenshot/video evidence

https://github.com/Expensify/App/assets/78819774/7f6b77b7-c47b-4478-82a0-9005438407c8
View all open jobs on GitHub

@AndrewGable  FYI I haven't added the External label as I wasn't 100% sure about this issue. Please take a look and add the label if you agree it's a bug and can be handled by external contributors

Proposal
Please re-state the problem that we are trying to solve in this issue.
The report field list is empty when all the report fields are deleted offline
What is the root cause of that problem?
We show the empty state if all report fields has pendingAction is deleted
https://github.com/Expensify/App/blob/97b383144d6bff44ecd929c1e5b66b1aa965b03e/src/pages/workspace/reportFields/WorkspaceReportFieldsPage.tsx#L130-L132
What changes do you think we should make in order to solve the problem?
We should check if the network is offline, we will not show the empty state if we have pending delete report fields as we do in other pages like category pages here
const shouldShowEmptyState =
        Object.values(filteredPolicyFieldList).filter((reportField) => reportField.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE || isOffline).length <= 0 && !isLoading;

https://github.com/Expensify/App/blob/97b383144d6bff44ecd929c1e5b66b1aa965b03e/src/pages/workspace/reportFields/WorkspaceReportFieldsPage.tsx#L130-L132
What alternative solutions did you explore? (Optional)

PR reviewed


jsonnet/prometheus-adapter: add metrics to default user-facing roles

Currently, only cluster wide admins have the permissions to view metrics
resources. This fixes it by adding a read-only cluster role which includes
aggregation labels to synthesize permission rules for standard user-facing
roles according to [1].
Note that only the "pods" resource is granted as reading "nodes" metrics
requires a cluster wide permission.
[1]
https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles
/cc @brancz @metalmatze

lgtm on green


Core Library Request: Crypto Shim

Cosmos currently needs these platform crypto functions in both browser and node:

SHA1
HMAC-256
atob

We currently use crypto-hash but it does not support HMAC256 and uses syntax incompatible with Edge. I propose the development of a new core library that shims these and any other required crypto functions for azure SDK packages.
cc @bterlson

/cc @schaabs @jonathandturner

There are 2 main things behind this issue

Cosmos is broken in Edge because crypto-hash uses incompatible syntax (such as spread) and features (such as 'SHA-1' with SubtleCrypto.digest())

Cosmos uses crypto-js for signing headers and we'd like to remove the dependency on it.

For fixing (1), I spoke with @southpolesteve and it seems like we should be able to use another algorithm (maybe SHA256). This hashing logic can be hosted within the Cosmos repo and drop the dependency on crypto-hash
For (2) 2 things need to happen
a) Move cosmos-sign into Cosmos repo
b) Drop the dependency on crypto-js and shim HMAC256
atob requirement has been addressed by this merge
@southpolesteve please feel free to fill in if I missed anything
/cc @ramya-rao-a @bterlson

Fixed with #5493


regression in 1.4.0 release: exit code of git ls-remote not respected

The 1.4.0 release has a bug newly introduced in that release, with the following symptom:
fetch data repo from remote
+ set +x
+ git clone --single-branch --branch github-repo-stats ***github.com/bearnetworkchain/core.git .
Cloning into '.'...
warning: Could not find remote branch github-repo-stats to clone.
fatal: Remote branch github-repo-stats not found in upstream origin

I addressed this on May 17 via https://github.com/jgehrcke/github-repo-stats/pull/54. Still need to make a new release.

Fixed in the 1.4.1 release.


Review Ceph storage docs

In https://github.com/lxc/lxd/pull/10643#pullrequestreview-1031121323 we discussed the original intention around the https://linuxcontainers.org/lxd/docs/master/reference/storage_ceph/#limitations section labelled "Ceph Sharing the OSD storage pool between installations"

Originally it referenced lxd import which no longer exists, and @ru-fu changed it to lxd recover.
But as we were not sure what the original intention of that section was for, it would be good for us to review whether the actual statement is still accurate.

We are also wondering whether the recommendation to use XFS for setting up a Ceph cluster is A) in scope for our docs and B) still accurate given that filestore isn't recommend anymore. See https://github.com/lxc/lxd/pull/10643#pullrequestreview-1031124175

[x] Doc fixes (https://github.com/lxc/lxd/pull/10664)
[ ] Mark ceph.osd.force_reuse as deprecated in code comments.

The XFS part can be removed entirely. I'm not sure why we ever made this comment as it's really outside of LXD's control. LXD should just expect a properly setup Ceph cluster.
XFS used to be important in the FileStore days prior to the switch to BlueStore, but even then, it feels odd to have that in LXD docs.
On the lxd import part. lxd import required the volumes be setup on disk and mounted prior to import being possible. In the case of ceph, this apparently required it be first added to LXD. This shouldn't be relevant anymore and lxd recover should be able to access a ceph cluster correctly when all settings are passed to it. As a result, this particular config key should be deprecated. We can't remove it from the code because of upgrades and potential older tooling still setting it, but we should remove it from documentation and mark it as deprecated in code comments.

@stgraber looking into this more closely now I've come to deprecate it in the code, I'm not sure we should deprecate it.
LVM has the same option (https://linuxcontainers.org/lxd/docs/master/reference/storage_lvm/#storage-pool-configuration), and its useful when you want to use an existing volume group that has non-LXD volumes on it. This isn't a recommended setup ofcourse, but it still has value (I used it the other day infact).
So for Ceph it makes equal sense, if you have an existing ceph pool setup that has non-LXD volumes on it and you want to use that for a LXD ceph storage pool, you'd need to set ceph.osd.force_reuse=true.
I agree that the statement about lxd import/lxd recover should be removed, but don't feel that the force_reuse setting should be deprecated as its not only used for recovery.

As mentioned in the PR, I disagree. I can't think of a good reason for ever sharing an OSD pool. Those can be dynamically created without needing any additional hardware (unlike LVM) so there's no good reason for it.
In the LVM case, the reason why we allow sharing is because of systems that come installed with LVM where getting dedicated PVs to get a separate VG isn't feasible. Though even then, the expectation is that they have a fixed set of system LVs to which LXD adds a thinpool and additional LVs, if the user then starts to create more LVs by hand, we can't support it.


CI for Power Systems

Signed-off-by: Aishwarya Kamat<EMAIL_ADDRESS>

@bpradipt @Prajyot-Parab

@aishwaryabk @yussufsh @Prajyot-Parab is this still needed ?


[FEATURE] Support automatic rebalance the replicas based on disk usage.

Is your feature request related to a problem? Please describe.
Sometimes disks get almost full with replicas filling them up. While other disks have a much lower disk usage. We have to intervene manually to balance out the disk usage if the disks get to full.
Describe the solution you'd like
With the new auto rebalance feature https://github.com/longhorn/longhorn/issues/587 it would be nice if it takes the disk usage in to account and balances that out.
Either it should generally rebalance the disk usage or at something like 90% usage.
Maybe give the option to let it just delete a replica and sacrifice redundancy so the disk does not fill up.

This is a nice improvement for an addition to our replica scheduler, next time we do a refactor on that we should consider adding this enhancement.


Crashes with 101 return code under certain layouts

Description
For most layouts this issue is not present, but it is for some, e.g. for the one shown below.
Configuration
$ uname -srm
Linux 4.2.0-42-generic x86_64
$ rustc --version
rustc 1.18.0 (03fc9d622 2017-06-06)

Cursive version 0.6.1
Expected behaviour
Run normally
Actual behaviour
Whole app crashes, exits ncurses mode and returns 101 code.
Code to reproduce
extern crate cursive;

use cursive::Cursive;
use cursive::views::{BoxView, LinearLayout, TextArea, TextView};

fn main() {
    let mut siv = Cursive::new();

    let x = LinearLayout::vertical()
        .child(BoxView::with_full_screen(TextView::new("contents")))
        .child(LinearLayout::horizontal()
            .child(TextView::new("prompt"))
            .child(BoxView::with_full_width(TextArea::new().content("text to edit"))));

    siv.add_fullscreen_layer(BoxView::with_full_screen(x));

    siv.run();
}

Indeed, LinesIterator wasn't being protective enough.
Thanks for the report! :)

I should probably replace most/all usize subtractions with "safe" variants like here... It's a main source of unexpected panics.

This worked for me, thanks!

The slightly modified version of the code above (Cursive::new() replaced by Cursive::default() as of cursive 0.9.0) now is broken again:

Backtrace
   Compiling cursive-test v0.1.0 (file:///tmp/rust/cursive-test)
    Finished dev [unoptimized + debuginfo] target(s) in 3.96s
     Running `target/debug/cursive-test`
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', libcore/option.rs:345:21
stack backtrace:
   0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
             at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
   1: std::sys_common::backtrace::print
             at libstd/sys_common/backtrace.rs:71
             at libstd/sys_common/backtrace.rs:59
   2: std::panicking::default_hook::{{closure}}
             at libstd/panicking.rs:211
   3: std::panicking::default_hook
             at libstd/panicking.rs:227
   4: std::panicking::rust_panic_with_hook
             at libstd/panicking.rs:511
   5: std::panicking::continue_panic_fmt
             at libstd/panicking.rs:426
   6: rust_begin_unwind
             at libstd/panicking.rs:337
   7: core::panicking::panic_fmt
             at libcore/panicking.rs:92
   8: core::panicking::panic
             at libcore/panicking.rs:53
   9: <core::option::Option<T>>::unwrap
             at /checkout/src/libcore/macros.rs:20
  10: cursive::views::text_area::TextArea::row_at
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/views/text_area.rs:145
  11: cursive::views::text_area::TextArea::selected_row
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/views/text_area.rs:163
  12: <cursive::views::text_area::TextArea as cursive::view::view::View>::draw::{{closure}}::{{closure}}
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/views/text_area.rs:482
  13: cursive::view::scroll::ScrollBase::draw
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/view/scroll.rs:264
  14: <cursive::views::text_area::TextArea as cursive::view::view::View>::draw::{{closure}}
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/views/text_area.rs:472
  15: cursive::printer::Printer::with_color
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/printer.rs:265
  16: <cursive::views::text_area::TextArea as cursive::view::view::View>::draw
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/views/text_area.rs:453
  17: cursive::view::view_wrapper::ViewWrapper::wrap_draw::{{closure}}
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/view/view_wrapper.rs:54
  18: <cursive::views::box_view::BoxView<T> as cursive::view::view_wrapper::ViewWrapper>::with_view
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/view/view_wrapper.rs:175
  19: cursive::view::view_wrapper::ViewWrapper::wrap_draw
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/view/view_wrapper.rs:54
  20: cursive::view::view_wrapper::<impl cursive::view::view::View for T>::draw
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/view/view_wrapper.rs:108
  21: <cursive::views::linear_layout::LinearLayout as cursive::view::view::View>::draw
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/views/linear_layout.rs:348
  22: <cursive::views::linear_layout::LinearLayout as cursive::view::view::View>::draw
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/views/linear_layout.rs:348
  23: cursive::view::view_wrapper::ViewWrapper::wrap_draw::{{closure}}
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/view/view_wrapper.rs:54
  24: <cursive::views::box_view::BoxView<T> as cursive::view::view_wrapper::ViewWrapper>::with_view
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/view/view_wrapper.rs:175
  25: cursive::view::view_wrapper::ViewWrapper::wrap_draw
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/view/view_wrapper.rs:54
  26: cursive::view::view_wrapper::<impl cursive::view::view::View for T>::draw
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/view/view_wrapper.rs:108
  27: cursive::view::view_wrapper::ViewWrapper::wrap_draw::{{closure}}
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/view/view_wrapper.rs:54
  28: <cursive::views::view_box::ViewBox as cursive::view::view_wrapper::ViewWrapper>::with_view
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/views/view_box.rs:52
  29: cursive::view::view_wrapper::ViewWrapper::wrap_draw
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/view/view_wrapper.rs:54
  30: cursive::view::view_wrapper::<impl cursive::view::view::View for T>::draw
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/view/view_wrapper.rs:108
  31: <cursive::views::layer::Layer<T> as cursive::view::view_wrapper::ViewWrapper>::wrap_draw
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/views/layer.rs:30
  32: cursive::view::view_wrapper::<impl cursive::view::view::View for T>::draw
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/view/view_wrapper.rs:108
  33: <cursive::views::stack_view::ChildWrapper<T> as cursive::view::view::View>::draw
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/views/stack_view.rs:110
  34: cursive::views::stack_view::StackView::draw_fg::{{closure}}
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/views/stack_view.rs:462
  35: cursive::printer::Printer::with_color
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/printer.rs:265
  36: cursive::views::stack_view::StackView::draw_fg
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/views/stack_view.rs:457
  37: cursive::cursive::Cursive::draw
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/cursive.rs:694
  38: cursive::cursive::Cursive::step
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/cursive.rs:739
  39: cursive::cursive::Cursive::run
             at /home/hcpl/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.9.0/src/cursive.rs:721
  40: cursive_test::main
             at src/main.rs:17
  41: std::rt::lang_start::{{closure}}
             at /checkout/src/libstd/rt.rs:74
  42: std::panicking::try::do_call
             at libstd/rt.rs:59
             at libstd/panicking.rs:310
  43: __rust_maybe_catch_panic
             at libpanic_unwind/lib.rs:105
  44: std::rt::lang_start_internal
             at libstd/panicking.rs:289
             at libstd/panic.rs:392
             at libstd/rt.rs:58
  45: std::rt::lang_start
             at /checkout/src/libstd/rt.rs:74
  46: main
  47: __libc_start_main
  48: <unknown>

Indeed! Thanks for the report. It should be fixed now.

I managed to crash cursive with 101 still (as of cursive 0.15). My code is rather complex though, and I'm pretty sure I cannot reproduce how it crashes with simple code.
Would you care to investigate my codebase?

Hi! Can you pose a stack trace?
$ export RUSTC_BACKTRACE=full
$ cargo run 2> error.txt

Ah, that's how I can see the actual error! I found out that it was because of my own code. Thanks for your fast response!


2pc

Export 2PC functions as gRPC methods
Fix govet issues: call cancel funcs returned by contexts.

LGTM except you probably also have to re-generate the PHP stuff by running 'make php_proto' at toplevel.


Suggestion: Upgrade Python to 3.6.5

Home Assistant will be required Python 3.6 so I think is a good idea upgrade to Python 3.6 before we get caught by the bull.
You can find information on how to update Python 3.6 here https://gist.github.com/dschep/24aa61672a2092246eaca2824400d37f

Should/could me move to another base image instead? Do you have any recommendation?

Thanks, tynor88, I will try the official rpi3 docker image, I didn't know that it existed. Iroguet you can try the official image

@RodrigoTomeES To be honest, I don't even run HASS anymore ;-)

I tried it by switching to the image and cleaning deps folder. Works fine. Only thing missing is that they don't provide a "latest" tag like @lroguet does. Latest tag makes it useful for auto updating the container with https://github.com/v2tec/watchtower

Yes, I also saw that, I think we should be open a discussion in the forum.

Builds are failing since 0.82.0 and I haven't had the time to investigate.

I downloaded this repo and ran the build.sh script recently.
The first build for 0.82.1 did not work on my machine, but when I tried again, it did work.
The script still puts the latest version number in /var/log... even if the build failed.
So removing that file and restarting the build should work ;)

@wburgers - Indeed. Need to fail the build completely and not update the version file in those cases.

Home Assistant will drop support for python 3.5 next month.
"Python 3.5 support is deprecated and will be removed in the first release after August 1. Please upgrade Python."
Are you still using this image yourself @lroguet?

@wburgers I haven't used HA in more than a year but will fix this. Unless someone is kind enough to send a PR my way of contribute to this repository long term (even better).

There might be a simple solution to this. It looks like Buster uses Python 3.7.3 so switching release in the build script could be all we need:
https://github.com/lroguet/rpi-home-assistant/blob/master/build.sh#L5

@scottsweb Just pushed lroguet/rpi-home-assistant:0.97.2-exp based on buster. I've tested it myself and it ran fine with no errors.

Just tested latest/0.97.2 and all seems to be well. Thank you @lroguet


Migrate master dashboard to grafanalib

The changes:

dashboard is stored in readable, modifiable file
grafanalib has reasonable defaults (e.g. minY=0)
it's possible to reuse the same code (e.g. simple_graph).

/assign @mm4tt
/cc @oxddr

Nice! Could you add a README.md explaining what it does and how to use it (generate the json file, don't edit the json file manually, etc.)?

Added readme, resolved comments. PTAL

Looks great!
/approve
Leaving lgtm part to Janek for final verification - failing test, python readability, etc.

Please fix boilerplate in the newly added files - that's the reason travis is failing.

Boilerplate fixed

PTAL

/lgtm
Thanks again for this change!


Add memcached as the default Django cache backend

Purpose
We started out planning to enable caching in Django-CMS and add tests to ensure everything is cached as we expect.
As it turns out, cache was already enabled (it is on by default in Django-CMS) and we pretty much had nothing much to do once we figured that out.
We also had a lot of trouble figuring our meaningful tests to add, especially considering that Django-CMS already tests their cache strategy.
Proposal
As a result, we're just adding a better cache backend in memached instead of RAM. We don't think Django's caching middleware is relevant here as Django-CMS manually handles it by calling cache getters/setters directly.

We want to add redis instead of memcached as a cache backend. Closing this as we'll make another PR with redis.


Explorer Icon Overlap

Issue Type: Bug
The upper half of the Explorer Icon has an overlap of a blue rectangle. It has lasted for a few days.
VS Code version: Code - Insiders 1.57.0-insider (7771be8b981d4fff2c6de123dad953517253c395, 2021-05-14T05:54:04.153Z)
OS version: Darwin x64 20.4.0

System Info

Item
Value

CPUs
Apple M1 (8 x 24)

GPU Status
2d_canvas: enabledgpu_compositing: enabledmetal: disabled_offmultiple_raster_threads: enabled_onoop_rasterization: enabledopengl: enabled_onrasterization: enabledskia_renderer: disabled_off_okvideo_decode: enabledwebgl: enabledwebgl2: enabled

Load (avg)
1, 1, 1

Memory (System)
16.00GB (0.05GB free)

Process Argv
--crash-reporter-id 91027eee-79e3-4f38-a2ba-971223a1c117

Screen Reader
no

VM
0%

A/B Experiments
vsliv695:30137379
vsins829:30139715
vsliv368:30146709
vsreu685:30147344
python383:30185418
pythonvspyt602:30291494
vspor879:30202332
vspor708:30202333
vspor363:30204092
vstes627:30244334
pythonvspyt639:30291487
pythontb:30258533
pythonvspyt551:30291412
vspre833:30267464
pythonptprofiler:30281269
vshan820:30294714
pythondataviewer:30285072
vscus158cf:30286554
pythonvsuse255:30296409
vscorehov:30301224
vscod805cf:30301675

@onionyst Are you familiar with web dev tools? Would you be able to inspect this element to see what's causing the overlap? The command to show dev tools is Toggle Developer Tools and can be found in the Help menu.

I think it's div#workbench.parts.banner.

I added style="display: none" on this div and the overlap disappeared.

@onionyst awesome, thanks for that info. do you have any special settings around theming?

Ah. Probably caused by extension rokoroku.vscode-theme-darcula (v1.2.3).
I have "workbench.colorTheme": "Darcula" and it seems only this theme causes the overlap.

Thanks again, after investigating, it looks like this happens because the activity bar color from Darcula has a transparent activity bar color allowing the banner to peek through. Though it only happens on this theme (and possibly some other themes that do the same) it is a bug that the banner is showing anything for you at that time.


Provides API to access measurement data for serialization purposes

Prerequisites

[ √] Are you running the latest version?
[ √] Are you reporting to the correct repository?
[√ ] Did you perform a cursory search?

For more information, see the CONTRIBUTING guide.
Description
Hi:
I see cornerstoneTools has this feature:
'Provides API to access measurement data for serialization purposes (e.g. save measurements to database)'.
but I can not find the callback to get the measurement data.
And if i have some coordinate and i want draw rectangle ROI or freehand roi and etc in dicom image viewer by cornerstonetools, so how can i do?
Who can help me? thanks...
Expected behavior:
1.If I use  cornerstoneTools.rectangleRoi.activate(element, 1) , I hope to get callback measurement data.
2.I have some coordinates, I want to draw them in dicom image viewer when display image.
Actual behavior: no.

cornerstoneTools.getToolState(DOM enabledElement, string toolType)

getToolState() top level export
getToolState() usage in length tool
getToolState() source

Example usage:
const enabledElement = document.getElementById('myCornerstoneElement')
const toolType = 'length'
const toolData = cornerstoneTools.getToolState(enabledElement, toolType)
console.log(toolData)

_If you want to manually add data for a specific tool, you can use addToolState(). You may need to look at the source for the specific tool you're trying to add state for to make sure you're providing the state in a format it expects.
There aren't "callbacks", but we do emit events for state changes that you can listen for and handle. Some examples of emitted events for tool data changes are:
https://github.com/cornerstonejs/cornerstoneTools/blob/29182180ed3f850ba41c609b98b96464affca5f0/src/events.js#L38-L46

@dannyrb Thank you for your reply.
I can add rectangleRoi by use 'addToolState'  in  function 'onImageRendered', and it works well.
the code like this:
`const measurementData = {
visible: true,
active: true,
invalidated: true,
handles: {
start: {
x: 100,
y: 100,
highlight: true,
active: false
},
end: {
x: 200,
y: 200,
highlight: true,
active: true
},
textBox: {
active: false,
hasMoved: false,
movesIndependently: false,
drawnIndependently: true,
allowedOutsideImage: true,
hasBoundingBox: true
}
}
}
                        cornerstoneTools.addToolState(element, 'rectangleRoi', measurementData)`

but, when I drag the rectangle start point or end point to change it's size, the old rectangle is still exist and generate a new rectangle.
I don't know how to upload image in issue, so if you have time, you can test it.
another question: how to hide the textBox, I hope that when drawing a rectangle, textBox do not show.
thank you very much.

Shoot. It looks like I don't get notifications when the most recent message in a thread is edited. I'll take a stab at providing a response here soon @hu3402379.
Initial thoughts:

Have you tried toggling hasBoundingBox? (I'm not sure what it does)
It may require an API change. If you propose one, and create a PR, we could potentially merge it to give you the ability to not show the textbox.

I think we solved the root of this, so I'm closing the issue. I'll continue to monitor your PR 👍

@hu3402379 hi,  I have the same problem as you, but my rectangleRoi is rendered in function 'onImageRendered' , but it doesn't work.  I have to click the rectangle button before the rectangle is displayed.
Do you know how to make the rectangle display immediately ?
my code:
cornerstone.loadImage(imageId).then(image => {
            cornerstone.displayImage(this.canvas, image);

            const measurementData = {
                visible: true,
                active: true, // false,
                color: 'red',
                invalidated: false,
                handles: {
                    start: {
                        x: 235.52,
                        y:<PHONE_NUMBER>6666667,
                        highlight: true,
                        active: true, // false,
                        hasMoved: true
                    },
                    end: {
                        x:<PHONE_NUMBER>6666666,
                        y:<PHONE_NUMBER>6666667,
                        highlight: true,
                        active: true // false
                    },
                    initialRotation: 0,
                    textBox: {
                        active: false,
                        hasMoved: false,
                        movesIndependently: false,
                        drawnIndependently: true,
                        allowedOutsideImage: true,
                        hasBoundingBox: true,
                        x:<PHONE_NUMBER>6666666,
                        y:<PHONE_NUMBER>6666668,
                        boundingBox: {
                            width:<PHONE_NUMBER>1875,
                            height: 45,
                            left: 591,
                            top:<PHONE_NUMBER>0000003
                        }
                    }
                },
                cachedStats: {
                    area:<PHONE_NUMBER>000175,
                    count: 1170,
                    mean: -302.44444444444446,
                    variance:<PHONE_NUMBER>785375,
                    stdDev:<PHONE_NUMBER>7768304,
                    min: -1024,
                    max: 459,
                    meanStdDevSUV: undefined
                },
                unit: 'HU'
            };
            cornerstoneTools.addToolState(this.canvas, 'RectangleRoi', measurementData);
        });

@haoxl3, please create a new issue for this question