ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 4 is different from 3)

Hi Ibai,
After using your peopleCountingDemo code for a while, then i found out out that there is two problem:

Firstly, when i run the program and it return the data for a while then it return an error:
ValueError: setting an array element with a sequence
Then i found out that the problem is there could be an miss match with the initialize array so i changed:
azimuth = np.zeros(numInputPoints, dtype=np.float32)
dopplerVal = np.zeros(numInputPoints, dtype=np.float32)
to
azimuth = np.zeros(numInputPoints, dtype=object)
dopplerVal = np.zeros(numInputPoints, dtype=object)
This will solve this problem.
Secondly, i some time receive the error

File "peopleCountingDemo.py", line 215, in readAndParseData16xx
tlv_type = np.matmul(byteBuffer[idX:idX + 4], word)
ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 4 is different from 3)
do you know how to solve this problem??

Hi,
Sorry for the late response. I have corrected the first problem with your solution. I have no idea why it displays and error, thank you for letting me know.
About the second problem, I am also not sure. It seems that it is trying to multiply a vector of size 4 with a vector of size 3. My first guess was that bytebuffer was not full so only 3 bytes from bytebuffer were available. However, in the line 161 the length of byteBuffer is checked, so that problem should not happen.
Maybe the data is not being parsed correctly in those cases. Try to print the data in bytebuffer when those cases occur. Something like this
try:
        numTLVs = np.matmul(byteBuffer[idX:idX + 2], word)
        idX += 2
        checksum = np.matmul(byteBuffer[idX:idX + 2], word)
        idX += 2
except:
        print(byteBuffer)

Hi Ibai,
I'am sorry for my late response too. But i found out the reason of that error which i think it come from the delay because when i adjust the time delay at 0.07 it lead to that error but when i adjust it back to 0.044 it doesn't receive that error but it change to  this error:
File "peopleCountingDemo.py", line 188, in readAndParseData16xx
byteBuffer[:byteBufferLength - startIdx[0]] = byteBuffer[startIdx[0]:byteBufferLength]
ValueError: could not broadcast input array from shape (0) into shape (31644)
So i think due to the program was too fast that lead to these errors.

Hello,
The problem was that I did not clear old data from the buffer. So it was making the data parser to think there was data even if the byteBufferLength was 0. I have corrected the code (actually another user suggested me this change a while ago but I forgot to fix it).
I have not tested it with this repository but I think it should work. Probably you can also reduce the time delay because that error should not appear again and you will see the data with less time delay.
Let me know if it worked.

Hi,
Thank for your reply. I tried your new code but the startIdx still not define so i tried to declare startIdx list before it then it return error that the list index out of range.

Hi,
Sorry, I copied the code in the wrong line, I think now it should work.

Hi Ibai,
There is one problem that is the detObj at the 344 line i think this should be change to (targetObj["posX"]) > 0 and (targetObj["posY"]) > 0
right ? because the detObj still not define.

Yes, you are right. I forgot there was not detObj in this case. I used pointObj["range"] instead in case we want to visualize the raw point data even if there is no person detected.

This is really strange that i change the code as you said but it report this error:
File "peopleCountingDemo2.py", line 494, in
dataOk = update()
File "peopleCountingDemo2.py", line 431, in update
if dataOk and len(pointObj["range"])>0:
KeyError: 'range'
I think it should be fine.

I am not sure, but you can delete that part (use only if dataOk:), I just put it in there so that the plot was updated when there is new data.

I also removed the second dataOK flag activation.Now the dataOk flag will only activate when the pointObj message is received.

Hi Ibai,
Thank you so much, now the problem now solve and the program now run more stable. However after run for a while i still counter with the error:
tlv_type = np.matmul(byteBuffer[idX:idX + 4], word)      (some time it the error happen in tlv_length)
ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 4 is different from 0)
I think that the problem could be come from the wrong TLV. so do you think can we add one function that ignore that wrong TLV ?

Thank you also, I wouldn't be able to correct the code wihtout your feedback.
I have added a try before the reading the tlv type and tlv length. It should skip the data if there is some error. However, I am not still not sure why that error occurs, I am probably missing something when parsing the people counting demo data.

Hi Ibai,
i atry your code and the code will give error but i add an except and it work well now.
try:
# Check the header of the TLV message
tlv_type = np.matmul(byteBuffer[idX:idX + 4], word) idX += 4
tlv_length = np.matmul(byteBuffer[idX:idX + 4], word) idX += 4
except:
pass
thank you very much. Now the Programs run very stable now.

hi guys !!
when i run this code similarity = np.matmul(topic_vectors, word_vectors.T) print(similarity
i'm getting this error ValueError: matmul: Input operand 0 does not have enough dimensions (has 0, gufunc core with signature (n?,k),(k,m?)->(n?,m?) requires 1)
how to fix it ??

Hi @fathia-ghribi,
Probably is because of the shape of the input variables do not match, try print the shape of the variables to see if their shapes are correct (especially after you transpose the second variable).
However, that code is not from this repository and this issue has been close for over a year. Normally you will have more luck if you open a new issue in a more relevant repository for the code you are using.

Salut @ fathia-ghribi ,
C'est probablement à cause de la forme des variables d'entrée ne correspondent pas, essayez d'imprimer la forme des variables pour voir si leurs formes sont correctes (surtout après avoir transposé la deuxième variable).
Cependant, ce code ne provient pas de ce référentiel et ce problème est résolu depuis plus d'un an. Normalement, vous aurez plus de chance si vous ouvrez un nouveau problème dans un référentiel plus pertinent pour le code que vous utilisez.

thnks so much for your answer


Add workflow to deploy to AKS

Add workflow to deploy to AKS

Automated Deployment Warning
Ensure your manifest at ./ai-service.yaml uses the image name "pebomberacr.azurecr.io/aksstore:latest" for the application you wish to deploy.
For example, the image line in your deployment would look something like
image: pebomberacr.azurecr.io/pebomberacr.azurecr.io/aksstore:latest


Blog App: validations and model specs

Hello review,
@shafiuyushawu is my name and this milestone fulfills the following requirement.

Added the following validations:

For the User model:

name must not be blank.
posts_counter must be an integer greater than or equal to zero.

For the Post model:

title must not be blank.
title must not exceed 250 characters.
comments_counter must be an integer greater than or equal to zero.
likes_counter must be an integer greater than or equal to zero.

Add unit specs for all of your models' methods and validations.

@cynthiainga Thanks for the approval.


fix dynamic shape bug

Cant modify dataset param when dataloader multiprocessing running.

Great thanks for helping us find out this bug! We will fix the random size bug and re-benchmark the model as soon as possible!

Please refer to https://github.com/open-mmlab/mmdetection/pull/5932

We can not modify the dataset in the subprocesses in the loop, the modification would work when iter(dataloader)


Read configuration from pyproject.toml

Configuring your tool in pyproject.toml is all the new rage.
Several tools have already added support, and other tools are talking about it.
Feel free to steal ideas from those projects/discussions (such as only considering it as a valid config if the toml package is installed, which is what isort does).

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

The link to https://github.com/carlosperate/awesome-pyproject is invalid, you're missing a 't' in the end.
This feature would be really good to have and overall leading python ecosystem to a state where one could just have one file configuring dependencies, executables, linter line lengths and tests.
Currently there's direct support from PyLint and wrapper support for Flake8 via Flake9 and FlakeHell.
I think this feature without any more wrapper layers would enable better adoption for new projects whose developers have a idea that they want to try the pyproject.toml and make their compromises in libraries which don't support it.

Any progress on providing support for pyproject.toml configuration similarly to pytest. Example here ? :)

Hi, any updates on this ? :) Thank's !

It looks like this was added in 8.4.0. Woo hoo!

Did somebody succeed to use it ? I get the following error with 8.4.1, which is 4 months old
$ pylama -o pyproject.toml .                                                                                130 ↵
Traceback (most recent call last):
  File "/home/alorence/.local/bin/pylama", line 8, in <module>
    sys.exit(shell())
  File "/home/alorence/.local/pipx/venvs/pylama/lib/python3.10/site-packages/pylama/main.py", line 100, in shell
    options = parse_options(args)
  File "/home/alorence/.local/pipx/venvs/pylama/lib/python3.10/site-packages/pylama/config.py", line 203, in parse_options
    cfg = get_config(options.options, rootdir=rootdir)
  File "/home/alorence/.local/pipx/venvs/pylama/lib/python3.10/site-packages/pylama/config.py", line 272, in get_config
    return get_config_toml(cfg_path)
  File "/home/alorence/.local/pipx/venvs/pylama/lib/python3.10/site-packages/pylama/config.py", line 290, in get_config_toml
    config = config_toml.Namespace()
NameError: name 'config_toml' is not defined. Did you mean: 'get_config_toml'?

Py pyproject.toml:
[tool.pylama]
max_line_length = 120
skip = "*/.pytest_cache/*, */.tox/*, */mypy_cache/*, ./dist, ./docs"

[tool.pylama.linter.mccabe]
max-complexity = 10

@alorence same issue here

