some questions

I really want to start using this project and see what it can do, since it looks so awesome and all, but I get the feeling it's too early, right?
When will you have an official release?
I am currently missing:

reports
documentation on actions

if I had those two, I feel like I could start using the project.

Another question
I wrote a test on a page that loads a really big resource - it takes a couple of seconds to load it - and yet the test says time < 50ms..
{
    "variables":[],
    "steps": [
        {
            "action": "open_url",
            "value": "http://localhost:3000/"
        }
    ]
}

this is our scenario, and this is the page's network

Hi Guy,
Can't speak for the original creators of this repo, but in our Development team we started using Felt a couple of months ago for a new project as a potential alternative to paid-for tools, used in conjunction with AWS EC2 instances to act as executors. We've made a few extensions to the original repo in our private fork, which I'm planning on offering to this repo at some point - hopefully you'll find them useful.
In terms of documentation for the actions - as you've seen, there isn't any to speak of! We found that using worker.js (https://github.com/kidk/felt/blob/master/worker.js) as a point of reference let us figure out the available actions, and extend them - form around line 150 onwards.
When we ran our performance tests, we primarily used server-side monitoring to check on the performance, but monitoring the results the client sees would be useful. There's some interesting info on the PhantomJS site about network monitoring, which might be a good starting point:
http://phantomjs.org/network-monitoring.html
I realise none of this solves your problems, but hopefully it gives you an idea of what others have done with it. Best of luck!
Cheers,
James

Hi @GuyMograbi, thanks for your questions. It's great to see people interested in Felt.
It is still very much a work in progress, but certainly not dead 😄 I agree with your feedback in regards to the docs and will try to expand on them when I have the chance.
The long request you're not seeing is probably a bug. I will research and notify here when I've found the issue.
In terms of an official release I first want to have some quality control in place. (Tests, code style tests, ...) Soon after I release the first 'beta' version.
@james-braund-gw Thanks for sharing your experience and feedback, it always nice to hear that other people are already using Felt. Very interested to see which changes you've made!


Configure Dependabot

This sets up a basic dependabot workflow for version upgrdes that runs every midnight, and avoids major version changes.

We should use Renovate instead


Give path as argument of the directory event

Thanks! Please add tests for the new feature and documentation :)
In addition, can you provide what the use-case for this new feature is? Perhaps a code example of what you can now do with the feature that was not possible before.

If you listen for the 'directory' event, this allow to know what is the
directory that's being requested, otherwise is not possible to know.
El 13/8/2016 19:57, "Douglas Wilson"<EMAIL_ADDRESS>escribió:

Thanks! Please add tests for the new feature and documentation :)
In addition, can you provide what the use-case for this new feature is?
Perhaps a code example of what you can now do with the feature that was not
possible before.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/pillarjs/send/pull/115#issuecomment-239633413, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAgfvrLH-9e4lXrlAetqpTaD-N5oYClpks5qfgV8gaJpZM4JjtGc
.

otherwise is not possible to know

how so? As far as I can tell, all you're doing is passing back whatever the user provided as the path argument to the send function originally, which of course the calling code would already know, because that's the same value it passed to this module in the first place.
If this is not the case, can you please provide code that shows what exactly you mean? As far as I can tell, this is not a useful addition, since it doesn't actually solve anything, only adding a second way to do something, which is more to maintain.

Of course you have the path before, but this way you have it as parameter
instead to force to get it from the closure or some external variable,
making this more flexible and easier to use. Events should have available
all the info they need and don't depend on the context for each call, doing
so they lost their meaning.
El 14/8/2016 2:05, "Douglas Wilson"<EMAIL_ADDRESS>escribió:

otherwise is not possible to know
how so? As far as I can tell, all you're doing is passing back whatever
the user provided as the path argument to the send function originally,
which of course the calling code would already know, because that's the
same value it passed to this module in the first place.
If this is not the case, can you please provide code that shows what
exactly you mean? As far as I can tell, this is not a useful addition,
since it doesn't actually solve anything, only adding a second way to do
something, which is more to maintain.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/pillarjs/send/pull/115#issuecomment-239648397, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAgfvt-zaORTOxqaXdPH5cUOfaODxZM9ks5qflvdgaJpZM4JjtGc
.

Hi @piranna, but then what can you even do in the event listener? If you need to, for example, actually send a response, you'll need to use a closure to respond to the correct res object. Please provide code that shows what exactly you mean as far as I can tell, this is not a useful addition, since it doesn't actually solve anything, only adding a second way to do something, which is more to maintain.

Clearly I did not handle this issue well, and for that I'm sorry. I am landing your PR with included tests and documentation. res is also added to the arguments to be similar to he headers event (and also because the expectation is to write a response in the event).


Update community call submission guidance

Category

[X] Content fix
[ ] New article
Related issues: fixes #X, partially #Y, mentioned in #Z

What's in this Pull Request?
Update to the community call community demo submission instructions & guidance.

OPS Build status updates of commit 430e3b3:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs/community/community.md
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

thx AC, getting this merged now.


Lberner ado import export vm protection key

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


Unidecode error on Windows connecting to SE4000 inverter

Hello,
Thanks for all your good work on this module. Just installed it in Windows 10 Python 3.8.7 (64 bits) and connected to my SolarEdge inverter.
At start an error was received:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 12: invalid start byte
Changed line 247 in init.py and added the "ignore" parameter base don this link
https://stackoverflow.com/questions/42339876/error-unicodedecodeerror-utf-8-codec-cant-decode-byte-0xff-in-position-0-in
decoded = data.decode_string(length * 2).decode("utf-8", "ignore").replace("\x00", "").rstrip()
This resolved my issue and data is received from the SE4000 inverter. Will continue with uploading to influxdb and create a panel.
Hope this helps improving a future release
it seems that decoding the parameter for
"current_dc_scale": -32768,
shows incorrect value (should be -1 in stead of -32768). Will test tomorrow when system is producing if it is OK then.
GWS65

Thanks for letting me know, GWS. The whole string stripping UTF-8 bit happening there feels terribly hacky. I will have a look at the whole bit when I have a chance. Perhaps there is a more elegant solution.

Thanks for letting me know, GWS. The whole string stripping UTF-8 bit happening there feels terribly hacky. I will have a look at the whole bit when I have a chance. Perhaps there is a more elegant solution.

The string decoding has been modified. Would you mind trying it?

The string decoding has been modified. Would you mind trying it?

The string decoding has been modified. Would you mind trying it?

Not at all but is it already in this library? Looks like this one is not changed much. Could you please explain what has changed?
Might be missing something here. Not that familiar with the collaboration options on Github (yet :))

The string decoding has been modified. Would you mind trying it?

Not at all but is it already in this library? Looks like this one is not changed much. Could you please explain what has changed?
Might be missing something here. Not that familiar with the collaboration options on Github (yet :))

Hello Niels
Are you a dutchman by any chance?  Ik ook...
Just send me the file and I will give it a go.
Thanks,
GWS65
On Fri, Jan 8, 2021 at 8:39 PM niels<EMAIL_ADDRESS>wrote:

The string decoding has been modified. Would you mind trying it?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/nmakel/solaredge_modbus/issues/21#issuecomment-756955669,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABYGPNKDPR3SOLYY34EERY3SY5NOJANCNFSM4VZRDIFA
.

Hello Niels
Are you a dutchman by any chance?  Ik ook...
Just send me the file and I will give it a go.
Thanks,
GWS65
On Fri, Jan 8, 2021 at 8:39 PM niels<EMAIL_ADDRESS>wrote:

The string decoding has been modified. Would you mind trying it?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/nmakel/solaredge_modbus/issues/21#issuecomment-756955669,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABYGPNKDPR3SOLYY34EERY3SY5NOJANCNFSM4VZRDIFA
.

The string decoding has been modified. Would you mind trying it?

Not at all but is it already in this library? Looks like this one is not changed much. Could you please explain what has changed?
Might be missing something here. Not that familiar with the collaboration options on Github (yet :))

Oops! Looks like I pushed the changes to my local repository and not Github. It has been uploaded now. The change is on line 249:
https://github.com/nmakel/solaredge_modbus/blob/2ef9fa91552caa8650b769b81cc57264e365adb1/solaredge_modbus/__init__.py#L249

The string decoding has been modified. Would you mind trying it?

Not at all but is it already in this library? Looks like this one is not changed much. Could you please explain what has changed?
Might be missing something here. Not that familiar with the collaboration options on Github (yet :))

Oops! Looks like I pushed the changes to my local repository and not Github. It has been uploaded now. The change is on line 249:
https://github.com/nmakel/solaredge_modbus/blob/2ef9fa91552caa8650b769b81cc57264e365adb1/solaredge_modbus/__init__.py#L249

Niels,
Still the same issue:
d:\Dvlp\Python\SE4000_ModbusData>python example.py <IP_ADDRESS> 502
Traceback (most recent call last):
File "example.py", line 37, in
battery_values = params.read_all()
File
"C:\Users\GWScheppink\AppData\Local\Programs\Python\Python38\lib\site-packages\solaredge_modbus_init_.py",
line 348, in read_all
results.update(self.read_all(register_batch, rtype))
File
"C:\Users\GWScheppink\AppData\Local\Programs\Python\Python38\lib\site-packages\solaredge_modbus_init.py",
line 316, in _read_all
results[k] = self.decode_value(data, length, dtype, vtype)
File
"C:\Users\GWScheppink\AppData\Local\Programs\Python\Python38\lib\site-packages\solaredge_modbus_init.py",
line 249, in _decode_value

decoded = data.decode_string(length * 2).decode()*
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 12:
invalid start byte

Changing it to :
decoded = data.decode_string(length * 2).decode("utf-8", "ignore")
Did the trick. (For my SE4000 at least).
Thanks and good luck with recoding. If I need to test more just let me know.
GWS65
On Tue, Jan 12, 2021 at 9:20 PM niels<EMAIL_ADDRESS>wrote:

The string decoding has been modified. Would you mind trying it?
Not at all but is it already in this library? Looks like this one is not
changed much. Could you please explain what has changed?
Might be missing something here. Not that familiar with the collaboration
options on Github (yet :))
Oops! Looks like I pushed the changes to my local repository and not
Github. It has been uploaded now. The change is on line 249:
https://github.com/nmakel/solaredge_modbus/blob/2ef9fa91552caa8650b769b81cc57264e365adb1/solaredge_modbus/__init__.py#L249
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/nmakel/solaredge_modbus/issues/21#issuecomment-758917974,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABYGPNJW5IH6KYDGY2NM3SLSZSVJ7ANCNFSM4VZRDIFA
.

Niels,
Still the same issue:
d:\Dvlp\Python\SE4000_ModbusData>python example.py <IP_ADDRESS> 502
Traceback (most recent call last):
File "example.py", line 37, in
battery_values = params.read_all()
File
"C:\Users\GWScheppink\AppData\Local\Programs\Python\Python38\lib\site-packages\solaredge_modbus_init_.py",
line 348, in read_all
results.update(self.read_all(register_batch, rtype))
File
"C:\Users\GWScheppink\AppData\Local\Programs\Python\Python38\lib\site-packages\solaredge_modbus_init.py",
line 316, in _read_all
results[k] = self.decode_value(data, length, dtype, vtype)
File
"C:\Users\GWScheppink\AppData\Local\Programs\Python\Python38\lib\site-packages\solaredge_modbus_init.py",
line 249, in _decode_value

decoded = data.decode_string(length * 2).decode()*
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 12:
invalid start byte