I noticed that the library "toml" is optional, and should be added by perfoming the following command:
`pip install pylama[toml]``


Yc1000 compatibility / ECU-C support

Support for Yc1000 would be great.

I'm also interested in YC1000 compatibility. Now when I enter my IP number for ECU-C, the home assistant does not want to start after that.
So support for YC1000 and ECU-C would be great.

Kyle and I do not own a YC1000 and my knowledge of Python is limited. Despite that based on the frame of the YC1000, I made an attempt to make the integration compatible with the YC1000. Would you like to test the integration from my fork? https://github.com/HAEdwin/homeassistant-apsystems_ecur

Absolutly i can test it, can i download from the link?
//
Håkan Gundstedt
0735 - 64 34 58

11 apr. 2021 kl. 17:59 skrev Edwin @.***>:

Kyle and I do not own a YC1000 and my knowledge of Python is limited. Despite that based on the frame of the YC1000, I made an attempt to make the integration compatible with the YC1000. Would you like to test the integration from my fork? https://github.com/HAEdwin/homeassistant-apsystems_ecur
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

Follow hyperlink and choose Download Code (in zip format for example) and follow instructions.

Kyle and I do not own a YC1000 (or ECU-C) and my knowledge of Python is limited. Despite that based on the frame of the YC1000, I made an attempt to make the ECU-R integration compatible with the YC1000. Would you like to test the integration from my fork? https://github.com/HAEdwin/homeassistant-apsystems_ecur

Thank you! I'm currently not producing any power (snowing outside..) but get lifetime energy and today energy in HA. I get the voltages from the inverters but frequency, temperature and signal says zero. Those values maybe only update when the panels are producing?

I am not sure. If you take a look at your entities and filter on "ecu" you will notice a entity "ECU Querying Enabled". We use a service call which en- or disables the querying service depending on sunrise and sunset. Service call is: apsystems_ecur.start_query or apsystems_ecur.stop_query. "ECU Querying Enabled" shows the status.

I'm not seeing any "ECU Querying Enabled" in entities. I see "current power" and so on and also "ECU Using Cached Data".
However I do find the Querying service in developer tools. Guess I might just wait until tomorrow to see if anything updates when the system are producing.

And? does it work? @86hakan does this work for you also (having a ECU-C)?

It works! Thank you!!!

Im testing tomorrow. Have lot of work today.
//
Håkan Gundstedt

12 apr. 2021 kl. 22:49 skrev Shadyville08 @.***>:

It works! Thank you!!!
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

@Shadyville08 Great to hear that, so if all is working and checked I will do a pull request.

PR approved, thanks @HAEdwin for adding that!

It doesnt work with my ecu. Home assistant wont start with this.
Den mån 12 apr. 2021 kl 23:50 skrev ksheumaker @.***>:

Closed #6
https://github.com/ksheumaker/homeassistant-apsystems_ecur/issues/6.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/ksheumaker/homeassistant-apsystems_ecur/issues/6#event-4584749633,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAYPXA3LKQKPVEP4MRKF4ZTTINTLVANCNFSM42LGLMHQ
.

--
Håkan Gundstedt
mobilnr: 0735-64 34 58
epost: @.***

@86hakan Too bad, that does surprise me because the compatibility table and the use of the same ECUapp to configure the ECU-R or ECU-C suggest otherwise.

If all requirements have been met, we conclude that this ECU-R integration does not work for the ECU-C, thank you for testing. This ECU-R integration was made possible because contributers all own a ECU-R (and a YC600, QS1 or YC1000).
However, I do want to help you, which is why I am raising this in the HA forum. it seems to me the appropriate medium for now to investigate this new wish. Feel free to discuss and contribute to that discussion: https://community.home-assistant.io/t/apsystems-aps-ecu-r-local-inverters-data-pull/260835 Because this issue in Github is officially closed I'll continue in the HA forum.

@86hakan You could try the following: Download and install packet sender (packetsender.com) on windows. Add the following parameters

Then press [send].
You should get te following:

Does this work for you until this stage?

It works!
[image: image.png]
Den tis 13 apr. 2021 kl 21:53 skrev Edwin @.***>:

@86hakan https://github.com/86hakan You could try the following:
Download and install packet sender (packetsender.com) on windows. Add the
following parameters
[image: image]
https://user-images.githubusercontent.com/82239374/114612359-5636d080-9ca2-11eb-8953-73be1708722e.png
Then press [send].
You should get te following:
[image: image]
https://user-images.githubusercontent.com/82239374/114612554-926a3100-9ca2-11eb-8089-0f094735cbbc.png
Does this work for you until this stage?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/ksheumaker/homeassistant-apsystems_ecur/issues/6#issuecomment-819010755,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAYPXA2MX5O7JUYSG6K3OA3TISOLDANCNFSM42LGLMHQ
.

--
Håkan Gundstedt
mobilnr: 0735-64 34 58
epost: @.***

Image is missing, could you post the entire string in response to string APS1100160001END?  That string should start with: APS11009.... and ends with END

Oh, I forgot to warn you! Don't try random commands here. It can really mess up the ECU configuration.

APS120115000121500000392501\00\02@\c4\00\00$\e4\00\00\14\f2
!\04\14\13GW\00\0b\00\0b10014ECU-C-Z_C1.1.8016Europe/Stockholm\80\97\1b\01b\15`\c5\a8\e6\d5\fc00\00\00\00\00\00\00\00\00\00\00END\n
Den tis 13 apr. 2021 kl 23:13 skrev Edwin @.***>:

Image is missing, could you post the entire string in response to string
APS1100160001END? That string should start with: APS11009.... and ends with
END
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/ksheumaker/homeassistant-apsystems_ecur/issues/6#issuecomment-819058907,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAYPXAY553CXPEJOG7MEEOLTISXYDANCNFSM42LGLMHQ
.

--
Håkan Gundstedt
mobilnr: 0735-64 34 58
epost: @.***

Great! Your ECUC-ID =<PHONE_NUMBER>25
Now try to send this command to query the ECU-C for registered inverters: APS1100280002215000003925END
Can you post me the results again?

APS11032600020001\00\0b !\04\14\15\08\05P \00\00b#\0102\01\f5\00\8c\01\02\00\ec\01\01\00\ee\00\fe\00\ea\00\fdP \00\00g\15\0102\01\f4\00\8b\01\02\00\ed\01\02\00\ef\00\f9\00\ed\00\fcP \00\00iU\0102\01\f4\00\92\00\fe\00\ed\00\fa\00\ef\00\f9\00\ea\00\f8P \00\00rs\0102\01\f3\00\8f\00\fe\00\ec\01\01\00\ef\01\02\00\eb\01\00P \00\00\83I\0102\01\f4\00\97\00\fc\00\eb\01\00\00\ef\00\fb\00\eb\00\fbP \00\00\87)\0102\01\f4\00\8d\00\fa\00\ec\00\fc\00\ee\00\f7\00\ea\00\f8P \00\00cB\0102\01\f4\00\8d\00\fa\00\ee\01\02\00\f0\01\00\00\ec\00\f9P \00\00gW\0102\01\f4\00\8f\01\01\00\ed\01\07\00\ee\00\fd\00\ec\00\faP \00\00rc\0102\01\f4\00\92\01\01\00\ee\01\03\00\ee\01\00\00\ec\00\feP \00\00t2\0102\01\f3\00\8a\01\04\00\ed\01\05\00\ee\01\01\00\eb\00\feP \00\00\85A\0102\01\f4\00\8c\00\e9\00\ed\00\ed\00\f0\00\e3\00\ec\00\e4END\n

Ok, sorry.. for interpretation I now need the hex data, not the ASCII data. I think it's easier to save the log and post that here.

trafficlog.log

The tests previously done by Hakan of sending the commands to the ECU-C prove that querying the ECU-C works with the same commands. The query on the ECU brought valid data which I analyzed to check that. It turns out that there are 11 YC1000 inverters (44 panels) configured in the ECU-C. As a result, the string length of inverter_raw_data becomes 326 bytes. The data frame also meets all the requirements of the integration on part of the YC1000 dataframe specs. Actually, it should work. Is it likely that the data arrives fragmented and is therefore incomplete? Of course it is not much, but TCP transfers can still be fragmented to smaller chunks of data [code line: self.ecu_raw_data = sock.recv(self.recv_size)]. More on receive methods can be found here: https://stackoverflow.com/questions/17667903/python-socket-receive-large-amount-of-data
Here is the raw data converted to hex. To debug, I think assigning this to ecu_raw_data would prove that the data can be interpreted by the integration.<PHONE_NUMBER>303332363030303230303031000B2021041415380550200000622301303201F50089006A00E6006A00E7006900E3006850200000671501303201F40085006500E7006600E8006200E5006350200000695501303201F4008E006700E7006500E9006500E4006450200000727301303201F4008C006900E7006900E9006900E4006850200000834901303201F50092006800E7006800E9006600E5006650200000872901303201F4008B006600E7006700E8006400E4006450200000634201303201F40089006700E8006900E9006800E4006550200000675701303201F40089006800E8006900E8006600E4006550200000726301303201F5008E006900E7006900E8006800E4006750200000743201303201F40087006A00E8006900E9006800E4006750200000854101303201F50089006500E8006500EA006400E40064454E440A

The string containing the hex data is ultimately much larger after conversion of the received data than should be. So the checksum fails. Somewhere the conversion of the received data to hex data is not going well for  all pairs in case of the ECU-C.
What is being received:
APS11032600020001\00\0b !\04\14\158\05P \00\00b#\0102\01\f5\00\89\00j\00\e6\00j\00\e7\00i\00\e3\00hP ..... etc
What is being converted by the integration:
41 50 53 31 31 30 33 32 36 30 30 30 32 30 30 30 31 00 00 62 ..... etc
What it should be (and how Packet Sender converts it):
41 50 53 31 31 30 33 32 36 30 30 30 32 30 30 30 31 00 0B ..... etc
Somewhere down the line of binascii.b2a_hex things must go wrong.

I noticed that the signal is zero on all inverters. Same goes for that part I guess.

@86hakan If you want, you can download APSystemsECUR.py from my GitHub fork (https://github.com/HAEdwin/homeassistant-apsystems_ecur) to try if the integration now works with your ECU-C. Hopefully it will work but it is hard to really test because I don't own a ECU-C. If things go wrong please post the home-assistant.log here. To provide more feedback you can add:
logger:     default: warning     logs:         custom_components.apsystems_ecur: debug
to the configuration.yaml file. After installation restart core to take changes into effect.

I have test now, but i get error-message for configfile for the log.
Invalid config for [logger]: expected a dictionary for dictionary value @
data['logger']['logs']. Got None extra keys not allowed @
data['logger']['custom_components.apsystems_ecur']. Got 'debug'. (See
/config/configuration.yaml, line 110).
my code is:
logger:
default: warning
logs:
custom_components.apsystems_ecur: debug
apsystems_ecur:
host: <IP_ADDRESS>
Den mån 19 apr. 2021 kl 10:51 skrev Edwin @.***>:

@86hakan https://github.com/86hakan If you want, you can download
APSystemsECUR.py from my GitHub fork (
https://github.com/HAEdwin/homeassistant-apsystems_ecur) to try if the
integration now works with your ECU-C. Hopefully it will work but it is
hard to really test because I don't own a ECU-C. If things go wrong please
post the home-assistant.log here. To provide more feedback you can add:
logger: default: warning logs: custom_components.apsystems_ecur: debug
to the configuration.yaml file. After installation restart core to take
changes into effect.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/ksheumaker/homeassistant-apsystems_ecur/issues/6#issuecomment-822294767,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAYPXA5IF4I5OWS2UJSY2VTTJPVKFANCNFSM42LGLMHQ
.

--
Håkan Gundstedt
mobilnr: 0735-64 34 58
epost: @.***

I'm not sure but the indent may be wrong here. Make sure indent is correct, like example below.

Thanks. That was the problem.
the only error-message i can se when im activate the plugin is
2021-04-25 12:00:39 WARNING (Recorder)
[homeassistant.components.recorder.util] The system could not validate that
the sqlite3 database at //config/home-assistant_v2.db was shutdown cleanly
2021-04-25 12:00:49 WARNING (MainThread) [homeassistant.setup] Setup of
recorder is taking over 10 seconds.
2021-04-25 12:01:39 WARNING (MainThread) [homeassistant.bootstrap] Waiting
on integrations to complete setup: recorder
2021-04-25 12:02:23 WARNING (Recorder) [homeassistant.components.recorder]
Ended unfinished session (id=20 from 2021-04-25 09:54:45.371389)
I dont know if this is a problem for the ap-system component.
Den sön 25 apr. 2021 kl 11:04 skrev Edwin @.***>:

I'm not sure but the indent may be wrong here. Make sure indent is
correct, like example below.
[image: image]
https://user-images.githubusercontent.com/82239374/115987576-e2f06100-a5b5-11eb-8de1-ef79b08a4877.png
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/ksheumaker/homeassistant-apsystems_ecur/issues/6#issuecomment-826287363,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAYPXAZUMHPW3XFYCGQ4EJLTKPLIVANCNFSM42LGLMHQ
.

--
Håkan Gundstedt
mobilnr: 0735-64 34 58
epost: @.***

No, it is not related. Always shutdown HA cleanly, do not pull the plug but do a proper shutdown. Now I hope you will be able to see a lot of entities which you can add to the dashboard (and that they have the correct values).

Ok. I just restart the core, but now im do a correct shutdown and a
powerup, im runnning this in a virtual box on a mac and my kernel_task is
going for 2,39G RAM  when im start the homeassistant.
Den sön 25 apr. 2021 kl 12:12 skrev Edwin @.***>:

No, it is not related. Always shutdown HA cleanly, do not pull the plug
but do a proper shutdown. Now I hope you will be able to see a lot of
entities which you can add to the dashboard (and that they have the correct
values).
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/ksheumaker/homeassistant-apsystems_ecur/issues/6#issuecomment-826297578,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAYPXA3IU35YWMWBR5VTZWDTKPTJVANCNFSM42LGLMHQ
.

--
Håkan Gundstedt
mobilnr: 0735-64 34 58
epost: @.***

And? I'm curious of course. Can you share the log if it doesn't go well?

It doesnt got well. Do you know how i can read the log even if homeassist doesnt start up?
Can logger write to a specific file?
//
Håkan Gundstedt
0735 - 64 34 58

25 apr. 2021 kl. 13:52 skrev Edwin @.***>:

And? I'm curious of course. Can you share the log if it doesn't go well?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

See if you can manage to access the home-assistant.log, it should be in the root of the config folder. Running HA on a virtual box on the MAC does bring a whole new dimension with it (trouble shooting I mean).

Hi @HAEdwin
I've a 6 QS1 (with 4 panels on each) with ECU-C. I just installed your extension and not working. HA won't start. Hangs on :

2021-08-10 14:24:13 DEBUG (MainThread) [custom_components.apsystems_ecur] Querying ECU
2021-08-10 14:24:13 INFO (MainThread) [custom_components.apsystems_ecur.APSystemsECUR] Connected to <IP_ADDRESS> 8899

When I change address to invalid one, I have :

2021-08-10 14:29:26 WARNING (MainThread) [custom_components.apsystems_ecur] Using cached data from last successful communication from ECU. Error: [Errno 113] Connect call failed ('<IP_ADDRESS>', 8899)
2021-08-10 14:29:26 DEBUG (MainThread) [custom_components.apsystems_ecur] Returning {'data_from_cache': True, 'querying': True}
2021-08-10 14:29:26 DEBUG (MainThread) [custom_components.apsystems_ecur] Finished fetching apsystems_ecur data in 4.701 seconds

when I'm querying my ECU-C with 1st python script from https://community.home-assistant.io/t/apsystems-aps-ecu-r-local-inverters-data-pull/260835 I have (i added printout of response from ECU-C) :

root@hasiu:/srv/homeautomation/hass-config# python3 /home/norman/test.py
b'415053313130313637303030323030303100062021081014294180600000461401303301f400a2009c00eb009d00a1009f80600000365801303301f40097007b00ea007c0083008180600000396601303301f4009a007900eb007c0080007e80600000582901303301f40090007800eb00780000000080600000433601303301f40099007600ea0077007b007c80600000587901303301f4009d007400ea0078007a007b454e440a'
{ "Time": "b'20210810142941'", "inv1": "b'806000004614'", "inv1on": "True", "inv1freq": "50.0", "inv1temp": "62", "inv1powerA": "156", "inv1volt": "235", "inv1powerB": "157"}

So my ECU-C is working well ?

Yes, probably. The integration was initially written for the ECU-R (by @ksheumaker) not for the ECU-C. However, I have noticed that a small adjustment of the data conversion could ensure compatibility with the ECU-C. However, I lack the time and Python knowledge to tackle that. Much of the analysis I've already done, maybe someone else can contribute to this. A binascii.hexlify(aStr) function and then trimming the datastring can probably make things compatible. Contrary to the ECU-R the received string of the ECU-C does not use the \x escape sequence.

The latest version already supports the 806 QS1 inverter, we had someone with an ECU-R report that.  We also have code in that shutdown and reopens connections when using the ECU_R_PRO device instead of the ECU_R.  If you take a look at line 115 of APSystemsECUR.py
        if "ECU_R_PRO" in self.firmware:             self.writer.close()             _LOGGER.info(f"Re-connecting to ECU_R_PRO on {self.ipaddr} {self.port}")             self.reader, self.writer = await asyncio.open_connection(self.ipaddr, self.port)
That if statement could easily be altered to include the ECU_C if you let me know what value you get from self.firmware.

I changed that line yesterday and everything was working fine until now.
It's not related to this topic but my ECU-C won't respond anymore on any type of queries :/
I got:

Error getting checksum int from 'ECU Query' data=b''

My debug says :

1st send - sending     : APS1100160001END
1st send - response : b''

Now I have sky full of sun so I won't do a restart. I'll restart ECU later and maybe it want to start work again :/

I am testing with ECU-C. I installed ECU-R integration, I modified lines 115 and 124 of APSystemsECUR.py to this:
if "ECU_R_PRO" in self.firmware or "ECU-C" in self.firmware:
First day it works and start collecting 3 parameters:
sensor.ecu_current_power
sensor.ecu_today_energy
sensor.ecu_lifetime_energy
and:
the stat of querying and cached data.
The next day there was no data at all and I am getting a status of all ecu entities as unavailable.
I enabled debugging and I have this logs:
Traceback (most recent call last):
File "/config/custom_components/apsystems_ecur/APSystemsECUR.py", line 210, in check_ecu_checksum
checksum = int(data[5:9])
ValueError: invalid literal for int() with base 10: b''
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/config/custom_components/apsystems_ecur/init.py", line 72, in update
data = await self.ecu.async_query_ecu()
File "/config/custom_components/apsystems_ecur/APSystemsECUR.py", line 113, in async_query_ecu
self.process_ecu_data()
File "/config/custom_components/apsystems_ecur/APSystemsECUR.py", line 236, in process_ecu_data
self.check_ecu_checksum(data, "ECU Query")
File "/config/custom_components/apsystems_ecur/APSystemsECUR.py", line 213, in check_ecu_checksum
raise APSystemsInvalidData(f"Error getting checksum int from '{cmd}' data={debugdata}")
custom_components.apsystems_ecur.APSystemsECUR.APSystemsInvalidData: Error getting checksum int from 'ECU Query' data=b''
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 187, in _async_refresh
self.data = await self._async_update_data()
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 147, in _async_update_data
return await self.update_method()
File "/config/custom_components/apsystems_ecur/init.py", line 94, in update
raise Exception(f"Error using cached data for more than {self.cache_max} times.")
Exception: Error using cached data for more than 5 times.
2021-08-22 10:00:15 DEBUG (MainThread) [custom_components.apsystems_ecur] Finished fetching apsystems_ecur data in 1.681 seconds
2021-08-22 10:05:15 DEBUG (MainThread) [custom_components.apsystems_ecur] Querying ECU
2021-08-22 10:05:15 INFO (MainThread) [custom_components.apsystems_ecur.APSystemsECUR] Connected to <IP_ADDRESS> 8899
2021-08-22 10:05:15 WARNING (MainThread) [custom_components.apsystems_ecur] Using cached data from last successful communication from ECU. Error: Error getting checksum int from 'ECU Query' data=b''
2021-08-22 10:05:15 ERROR (MainThread) [custom_components.apsystems_ecur] Unexpected error fetching apsystems_ecur data: Error using cached data for more than 5 times.

I am testing with ECU-C. I installed ECU-R integration, I modified lines 115 and 124 of APSystemsECUR.py to this:
if "ECU_R_PRO" in self.firmware or "ECU-C" in self.firmware:
First day it works and start collecting 3 parameters:
sensor.ecu_current_power
sensor.ecu_today_energy
sensor.ecu_lifetime_energy
and:
the stat of querying and cached data.
The next day there was no data at all and I am getting a status of all ecu entities as unavailable.
I enabled debugging and I have this logs:
Traceback (most recent call last):
File "/config/custom_components/apsystems_ecur/APSystemsECUR.py", line 210, in check_ecu_checksum
checksum = int(data[5:9])
ValueError: invalid literal for int() with base 10: b''
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/config/custom_components/apsystems_ecur/init.py", line 72, in update
data = await self.ecu.async_query_ecu()
File "/config/custom_components/apsystems_ecur/APSystemsECUR.py", line 113, in async_query_ecu
self.process_ecu_data()
File "/config/custom_components/apsystems_ecur/APSystemsECUR.py", line 236, in process_ecu_data
self.check_ecu_checksum(data, "ECU Query")
File "/config/custom_components/apsystems_ecur/APSystemsECUR.py", line 213, in check_ecu_checksum
raise APSystemsInvalidData(f"Error getting checksum int from '{cmd}' data={debugdata}")
custom_components.apsystems_ecur.APSystemsECUR.APSystemsInvalidData: Error getting checksum int from 'ECU Query' data=b''
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 187, in _async_refresh
self.data = await self._async_update_data()
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 147, in _async_update_data
return await self.update_method()
File "/config/custom_components/apsystems_ecur/init.py", line 94, in update
raise Exception(f"Error using cached data for more than {self.cache_max} times.")
Exception: Error using cached data for more than 5 times.
2021-08-22 10:00:15 DEBUG (MainThread) [custom_components.apsystems_ecur] Finished fetching apsystems_ecur data in 1.681 seconds
2021-08-22 10:05:15 DEBUG (MainThread) [custom_components.apsystems_ecur] Querying ECU
2021-08-22 10:05:15 INFO (MainThread) [custom_components.apsystems_ecur.APSystemsECUR] Connected to <IP_ADDRESS> 8899
2021-08-22 10:05:15 WARNING (MainThread) [custom_components.apsystems_ecur] Using cached data from last successful communication from ECU. Error: Error getting checksum int from 'ECU Query' data=b''
2021-08-22 10:05:15 ERROR (MainThread) [custom_components.apsystems_ecur] Unexpected error fetching apsystems_ecur data: Error using cached data for more than 5 times.

same story as mine. After couple of hours of normal ECU-C stops responds. I decided to gather data via HTTP which is available on ECU-C. More info at https://community.home-assistant.io/t/apsystems-aps-ecu-r-local-inverters-data-pull/260835/414?u=roman_piatkowski

I made one more test.
I removed ecur integration and restarted HA. Installed once again ecur integration with the modification in APSystemsECUR.py.
I set in the configuration file: scan_interval: 300
I am getting now :
binary_sensor.ecu_querying_enabled - on
binary_sensor.ecu_using_cached_data - on
sensor.ecu_current_power - unknown
sensor.ecu_today_energy - unknown
sensor.ecu_lifetime_energy – unknown
Log:
2021-08-22 10:38:09 DEBUG (MainThread) [custom_components.apsystems_ecur] Querying ECU
2021-08-22 10:38:24 INFO (MainThread) [custom_components.apsystems_ecur.APSystemsECUR] Connected to <IP_ADDRESS> 8899
2021-08-22 10:38:24 WARNING (MainThread) [custom_components.apsystems_ecur] Using cached data from last successful communication from ECU. Error: Error getting checksum int from 'ECU Query' data=b''
2021-08-22 10:38:24 DEBUG (MainThread) [custom_components.apsystems_ecur] Returning {'data_from_cache': True, 'querying': True}
2021-08-22 10:38:24 DEBUG (MainThread) [custom_components.apsystems_ecur] Finished fetching apsystems_ecur data in 15.305 seconds

Problem is in ECU-C not in integration or HA. It stops to respond after period of time. You must restart ECU-C in order to start work it again.
In my version of extension you got responses all time :) You don't have signal strength for inverters coz' http website dosn't provide this kind of data.
In the future we will be able to choose the version we want to use (I strongly believe in that :)) - socket 8899 version or http version.