Changing it to :
decoded = data.decode_string(length * 2).decode("utf-8", "ignore")
Did the trick. (For my SE4000 at least).
Thanks and good luck with recoding. If I need to test more just let me know.
GWS65
On Tue, Jan 12, 2021 at 9:20 PM niels<EMAIL_ADDRESS>wrote:

The string decoding has been modified. Would you mind trying it?
Not at all but is it already in this library? Looks like this one is not
changed much. Could you please explain what has changed?
Might be missing something here. Not that familiar with the collaboration
options on Github (yet :))
Oops! Looks like I pushed the changes to my local repository and not
Github. It has been uploaded now. The change is on line 249:
https://github.com/nmakel/solaredge_modbus/blob/2ef9fa91552caa8650b769b81cc57264e365adb1/solaredge_modbus/__init__.py#L249
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/nmakel/solaredge_modbus/issues/21#issuecomment-758917974,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABYGPNJW5IH6KYDGY2NM3SLSZSVJ7ANCNFSM4VZRDIFA
.

You're using Python 3, right?
Also, would you mind trying:
decoded = data.decode_string(length * 2).decode("ascii")
The encoding of strings is not defined in SolarEdge's documentation, nor is there a standard way to encode strings in Modbus. It's an -- incorrect -- assumption on my part that the strings were UTF-8. Maybe ascii or latin1 is a better choice.

You're using Python 3, right?
Also, would you mind trying:
decoded = data.decode_string(length * 2).decode("ascii")
The encoding of strings is not defined in SolarEdge's documentation, nor is there a standard way to encode strings in Modbus. It's an -- incorrect -- assumption on my part that the strings were UTF-8. Maybe ascii or latin1 is a better choice.

Hello Niels,
Yes I am using Python3 and your solution did not work. Thinking about the
message. 0xFF is not in the Ascii range so it could be expected that
decoding is not valid.
d:\Dvlp\Python\SE4000_ModbusData>python example.py <IP_ADDRESS> 502
Traceback (most recent call last):
File "example.py", line 37, in
battery_values = params.read_all()
File
"C:\Users\GWScheppink\AppData\Local\Programs\Python\Python38\lib\site-packages\solaredge_modbus_init_.py",
line 348, in read_all
results.update(self.read_all(register_batch, rtype))
File
"C:\Users\GWScheppink\AppData\Local\Programs\Python\Python38\lib\site-packages\solaredge_modbus_init.py",
line 316, in _read_all
results[k] = self.decode_value(data, length, dtype, vtype)
File
"C:\Users\GWScheppink\AppData\Local\Programs\Python\Python38\lib\site-packages\solaredge_modbus_init.py",
line 249, in _decode_value
decoded = data.decode_string(length * 2).decode("ascii")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 12:
ordinal not in range(128)
decoded = data.decode_string(length * 2).decode("ascii", "ignore")
does workand text is as expected
and
decoded = data.decode_string(length * 2).decode("ignore")
does NOT work needs encoding parameter
utf-16 does kind of work (with ignore param too) but text is garbled.
:\Dvlp\Python\SE4000_ModbusData>python example.py <IP_ADDRESS> 502
Inverter(<IP_ADDRESS>:502, connectionType.TCP: timeout=1, retries=3,
unit=0x1):
Output with ascii ignore
Registers:
Manufacturer: SolarEdge
Model: SE4000
Type: Single Phase Inverter
Version: 0003.2186
Serial: 7311FF55
Status: Sleeping
Temperature: 11.68°C
Current: 0.00A
Voltage: 232.40V
Frequency: 49.97Hz
Power: 0.00W
Power (Apparent): 0.00VA
Power (Reactive): 0.00VAr
Power Factor: 0.00%
Total Energy: 7397778Wh
DC Current: 0.00A
DC Voltage: 0.10V
DC Power: 0.00W
Gert-Wim Scheppink
<EMAIL_ADDRESS>On Tue, Jan 12, 2021 at 10:26 PM niels<EMAIL_ADDRESS>wrote:

You're using Python 3, right?
Also, would you mind trying:
decoded = data.decode_string(length * 2).decode("ascii")
The encoding of strings is not defined in SolarEdge's documentation, nor
is there a standard way to encode strings in Modbus. It's an -- incorrect
-- assumption on my part that the strings were UTF-8. Maybe ascii or
latin1 is a better choice.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/nmakel/solaredge_modbus/issues/21#issuecomment-759021082,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABYGPNMVCOGDJUUFMITDP3DSZS5AJANCNFSM4VZRDIFA
.

Hello Niels,
Yes I am using Python3 and your solution did not work. Thinking about the
message. 0xFF is not in the Ascii range so it could be expected that
decoding is not valid.
d:\Dvlp\Python\SE4000_ModbusData>python example.py <IP_ADDRESS> 502
Traceback (most recent call last):
File "example.py", line 37, in
battery_values = params.read_all()
File
"C:\Users\GWScheppink\AppData\Local\Programs\Python\Python38\lib\site-packages\solaredge_modbus_init_.py",
line 348, in read_all
results.update(self.read_all(register_batch, rtype))
File
"C:\Users\GWScheppink\AppData\Local\Programs\Python\Python38\lib\site-packages\solaredge_modbus_init.py",
line 316, in _read_all
results[k] = self.decode_value(data, length, dtype, vtype)
File
"C:\Users\GWScheppink\AppData\Local\Programs\Python\Python38\lib\site-packages\solaredge_modbus_init.py",
line 249, in _decode_value
decoded = data.decode_string(length * 2).decode("ascii")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 12:
ordinal not in range(128)
decoded = data.decode_string(length * 2).decode("ascii", "ignore")
does workand text is as expected
and
decoded = data.decode_string(length * 2).decode("ignore")
does NOT work needs encoding parameter
utf-16 does kind of work (with ignore param too) but text is garbled.
:\Dvlp\Python\SE4000_ModbusData>python example.py <IP_ADDRESS> 502
Inverter(<IP_ADDRESS>:502, connectionType.TCP: timeout=1, retries=3,
unit=0x1):
Output with ascii ignore
Registers:
Manufacturer: SolarEdge
Model: SE4000
Type: Single Phase Inverter
Version: 0003.2186
Serial: 7311FF55
Status: Sleeping
Temperature: 11.68°C
Current: 0.00A
Voltage: 232.40V
Frequency: 49.97Hz
Power: 0.00W
Power (Apparent): 0.00VA
Power (Reactive): 0.00VAr
Power Factor: 0.00%
Total Energy: 7397778Wh
DC Current: 0.00A
DC Voltage: 0.10V
DC Power: 0.00W
Gert-Wim Scheppink
<EMAIL_ADDRESS>On Tue, Jan 12, 2021 at 10:26 PM niels<EMAIL_ADDRESS>wrote:

You're using Python 3, right?
Also, would you mind trying:
decoded = data.decode_string(length * 2).decode("ascii")
The encoding of strings is not defined in SolarEdge's documentation, nor
is there a standard way to encode strings in Modbus. It's an -- incorrect
-- assumption on my part that the strings were UTF-8. Maybe ascii or
latin1 is a better choice.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/nmakel/solaredge_modbus/issues/21#issuecomment-759021082,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABYGPNMVCOGDJUUFMITDP3DSZS5AJANCNFSM4VZRDIFA
.

Beats me. I've re-added the string replace and stripping, as this was causing a bunch of other issues. Also added errors="ignore". Hopefully this solves your problem, and maybe somebody will come along who knows what's happening here.

Beats me. I've re-added the string replace and stripping, as this was causing a bunch of other issues. Also added errors="ignore". Hopefully this solves your problem, and maybe somebody will come along who knows what's happening here.

Hello Niels,
At least this works but I have no idea why ascii did not.  Used modpoll.exe
to read the registers in another way and this is what the SE4000 shows.
c:\Bin\ModPoll_v3.4\win32>modpoll -m tcp -a 1 -r 40001 -c 4 -t 4:hex -1
<IP_ADDRESS>
modpoll 3.4 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2013 proconX Pty Ltd
Visit http://www.modbusdriver.com for Modbus libraries and tools.
Protocol configuration: MODBUS/TCP
Slave configuration...: address = 1, start reference = 40001, count = 4
Communication.........: <IP_ADDRESS>, port 502, t/o 1.00 s, poll rate 1000
ms
Data type.............: 16-bit register (hex), output (holding) register
table
-- Polling slave...
[40001]: 0x5375
[40002]: 0x6E53
[40003]: 0x0001
[40004]: 0x0041
c:\Bin\ModPoll_v3.4\win32>modpoll -m tcp -a 1 -r 40005 -c 16 -t 4:hex -1
<IP_ADDRESS>
modpoll 3.4 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2013 proconX Pty Ltd
Visit http://www.modbusdriver.com for Modbus libraries and tools.
Protocol configuration: MODBUS/TCP
Slave configuration...: address = 1, start reference = 40005, count = 16
Communication.........: <IP_ADDRESS>, port 502, t/o 1.00 s, poll rate 1000
ms
Data type.............: 16-bit register (hex), output (holding) register
table
-- Polling slave...
[40005]: 0x536F
[40006]: 0x6C61
[40007]: 0x7245
[40008]: 0x6467
[40009]: 0x6520
[40010]: 0x0000
[40011]: 0x0000
[40012]: 0x0000
[40013]: 0x0000
[40014]: 0x0000
[40015]: 0x0000
[40016]: 0x0000
[40017]: 0x0000
[40018]: 0x0000
[40019]: 0x0000
[40020]: 0x0000
from address 40005 I read "SolarEdge" as expected (
https://www.rapidtables.com/convert/number/hex-to-ascii.html)
Is it possible that you are one byte "off" since many modbus implementation
have the option of choosing the register addressing mode starting with 0 or
1
GWS65
On Tue, Jan 12, 2021 at 10:52 PM niels<EMAIL_ADDRESS>wrote:

Beats me. I've re-added the string replace and stripping, as this was
causing a bunch of other issues. Also added errors="ignore". Hopefully
this solves your problem, and maybe somebody will come along who knows
what's happening here.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/nmakel/solaredge_modbus/issues/21#issuecomment-759058474,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABYGPNKMD6RD3DFUHENLNBDSZTAA7ANCNFSM4VZRDIFA
.

Hello Niels,
At least this works but I have no idea why ascii did not.  Used modpoll.exe
to read the registers in another way and this is what the SE4000 shows.
c:\Bin\ModPoll_v3.4\win32>modpoll -m tcp -a 1 -r 40001 -c 4 -t 4:hex -1
<IP_ADDRESS>
modpoll 3.4 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2013 proconX Pty Ltd
Visit http://www.modbusdriver.com for Modbus libraries and tools.
Protocol configuration: MODBUS/TCP
Slave configuration...: address = 1, start reference = 40001, count = 4
Communication.........: <IP_ADDRESS>, port 502, t/o 1.00 s, poll rate 1000
ms
Data type.............: 16-bit register (hex), output (holding) register
table
-- Polling slave...
[40001]: 0x5375
[40002]: 0x6E53
[40003]: 0x0001
[40004]: 0x0041
c:\Bin\ModPoll_v3.4\win32>modpoll -m tcp -a 1 -r 40005 -c 16 -t 4:hex -1
<IP_ADDRESS>
modpoll 3.4 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2013 proconX Pty Ltd
Visit http://www.modbusdriver.com for Modbus libraries and tools.
Protocol configuration: MODBUS/TCP
Slave configuration...: address = 1, start reference = 40005, count = 16
Communication.........: <IP_ADDRESS>, port 502, t/o 1.00 s, poll rate 1000
ms
Data type.............: 16-bit register (hex), output (holding) register
table
-- Polling slave...
[40005]: 0x536F
[40006]: 0x6C61
[40007]: 0x7245
[40008]: 0x6467
[40009]: 0x6520
[40010]: 0x0000
[40011]: 0x0000
[40012]: 0x0000
[40013]: 0x0000
[40014]: 0x0000
[40015]: 0x0000
[40016]: 0x0000
[40017]: 0x0000
[40018]: 0x0000
[40019]: 0x0000
[40020]: 0x0000
from address 40005 I read "SolarEdge" as expected (
https://www.rapidtables.com/convert/number/hex-to-ascii.html)
Is it possible that you are one byte "off" since many modbus implementation
have the option of choosing the register addressing mode starting with 0 or
1
GWS65
On Tue, Jan 12, 2021 at 10:52 PM niels<EMAIL_ADDRESS>wrote:

Beats me. I've re-added the string replace and stripping, as this was
causing a bunch of other issues. Also added errors="ignore". Hopefully
this solves your problem, and maybe somebody will come along who knows
what's happening here.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/nmakel/solaredge_modbus/issues/21#issuecomment-759058474,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABYGPNKMD6RD3DFUHENLNBDSZTAA7ANCNFSM4VZRDIFA
.


Import failure due to missing 'animations' attribute (KHR_animation_pointer)

Hello! I encountered some issues while trying to import certain assets that use KHR_animation_pointer.
Describe the bug
The attached asset cannot be imported due to a missing attribute.
To Reproduce
Steps to reproduce the behavior:

Import the asset
See the error

Expected behavior
The asset should be imported properly.
.blend file/ .gltf (mandatory)
anim_pointer_crash.zip
Version

OS: Linux
Blender Version: 4.2

Confirmed


Different output after Save/Load for Keras model with LSTM

Platform: Ubuntu 18.04 (Amazon Cloud EC2 instance)
TensorFlow: 2.3.4/2.4.3 + Keras + Cuda
Python: 3.7.10
I try to train model with LSTM using CTC algorithm (code from https://keras.io/examples/vision/captcha_ocr/)
If I do sequentially model creation, training, evaluation, saving, loading, and evaluation again, everything is correct.
The original trained model and the restored model give me same result.
At first look Save + Load functions working fine, but if I comment Model, Train sections (see code below), and leave just final Load, Evaluate steps for previous saved model (section Test), the restored model  produces wrong result.
I have tried to use other formats to save/load model, but nothing changed.
I don't understand is it bug in Keras, or maybe I do something incorrect? Could you help me?
My source code is below:
ctc-test.py
import os
import numpy as np

from pathlib import Path
#from collections import Counter

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
#import onnxruntime as ort
#import keras2onnx
#import onnx

#keras.backend.manual_variable_initialization(True)

# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#               data
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

def SplitData(images, labels, train_size=0.9, shuffle=True):
    # 1. Get the total size of the dataset
    size = len(images)
    # 2. Make an indices array and shuffle it, if required
    indices = np.arange(size)
    if shuffle:
        np.random.shuffle(indices)
    # 3. Get the size of training samples
    train_samples = int(size * train_size)
    # 4. Split data into training and validation sets
    x_train, y_train = images[indices[:train_samples]], labels[indices[:train_samples]]
    x_valid, y_valid = images[indices[train_samples:]], labels[indices[train_samples:]]
    return x_train, x_valid, y_train, y_valid

def EncodeSingleSample(img_path, label):
    # 1. Read image
    img = tf.io.read_file(img_path)
    # 2. Decode and convert to grayscale
    img = tf.io.decode_png(img, channels=1)
    # 3. Convert to float32 in [0, 1] range
    img = tf.image.convert_image_dtype(img, tf.float32)
    # 4. Resize to the desired size
    img = tf.image.resize(img, [img_height, img_width])
    # 5. Transpose the image because we want the time
    # dimension to correspond to the width of the image.
    img = tf.transpose(img, perm=[1, 0, 2])
    # 6. Map the characters in label to numbers
    label = char_to_num(tf.strings.unicode_split(label, input_encoding="UTF-8"))
    # 7. Return a dict as our model is expecting two inputs
    return {"image": img, "label": label}

# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#               neural net
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

class CTCLayer(layers.Layer):
    def __init__(self, name=None):
        super().__init__(name=name)
        self.loss_fn = keras.backend.ctc_batch_cost

    def call(self, y_true, y_pred):
        # Compute the training-time loss value and add it to the layer using `self.add_loss()`
        batch_len = tf.cast(tf.shape(y_true)[0], dtype="int64")
        input_length = tf.cast(tf.shape(y_pred)[1], dtype="int64")
        label_length = tf.cast(tf.shape(y_true)[1], dtype="int64")

        input_length = input_length * tf.ones(shape=(batch_len, 1), dtype="int64")
        label_length = label_length * tf.ones(shape=(batch_len, 1), dtype="int64")

        loss = self.loss_fn(y_true, y_pred, input_length, label_length)
        self.add_loss(loss)

        # At test time, just return the computed predictions
        return y_pred

def BuildModel():
    # Inputs to the model
    inp = layers.Input(shape=(img_width, img_height, 1), name="image", dtype="float32")
    labels = layers.Input(name="label", shape=(None,), dtype="float32")

    # First conv block
    x = layers.Conv2D(  32, (3, 3),
                        activation="relu",
                        kernel_initializer="he_normal",
                        padding="same",
                        name="Conv1",
                    )(inp)
    x = layers.MaxPooling2D((2, 2), name="pool1")(x)

    # Second conv block
    x = layers.Conv2D(  64, (3, 3),
                        activation="relu",
                        kernel_initializer="he_normal",
                        padding="same",
                        name="Conv2",
                    )(x)
    x = layers.MaxPooling2D((2, 2), name="pool2")(x)

    # We have used two max pool with pool size and strides 2.
    # Hence, downsampled feature maps are 4x smaller.
    # The number of filters in the last layer is 64.
    # Reshape accordingly before passing the output to the RNN part of the model
    new_shape = ((img_width // 4), (img_height // 4) * 64)
    x = layers.Reshape(target_shape=new_shape, name="reshape")(x)
    x = layers.Dense(64, activation="relu", name="dense1")(x)
    x = layers.Dropout(0.2)(x)

    # RNNs
    x = layers.Bidirectional(layers.LSTM(128, return_sequences=True, dropout=0.25))(x)
    x = layers.Bidirectional(layers.LSTM(64, return_sequences=True, dropout=0.25))(x)

    # Output layer
    x = layers.Dense(len(char_to_num.get_vocabulary()) + 1, activation="softmax", name="dense2")(x)

    # Add CTC layer for calculating CTC loss at each step
    out = CTCLayer(name="ctc_loss")(labels, x)

    # Define the model
    model = keras.models.Model(inputs=[inp, labels], outputs=out, name="ocr_model_v1")
    model.compile(optimizer=keras.optimizers.Adam())
    return model

def TrainModel(model, train_set, epochs, early_stop):
    early_stopping = keras.callbacks.EarlyStopping( monitor="val_loss",
                                                    patience=early_stop,
                                                    restore_best_weights=True)
    history = model.fit(train_set,
                        validation_data=valid_set,
                        epochs=epochs,
                        callbacks=[early_stopping])

    xmodel = keras.models.Model(model.get_layer(name="image").input,
                                model.get_layer(name="dense2").output)
    return xmodel

def DecodeBatchPredictions(pred):
    input_len = np.ones(pred.shape[0]) * pred.shape[1]
    # Use greedy search. For complex tasks, you can use beam search
    results = keras.backend.ctc_decode(pred, input_length=input_len, greedy=True)[0][0][:, :max_length]
    # Iterate over the results and get back the text
    output_text = []
    for res in results:
        res = tf.strings.reduce_join(num_to_char(res)).numpy().decode("utf-8")
        output_text.append(res)
    return output_text

def EvaluateModel(model, data_set, name, header=False):
    total = 0
    correct = 0
    for batch in data_set:
        images = batch["image"]
        labels = batch["label"]

        pred = model.predict(images)
        text = DecodeBatchPredictions(pred)
        for i in range(len(labels)):
            ref = tf.strings.reduce_join(num_to_char(labels[i])).numpy().decode("utf-8")
            if (text[i] == ref):
                correct += 1

        total += images.shape[0]

    if (total == 0):
        total = 1
    acc = (100*correct)/total

    if (header):
        print("")
        print("            Corr    Err    Total     Acc     Err")
    print(name, "%8d%8d%8d  %8.2f%8.2f" % (correct,total-correct,total,acc,100-acc))

# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#               load / save
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

def LoadModel(file):
    # JSON format
    xfile = os.path.splitext(file)
    if (xfile[1] == ".json"):
        with open(file, "r") as json:
            json_model = json.read()
        model = keras.models.model_from_json(json_model)
        model.load_weights(xfile[0] + ".wgt")

    # ONNX format
    elif (xfile[1] == ".onnx"):
        raise Exception("LoadModel; ONNX format not supported yet")
        model = None

    # TF/Keras format
    else:
        model = keras.models.load_model(file, custom_objects={'leaky_relu': tf.nn.leaky_relu})

    return model

def SaveModel(file, model):
    # JSON format
    xfile = os.path.splitext(file)
    if (xfile[1] == ".json"):
        print("save JSON:", file)
        json_model = model.to_json()
        with open(file, "w") as json:
            json.write(json_model)
        model.save_weights(xfile[0] + ".wgt")

    # ONNX format
    elif (xfile[1] == ".onnx"):
        print("save ONNX:", file)
        onnx_model = keras2onnx.convert_keras(model, model.name)
        onnx.save_model(onnx_model, file)

    # Keras format
    elif (xfile[1] == ".h5" or xfile[1] == ".dnn"):
        print("save HDF5:", file)
        model.save(file, save_format='h5')

    # TF format
    else:
        print("save TF:", file)
        model.save(file, save_format='tf')

# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#               main
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

img_width = 200
img_height = 50

batch_size = 16

# Get list of all the images
data_dir = Path("./data/captcha_images_v2/")
images = sorted(list(map(str, list(data_dir.glob("*.png")))))
labels = [img.split(os.path.sep)[-1].split(".png")[0] for img in images]
charset = set(char for label in labels for char in label)
max_length = max([len(label) for label in labels])

print()
print("Number of images:  ", len(images))
print("Number of labels:  ", len(labels))
print("Unique characters: ", charset, len(charset))
print("Maximum length:    ", max_length)
print()

# Mapping characters to integers
char_to_num = layers.experimental.preprocessing.StringLookup(vocabulary=list(charset), mask_token=None)

# Mapping integers back to original characters
num_to_char = layers.experimental.preprocessing.StringLookup(vocabulary=char_to_num.get_vocabulary(), mask_token=None, invert=True)

# Splitting data into training and validation sets (file list)
x_train, x_valid, y_train, y_valid = SplitData(np.array(images), np.array(labels))

train_set = tf.data.Dataset.from_tensor_slices((x_train, y_train))
train_set = (
    train_set.map(EncodeSingleSample, num_parallel_calls=tf.data.experimental.AUTOTUNE)
    .batch(batch_size)
    .prefetch(buffer_size=tf.data.experimental.AUTOTUNE)
)
valid_set = tf.data.Dataset.from_tensor_slices((x_valid, y_valid))
valid_set = (
    valid_set.map(EncodeSingleSample, num_parallel_calls=tf.data.experimental.AUTOTUNE)
    .batch(batch_size)
    .prefetch(buffer_size=tf.data.experimental.AUTOTUNE)
)

file_tf = "model-tf"
file_json = "model.json"
file_wgt = "model.wgt"

file = file_tf

#-------- model

model = BuildModel()
model.summary()
print()

#-------- train

epochs = 50
early_stop = 10
viewf = False

model1 = TrainModel(model, train_set, epochs, early_stop)
EvaluateModel(model1, train_set, "train:", True)
EvaluateModel(model1, valid_set, "test: ")
print()
SaveModel(file, model1)

#-------- test

print("")
print("Test: model3 = LoadModel(", file, ")")
model3 = LoadModel(file)
EvaluateModel(model3, train_set, "train:", True)
EvaluateModel(model3, valid_set, "test: ")

print()

@yelandgit I tried to run your code on colab using TF v2.6 . I faced value error while reproducing please find the gist here for reference and  confirm the same .Could you please have a look at the link1 ,  link2 and let us know if it helps ? Thanks!

I got error "max() arg is an empty sequence", because program uses external data set (see https://keras.io/examples/vision/captcha_ocr/)
Before to run my code, you need to download and unpack data:
curl -LO https://github.com/AakashKumarNain/CaptchaCracker/raw/master/captcha_images_v2.zip
unzip -qq captcha_images_v2.zip
My program reads data from directory ./data./captcha_images_v2/
Yes, I have seen link1 and link2. I didn't find solution. Advice from kswersky doesn't work for me

I think Save/Load functions don't work correct. The next simple test shows it:
import os
import numpy as np
from pathlib import Path

os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2"

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
#import keras2onnx
#import onnx

# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#               neural net
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

class CTCLayer(layers.Layer):
    def __init__(self, name=None):
        super().__init__(name=name)
        self.loss_fn = keras.backend.ctc_batch_cost

    def call(self, y_true, y_pred):
        # Compute the training-time loss value and add it to the layer using `self.add_loss()`
        batch_len = tf.cast(tf.shape(y_true)[0], dtype="int64")
        input_length = tf.cast(tf.shape(y_pred)[1], dtype="int64")
        label_length = tf.cast(tf.shape(y_true)[1], dtype="int64")

        input_length = input_length * tf.ones(shape=(batch_len, 1), dtype="int64")
        label_length = label_length * tf.ones(shape=(batch_len, 1), dtype="int64")

        loss = self.loss_fn(y_true, y_pred, input_length, label_length)
        self.add_loss(loss)

        # At test time, just return the computed predictions
        return y_pred

def BuildModel():
    # Inputs to the model
    inp = layers.Input(shape=(img_width, img_height, 1), name="image", dtype="float32")
    labels = layers.Input(name="label", shape=(None,), dtype="float32")

    # First conv block
    x = layers.Conv2D(  32, (3, 3),
                        activation="relu",
                        kernel_initializer="he_normal",
                        padding="same",
                        name="Conv1",
                    )(inp)
    x = layers.MaxPooling2D((2, 2), name="pool1")(x)

    # Second conv block
    x = layers.Conv2D(  64, (3, 3),
                        activation="relu",
                        kernel_initializer="he_normal",
                        padding="same",
                        name="Conv2",
                    )(x)
    x = layers.MaxPooling2D((2, 2), name="pool2")(x)

    # We have used two max pool with pool size and strides 2.
    # Hence, downsampled feature maps are 4x smaller.
    # The number of filters in the last layer is 64.
    # Reshape accordingly before passing the output to the RNN part of the model
    new_shape = ((img_width // 4), (img_height // 4) * 64)
    x = layers.Reshape(target_shape=new_shape, name="reshape")(x)
    x = layers.Dense(64, activation="relu", name="dense1")(x)
    x = layers.Dropout(0.2)(x)

    # RNNs
    x = layers.Bidirectional(layers.LSTM(128, return_sequences=True, dropout=0.25))(x)
    x = layers.Bidirectional(layers.LSTM(64, return_sequences=True, dropout=0.25))(x)

    # Output layer
    x = layers.Dense(len(char_to_num.get_vocabulary()) + 1, activation="softmax", name="dense2")(x)

    # Add CTC layer for calculating CTC loss at each step
    out = CTCLayer(name="ctc_loss")(labels, x)

    # Define the model
    model = keras.models.Model(inputs=[inp, labels], outputs=out, name="ocr_model_v1")
    model.compile(optimizer=keras.optimizers.Adam())
    return model

# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#               load / save
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

def LoadModel(file):
    # JSON format
    xfile = os.path.splitext(file)
    if (xfile[1] == ".json"):
        with open(file, "r") as json:
            json_model = json.read()
        model = keras.models.model_from_json(json_model)
        model.load_weights(xfile[0] + ".wgt")

    # ONNX format
    elif (xfile[1] == ".onnx"):
        raise Exception("LoadModel; ONNX format not supported yet")
        model = None

    # TF/Keras format
    else:
        model = keras.models.load_model(file, custom_objects={'leaky_relu': tf.nn.leaky_relu})

    return model

def SaveModel(file, model):
    # JSON format
    xfile = os.path.splitext(file)
    if (xfile[1] == ".json"):
        print("save JSON:", file)
        json_model = model.to_json()
        with open(file, "w") as json:
            json.write(json_model)
        model.save_weights(xfile[0] + ".wgt")

    # ONNX format
    elif (xfile[1] == ".onnx"):
        print("save ONNX:", file)
        onnx_model = keras2onnx.convert_keras(model, model.name)
        onnx.save_model(onnx_model, file)

    # Keras format
    elif (xfile[1] == ".h5" or xfile[1] == ".dnn"):
        print("save HDF5:", file)
        model.save(file, save_format='h5', save_traces=False)

    # TF format
    else:
        print("save TF:", file)
        model.save(file, save_format='tf', save_traces=False)

# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#               main
# ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

img_width = 200
img_height = 50

batch_size = 16

# Get list of all the images
data_dir = Path("./data/captcha_images_v2/")
images = sorted(list(map(str, list(data_dir.glob("*.png")))))
labels = [img.split(os.path.sep)[-1].split(".png")[0] for img in images]
charset = set(char for label in labels for char in label)
max_length = max([len(label) for label in labels])

print()
print("Number of images:  ", len(images))
print("Number of labels:  ", len(labels))
print("Unique characters: ", charset, "=", len(charset))
print("Maximum length:    ", max_length)
print()

# Mapping characters to integers
char_to_num = layers.experimental.preprocessing.StringLookup(vocabulary=list(charset), mask_token=None)

# Mapping integers back to original characters
num_to_char = layers.experimental.preprocessing.StringLookup(vocabulary=char_to_num.get_vocabulary(), mask_token=None, invert=True)

#-------- model

model = BuildModel()
model.summary()
print()

#--------save/load test

xmodel = keras.models.Model(model.get_layer(name="image").input,
                            model.get_layer(name="dense2").output)
SaveModel("m1.h5", xmodel)
m2 = LoadModel("m1.h5")
SaveModel("m2.h5", m2)
m3 = LoadModel("m2.h5")
SaveModel("m3.h5", m3)
m4 = LoadModel("m3.h5")
SaveModel("m4.h5", m4)

print()
All created files (m1.h5, m2.h5, m3.h5, m4.h5) are different, but must be same

@yelandgit Did you try evaluating all four models? How much difference you are noticing? Also, currently it throws a warning about compiling the model. Please find the gist here for our reference.
warnings
save HDF5: m1.h5
WARNING:tensorflow:Compiled the loaded model, but the compiled metrics have yet to be built. `model.compile_metrics` will be empty until you train or evaluate the model.
WARNING:tensorflow:No training configuration found in the save file, so the model was *not* compiled. Compile it manually.
save HDF5: m2.h5
WARNING:tensorflow:Compiled the loaded model, but the compiled metrics have yet to be built. `model.compile_metrics` will be empty until you train or evaluate the model.
WARNING:tensorflow:No training configuration found in the save file, so the model was *not* compiled. Compile it manually.
save HDF5: m3.h5
WARNING:tensorflow:Compiled the loaded model, but the compiled metrics have yet to be built. `model.compile_metrics` will be empty until you train or evaluate the model.
WARNING:tensorflow:No training configuration found in the save file, so the model was *not* compiled. Compile it manually.
save HDF5: m4.h5
WARNING:tensorflow:Compiled the loaded model, but the compiled metrics have yet to be built. `model.compile_metrics` will be empty until you train or evaluate the model.

It's just simple test without training to show different result after save/load. Nothing else
If we are talking about trained model, try 1st source code above this simple test.
Yes, I have tried to evaluate restored model from file after training. The recognition result was 0% vs 99% after training

@yelandgit I tried LSTM model from TF tutorials, trained the model, evaluated model performance, saved the model, loaded saved model, and evaluated performance. The results from original model and loaded_model are very similar. Please check the gist here. Thanks!

Ok, good for you, but I try to train model with LSTM layers using CTC for training, therefore I use example from Keras tutorial OCR model for reading Captchas. Training process works fine, but I cannot restore saved trained model. See my 1st source code

@yelandgit I think this was fixed in recent tf-nightly. I ran your code (like your code, sorry for not using it earlier) and noticed the results are same before and after loading the model. Please check the gist here.
Please verify once and close the issue if this was resolved for you. thanks!


Handle multiple gist dirs by merging them into one

What changes were proposed in this pull request?

Added a try/except just like in get_home_directory to check for Directory.MultipleObjectsReturned exception and merge all the gist directories except one.

This patch fixes #1809 and is inspired from https://github.com/cloudera/hue/pull/1835#pullrequestreview-600269880

First please send a test repro

Made a new followup PR which has test repro first

No sure how we can add a test that repro the failure without also including the code fix :)


Enhancement: Removing the title bar.

It looks really ugly and out of theme on windows, while every other editor also removes it too, so I thought this would be a nice addition. Maybe providing in built, customizable close buttons would also be cool. I don't know about other platforms, but speaking from the perspective of a Windows user.

VSC, iDEA, Brackets, Atom, and a lot of other editors did this, so there should be enough reason to at least try to do this. Plus, the clean look will be really appreciated, and more will be brought to the control of the user.

Thank you for the suggestion, this is a nice idea but it may difficult to implement in a cross-platform way. For the moment I think we will give the priority to improve the functionality of the editor but we can keep this for later.

https://stackoverflow.com/questions/12107374/hide-the-title-bar-and-frame-in-sdl-window
Isn't this all that's required? It will work for platforms that support it automatically, and just ignore it for ones that don't right?

This is interesting to know, thank you for looking at that.
Now, the most complicate part is that we need to re-implement some functions of the title bar yourself. This is the part that requires some careful work.

True, maybe we just need to draw small rectangular close and minimize buttons over RootView and make a mechanism for moving the window, maybe through dragging while right clicking.

This could also be a config thing, if that's at all possible.

So will it be implemented? Not to rush or pressure or anything like that, please go at your own pace :D
A reply would be cool though.

Hi @AqilCont if you care so much about that, it must be important. I will try to implement this when I have time.
@takase1121, @liquidev, what do you think about this proposition ?

Oh heck, you bet I want to tackle this! I'm facing the exact same problem myself on Linux. Expect some work on the subject from me in the following days.

Hi @AqilCont if you care so much about that, it must be important.

Yes, if I'm going to be staring at something for hours, it better look satisfyingly good and this would make it so much nicer looking to my eyes :D
This is honestly disgusting and there's almost no way to change it, unlike the rest of the editor:

Thanks a lot for listening too! Really appreciate every bit of work you put into this, and your part in making this my main editor. I hope I can contribute to this project later on too.

Definite a welcomed enhancement. This is exaggerated by Linux's GUI fragmentation - GTK, QT, openbox themes, blabla. At this point, drawing our own title bar would be so much better.

Alright, design time:

This is my idea for how to implement this. I don't quite know how feasible this is yet, but the plan is to draw the buttons on the top-rightmost tab bar, or if there is no tab bar, draw it straight up on the editor itself when the mouse is close to the top-right corner of the window. I'm not sure how to handle moving the window when only one file is open, though. Maybe we should make it so that the tab bar is always visible?
As for config, my personal setup has the maximize and minimize buttons disabled, as I use a tiling window manager so it doesn't make much sense for those to be visible. For that, I think a config setting should be introduced:
config.titlebar_buttons = { "minimize", "maximize", "close" }

For those who don't like or can't use the compact title bar, we could also use a config setting:
config.compact_titlebar = false

A simpler approach is to use a View that extends above the nagbar. However, you can't draw the compact titlebar that I actually quite liked.
Some more problems with it is potential misclick when there are too many tabs.

Yeah, but then it takes up extra vertical space which is the exact thing I want to avoid with this design. Keep in mind that contemporary monitors are usually wide, not tall, so saving up any vertical space we have is quite essential.

I have an interesting idea - what if we split tabs into its own bar? With that, we could split TitleView horizontally for TabView for compact layout,
or split TabView vertically for conventional layout.`

In that case, what would you put on the TitleView besides the window buttons?

In compact layout: just the buttons
In conventional layout: same old stuff.
The point of TitleView is so that it can be plugged into RootView without changing too much. You could literally put these buttons anywhere you want - on top, on bottom, on side, in the toolbar or something.
Not only that, tabs can also be positioned anywhere - on top or on bottom. This allows people to be creative with the Tree system and came out with cool stuffs.

Hm, I like the idea of allowing users to put the buttons anywhere they want. How would dragging the window work with this idea? I suppose, treat the entire TitleView's area like it's draggable?

Hm, I like the idea of allowing users to put the buttons anywhere they want. How would dragging the window work with this idea? I suppose, treat the entire TitleView's area like it's draggable?

I guess that's the most reasonable way. We could expose SDL_SetWindowHitTest and check if the area is within TitleView.

I didn't know about SDL_SetWindowHitTest, thanks for the pointer. I'll try doing something with it when I find some free time.

Um, what about just removing the title bar and then moving every function to commands/keybinds? As I said before, window movement could also be implemented by right-click-and-drag. This won't require a set UI that needs to be implemented, and lets us actually bring this feature to the masses :D

I actually rely on UI a lot.  If you don't like the title bar, use keys and mouse to navigate and move(until we figure out UI) or just have titlebar if you are too used to it. Better than nothing in my opinion.

Hmm thinking about this a second time, I'm afraid my idea might not work very well. The main issue here is that every doc view gets its own tabs, so it'd be kinda hard to implement the layout @takase1121 suggested.
I think I'll pass on implementing this, maybe someone has a better idea here that doesn't take up a lot of screen real estate and can be implemented reasonably with the editor's current architecture.

Yes, I too realized that after I sent it here. Sorry @liquidev to have you waste your time on this - we should think of something easier to implement.

Nah mate don't need to be sorry! I didn't waste any of my time on trying to implement this, in fact I didn't try to implement this at all, I was just trying to come up with a decent mental model with how this could work, which is part of any single hard to figure out feature like this one.

Um, what about just removing the title bar and then moving every function to commands/keybinds? As I said before, window movement could also be implemented by right-click-and-drag. This won't require a set UI that needs to be implemented, and lets us actually bring this feature to the masses :D

So this has no chance to be implemented? :(

We need time to think about it.
On Sun, Mar 28, 2021, 00:40 Aqil Contractor @.***>
wrote:

Um, what about just removing the title bar and then moving every function
to commands/keybinds? As I said before, window movement could also be
implemented by right-click-and-drag. This won't require a set UI that needs
to be implemented, and lets us actually bring this feature to the masses :D
So this has no chance to be implemented? :(
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/franko/lite-xl/issues/111#issuecomment-808759532, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AE6UHTEN7ABMKK5E6XDEOE3TFYC6BANCNFSM4ZJRTJ3Q
.

Just to share my thoughts about the no-title-bar implementation. I think we all came up to the same conclusions but just to summarize.
The no-title-bar works well for applications who have a single set of tabs. The tabs takes the place normally occupied by the title bar and some space is left on the right for the window's buttons. This is for example how it works for google chrome.
The problem with lite and lite-xl is that the screen can be split and each DocView will have in general its own tabs. The tabs can be even well in the middle of the window if the split is along the vertical direction.
As for the proposition of @AqilCont to completely remove the title bar and its functions, I agree with @takase1121, that would be too extreme and unfriendly to many people who expect the title bar to be there. We don't want to make a niche editor that only a few adepts can use. It has to be usable for any casual user and customizable enough for the advanced users to adapt it to their workflow.

As for the proposition of @AqilCont to completely remove the title bar and its functions, I agree with @takase1121, that would be too extreme and unfriendly to many people who expect the title bar to be there. We don't want to make a niche editor that only a few adepts can use. It has to be usable for any casual user and customizable enough for the advanced users to adapt it to their workflow.

But it can be turned off, and it probably will be by default, so what's the problem with it? This actually brings more customizability, since you can come up with your own UI for the titlebar, and if people get some good ideas, they can just PR. The main thing is that this is a C thing, and we can't change it without cloning the repo and installing C compilers among other tools.

@AqilCont ok, it can be implemented in bare form removing the title bar functionality so that people may get creative with plugins doing interesting things and getting creative. It will be in the next release together with the transparency.

Oh, can there also be an API to move the window around and maybe trigger close or minimize then? Since I'm pretty sure there isn't one right now, and they seem pretty necessary for a GUI.

Of course all of this can be implemented, but we need to find the best way (read compromise) to implement the functionality without affecting the codebase too much. The one that will maintaining it will be us, so its easier if we do it correctly in one go.

@franko maybe if you implement disabling the title bar, you could also expose SDL_SetWindowHitTest in system somehow? So that people are able to notify the system that "hey, this is the title bar and it's draggable". Also if you remove borders don't forget to implement the hit test for resize handles, we don't want to make the window non-resizable by doing this.

@liquidev good point, I will implement the Window Hit Test stuff when removing the title.

Should there be a config file read on restart? Turning it on at app startup and then turning it off in like init.lua or something is probably not very efficient.

No.
you aren't supposed to trigger this yourself. You must always add your own hit test logic before turning it on.

Sorry, I meant the whole title bar removal functionality itself.

Then yes.
On Wed, Mar 31, 2021, 07:51 Aqil Contractor @.***>
wrote:

Sorry, I meant the whole title bar removal functionality itself.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/franko/lite-xl/issues/111#issuecomment-810651091, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AE6UHTAWMRDKJ52L3NOMACTTGJPXRANCNFSM4ZJRTJ3Q
.

I will transfer this issue into discussions.


Process one quert failed because org.apache.doris.common.AnalysisException:errCode=2,detailMessage=Syntax error in line1

Search before asking

[X] I had searched in the issues and found no similar issues.

Version
1.2.3
What's Wrong?
我启动fe后log里一直报错
Process one quert failed because org.apache.doris.common.AnalysisException:errCode=2,detailMessage=Syntax error in line1
... ORDER BY ORDINAL_POSITION SEPARATOR
What You Expected?
怎么解决
How to Reproduce?
No response
Anything Else?
No response
Are you willing to submit PR?

[X] Yes I am willing to submit a PR!

Code of Conduct

[X] I agree to follow this project's Code of Conduct

Hello, is your Doris 1.2.3 environment new or upgraded to 1.2.3? Could you please provide me with more detailed information? Can you add me to WeChat and let's take a look together? My WeChat address is: cylly810222

@cxk502401673 Does this problem still exist？If yes, you can contact me, my Wechat is : lsy3993


typo #0

In section 1. Error Analysis, subsection 1.2, screnshot below

Will address this issue in the next commit in the following matter:


Use floodgate for ratelimiting

I tested it and im pretty confident it works

I think this is blocked until hikari is updated to the newest version

May I ask what the purpose is of using floodgate?

I merged this with upstream—CI passes so it should be reviewed


Join our team applications page

have some page that lets people submit their info who want to join the project and work on the website
we can have a few optional text fields and then when they hit submit it sends the info to discord via a webhook

name
email
github user id
discord user id
tell us about yourself

Hey I can work on it can you provide some context where the team application page

ey I can work on it can you provide some context where the team application

@Acen or @oldben87 I never got a notification for this in the github channel. Does that only go off when a team member posts a comment to an issue?

Not a clue, I didn't see any notifications either


[Feature request] add support for chrome url's?

So I do know that chrome doesn't give extension control over chrome urls but there is a flag and you know it, it's called "Extensions on chrome:// URLs" some devs did implement it
https://stackoverflow.com/questions/19042857/can-you-access-chrome-pages-from-an-extension
https://stackoverflow.com/questions/40159038/flag-extensions-on-chrome-urls-permission-name
I use great suspender extension and I have many pages that are suspended so if you add the support for chrome url's then my problem would be solved or if you can't then give user the power to solve the problem what you have to simply do is add a setting where user add which chrome url's they want to see tab revolution whenever they add a chrome url the extension will work on that what do you think?

Hi :)
I just updated the extension and it now supports chrome URLs, but unfortunately doesn't support other extensions URLs (even the URL is different ["chrome-extension://"]).
I did my research and I truly think that's impossible.
I'm sorry, I use the great suspender myself and I was looking for a solution too...
Thanks for understanding

I can't update seeing this error

Sorry, I didn't see this... this should be fixed now.


update knative serving to v0.21

Signed-off-by: Shyam Jesal<EMAIL_ADDRESS>

need to rebase


x/tools/gopls: thoroughly test new file watching heuristics

This is a reminder issue to thoroughly test gopls' new file watching heuristics (added as part of #57979), especially in VS Code, and especially on Windows, before releasing.
(these heuristics take advantage of recent bug fixes in VS Code, and we need to verify that they actually work as intended).

Hmm, the CL in question, https://go.dev/cl/550075, may have also had a mild impact on BenchmarkReload.

(other benchmarks appear unaffected).
Not significant enough to roll back, but also warranting investigation.

New file watching heuristics seem to work well on Windows.


Boolean point in polygon

Replaces #82

@dellisd thanks for finishing this. Apologies, I failed to get back to applying those changes.


sharing patch\

@turbotoribio Sorry I accidentally approved the wrong PR. Nothing wrong with this PR but I was about to approve another one.


fix: local node gas parse error

when hosting own node there is an bug in parsing message from the node.
I am running geth version 1.13.9-stable-dd938d10
 {'code': -32000, 'message': 'failed with 1679535 gas: max fee per gas less than block base fee: address 0xXXX, maxFeePerGas:<PHONE_NUMBER>3, baseFee:<PHONE_NUMBER>3'}
split2 is then parsed as ['22018912262,', "22998417652'}"] with  , and }" chars that cant be parsed to an integer.

fix by simply removes the chars.

Thank you for submitting the suggested fix.
PR #304 handles this in a more generic manner.
Thanks again!


Trigger docker image manually

closes #209
this includes @the-frey comment
https://github.com/CosmosContracts/juno/pull/209#issuecomment-1135632537

Okay, I think this will work, thanks for the PR. Should still build the release tags too.
@joeabbey second opinion?

https://github.com/CosmosContracts/juno/actions/workflows/docker.yml


Upgrade Evmos to v15.0.0

Evmos will be upgraded to v15.0.0 at block https://www.mintscan.io/evmos/block/16946771
Estimated Time: Nov 6th 2023, 16:59:43
Proposal: https://www.mintscan.io/evmos/proposals/240

ghcr.io/akash-network/cosmos-omnibus:v0.4.1-rc1-evmos-v15.0.0

its normal to not bea ble to sync using v.14.1.0 right now?

@hitchhooker can you give more details?

if your node is still is v14.1.0, you need to use the v15.0.0 because the previous version is not compatible with the new one: https://www.mintscan.io/evmos/parameters
Check the binary version on Mintscan, when it's compatible you have all the versions that are listed.


Deprecate/Rebrand old GenParts

Currently, we still run with "Gen.hs" and "Gen2.hs".
We should clean this up while keeping the old things as bread first search.

[x] Rename Gen.hs to BFS (or something similar)
[x] Rename Gen2 to Gen
[ ] Make a Switch in the Main which Search to Use
[ ] Make an entry in the Configuration which search to use (Related #18)
[x] Maybe: add a layer of modules for search, e.g. Endemic.Search which has Endemic.Search.Genetic & Endemic.Search.BFS

This is partially fixed, the switch will be fixed when we fix #18


Adds ScheduledAction for scaling min/max instances up and down (e.g. during business hours)

This adds a scheduled action to the auto-scaling group to automatically scale up and/or down the min instance count, for example to set a minimum number of agents during business hours.

Are there plans to add this feature to the next release?

Hi @joshross12, there are no plans to release this in the next version specifically, but the broader theme of more configurable and specific scaling options like this is something we’re interested in expanding.
Our challenge is how to package and present the exploding number of configuration options in a way that doesn’t overload a single template for all customers. You voice counts and thank you for letting us know that this is a particular scaling mode you’d like to see available 😃


Scheduling broken with Heap addition

Hi @Syntacticlosure,
I am afraid your recent addition of min-heap completely broke the scheduling.

unit tests  at tests/ are failing,
people are running into issues: https://twitter.com/mikemcmarvelous/status/1267221319478767616

Would you mind taking a look?

Yes,i am looking for the problem.

fix here : #182,
sorry,it's all my fault to upload untested codes.

Great, thanks for the extra-prompt fix!


Convert Automate Methods to new style using classes

Convert the Automate methods to new style using classes to facilitate testing outside the Automate Engine.
Notes:

Each method needs to have a corresponding spec using the same path as the method file.
Most of the methods can be tested outside of the Automate Engine using

Mock Service
Mock Objects

The methods should not have an exit call since that exits RSpec.
As each method is converted we should check the box next to the item
Look for methods which might be the same in Cloud and Infrastructure namespaces.
@billfitzgerald0120 is working on consolidating the email methods so we should check with him before converting email methods.
Why is this necessary

if __FILE__ == $PROGRAM_NAME
  MyMethodClass.new.main
end

This idea is borrowed from Python, which allows us to source in the file without executing any code. The if block gets executed only when we directly pass in the file to the ruby interpreter. When we test the method script we source in the file in the spec and then instantiate it for testing, it allows us to pass in a mock service for testing.
Good sample of a method
https://github.com/ManageIQ/manageiq/blob/master/db/fixtures/ae_datastore/ManageIQ/Cloud/Orchestration/Operations/Methods.class/__methods__/available_availability_zones.rb
Good sample of a spec
https://github.com/ManageIQ/manageiq/blob/master/spec/db/fixtures/ae_datastore/ManageIQ/Cloud/Orchestration/Operations/Methods.class/__methods__/available_availability_zones_spec.rb
The methods have been categorized based on different lifecycle's

Provisioning
Retirement
Reconfigure/Reconfiguration
Operations
Migrate

ManageIQ/Cloud/Orchestration/Operations

[x] /Methods.class/methods/available_availability_zones.rb
[ ] /Methods.class/methods/available_flavors.rb
[ ] /Methods.class/methods/available_images.rb
[ ] /Methods.class/methods/available_os_types.rb
[ ] /Methods.class/methods/available_resource_groups.rb
[x] /Methods.class/methods/available_tenants.rb

ManageIQ/Cloud/Orchestration/Provisioning

[ ] /Email.class/methods/serviceprovision_complete.rb Empty
[ ] /Email.class/methods/servicetemplateprovisionrequest_approved.rb
[ ] /StateMachines/Methods.class/methods/check_provisioned.rb
[ ] /StateMachines/Methods.class/methods/postprovision.rb
[ ] /StateMachines/Methods.class/methods/preprovision.rb
[ ] /StateMachines/Methods.class/methods/provision.rb
[ ] /StateMachines/Provision.class/methods/update_serviceprovision_status.rb

ManageIQ/Cloud/Orchestration/Reconfiguration

[ ] /Email.class/methods/servicereconfigure_complete.rb
[ ] /Email.class/methods/servicereconfigurerequest_approved.rb
[ ] /StateMachines/Methods.class/methods/check_reconfigured.rb
[ ] /StateMachines/Methods.class/methods/postreconfigure.rb
[ ] /StateMachines/Methods.class/methods/prereconfigure.rb
[ ] /StateMachines/Methods.class/methods/reconfigure.rb
[ ] /StateMachines/Reconfigure.class/methods/update_servicereconfigure_status.rb

ManageIQ/Cloud/Orchestration/Retirement

[ ] /Email.class/methods/stack_retirement_emails.rb
[ ] /StateMachines/Methods.class/methods/check_removed_from_provider.rb
[ ] /StateMachines/Methods.class/methods/delete_from_vmdb.rb
[ ] /StateMachines/Methods.class/methods/finish_retirement.rb
[ ] /StateMachines/Methods.class/methods/remove_from_provider.rb
[ ] /StateMachines/Methods.class/methods/start_retirement.rb
[ ] /StateMachines/StackRetirement.class/methods/update_retirement_status.rb

ManageIQ/Cloud/VM/Provisioning

[ ] /Email.class/methods/miqprovision_complete.rb
[ ] /Email.class/methods/miqprovisionrequest_approved.rb
[ ] /Email.class/methods/miqprovisionrequest_denied.rb
[ ] /Email.class/methods/miqprovisionrequest_pending.rb
[x] /Naming.class/methods/vmname.rb
[ ] /Placement.class/methods/best_fit_amazon.rb
[ ] /Placement.class/methods/best_fit_azure.rb
[ ] /Placement.class/methods/best_fit_google.rb
[ ] /Placement.class/methods/best_fit_openstack.rb
[ ] /Profile.class/methods/get_deploy_dialog.rb
[ ] /Profile.class/methods/vm_dialog_name_prefix.rb
[ ] /StateMachines/Methods.class/methods/amazon_customizerequest.rb
[ ] /StateMachines/Methods.class/methods/amazon_postprovision.rb
[ ] /StateMachines/Methods.class/methods/amazon_preprovision.rb
[ ] /StateMachines/Methods.class/methods/amazon_preprovision_clone_to_vm.rb
[ ] /StateMachines/Methods.class/methods/check_provisioned.rb
[ ] /StateMachines/Methods.class/methods/openstack_customizerequest.rb
[ ] /StateMachines/Methods.class/methods/openstack_postprovision.rb
[ ] /StateMachines/Methods.class/methods/openstack_preprovision.rb
[ ] /StateMachines/Methods.class/methods/openstack_preprovision_clone_to_vm.rb
[ ] /StateMachines/Methods.class/methods/postprovision.rb
[ ] /StateMachines/Methods.class/methods/preprovision.rb
[ ] /StateMachines/Methods.class/methods/provision.rb
[ ] /StateMachines/Methods.class/methods/scan.rb
[ ] /StateMachines/ProvisionRequestApproval.class/methods/approve_request.rb
[ ] /StateMachines/ProvisionRequestApproval.class/methods/pending_request.rb
[ ] /StateMachines/ProvisionRequestApproval.class/methods/validate_request.rb
[ ] /StateMachines/ProvisionRequestQuotaVerification.class/methods/rejected.rb
[ ] /StateMachines/ProvisionRequestQuotaVerification.class/methods/validate_quotas.rb
[ ] /StateMachines/VMProvision_VM.class/methods/update_provision_status.rb

ManageIQ/Cloud/VM/Retirement

[ ] /Email.class/methods/vm_retire_extend.rb
[ ] /Email.class/methods/vm_retirement_emails.rb
[ ] /StateMachines/Methods.class/methods/amazon_check_pre_retirement.rb
[ ] /StateMachines/Methods.class/methods/amazon_pre_retirement.rb
[ ] /StateMachines/Methods.class/methods/check_deleted_from_provider.rb
[ ] /StateMachines/Methods.class/methods/check_powered_off.rb
[ ] /StateMachines/Methods.class/methods/check_pre_retirement.rb
[ ] /StateMachines/Methods.class/methods/check_removed_from_provider.rb
[ ] /StateMachines/Methods.class/methods/delete_from_vmdb.rb
[ ] /StateMachines/Methods.class/methods/finish_retirement.rb
[ ] /StateMachines/Methods.class/methods/openstack_pre_retirement.rb
[ ] /StateMachines/Methods.class/methods/pre_retirement.rb
[ ] /StateMachines/Methods.class/methods/remove_from_provider.rb
[ ] /StateMachines/Methods.class/methods/start_retirement.rb
[ ] /StateMachines/VMRetirement.class/methods/update_retirement_status.rb

ManageIQ/ConfigurationManagement/AnsibleTower/Operations

[x] /StateMachines/Job.class/methods/launch_ansible_job.rb
[x] /StateMachines/Job.class/methods/wait_for_completion.rb
[x] /StateMachines/Job.class/methods/wait_for_ip.rb

ManageIQ/ConfigurationManagement/AnsibleTower/Service/Provisioning

[ ] /Email.class/methods/serviceprovision_complete.rb
[ ] /Email.class/methods/servicetemplateprovisionrequest_approved.rb
[ ] /StateMachines/Provision.class/methods/check_provisioned.rb
[ ] /StateMachines/Provision.class/methods/post_provision.rb
[ ] /StateMachines/Provision.class/methods/preprovision.rb
[ ] /StateMachines/Provision.class/methods/provision.rb
[ ] /StateMachines/Provision.class/methods/update_serviceprovision_status.rb

ManageIQ/Control/

[ ] /Email.class/methods/ems_cluster_alert.rb
[ ] /Email.class/methods/ext_management_system_alert.rb
[ ] /Email.class/methods/host_alert.rb
[ ] /Email.class/methods/miq_server_alert.rb
[ ] /Email.class/methods/parse_alerts.rb
[ ] /Email.class/methods/storage_alert.rb
[ ] /Email.class/methods/vm_alert.rb

ManageIQ/Deployment/ContainerProvider/System/

[ ] /StateMachine/Deployment.class/methods/add_provider.rb
[ ] /StateMachine/Deployment.class/methods/analyze_deployment.rb
[ ] StateMachine/Deployment.class/methods/check_ssh.rb
[ ] /StateMachine/Deployment.class/methods/cleanup.rb
[ ] /StateMachine/Deployment.class/methods/deployment.rb
[ ] /StateMachine/Deployment.class/methods/post_provision.rb
[ ] /StateMachine/Deployment.class/methods/pre_deployment.rb
[ ] /StateMachine/Deployment.class/methods/pre_validate.rb
[ ] /StateMachine/Deployment.class/methods/provision.rb

ManageIQ/Infrastructure/Cluster/Operations

[ ] /Methods.class/methods/cluster_workload_management.rb

ManageIQ/Infrastructure/Configured_System/Provisioning

[ ] /Email.class/methods/provision_complete.rb
[ ] /Email.class/methods/request_approved.rb
[ ] /StateMachines/Methods.class/methods/check_provisioned.rb
[ ] /StateMachines/Methods.class/methods/preprovision.rb
[ ] /StateMachines/Methods.class/methods/provision.rb
[ ] /StateMachines/Provision.class/methods/update_provision_status.rb
[ ] /StateMachines/ProvisionRequestApproval.class/methods/approve_request.rb
[ ] /StateMachines/ProvisionRequestApproval.class/methods/pending_request.rb
[ ] /StateMachines/ProvisionRequestApproval.class/methods/validate_request.rb
[ ] /StateMachines/ProvisionRequestQuotaVerification.class/methods/rejected.rb
[ ] /StateMachines/ProvisionRequestQuotaVerification.class/methods/validate_quotas.rb

ManageIQ/Infrastructure/Host/Operations

[ ] /Methods.class/methods/host_evacuation.rb

ManageIQ/Infrastructure/Host/Provisioning

[ ] /Email.class/methods/miqhostprovision_complete.rb
[ ] /Email.class/methods/miqhostprovisionrequest_approved.rb
[ ] /Profile.class/methods/get_deploy_dialog.rb
[ ] /StateMachines/HostProvision.class/methods/update_provision_status.rb
[ ] /StateMachines/Methods.class/methods/check_provisioned.rb
[ ] /StateMachines/Methods.class/methods/customizerequest.rb
[ ] /StateMachines/Methods.class/methods/postprovision_host.rb
[ ] /StateMachines/Methods.class/methods/preprovision_host.rb
[ ] /StateMachines/Methods.class/methods/provision.rb

ManageIQ/Infrastructure/VM/Migrate

[ ] /Email.class/methods/vmmigraterequest_approved.rb
[ ] /Email.class/methods/vmmigratetask_complete.rb
[ ] /Profile.class/methods/get_deploy_dialog.rb
[ ] /StateMachines/Methods.class/methods/besthost.rb
[ ] /StateMachines/Methods.class/methods/beststorage.rb
[ ] /StateMachines/Methods.class/methods/checkmigration.rb
[ ] /StateMachines/Methods.class/methods/migrate.rb
[ ] /StateMachines/Methods.class/methods/postmigration.rb
[ ] /StateMachines/Methods.class/methods/premigration.rb
[ ] /StateMachines/VMMigrate.class/methods/update_migration_status.rb

ManageIQ/Infrastructure/VM/Operations

[ ] /Methods.class/methods/vm_placement_optimization.rb

ManageIQ/Infrastructure/VM/Provisioning

[ ] /Email.class/methods/miqprovision_complete.rb
[ ] /Email.class/methods/miqprovisionrequest_approved.rb
[ ] /Email.class/methods/miqprovisionrequest_denied.rb
[ ] /Email.class/methods/miqprovisionrequest_pending.rb
[x] /Naming.class/methods/vmname.rb
[ ] /Placement.class/methods/microsoft_best_fit_least_utilized.rb
[ ] /Placement.class/methods/redhat_best_fit_cluster.rb
[ ] /Placement.class/methods/vmware_best_fit_least_utilized.rb
[ ] /Profile.class/methods/get_deploy_dialog.rb
[ ] /Profile.class/methods/vm_dialog_name_prefix.rb
[ ] /StateMachines/Methods.class/methods/check_provisioned.rb
[ ] /StateMachines/Methods.class/methods/provision.rb
[ ] /StateMachines/Methods.class/methods/redhat_customizerequest.rb
[ ] /StateMachines/Methods.class/methods/redhat_postprovision.rb
[ ] /StateMachines/Methods.class/methods/redhat_preprovision.rb
[ ] /StateMachines/Methods.class/methods/redhat_preprovision_clone_to_template.rb
[ ] /StateMachines/Methods.class/methods/redhat_preprovision_clone_to_vm.rb
[ ] /StateMachines/Methods.class/methods/scan.rb
[ ] /StateMachines/Methods.class/methods/vmware_customizerequest.rb
[ ] /StateMachines/Methods.class/methods/vmware_postprovision.rb
[ ] /StateMachines/Methods.class/methods/vmware_preprovision.rb
[ ] /StateMachines/Methods.class/methods/vmware_preprovision_clone_to_template.rb
[ ] /StateMachines/Methods.class/methods/vmware_preprovision_clone_to_vm.rb
[ ] /StateMachines/ProvisionRequestApproval.class/methods/approve_request.rb
[ ] /StateMachines/ProvisionRequestApproval.class/methods/pending_request.rb
[ ] /StateMachines/ProvisionRequestApproval.class/methods/validate_request.rb
[ ] /StateMachines/ProvisionRequestQuotaVerification.class/methods/rejected.rb
[ ] /StateMachines/ProvisionRequestQuotaVerification.class/methods/validate_quotas.rb
[ ] /StateMachines/VMProvision_Template.class/methods/update_provision_status.rb
[ ] /StateMachines/VMProvision_VM.class/methods/update_provision_status.rb

ManageIQ/Infrastructure/VM/Reconfigure

[ ] /Email.class/methods/vmreconfigure_request_approved.rb
[ ] /Email.class/methods/vmreconfigure_task_complete.rb

ManageIQ/Infrastructure/VM/Retirement

[ ] /Email.class/methods/vm_retire_extend.rb
[ ] /Email.class/methods/vm_retirement_emails.rb
[ ] /StateMachines/Methods.class/methods/check_powered_off.rb
[ ] /StateMachines/Methods.class/methods/check_pre_retirement.rb
[ ] /StateMachines/Methods.class/methods/check_removed_from_provider.rb
[ ] /StateMachines/Methods.class/methods/delete_from_vmdb.rb
[ ] /StateMachines/Methods.class/methods/finish_retirement.rb
[ ] /StateMachines/Methods.class/methods/power_off.rb
[ ] /StateMachines/Methods.class/methods/pre_retirement.rb
[ ] /StateMachines/Methods.class/methods/remove_from_provider.rb
[ ] /StateMachines/Methods.class/methods/start_retirement.rb
[ ] /StateMachines/VMRetirement.class/methods/update_retirement_status.rb

ManageIQ/Service/Provisioning/

[ ] /Email.class/methods/serviceprovision_complete.rb
[ ] /Email.class/methods/servicetemplateprovisionrequest_approved.rb
[ ] /Email.class/methods/servicetemplateprovisionrequest_denied.rb
[ ] /Email.class/methods/servicetemplateprovisionrequest_pending.rb
[ ] /Email.class/methods/servicetemplateprovisionrequest_warning.rb
[ ] /ServiceFilter.class/methods/filterbydialogparameters.rb
[ ] /StateMachines/Methods.class/methods/catalogbundleinitialization.rb
[ ] /StateMachines/Methods.class/methods/catalogiteminitialization.rb
[ ] /StateMachines/Methods.class/methods/check_provisioned.rb
[ ] /StateMachines/Methods.class/methods/dialog_parser.rb
[ ] /StateMachines/Methods.class/methods/groupsequencecheck.rb
[ ] /StateMachines/Methods.class/methods/provision.rb
[ ] /StateMachines/Methods.class/methods/statemachine_finished.rb
[ ] /StateMachines/ServiceProvisionRequestApproval.class/methods/approve_request.rb
[ ] /StateMachines/ServiceProvisionRequestApproval.class/methods/pending_request.rb
[ ] /StateMachines/ServiceProvisionRequestApproval.class/methods/validate_request.rb
[ ] /StateMachines/ServiceProvision_Template.class/methods/update_serviceprovision_status.rb

ManageIQ/Service/Retirement

[ ] /StateMachines/Methods.class/methods/check_service_retired.rb
[ ] /StateMachines/Methods.class/methods/delete_service_from_vmdb.rb
[ ] /StateMachines/Methods.class/methods/finish_retirement.rb
[ ] /StateMachines/Methods.class/methods/get_retirement_entrypoint.rb
[ ] /StateMachines/Methods.class/methods/mark_service_as_retired.rb
[ ] /StateMachines/Methods.class/methods/retire_service.rb
[ ] /StateMachines/Methods.class/methods/start_retirement.rb
[ ] /StateMachines/ServiceRetirement.class/methods/update_service_retirement_status.rb

ManageIQ/System

[ ] /CommonMethods/QuotaMethods.class/methods/limits.rb
[ ] /CommonMethods/QuotaMethods.class/methods/quota_source.rb
[ ] /CommonMethods/QuotaMethods.class/methods/requested.rb
[ ] /CommonMethods/QuotaMethods.class/methods/used.rb
[ ] /CommonMethods/QuotaMethods.class/methods/validate_quota.rb
[ ] /CommonMethods/QuotaStateMachine.class/methods/rejected.rb
[ ] /CommonMethods/StateMachineMethods.class/methods/task_finished.rb
[ ] /Policy.class/methods/get_request_type.rb
[ ] /Policy.class/methods/miqhostprovision_auto_approve.rb
[ ] /Policy.class/methods/vmmigraterequest_auto_approve.rb
[ ] /Policy.class/methods/vmreconfigure_request_auto_approve.rb
[ ] /Request.class/methods/inspectme.rb

Closed in favor of https://github.com/ManageIQ/manageiq-content/issues/8


utils.second is not a function

17:04:39 - error: backpack.tf Automatic crashed! Please create an issue with the following log:
crash: Automatic.version: 1.3.3; node: v10.11.0 win32 x64; Contact:<PHONE_NUMBER>6655074
crash: Stack trace::
TypeError: utils.seconds is not a function
at removeOldOffers (C:\Users\herni\Desktop\sandvich\app\trade.js:1356:27)
at TradeOfferManager.savePollData (C:\Users\herni\Desktop\sandvich\app\trade.js:1345:16)
at TradeOfferManager.emit (events.js:182:13)
at getOffers (C:\Users\herni\Desktop\sandvich\node_modules\steam-tradeoffer-manager\lib\polling.js:268:9)
at Helpers.checkNeededDescriptions (C:\Users\herni\Desktop\sandvich\node_modules\steam-tradeoffer-manager\lib\index.js:500:4)
at Async.map (C:\Users\herni\Desktop\sandvich\node_modules\steam-tradeoffer-manager\lib\assets.js:171:4)
at C:\Users\herni\Desktop\sandvich\node_modules\steam-tradeoffer-manager\node_modules\async\dist\async.js:1140:9
at C:\Users\herni\Desktop\sandvich\node_modules\steam-tradeoffer-manager\node_modules\async\dist\async.js:473:16
at iteratorCallback (C:\Users\herni\Desktop\sandvich\node_modules\steam-tradeoffer-manager\node_modules\async\dist\async.js:1064:13)
at C:\Users\herni\Desktop\sandvich\node_modules\steam-tradeoffer-manager\node_modules\async\dist\async.js:969:16
17:04:39 - error: Create an issue here: https://bitbucket.org/jessecar/backpack.tf-automatic/issues/new
Press any key to continue . . .
I have coppied only trade.js and all the moduls needed, any help?

This is not the place to ask for help about bptf automatic


Profile Error in Cura for MakerGear M2

Error that is gives:
;POSTPROCESSED
Error is "could not convert string to float: '0.1F10000;moveoffthebedandbringthebedup'"

For some reason micer doesn't work with some printers in cura, should work with Ultimaker S5 though


v0.6.7 NPC Sheet broken?

Opened one of my NPCs  and changed the sheet to pdfoundry.PDFActorSheetAdapter. Produced a blank pdf view. Wanted to change it back, so clicked Sheet Select. This opens a dialog with a Select Sheet dropdown and a Conform button. The dropdown is empty. I cannot change to a different sheet.
Foundry 0.6.6 via Node
DND5e 0.96
Will disable other modules and re-test.

With only TidyUi and PDFoundry enabled, above behavior still present.

Perhaps I am not understanding the issue - this sounds like it's working as intended and you simply don't have any Form Fillable Actor Sheet PDFs configured, were you expecting something else to happen? If you're looking to change the sheet back to your system version you want the one with the cogwheel icon by itself. I think it's labeled "Sheet".

Aha! Ok, makes sense that I'd need a form fillable character sheet set up, sorry about that. And yes, I wanted to change back. Never occurred to me to click Settings instead of Select Sheet. All good now, please close this issue. Thanks!(And PDFoundry is friggin AMAZING!

Glad you're enjoying it and glad to hear there is no issue. Happy gaming!


Error: Failed to connect to chrome! ['--no-sandbox'] does not fix my issue

I am getting the same error as issue #290, however {args: ['--no-sandbox']} does nothing to fix my issue.
Error:
(node:17264) UnhandledPromiseRejectionWarning: Unhandled promise rejection
(rejection id: 1): Error: Failed to connect to chrome!
(node:17264) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

I've installed the dependency list, from issue #290. I've done many re-installations. I also upgraded to the latest version of Node. No luck.
Operating System
Ubuntu ->  Linux valor 4.4.0-78-generic #99-Ubuntu SMP Thu Apr 27 15:29:09 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Node Version
v8.4.0 (Also tried 7.10)
User
Not running as root, being ran as a sudo user.

Okay, so I figured it out.
I had to change the ownership from my root to my local account. After it was able to be ran without sudo, however if you do use sudo the --no-sandbox does fix it (assuming you have ownership).
Is this good practice?

https://www.google.com/googlebooks/chrome/med_26.html

Running as root is not a good practice. You should never run as root unless you need to.

Unless in Docker, where running from root is ok and default

Docker would fall under the "need to" situation, yes.


Refactor HttpHandler interface for android

HttpHandler is an interface which can be implemented by the client to
override the default implementation (DefaultHttpHandler)

HttpHandler.Callback interface provides methods for network response handling for native code.

Client will wrap HttpHandler.Callback in its implementation dependent callback
- Example DefaultHttpHandler wraps Tangram.HttpHandler.Callback in okhttp3.Callback

DefaultHttpHandler provides a default HttpHandler implementation which
clients can use if none is provided by the client app.
- Overrides HttpHandler methods
- Wraps HttpHandler.Callback in OkHttp3.Callback

[ ] Figure out best possible way to use network headers for cache control and govern cache policy.

Yeah I agree with most of your naming comments. Will address couple of more things here.

Ok I think the last thing to work out here is what do about request/response headers (including cache-control). The only use-cases I can think of are:

Client app wants to customize the cache control for certain URLs
Client app wants to insert custom headers into requests for analytics or authorization
Are there other common things we'd want to be able to do with headers?


PackageJsonUtils: Handle exceptions caused by invalid package.json files

If a package.json cannot be parsed, log the exception and continue with
a reasonable default value.

This change is

Could you please also amend the commit message with the reason why we're not able to parse a package.json file in this case (because it is empty, not because it contains invalid syntax).

I discovered the issue with an empty file, but it could be any invalid JSON causing the same issue.

I discovered the issue with an empty file, but it could be any invalid JSON causing the same issue.

Sure, but I still believe it's a good example, esp. as personally I wouldn't consider an empty package.json file to be invalid syntax. So thanks for amending the commit message.


\scriptstyle is not implemented

Seems this should be rendered with scriptlevel.

TEX's \displaystyle, \textstyle, \scriptstyle, and \scriptscriptstyle correspond to displaystyle and scriptlevel as true and 0, false and 0, false and 1, and false and 2, respectively.

So:

latex
displaystyle=
scriptlevel=

\displaystyle
true
0

\textstyle
false
0

\scriptstyle
false
1

\scriptscriptstyle
false
2

temml uses <mstyle> for this, but I think we should just set this directly on the <mrow>.


React Native 0.72.3 issue building on v10.0.0

▸ Compiling RNVectorIconsManager.m
❌  /Users/bill_1/theclub/TheClub/ios/build/generated/ios/RNVectorIconsSpec/RNVectorIconsSpec.h:15:2: This file must be compiled as Obj-C++. If you are importing it, you must change your file extension to .mm.

#error This file must be compiled as Obj-C++. If you are importing it, you must change your file extension to .mm.
 ^

❌  /Users/bill_1/theclub/TheClub/ios/Pods/Headers/Public/RCTRequired/RCTRequired/RCTRequired.h:8:10: 'utility' file not found

#include <utility>
         ^~~~~~~~~

❌  /Users/bill_1/theclub/TheClub/node_modules/react-native/Libraries/TypeSafety/RCTConvertHelpers.h:8:9: 'optional' file not found

#import <optional>

OK I was able to fix it. 3 things need changing fr RN 0.72.3.

Rename RNVectorIconsManager/RNVectorIconsManager.m  to RNVectorIconsManager/RNVectorIconsManager.mm
Fix RNVectorIcons.podspec (for lower version <  0.72 you will need to check for fabric before adding install_modules_dependencies(s))

require 'json'
version = JSON.parse(File.read('package.json'))["version"]

fabric_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1'

folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'

Pod::Spec.new do |s|

  s.name           = "RNVectorIcons"
  s.version        = version
  s.summary        = "Customizable Icons for React Native with support for NavBar/TabBar, image source and full styling."
  s.homepage       = "https://github.com/oblador/react-native-vector-icons"
  s.license        = "MIT"
  s.author         = { "Joel Arvidsson" =><EMAIL_ADDRESS>}
  s.platforms      = { :ios => "12.4", :tvos => "9.0" }
  s.source         = { :git => "https://github.com/oblador/react-native-vector-icons.git", :tag => "v#{s.version}" }
  s.source_files   = 'RNVectorIconsManager/**/*.{h,m,mm,swift}'
  s.resources      = "Fonts/*.ttf"
  s.preserve_paths = "**/*.js"
  s.pod_target_xcconfig = {
    "CLANG_CXX_LANGUAGE_STANDARD" => "c++17"
  }

  if fabric_enabled
    s.dependency "React-utils"
    s.subspec "xxxutils" do |ss|
      ss.dependency "ReactCommon"
      ss.dependency "React-utils"
      ss.source_files         = "react/utils/**/*.{cpp,h}"
      ss.header_dir           = "react/utils"
      ss.pod_target_xcconfig  = { "HEADER_SEARCH_PATHS" => "\"${PODS_CONFIGURATION_BUILD_DIR}/React-utils/React_utils.framework/Headers\"" }
    end
  end

  install_modules_dependencies(s)

end

FIx name of turbo module

-    return std::make_shared<facebook::react::RNVectorIconsSpecJSI>(params);
+    return std::make_shared<facebook::react::NativeRNVectorIconsSpecJSI>(params);

Changing RNVectorIconsManager/RNVectorIconsManager.m to RNVectorIconsManager/RNVectorIconsManager.mm fixed my build

@billnbell Similar to my question in #1538, should  #1530 solve this?
I've tested with NO_FLIPPER=1 USE_FRAMEWORKS=static RCT_NEW_ARCH_ENABLED=1 pod install
and it seems to compile fine with the patch

Although it also seems to compile without in my testing

Yes!

OK I was able to fix it. 3 things need changing fr RN 0.72.3.

Rename RNVectorIconsManager/RNVectorIconsManager.m  to RNVectorIconsManager/RNVectorIconsManager.mm
Fix RNVectorIcons.podspec (for lower version <  0.72 you will need to check for fabric before adding install_modules_dependencies(s))

require 'json'
version = JSON.parse(File.read('package.json'))["version"]

fabric_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1'

folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'

Pod::Spec.new do |s|

  s.name           = "RNVectorIcons"
  s.version        = version
  s.summary        = "Customizable Icons for React Native with support for NavBar/TabBar, image source and full styling."
  s.homepage       = "https://github.com/oblador/react-native-vector-icons"
  s.license        = "MIT"
  s.author         = { "Joel Arvidsson" =><EMAIL_ADDRESS>}
  s.platforms      = { :ios => "12.4", :tvos => "9.0" }
  s.source         = { :git => "https://github.com/oblador/react-native-vector-icons.git", :tag => "v#{s.version}" }
  s.source_files   = 'RNVectorIconsManager/**/*.{h,m,mm,swift}'
  s.resources      = "Fonts/*.ttf"
  s.preserve_paths = "**/*.js"
  s.pod_target_xcconfig = {
    "CLANG_CXX_LANGUAGE_STANDARD" => "c++17"
  }

  if fabric_enabled
    s.dependency "React-utils"
    s.subspec "xxxutils" do |ss|
      ss.dependency "ReactCommon"
      ss.dependency "React-utils"
      ss.source_files         = "react/utils/**/*.{cpp,h}"
      ss.header_dir           = "react/utils"
      ss.pod_target_xcconfig  = { "HEADER_SEARCH_PATHS" => "\"${PODS_CONFIGURATION_BUILD_DIR}/React-utils/React_utils.framework/Headers\"" }
    end
  end

  install_modules_dependencies(s)

end

FIx name of turbo module

-    return std::make_shared<facebook::react::RNVectorIconsSpecJSI>(params);
+    return std::make_shared<facebook::react::NativeRNVectorIconsSpecJSI>(params);

where did you get these files from? @billnbell

It's under node_modules/react-native-vector-icons/RNVectorIcons.podspec

This error is happening on 0.72.4, with RCT_NEW_ARCH_ENABLED=1

This error is happening on 0.72.4, with RCT_NEW_ARCH_ENABLED=1

Same with 0.72.5

Will this be addressed?

Closing in favour of #1538

i have the same problem in react native 0.73.6


Allow for "overriding" HybridClasses

Description
This introduces a mechanism that can allow to override HybridClasses by:

letting the user change the name of the underlying XoStruct
taking the "newer" XoStruct in sort_classes if two are provided

This is useful for defining multiple implementations of Particles class. The base specifies the interface xobject that all Particles need to conform to. These can then be overriden to add more fields or custom C methods.
Needed for xsuite/xpart#72.
Checklist
Mandatory:

[ ] I have added tests to cover my changes
[ ] All the tests are passing, including my new ones
[x] I described my changes in this PR description

Optional:

[x] The code I wrote follows good style practices (see PEP 8 and PEP 20).
[ ] I have updated the docs in relation to my changes, if applicable
[x] I have tested also GPU contexts

Replaced by #96.


Example with equalTo

Hey,
Could you provide example of mock that will expect specific value of argument. I know that there is an example with String in readme, but for it doesn't work for me with any other class/struct.

By default equalTo can be used three ways:

Having the type you want to check implement Equatable. Then Cuckoo will use Swift's == operator function to compare the given object with the argument.

Having the type you want to check be a class. Then Cuckoo will use Swift's === (object identity) operator function to compare the instance of given object with the argument. This means it will check if both of them are identical instances.

You can pass an equality function of your own as a second parameter (or a trailing closure) to the equalTo function. That closure would have two parameters and you need to return true or false to indicate if the given object is equal to the argument. This allows you to implement your own comparing logic without the hassle of implementing Equatable.

There are more complex options like implementing Matchable, but you should not need to do it.
Let me know if I can help more and see MatcherFunctions.swift for the list of all builtin helper functions.

Having the type you want to check implement Equatable. Then Cuckoo will use Swift's == operator function to compare the given object with the argument.

For me it works only with build in types.
And how would you approach comparing collection types.
And Thx for the library ;)

You have to use the function equalTo (or the short eq). For example when(anObject.someMethod(eq(yourEquatable)).thenReturn(...).
Collection types, great question. I wanted to implement something like: extension SequenceType: Matchable where Generator.Element: Equatable { ... } however that cannot be done in the current version of Swift. I wanted to add equalTo for SequenceType, but I forgot to do it. I might be able to add it by the end of the week though :)
Thanks for using it!

It would be awesome to get that collection comparison.
I thing this will be my favourite mocking framework :P you will see me here more often. Are you open for PR?

Sure, PR are always welcome :) Especially tests and documentation need some love :)