You are right @normanp2pl. Although the ECU-C also has a web interface and your solution works fine, it would complete the integration if the 8899 method also works for the ECU-C. Temperature and signal strength data are then added as an advantage. How do you feel about my findings in this thread about the second and third responses to the query strings? Contrary to the ECU-R the received string of the ECU-C does not use the \x escape sequence.

Hi @HAEdwin,
I'm using my own modified version of component since August 10, 2021 and it's works fine. I don't use 8899 method anymore.
I think that "\x escape sequence" is not a problem here. It's firmware problem in ECU-C - after couple of hours communication doesn't work anymore :/

I have the same issue as @normanp2pl . I did explain in: https://community.home-assistant.io/t/apsystems-sensor-for-home-assistant-not-visible/370041/20. My ECU-C stops after the night and doesn't come up. Interval in script is now 60. Should I change it in 300?  I was really impressed it al works the first time.  Really great job ;-)

I don't have an ECU C to test with, but if the ECU_R_PRO behavior works better for the C devices as well, I can certainly make it do that for both the C and R_PRO.  Can you provide me the exact text from the firmware version?  You should be able to see that in the new integration under "Devices > ECU XXXXX". Here's mine for an example:

When you add the integration you can adjust the interval, if it converted it from your configuration.yaml whatever scan_interval was will be migrated over.  If you need to adjust the interval you'll have to remove the integration and re-add it.  I will attempt to add a reconfiguration option in an upcoming release.

I released a new beta version 1.1.2 that changes the default interval to 300 seconds, and makes the ECU-C devices take the same code path as ECU_R_PROs and close the socket, sleep for a second and re-open when we do our 3 queries to get all the data required for the integration.
Hopefully this will make it more stable for ECU-C users.

The integration has worked for one day. Next day all integrations where off.  The firmware version of the ECU-C is: C1.2.0
Did upload a picture  of the firmware version on the HA forum:
https://community.home-assistant.io/t/apsystems-sensor-for-home-assistant-not-visible/370041/24
In HA it's not working anymore And i can't get it to fix. HA recently updated tot v.2022.2. I will try your beta version and review it ;-). Thanks again for this hard work @ksheumaker

Did make a phonecall to APSystems here in the netherlands for which firmware my device should have. There are more firmware versions available for APSystem ECU's:
If I write down correct, it should be like this:

ECU-B latest firmware: v1.2.19 (Cheaper ECU-R without a Ethernetport and limited for 4 solarpanels)
ECU-R latest firmware 1.2.19 (for models with serial ending 2160) (two antenna's)
ECU-R latest firmware 2.0.4 (for models with serial ending 2162) (one antenna)
ECU-C latest firmware C.1.2.0 (more models available. Older version has no powerbutton. Firmware updates itself when connected)
There are no ECU-R Pro's if I been wel informed. Is this helpful for making things more compatible?

Thanks for the info, very interesting.
I think people with ECU_R_PRO are showing up with the 2.0.4 firmware.  We are just pulling the firmware from what the device returns, so they might not call it a "PRO", but that's what the device reports.
I assumed the PRO with 2.0.4 firmware was a newer model, but they told you it's an older one?
For reference, my ECU-R is on the 1.2.19 firmware and was installed about a year and half ago.  The device reports itself as ECU_R_1.2.19

Although the ECU-R and ECU-R-PRO look exactly the same, they hold different firmware.
ECU-R

ECU-R-Pro

Difference is the certification for Sunspec modbus. We've seen that behaviours are very different between these two versions.

ECU-R-Pro is somewhere at firmware ECU_R_PRO_2.0.1016

Since the ECU-C does host it's own web-page that has all the production information creating a different integration that scrapes the web page might be more reliable for those devices.  My device doesn't have a webpage, so this reverse engineered protocol is all I've got.
Since the webpage is meant to be used by the customer (where this port we are connecting to clearly isn't) maybe APSsystems has put more effort in it being reliable and stable.

The ECU-R-Pro firmware also has it's own webpage where you can configure the RS485 modbus. It should not take long to make use of that although there is no serial modbus add-on available for HA yet. Look here for more info: https://gathering.tweakers.net/forum/list_messages/2032302/last

cmos6502 writes:
I have a still working integration with the ecu-r-pro. Has been running for a few days.

I'm querying the lan port, not the wifi.
In addition, I have my own 'version' of the sync_query in an async setup.
and I have set a start/stop query on the sun status
query per 300 seconds

Maybe I switched this two, was a litte bit confusing conversation. The diffence between this two was the antenna. The newer one has two antenna's i believe.   For the ECU-R there could be 2 diffent firmware versions (old and new), for the ECU-C only one and for the ECU-B als one.

I removed my comments because they where off topic, sorry about that,

Multiple changes were done in 1.1.2 to hopefully increase stability with ECU-C and ECU_R_PRO devices.  Please update to the latest version and if you still have issues please open a new github issue.


Custom clean method?

Is it possible to create a custom clean method?
For example, my use case would be for a method that would round input values from (#.###...) to a set degree of precision (#.#)

I'm looking for a way to this as well. Any leads @j20 ?

@attackant Not yet. Would be a nice feature to have though.

Duplicate of #406

@attackant I found a way to achieve this based on the linked issue #406  Add this within any of your simple schema properties to modify the value before it is saved.
    autoValue: function () {
      if (this.isSet && Meteor.isServer) {
        return this.value + 100;
      }
    },

It's worth mentioning that unfortunately, unlike clean, this doesn't run before validating the data. For instance, if your schema expects an integer, you want to round the input, and a decimal is provided as the input then a validation error "Must be an integer" will be shown, instead of the rounding occurring before validation to avoid this. So it doesn't work in all cases. Still would be better have to a custom clean method.

@j20 thank you for the follow up.

This worked for me:
var _originalClean = SomeSchema.clean;
SomeSchema.clean = function() {
  var doc = arguments[0];
  var options = arguments[1];
  doc.paramToBeCleaned = doc.paramToBeCleaned + 100;
  _originalClean.call(this, doc, options);
};


Vision Rendering errors on drawn light maps

Have found another problem ....
I use levels (but this is imho no problem here) and the option to set with an drawing the light levels/behavor in an building.
Have in the floor windows, on this place i have not draw the shadow map - so it looks it come light from the windows in the building.
This works nice ...
Have creatures with nightvision ... here i have set the chrome color to an red tone ...
all is working nice .. except the range calculation IF(this is now speculation) an different light level is set with the drawing in the LOS of the creature AND another Token is in this LOS present.
To better visual clarify this - i have 2 pictures ....
Have after the screenshot drawn additional help lines here ...
Blue the place of the non shadow area of the light map direct on the window ...
Red the expected end of view range of the Token - but it is larger
https://drive.google.com/file/d/1kYRW31XVhOckItUADMmCXWjYati4LJ8o/view?usp=sharing
https://drive.google.com/file/d/1N597I2cGXzNrDo4Crf5xtuQRZJT7UGO0/view?usp=sharing
Regards

Could you export the scene and share it with me (I don't need the assets)? It's hard to tell what the problem is by looking at the screenshots.

have send you an eMail ;)

Sight rays lose energy while traveling through sight limited areas. So the rays do not lose energy while traveling through the indentation you created (because outside there's not limit set). In other words: the sight rays travel exactly a distance of 20 feet inside the drawing, but exit and re-enter at the indentation.

mhh - this is for "me" (as i do proffesional raytracing) understandable .... but should not work like this in an setting where you define the range by an "natural sight range" ... as this have only the range in question ... not the "energy of an photon" ....

I'm not sure what you're suggestion. Without casting rays token standing outside of sight limited areas could see inside the area completely unrestricted. I think the concept of energy makes sense: like in real life fog absorb energy of a photon for each unit of distance it travels, until barley any energy is left.
The sight limit isn't darkvision range. Sight Limit limits the line-of-sight polygon, which is infinite normally. Your tokens have still 60 feet darkvision, but the line-of-sight range is reduced by the sight limits.

ahh - o.k. - sorry - i try to better explain....
mhh .....
In my scene - the sight of this room is limited by an fog .... the fog is in the bright parts on the windows too ... so "in real", the bright part would not extend any range, you only need not darkvision to see here ... as the sight limiting fog is in the whole area ... it is only it have dark aeras and bright aeras - but the fog dont change at all ... why should the range change ?

You could place another drawing without indentations under the drawing and set the Sight Limit of it to 20 feet as well. This should to it.

ahhh - i see .. my fault .. in the "bright" aearas - it is no sight limit, as it cancels the whole drawing out (and so the fog is canceled out here too..) ..... thanks ;)

o.k. - after testing - dont work .... only from the upper drawing the settings are used ....

Make sure the Z-Index of your original drawing is higher than the Z-Index of the other drawing below it:

It does work:

o.k. - it works - THANKS
(but the handling of the different drawings on the same location is a PITA .... ;) =
Regards

There's no way of knowing that you want the indentation to be handled differently without placing another drawing. That said, the problem here is that I need to come up with a technique that handles the doors and windows automatically to simulate light leaking in out or out without placing light sources. I ready thought about it a lot, but it's a very difficult problem to solve (and it needs to intuitive to the user).


cmake: Incorrect __float128 detection

Current develop branch uses the following CMake code to detect presence of  __float128 types: https://github.com/boostorg/charconv/blob/100473b1dc3c3dfff0513e584c8f447824c7e34c/CMakeLists.txt#L23
But check_cxx_source_compiles function takes code as the first argument, and, as far as I cant tell, cannot read the source from file. So, it tries to compile config/has_float128.cpp as C++ code, and, of course, fails. I'm getting the following error in CMakeFiles/CMakeConfigureLog.yaml:
Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_38738/fast
/usr/bin/gmake  -f CMakeFiles/cmTC_38738.dir/build.make CMakeFiles/cmTC_38738.dir/build
gmake[1]: Entering directory '/usr/src/boost/bld/CMakeFiles/CMakeScratch/TryCompile-oiusM4'
Building CXX object CMakeFiles/cmTC_38738.dir/src.cxx.o
/usr/bin/c++ -DQUADMATH_FOUND   -o CMakeFiles/cmTC_38738.dir/src.cxx.o -c /usr/src/boost/bld/CMakeFiles/CMakeScratch/TryCompile-oiusM4/src.cxx
/usr/src/boost/bld/CMakeFiles/CMakeScratch/TryCompile-oiusM4/src.cxx:1:1: error: 'config' does not name a type
    1 | config/has_float128.cpp
      | ^~~~~~
gmake[1]: *** [CMakeFiles/cmTC_38738.dir/build.make:78: CMakeFiles/cmTC_38738.dir/src.cxx.o] Error 1
gmake[1]: Leaving directory '/usr/src/boost/bld/CMakeFiles/CMakeScratch/TryCompile-oiusM4'
gmake: *** [Makefile:127: cmTC_38738/fast] Error 2

Indeed /usr/src/boost/bld/CMakeFiles/CMakeScratch/TryCompile-oiusM4/src.cxx contains config/has_float128.cpp literally.
I'm using cmake 3.29.1.

I think something like this should be better match for what is written in Jamfile
try_compile(QUADMATH_FOUND
            SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/config/has_float128.cpp
            LINK_LIBRARIES quadmath)

I do like the try_compile option, but since it requires CMake 3.25 I think it's far too new for a C++11 library. I'll try pasting in the code from config/has_float128.cpp.

try_compile doesn't require 3.25, only the newer signatures do.

try_compile doesn't require 3.25, only the newer signatures do.

My mistake. I still think check_cxx_source_runs is preferable here because systems like Alpine linux provide the header <quadmath.h> but not the compiled library. See: https://github.com/boostorg/charconv/issues/176

Yes of course. I'm not saying this needs to be changed.
But you should know that check_cxx_source_compiles and check_cxx_source_runs are just wrappers over try_compile and try_run.
https://github.com/Kitware/CMake/blob/master/Modules/CheckCXXSourceCompiles.cmake
https://github.com/Kitware/CMake/blob/master/Modules/Internal/CheckSourceCompiles.cmake
https://github.com/Kitware/CMake/blob/master/Modules/CheckCXXSourceRuns.cmake
https://github.com/Kitware/CMake/blob/master/Modules/Internal/CheckSourceRuns.cmake


Animate screen transition like Golvelious does.

SCREEN SCROLL custom instruction shows promise, but we need to load the new data in the screen somehow (reading from resource address does not work)
We could copy the current and the next room to RAM and that way we could copy from RAM to VRAM.
Not sure how to find out unused RAM from basic, or maybe create an array and just use it using POKE?

Screencast from 01-23-2024 09:21:01 PM.webm
This code does it, screen scroll uses the joystick direction, then we add the new line.
FOR I=0 TO 20
  SCREEN SCROLL 1
  CMD RAMTOVRAM AR+&H20*I, &H1800, &H20
NEXT I

We should delete the last row first to not scroll into the item area, or do some other trick (it will break on side scroll as well)
We might need to write it by hand

This other option is massively slower
12310 FOR I=0 TO 20
12320  FOR J=19 TO 0 STEP -1
12330   FOR K=0 TO 3
12340    T=VPEEK(&H1800+J*32+K):VPOKE &H1800+(J+1)*32+K, T
12350    CMD RAMTOVRAM AR+&H20*I, &H1800, &H20
12360   NEXT K
12370  NEXT J
12380 NEXT I


changing the type of task queue from queue<function<void()>> to queue<packaged_task<void()>>

the advantage will be that:

in enqueue() method you no longer need to make a shared_ptr of packaged_task,
tasks.emplace(task{ (*task)(); });  === ==> tasks.emplace(std::move(task))

The change works fine on g++ 6.2.0, so I wonder if current implementation is due to compatibility back then?

Wow, this really works! I would have though that a packaged_task<int()> couldn't be moved into a packaged_task<void()>. Are there any disadvantages?

the advantage will be that:

in enqueue() method you no longer need to make a shared_ptr of packaged_task,
tasks.emplace(task{ (*task)(); });  === ==> tasks.emplace(std::move(task))

The change works fine on g++ 6.2.0, so I wonder if current implementation is due to compatibility back then?

msvc will not compile... although it is a msvc bug.

@littlebirds Unfortunately this implies task and tasks should be the same type. This means users will be able to enqueue callables with the same signature only. In the original implementation one can do:
pool.enqueue([](int a){return a*42;});
pool.enqueue([](string s){return "Hello"+s;});

In the proposed implementation it will be impossible since all the enqueueable should be the same signature (return and parameters type).


[#55] Add a general documentation

Close #55

What happened 👀

[x] Review README.md structure
[x] Add a diagram
[x] Add the steps to deploy the project (starter kit)
[x] Review variable descriptions

Insight 📝
The main idea was for me to reduce the need to ask questions on slack when using this template for the first time! :) This way we can save time/effort for everyone. ;-)
The diagram is modified and stored in the Infrastructure-template folder in our Lucid account!
Proof Of Work 📹
Main Template README.md

README.md of the generated project:

The diagram should be in SVG format :D

Did you miss this comment? @malparty
Please update it, then I'll merge this PR 🙇

@hoangmirs thanks for the reminder! :-)
791ba29 ✅


3.0: Implement DeleteImage API

Notes
This patch implements the DeleteImage API. We create an ImageBuilder class with the given image id and retrieve the associated image or stack, then we delete the image and, in case we only had the stack, we retrieve it with another ImageBuilder object (the stack is initialized only once, and if we tried to retrieve it after calling the delete operation we might be unable to describe it as it might have already transitioned to the DELETE_COMPLETE state).
One thing to note here is that the ImageBuilder.delete() call might fail raising an ImageBuilderActionError, which is surfaced to the caller of the DeleteImage API as a 500 with the message: "Unexpected fatal exception. Please look at the application logs for details on the encountered failure."
Tests
Unit tests
Delete with a stack
curl --location --request DELETE '${endpoint_url}/v3/images/custom/test1?region=us-east-1'```
{
  "image": {
    "cloudformationStackArn": ${cfn_arn}",
    "cloudformationStackStatus": "DELETE_IN_PROGRESS",
    "imageBuildStatus": "DELETE_IN_PROGRESS",
    "imageId": "test1",
    "region": "us-east-1",
    "version": "3.0.0"
  }
}

Notes for the reviewer
I would like to solicit feedback on the following points:

In the pcluster_api.py implementation we get the image/stack after calling the delete operation, I am not sure this is correct. Among other things, the stack deletion is asynchronous, and so the stack might or might not have already reached the DELETE_COMPLETE status, in which case it won't be visible in the describe, thus leading to a NonExistingStackError.
As mentioned above, the ImageBuilder.delete() wraps, among other exceptions, AWSClientError in ImageBuilderActionError exceptions. I think that this is not what we want to happen, for example, in cases where we have a REQUEST_LIMIT_EXCEEDED in one of the EC2/CloudFormation calls, which I believe we would like to surface as a LimitExceededException. I see that in https://github.com/aws/aws-parallelcluster/pull/2776 for the CreateCluster we have wrapped these exceptions in a InternalServiceException, with a message that at least surfaces the message of the underlying exception, however I still have some questions regrading the error code (InternalServiceException are 500s). UPDATE: new approach explained here

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

The new revision has a new way to handle errors, namely it uses subclasses of ImageBuilder errors to propagate particular error classes like LimitExceeded, etc. The three approaches we thought of were:

Directly propagate the AWSClientError
Add an error code field to the ImageBulider exceptions
Created subclasses of the ImageBuilder exceptions

We went with the third option (cleaner because it uses the type system instead of an optional string, and the error message is a concept associated more with AWS errors, which are not the only source of this "distinction" between error types... for example, we could have a BadRequest exception because the customer tries to deletee an image that is shared or is used by some instances)

I should check with @yuleiwan, but it could be possible that the get of image/stack is returning a cached version. If it's not that case, I think that your point makes sense and those resources should be retrieved before calling the delete.

EDIT
I confirm that we are getting the image/stack before calling the actual deregistration/delete of the image/stack, e.g.
in AWSApi.instance().ec2.deregister_image(self.image.id) , self.image retrieves the image before calling deregister_image, so when building ImageBuilderImageInfo a cached version is used. Same for stack. Nevertheless we can improve the code.

I think that the patch handles this. In the stack case I have a _get_cloud_formation_status_after_deletion function that creates an ImageBuilder object and tries to get the stack after the deletion, to get the up to date CloudFormation status. For the case where only the image was present, I simply set the state to DELETE_COMPLETE. I also get the image/stack before the deletion only to get the general information (image.version, stack.version, etc.) before deleting the image/stack.
Above I had linked to the pcluster_api.py implementation, that initializes an ImageBuilder object after the deletion and tries to get the image and then the stack, eventually throwing an error if it does not find any... as I have written above, I think that this is not what we want to do, as in the case the deletion is fast, we would throw an error even in case of a successful deletion.

we set the old image or stack state in the response (i.e. the one they had before the deletion)
correct, while the status of the PCLuster image is set to DELETE_IN_PROGRESS. Let's sync on this if doesn't sound reasonable


PIP only package naming?

Should PIP only packages be named XXX-pip or python-XXX-pip? Both variants are in the rosdistro, so it is unclear to me what the standard is.

I would suggest that we standardize to use python-XXX-pip. This will make it much clearer when a similar debian rule appears side by side for sorting.
To that end it should probably be python3-XXX-pip since all new platforms will be on python3 now.

Fixed by #23836


Add links to navbar for absences and tardies

Who is this PR for?
K8 principals and asst. principals
What problem does this PR fix?
Let folks see the absences and tardies dashboards on their own.
What does this PR do?
Updates navbar links.
Screenshot (if adding a client-side feature)
school leader

classroom teacher

districtwide (access for school through admin page)

selfie


Idea / Suggestion

Idea / Suggestion

For 1000 reincarnations, it would be nice if there was a function to ascend and reincarnate as soon as HC is accumulated.

It would be nice if "AutoSwitch season" allows you to choose to lock to any season after getting all the upgrades.

For "AutoSpellCast" it would be nice to have the ability to hit "Gambler's Fever Dreams" repeatedly in order to gain chant count.

It would be great if the "Stock Market" and "Garden" could be automated.

@E1sterrier  Thanks for suggentions.

Duplicate of #17
I made an issue #48
I think no point in chanting anything other than "Hand of Fate",  but what's the benefit of random chanting?
Automatic Garden is duplicate of #16 .
Automatic Stock will not implement.  See #23 .

Since I don't feel the need for this feature, I will close this Issue.
If you would like to write an explanation for me, please re-open this issue.


Problem deploying to Heroku

Hello. I tryied to deploy the app to heroku, and it start OK
WebSSH2 service listening on <IP_ADDRESS>:2222
And when try to make a request it throws this error:
Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
Thanks for any help.

After a research I find the problem. The index.js must accept the port given by heroku, so I change the code to this:
port: process.env.PORT
And that way is fully functional.


adjust frontend error handling, add client/server mismatch middleware

Testing this is rather simple!

Navigate to the home, new, or edit page.
Open session storage, and change the version to anything that isn't the current version.
Trigger a save.
The error should appear, explaining what's wrong.

The logic is also quite simple.

The template function has been updated to include a script that sets the homebrewery version into the session storage on page load.
Whenever an http call is made to the API, a superagent middleware pulls the version out of session storage, and places it on a header called Homebrewery-Version.
The API now has a middleware that checks the version in that header against the server's version. If they don't match, it returns a 412 error.

I checked all the http response codes and couldn't find one that matched exactly, but 412 seemed reasonable based off its definition.

At this time this is not complete, I still need to finish the brews page and metadata editor's deletion error handling.

@calculuschild would you mind doing a quick check of this and sharing your thoughts before I wrap it up?

@calculuschild this is ready for a full review!

My own coverage requirements got me. I think it's just because I added another line. I'll increase the threshold tomorrow.


Add publish to storage during function app deployment

Added a PowerShell script to upload files to storage using azcopy.
Made a couple of changes so that the app will deploy and be fully functional without modification:

Changed Deploy to Azure buttons to use deploy.azure.com and removed hardcoded repo URL and branch so it'll deploy from the fork/branch from which the button was clicked. This may break the deploy button on function library. @jefking
Removed hardcoded link to the play page and replaced with dynamically generated one.
Added a route to the proxy at the root so link displayed after deployment leads directly to home page.

Removed instructions on how to upload to blob storage.

Test out the button on this branch:
https://github.com/anthonychu/TugOfWar-FunctionsDemo/tree/add-storage-publish

@anthonychu thank you for the updates! This works out great and simplified the deployment tremendously.


Implement lower and upper camelize - #15

Closes #15
Discussion at https://discourse.dry-rb.org/t/dry-inflector-lower-camel-case-support/408/6
require "dry/inflector"

inflector = Dry::Inflector.new

# We will favor this interface at Dry::Inflector
inflector.camelize_upper("first_name") # => "FirstName"
inflector.camelize_lower("first_name") # => "firstName"

# But we will be compatible with ActiveSupport and Inflecto
inflector.camelize("first_name") # => "FirstName"
inflector.camelize("first_name", true) # => "FirstName"
inflector.camelize("first_name", false) # => "firstName"

# And add the @pabloh suggestions of using key word arguments
inflector.camelize("first_name", lower: true) # => "firstName"
inflector.camelize("first_name", lower: false) # => "FirstName"

inflector.camelize("first_name", upper: true) # => "FirstName"
inflector.camelize("first_name", upper: false) # => "firstName"

Before merge, see my last comments at https://discourse.dry-rb.org/t/dry-inflector-lower-camel-case-support/408/8

Can we merge?

Following ActiveSupport (dry-* != AS), and inflecto, which is unmaintained since 5 years now. A new library should ease the transition, but not replicate the same API/features/approach.

Yes. That's why I suggested us not to stick to #camelize which is how AS and inflecto was doing.
Instead, use camelize_upper and camelize_lower which, IMHO, is way clearer.

The lack of a transformation API. If you look closer: #camelize_lower means to apply two transformations: camelization + downcasing the first letter. What if we introduce a #transform method where it's possible to apply all the combinations? This would leave dry-inflector really simple, and developers can build their own strategies. See http://www.rubydoc.info/gems/transproc/Transproc/ or https://github.com/hanami/utils/blob/master/lib/hanami/utils/string.rb#L108-L134 as examples.

Completely agree with you. And @mbj has commented something similar at https://github.com/Ptico/flexus/issues/3#issuecomment-341751482
I just haven't had the expertise nor the time to do this at once. But if you think is appropriate, we can hold on this PR and improve the discussion toward a better and broader solution.
I'm not used to transproc but I can surely dig into the documentation and with your help and some time I can code this.

If you folks want to introduce these two new methods (#camelize_lower and #camelize_upper), can we leave #camelize as it was? Maybe as alias of #camelize_upper?

This wouldn't solve the problem of people coming from AS using the lower camelization argument of it. But, we can just opt to not support this. And I would like it!
My actual personal opinion and will is to throw away everything from behind and just focus on providing the best api and code possible. But I know this is too radical in most cases.

From this PR #camelize gets overcomplicated: three boolean flags for one method?!

As said, I'm not interested in it at all. I think is something that will be used just to ease transition.
If easyness is the goal, I tried to provide all possible interfaces that were suggested at the discussions. (eg: with argument, with keyword argument upper and lower).

Also, #camelize now is marked as @api private, is this intentional? Are we discouraging people from using it in favor of the new methods?

Yes. I don't if this is the proper way to do this. What do you suggest?

What if we introduce a #transform method where it's possible to apply all the combinations?

Lower camelize is a very common method, especially for apps which communicate with frontend a lot, so it's worth to have it, like we have many other one-line methods.

What if we introduce a #transform method where it's possible to apply all the combinations?

And we came to this again :) I think it worth to create some PoC, let me try

I've played a bit with very naïve implementation of Markus's idea https://gist.github.com/Ptico/43835106350847a4c94aff26c7d12ec0
On the first glance it doesn't look very helpful and worthwhile, but it's a very first take and I'll think how to improve it.

@Ptico sorry for being late at responding. I think I'll be able to take a closer look by saturday.

@abinoam

Yes. I don't know if this is the proper way to do this. What do you suggest?

That is the proper way 😉 , I was asking about the intent of making that private API.

@abinoam @Ptico Still on #camelize as private API: that won't ease the migration from AS, where #camelize is public API.
My suggestion is to have
def camelize_lower
end

def camelize_upper
end

alias camelize camelize_upper

or
# as it is now
def camelize
end

# which implements camelize_lower
def camelcase
end

@Ptico Regarding the idea of the gist InternalString as new type to provide monkey-patch free string transformations was the same intent of Hanami::Utils::String.
I regret that choice.
Introducing a new type, which is not String led down to subtle bugs. A few examples. if that string is passed in Rack env, a middleware/server blows up (see https://github.com/hanami/controller/pull/100). Each time you'll need to use a case statement, you must do:
case foo
when String, Dry::Inflector::InternalString
  # ...
end

Same thing is true for the entire Ruby ecosystem that checks against types:
def call(string)
  return unless string.is_a?(String)
  # ...
end

Finally, we could think to make InternalString to inherit from String, but this will open to other problems: https://tenderlovemaking.com/2014/06/02/yagni-methods-are-killing-me.html

For this reason, we're moving all the string transformations of Hanami::Utils::String from instance methods to class methods. The goal for 2.0 is to remove it as a type (instantiable class) and to make it a module that provides string functions.
Given my painful experience with Hanami strings, I'd not take that path again. 😄

Hi @jodosha,
So we should keep #camelize public, I think you're right and agree with that.
Option 1
And we could just alias it to #camelize_upper
Option 2
But, if we just alias it to #camelize_upper we won't get complete AS compatibility, as its signature now is:
camelize(term, uppercase_first_letter = true)

http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-camelize
A minimum implementation could be:
def camelize(input, uppercase_1st_letter = true)
  if uppercase_1st_letter
    camelize_upper(input)
  else
    camelize_lower(input)
  end
end

Option 3
That's what put us back again to what is on the PR:
def camelize(input, uppercase_1st_letter = true, upper: true, lower: false)
  if !upper || !uppercase_1st_letter || lower
    camelize_lower(input)
  else
    camelize_upper(input)
  end
end

Which would satisfy @pabloh 's request at https://github.com/Ptico/flexus/issues/3
By the way, looking again at the code, I would resort the conditions.
  if lower ||  !upper || !uppercase_1st_letter
    camelize_lower(input)

Opinions?
Although I still don't see much problem with Option 3 and I prefer that, I'm ok with Option 1 or 2.
What should we do? Any suggestions more? @jodosha @Ptico @pabloh

I did suggest def camelize(input, upper: false) as a replacement for AS clunky API, but I'm OK to go with Option 1 since is the simplest one.
I don't think is that important to support AS uppercase_1st_letter parameter, is an obscure feature that not many now about and is not a good design (at least compared to using a keyword argument). I think Options 2 and 3 make the API more complex with not much gain.

@jodosha the idea here is not to introduce new type, it's an internal representation of parsed string for later transformations

So, this is just another way to transform strings, but looks like it will not work for us: too much boilerplate for small part of job.

It should be possible to break down all the inflection methods into smaller "functions", and then have a way of composing them, we could do it either via transproc or a custom, built-in solution. What's important is to have the right primitives that are composable. ie a generic function which receives a string, letter indices and another function which will be applied to letters under specified indices. Then camelize finds which letters should be upcased, and uses generic "letter transformation function". This way we should have a very flexible system with 0 duplication, and composability will be a HUGE benefit, because people will be able to compose their own inflections very easily.

Sorry for late responses. My kids are on vacation (2 and 9 years old).  YET!
I'll let the api definition up to you (all). I'll not vote anymore on that.
I'm a little confused what should be the best way and I think you're more experienced than me on this.
Just tell me what I should do and I'll rebase the PR.
The internal implementation details, I think we could let them for another PR if the discussion gets too long (I'm talking about the part about using transformations, etc)

@abinoam, @solnic
Since we don't have as of today 2 different inflection to compose and get a lower camelize method, maybe we could do a straight forward implementation in order to have this functionality available ASAP, and then re-implement the same API using composition when that is possible?.

@pabloh yeah whatever works for now is fine :)

Found myself needing this today. @solnic Any chance of merging this?

@ianks we need consensus on API. @abinoam @jodosha I'm ok with the current implementation. If you both too, I'll merge

I think explicitly using camelize_lower and camelize_upper is a much more readable API. I would go so far as to say that I would support deprecating the bare form of camelize.

I'm in favour of #camelize_lower and #camelize_upper.
I'm happy for #camelize to remain as an alias for #camelize_upper
However, I am against adding #camelize(str, bool) and #camelize(str, lower: bool) and #camelize(str, upper: bool) signatures (as mentioned in the PR description) purely for inflecto/active_support compatibility. I don't think it's worth taking on this baggage with this project being so young.

I'm with @timriley, 👎 for boolean flags.

Great I can't agree more. I've updated PR and will merge it soon. Thanks @abinoam for his work and all participants for this great discussions.
<3 <3 <3

Great to see the discussion wake up. As I said before, I'll let you all decide.
I would like to apologize myself for not being so present as before.
I'm reorganizing my schedules and I hope I can contribute more soon.
PS: @solnic, I even tried to study monads to see what the .... is about! 😉
PS2: Everytime I begin to refactor some code of mine I catch myself trying to "reinvent" things that I saw in hanami, rom, dry, trailblazer and adjacencies!


image not found when installed via SwiftPM

Split out from #4

Just tried adding GEOSwiftMapKit to my Xcode iOS project via Xcode SwiftPM integration, and it failed when I try to run:
dyld: Library not loaded: @rpath/libgeos.dylib
  Referenced from: /private/var/containers/Bundle/Application/[REDACTED]/[REDACTED].app/[REDACTED]
  Reason: image not found
(lldb)

Versions:

Those are figured out by Swift PM itself.
And it works charmingly on simulator, but only leaves such an error on application starting when tested on an actual device.

@laosb We've seen a similar issue that was resolved by explicitly adding geos as a dependency. If that doesn't work for you, can you share a sample project that demonstrates this issue?

@laosb the other issue I mentioned seems to have been resolved by Xcode 11.4. Can you let me know if you're still experiencing this issue?

@laosb since I haven't heard back from you, I'm going to close this issue. Feel free to reopen it if you think this is still a problem.


Change callout for notes #28

Just out of curiosity: Where is this syntax documented? It's not supported by GFM.

Just out of curiosity: Where is this syntax documented? It's not supported by GFM.

https://just-the-docs.com/

Thanks. Too bad it doesn't support the GFM syntax.
But you need to configure the colors for callouts, don't you? It doesn't have any effect yet.

But you need to configure the colors for callouts, don't you? It doesn't have any effect yet.

It is now configured https://github.com/metafacture/metafacture-documentation/commit/6c1659c26d68df1c06e9e22e38487b7a6d99478d


No android folder

After installing 0.10.5 i have found that there is no android folder that caused crash while building app. So i downgraded to 0.10.4 and it worked, have no idea how this happenned

@aybb   I had the same problem, for some reason the NPM module doesn't have the android folder, in which raises this error when the gradlew compilation tries to find the linked module folder (in which not exists).
You can fix it by changing your package.json pointing directly to this commit (temporarily whilst they fix it on NPM).
Something like:
"dependencies": {
    "react-native-sound": "https://github.com/zmxv/react-native-sound#fd89265133963b6914d292bdc9c7f8478440f9ba",
}

same me

is this going to be fixed anytime soon? I have same problem with 0.10.8

same here

Had the same problem, I did "react-native link" and thought that it was weird that it didn't link to Android.
@PauloLuan 's temporary fix did it

0.10.9 should address this issue, which I just released.

React-Native link this time worked, except it didn't put the link on build.gradle ( compile project("react-native-sound") );
Besides that, settings.gradle and MainApplication.java did it right.
This in version 0.10.9


jsdom 5.0.1 throws SyntaxError on my node.js version 0.12.2

require('jsdom') causes SyntaxError in my environment.
node_modules/jsdom/lib/jsdom.js:55
    throw new RangeError(`Invalid parsingMode option ${JSON.stringify(options.
                         ^
SyntaxError: Unexpected token ILLEGAL
    at exports.runInThisContext (vm.js:73:16)
    at Module._compile (module.js:443:25)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)

I think my nodes.js cannot handle back-tick "`".
I ran node.js with --harmony option, but does not work..
Please tell me if any probrem on my environment.
environment
PC: Mac OS X
node version: v0.12.2
jsdom version: 5.0.1

See README.

Oh sorry, I missed it.
Thank you very much!

I was wondering since io.js and node.js will be merged together under the "open, neutral, Node.js Foundation", at what point will jsdom function on node.js again?

@japrescott when there is a Node.js release based on the io.js codebase.


build.info: make sure to generate crypto objects obj_dat.h etc. first

This is supposed to fix #19087, as discussed there.

You need to do a bit more work.  The "DEPEND[]" array gets those header files built in the build tree, but the targets in Configurations/unix-Makefile.tmpl are still ${SRCDIR}/....  You will have to ensure that those four files are built in the built tree,
This is absolutely important when you build outside of the source directory tree.

Ah, I can try at least removing $(SRCDIR)/ from the Makefile...

Well, the resulting Makefile ends up in the build tree, if that tells you something.
You should try this:
$ git clone https://github.com/openssl/openssl openssl-master-src
$ mkdir openssl-master-build                                         # <--- this is alongside the source directory!
$ cd openssl-master-build
$ ../openssl-master-src/Configure

Voilà, you've set up a build directory outside of the source directory

Thanks for the example.
I'm aware of the distinction between build dir and source dir, though I never made use of that .
Adapting the directory references was straightforward.
Yet I fear that various further tweaks may be needed...

Yeah, now there is at least an issue with fips-checksums.
So I'll revert (the core of) commit 89c39bd8f.


Switch to async zeroconf / AsyncServiceBrowser

Fix a sleep in the sensor platform that was blocking
the event loop and causing instability

Closes #622

@AlexxIT do you mind checking this PR ?
Thank you in advance,
Simone

@chemelli74 I am developing a new version of the component with completely redesigned code.

superseded by https://github.com/AlexxIT/SonoffLAN/issues/751

@bdraco Your version of zeroconf no longer generates ServiceStateChange.Removed events. I checked history.
v0.31.0 was latest version with support this event :(

@AlexxIT Its definitely still supported and just verified we are fixing them with a homekit device.
https://github.com/jstasiak/python-zeroconf/blob/master/zeroconf/_services/browser.py#L343
https://github.com/jstasiak/python-zeroconf/blob/master/zeroconf/_services/__init__.py#L38
https://github.com/jstasiak/python-zeroconf/blob/master/zeroconf/_services/__init__.py#L34
Feel free to message me on Home Assistant discord as bdraco#6479 if you need some help with it.

Can you try testing with https://github.com/jstasiak/python-zeroconf/blob/master/examples/async_browser.py? You'll need to adjust the type here https://github.com/jstasiak/python-zeroconf/blob/master/examples/async_browser.py#L56
Service HASS Bridge 07CEEE._hap._tcp.local. of type _hap._tcp.local. state changed: ServiceStateChange.Removed


Feature request - Mod pools for tree generator

Example:
chaining Herald of Ice build:
I want ~200% damage in a combination of area, cold, and elemental.  Currently I need to play with various levels of the 3 mods until a tree is generated that I am okay with(to start tweaking) such as 100% elemental, 50% cold, 50% area.  It would be nice to create a "mod group" and then say I want 200% damage and then select those 3 types.  Ideally multiple mod groups could contain the same root mod, such as "Elemental Damage".
Currently I can fake this by editing SkillTree.txt and replacing "Area Damage" with "Cold Damage" and "(\d+)% increased Elemental Damage" with "$1% increased Cold Damage","$1% increased Lightning Damage".  As the build I am playing with also uses Herald of Lightning.

You can do that already. That's what the "Pseudo Attributes" do:

On "Pseudo Attributes", add "#% increased Cold Damage" with target 200.
On "Settings", check the tag "Area".

That "works" and is something that I hadn't gotten working before.
However it seems that all the pseudo attributes get the same settings that define what attributes affect them?  So EG I am playing herald bomber.  I want ~200% cold(ae tagged) and lightning(not ae tagged).  The lightning will always end up being a little lower than anticipated because it also counts ae nodes.  But at least I can play around that by raising lightning damage goals by the amount of area damage selected.

Yeah, you can't define settings per pseudo attribute. I think the usefulness of that is not worth the time implementing it (would require a complete UI overhaul). Optimizing two skills with different settings at the same time is probably rare.

actually you can do that with custom pseudo-attribute things.

I have something like that for separate attack elemental area of effect and spell critical chance total on my local data that I use.

Edit the Data\PseudoAttributes\ *.xml files to add such things in.

I'll upload my pseudo-attributes data with that and some other customized combinations later on GDrive.

<PseudoAttribute Name="#% increased Cold Elemental Area of Effect Damage" Group="Damage">
	<Attribute Name="#% increased Elemental Damage" />
	<Attribute Name="#% increased Cold Damage" />
	<Attribute Name="#% increased Area Damage" />
</PseudoAttribute>
<PseudoAttribute Name="#% increased Lightning Damage" Group="Damage">
	<Attribute Name="#% increased Elemental Damage" />
	<Attribute Name="#% increased Lightning Damage" />
</PseudoAttribute>

Heres link to my customized stuff.
https://drive.google.com/file/d/0B8Rugb-pJ6tFN0JoWW02WnhQWEE/view?usp=sharing

I've used similar customizing before for CoC builds, where you want(ed) to tag "spell" for spell damage scaling, but the critical strike chance you're most interested in is for attacks only.


Click on asset on Atlas fetches all assets of that ID

E.g Clicking on Realm Icon on atlas map fetches the clicked ID of GA, Realm, Loot & Dungeon
Expected
Fetch Realm only

@RedBeardEth push this to settling branch. please verify


ReLu to ReLU

I think ReLU would be better.

Can one of the admins verify this patch?

I signed it!


Add KerBalloons-v0.3.4.ckan

Part of https://github.com/KSP-CKAN/CKAN-meta/issues/1134

LGTM, I was just uploading an identical file. :)


W

Game name: Phasmophobia
Engine version:
Platform:
Error message:
Stack trace:    w uTinyRipperGUI.Exporters.ShaderDXExporter.Export(ShaderWriter writer, ShaderSubProgram& subProgram)
w uTinyRipperGUI.Exporters.ShaderHLSLccExporter.Export(ShaderWriter writer, ShaderSubProgram& subProgram)
w uTinyRipper.Classes.Shaders.ShaderSubProgram.Export(ShaderWriter writer, ShaderType type)
w uTinyRipper.Classes.Shaders.SerializedSubProgram.Export(ShaderWriter writer, ShaderType type, Boolean isTier)
w uTinyRipper.Classes.Shaders.SerializedProgram.Export(ShaderWriter writer, ShaderType type)
w uTinyRipper.Classes.Shaders.SerializedPass.Export(ShaderWriter writer)
w uTinyRipper.Classes.Shaders.SerializedSubShader.Export(ShaderWriter writer)
w uTinyRipper.Classes.Shaders.SerializedShader.Export(ShaderWriter writer)
w uTinyRipper.Classes.Shader.ExportBinary(IExportContainer container, Stream stream, Func3 exporterInstantiator)    w uTinyRipperGUI.Exporters.ShaderAssetExporter.Export(IExportContainer container, Object asset, String path)    w uTinyRipper.Project.AssetExportCollection.Export(ProjectAssetContainer container, String dirPath)    w uTinyRipper.Converters.ProjectExporter.Export(String path, GameCollection fileCollection, IEnumerable1 files, ExportOptions options)
w uTinyRipper.GameStructure.Export(String exportPath, Func`2 filter)
w uTinyRipperGUI.MainWindow.ExportFiles(Object data)

uTinyRipper has been abandoned, but you can try my AssetRipper fork. In the event that AssetRipper encounters issues while ripping your files, feel free to post an issue on that repository.
AssetRipper is actively being developed with the intent to recover games as best as possible. Weekly releases are normally on Sunday or Monday. I encourage you to help out if you're able and willing. Code contributions can be submitted via pull requests.
If you like the work I've done and want to see it continue, please consider sponsoring me. It really does help with development. These are some of the notable things I've implemented since taking over development:

2020+ support
APK, XAPK, and IPA reading with SharpZipLib
Dummy shaders (so everything isn't pink when you open the project)
IL2Cpp support via an integration of Cpp2IL
Better game platform support
Full script decompilation with the ILSpy decompiler
Cross-platform support
Multiple configuration options
Numerous performance improvements

Links:

GitHub Sponsors
Patreon
Paypal


Docker-compose up crashes

Starting today, the israelhikingmap/graphhopper image has updated so that the entrypoint ./graphhopper.sh is no longer found. Therefore, docker-compose doesn't start:
Starting graphhopper-docker_graphhopper_1 ... error

ERROR: for graphhopper-docker_graphhopper_1  Cannot start service graphhopper: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "./graphhopper.sh": stat ./graphhopper.sh: no such file or directory: unknown

ERROR: for graphhopper  Cannot start service graphhopper: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "./graphhopper.sh": stat ./graphhopper.sh: no such file or directory: unknown
ERROR: Encountered errors while bringing up the project.

graphhopper.sh is expected to be removed from the graphhopper repo in the future so we removed it from the image creation, this is not new though, it has been like that for at least two month now.
See https://github.com/graphhopper/graphhopper/issues/2361
Feel free to argue there that this file is important, maybe they'll keep it. :-)
I advise to use an officially released version and not the latest (the official 4.x still has this file I think, 3.x has this for sure as we still use 3.x version on our server with it).
We updated the documentation to show how to use the image without this file - i.e. use the jar files instead.
We might consider using a file maintained here in order to have the functionality that this file provides and avoid this problem, we haven't decided yet.
Feel free to submit a PR if this is something that you are relaying on and would like to help maintain.

@HarelM if you are using compose, can you add an example docker-compose.yml file. I updated according to readme but it still crashes.

We are, I'll see what I can do. If you happen to solve this before I post feel few to make a PR to improve the docs.

Out docker compose:
graphhopper:
    image: israelhikingmap/graphhopper:3.0
    env_file: .env
    volumes:
      - ghdata:/data
      - ./gh-config.yml:/usr/src/app/gh-config.yml
      - ./elevation:/usr/src/app/elevation
    entrypoint: ./graphhopper.sh -c /usr/src/app/gh-config.yml -i /data/asia_israel-and-palestine.pbf
    command: web -o /data/default-gh/
    healthcheck:
      test: curl --silent --fail localhost:8989/health || exit 1
      interval: 5s
      timeout: 3s
      start_period: 40s
    ports:
      - "8989:8989"
    restart: "unless-stopped"

Our makefile command for updating the routing:
docker-compose run --rm --entrypoint "bash -c" graphhopper "wget -nv -O - > /data/asia_israel-and-palestine.pbf <address of pbf file, for example geofabrik>"
docker-compose run --rm -e JAVA_OPTS="-Xmx2g -Xms2g" graphhopper import -o /data/new-gh/ --force-download
docker-compose run --rm --entrypoint "bash -c" graphhopper "rm -r /data/default-gh ; mv /data/new-gh /data/default-gh"
docker-compose restart graphhopper

This uses the graphhopper.sh since it exists in version 3.0 of graphhopper image.
See #8 in regards to the removal and rewrite of graphhopper.sh file.
Feel free to submit a PR with updated documentation etc :-)

Thank you, I didn't check tags and was trying with latest tag. For now this fixes my problem and looks like latest release 4.0 also has graphhopper.sh

Can I close this issue then?

issue still exits on images without graphhopper.sh, like latest tag. looks like https://github.com/IsraelHikingMap/graphhopper-docker-image-push/issues/8 or another fix needed.

I'll keep #8 for this although it's possible not to use this file but use the jar straight away.
I'll close this in favor of #8.
Feel free to submit a PR if you would like to push this forward faster :-)

@HarelM I think these commands for docker-compose are not up-to-date with the latest graphhopper.sh, could you update them?

The graphhopper.sh can be found in this repo and you can use the docker image to get "help".

Found it, had to change the command to use "--import", now it builds the cache


The confirmation amount upon deposit and withdraw are late for one confirmation.

The txid will have 6 confirmation blocks while Peatio will only sees 5 of them.
This make our minimum conformation amount from actual 6 to 7 in blockchain.
In case of some blockchains it may take 30 min to wait for another confirmation.

This can be related to issue #1621 for Bitcoin-like coins.

any update on this??


[DUOS-302][risk=no] Remove unused, vulnerable library

Addresses
Minor update in service to https://broadinstitute.atlassian.net/browse/DUOS-302
Fixes https://broadinstitute-dsp.sourceclear.io/workspaces/jppForw/issues/vulnerabilities/17870375 by removing the dependency the vulnerability is pulled in from.

Affected Library: RabbitMQ Java Client, MAVEN, com.rabbitmq amqp-client
Type: Transitive dependency
Version In Use: 4.4.1
Released On: Dec 18, 2017
Latest Version: 5.8.0
Released On: Dec 11, 2019
Transitive Dependency
This vulnerability is in a transitive dependency, it can be fixed by overriding and adding a new direct dependency of the library in your project.
Update
We do not have a confirmed fix for this issue yet. However, newer versions of the library have been released. We suggest that you upgrade to 5.4.0, which is considered safe.

Thank you @vvicario!


How to use it with existing trpc router

I already have a trpc router in next.js project, is it possible to integrate queuedash with it, so the path will be /api/trpc/system.queuedash.*?

I think you can merge routers and import the app router from @queuedash/api

That’s what I initially wanted to do, but how to be with ‘apiUrl’ in ui lib?


Updated README.md

Updated the documentation to reflect the changes in React Native, as MainApplication is being used instead of MainActivity in the current version of React Native.

thanks @HenrikSolum !


Black Screen When Entering VR Mode on Meta Quest 3

Firstly, I want to express my sincere gratitude for your outstanding contributions to the open-source community. The Vuer library is a remarkable tool, and your dedication is truly appreciated.
I'm currently using the Vuer library to deploy a VR project on Meta Quest 3. However, I've encountered an issue that I hope you can help me resolve. When accessing the corresponding webpage through the default browser on the device, the images display correctly (I'm currently testing by displaying two solid color images in the left and right eyes).
The problem arises when I click "Enter VR Mode"—the screen on the Quest goes black. Exiting VR mode using the Meta button on the controller shows that the immersive webpage is still running in the background. If I close it and refresh the webpage without entering VR mode again, the images display correctly.

I'm unsure if this issue is related to my browser or device settings, or if there might be a problem in the code. I'd greatly appreciate any insights or guidance you could provide.
Thank you once again for your support and contributions. Your work makes a significant difference.

Are you connected through adb? Does Quest 3 need a network to open the Vuer page?

Yes, I was connected through adb and had a stable connection. Later, I found that simply rebooting the device and reconnecting via a different port solved the issue. The problem might have been related to not properly acknowledging Oculus prompts, such as the one asking to enter immersive mode.
Thank you for your help!

Yes, I was connected through adb and had a stable connection. Later, I found that simply rebooting the device and reconnecting via a different port solved the issue. The problem might have been related to not properly acknowledging Oculus prompts, such as the one asking to enter immersive mode.
Thank you for your help!


onCreate callback does not return the widgetId parameter

Hello,
I've been trying to get the callback for onCreate to return the widgetId with no luck.  When I dig into the service I can see that the widgetId has been created but it doesn't make it back to the callback function.  Here is a plnkr that demonstrates the issue. (Look at the console logs.)
plnkr

widgetId is the key for the injection into the callback. Like on-create="create(widgetId)"

I'm not sure I get what you are saying.  Isn't widgetId provided by the service?  In my plnkr I add a console.log to the service and you can see that each new widget gets assigned it's own id.

Change on-create="create(id)" to on-create="create(widgetId)"
It has to be called widgetId in the expression which appears as an attribute value in the html. You can call it whatever you want in the actual function.

BONUS POST!
To go into more details (previously I was commenting from a mobile phone which makes it hard to go into details), This line where the callback is trigged passes an object with the key widgetId. This object extends the local scope in which the function is executed to have a variable widgetId which is the value provided on that line. This means you need to use the variable widgetId which is in scope for it to be passed to your callback. You are currently you id, which tries to pull id out of the scope. id doesn't exist, so it is undefined when passed to the callback.
See the last part in the bullet for& or &attr within https://docs.angularjs.org/api/ng/service/$compile#-scope- section

@TheSharpieOne Thank you