Slot addition request - Music Genre

Would it be possible in future releases to add a tenth slot, MusicGenre?  Perhaps  it would be too slow with a large music library.

This is something I'd like to see implemented.. not ignoring you, just been busy with other things.

Just thinking out-loud a bit here.. I personally solve this problem with smart playlists, which works out better for me, since I can never remember the ultra-specific subgenres they're assigning to music these days anyway.
I'm mostly worried about how to invoke this.  There are so many phrases involved in music as it is, so it's a bit more complex than it is for movies.  I'm worried about collisions with the current utterances for music.
If we simply document the playlists feature better, I think it can take care of this issue for us.
For example, I have a smart playlist in Kodi that's called "Rock."  It encompasses the following genres:
Rock
Industrial
Punk
Classic Rock

It's better tailored to what I mean when I say, "rock," than just using the genre tags in the library for just "rock."
The above example was admittedly a simple one, but with a large library, you end up with dozens of genres that no one's likely to remember on a whim, I think.
Thoughts?

Making genre smart playlists like this with #146 means you can just say something like:
Alexa, ask Kodi to play Rock

@mcl22 brought up a good point on the forums:  this is useful for when a particular artist encompasses more than one genre.
We could allow, for example:
"Alexa, ask Kodi to listen to christmas music by Scott Weiland"

Playlists sounds like a good solution.  I created a playlist 'Classical'.  It seems a bit fussy to invoke, but is works.  'Alexa, ask kodi to play music classical' works.
'Alexa, ask kodi to listen to music playlist classical' fails with the' one or more items failed to play message'.  'Alexa, ask kodi to play music playlist classical' causes Alexa to say 'playing playlist classical' but nothing happens. Can anyone reproduce this?

It's important to distinguish between Alexa's own errors and the errors coming from the skill.  One or more items failed to play is, I think, from Amazon.
Amazon seems to, in general, want badly to direct anything related to music to its own services, so we end up having a hard time getting things passed to the skill.  The best thing I've found to do is to tell her she didn't do the right thing in the Alexa App.  As well, when she does do it right, reward her in the App.  I know this sounds odd.. but it works..
The following utterances are explicitly supplied for invoking an audio playlist (using your Classical example):
"Alexa, ask Kodi to listen to Classical playlist"
"Alexa, ask Kodi to listen to Classical audio/music/song playlist"
"Alexa, ask Kodi to listen to audio/music/song playlist Classical"
"Alexa, ask Kodi to play Classical audio/music/song playlist"
"Alexa, ask Kodi to play audio/music/song playlist Classical"
"Alexa, ask Kodi to shuffle Classical playlist"
"Alexa, ask Kodi to shuffle Classical audio/music/song playlist"
"Alexa, ask Kodi to shuffle audio/music/song playlist Rock"
"Alexa, ask Kodi to listen to Classical"
"Alexa, ask Kodi to play Classical"
Note that the last two utterances are generic and, as such, they search the entire library; however, we search playlists first, so this shouldn't be a problem in this case.  It does search video playlists first, though, so if you have a video playlist that might match against "classical," it could catch that instead.
All of the above utterances work for me (I just tried each and every one).

I will test each of those.  Better yet, I will ask my wife to test them also.  Here higher pithed voice sometimes gives a different and better result.  In some quick testing the oddest result is from:
"Alexa, ask Kodi to shuffle Classical playlist"
This gives: 'error parsing results'  I created a Jazz playlist including only the genre Jazz, same result.  Cloudwatch shows:
[INFO]	2017-05-26T15:42:16.158Z	e4ecb5e9-4229-11e7-9175-efbf230205ba	<IP_ADDRESS> - - [26/May/2017:15:42:16 +0000] "POST / HTTP/1.1" 200 251 "" "Apache-HttpClient/4.5.x (Java/1.8.0_112)" 0/58.509
Kodi and not skill issue?
Bill

Run zappa tail dev and repeat the request.  Please post the output here.

Wow. That's a lot of 'stuff'.  I will post what apprears to be the shuffle result only.   I should mention that I invoke the skill with 'kodi media' rather than kodi.
[1495814087386] Sending request to http://orangecaweather.duckdns.org:8080/jsonr
pc from device amzn1.ask.device.AEZLGMCZYGUKF4YDEXY2VTXIWWZTEOOYK4C74NCON5GF2DJF
6CDN4BD4WWSNX56CQ5G57NVTC3DVCS2WODDFMFJCBDJOPJZAGBGBCBK62RJ7JAVFCFGXYRQYJF43OJ2K
N3BSYC6WOEJCPKCUYXRV3GLJRUSQ
[1495814087561] Sending request to http://orangecaweather.duckdns.org:8080/jsonr
pc from device amzn1.ask.device.AEZLGMCZYGUKF4YDEXY2VTXIWWZTEOOYK4C74NCON5GF2DJF
6CDN4BD4WWSNX56CQ5G57NVTC3DVCS2WODDFMFJCBDJOPJZAGBGBCBK62RJ7JAVFCFGXYRQYJF43OJ2K
N3BSYC6WOEJCPKCUYXRV3GLJRUSQ
[1495814087919] [INFO] 2017-05-26T15:54:47.919Z a4bac5be-422b-11e7-9c35-19d322f9
14de <IP_ADDRESS> - - [26/May/2017:15:54:47 +0000] "POST / HTTP/1.1" 200 239 ""
"Apache-HttpClient/4.5.x (Java/1.8.0_112)" 0/603.14
[1495814303448] Shuffling playlist
[1495814303450] [INFO] 2017-05-26T15:58:23.450Z 257afa57-422c-11e7-96c2-95f403f6
1f96 <IP_ADDRESS> - - [26/May/2017:15:58:23 +0000] "POST / HTTP/1.1" 200 251 ""
"Apache-HttpClient/4.5.x (Java/1.8.0_112)" 0/121.169
Should I redact any of that?

Yes, you should redact any unique IDs/IPs.. like the amazn1.ask.device.XXX IDs and your hostname (http://xxx.duckdns.org).
But.. it looks like it's not passing the slot item in.  Playlist slots tend to be small, so they probably need to be explicitly specified in the slots for things to work.

In other words, put Classical and Jazz in your MUSICPLAYLISTS slot, save the skill, and try again.

Much better.  The commands seem to be passing through the skill okay but then running into trouble within Kodi.  "Alexa, ask Kodi to play Classical" results in the "one or more items failed to play message.  Here's what was in the Kodi logfile:
09:23:36.212 T:1943163536  NOTICE: VideoPlayer: Opening: special://profile/playlists/music/Classical.xsp
09:23:36.212 T:1943163536 WARNING: CDVDMessageQueue(player)::Put MSGQ_NOT_INITIALIZED
09:23:36.212 T:1789543328  NOTICE: Creating InputStream
09:23:36.216 T:1789543328  NOTICE: Creating Demuxer
09:23:36.220 T:1789543328   ERROR: Open - error probing input format, special://profile/playlists/music/Classical.xsp
09:23:36.220 T:1789543328   ERROR: OpenDemuxStream - Error creating demuxer
09:23:36.220 T:1789543328  NOTICE: CVideoPlayer::OnExit()
09:23:36.220 T:1943163536   ERROR: Playlist Player: skipping unplayable item: 0, path [special://profile/playlists/music/Classical.xsp]
09:23:36.221 T:1943163536  NOTICE: CVideoPlayer::CloseFile()
09:23:36.221 T:1943163536  NOTICE: VideoPlayer: waiting for threads to exit
09:23:36.221 T:1943163536  NOTICE: VideoPlayer: finished waiting
09:23:36.221 T:1943163536  NOTICE: CVideoPlayer::CloseFile()
09:23:36.221 T:1943163536  NOTICE: VideoPlayer: waiting for threads to exit
09:23:36.221 T:1943163536  NOTICE: VideoPlayer: finished waiting
Videoplayer! completely wrong!

Need to see the zappa log too.

[1495816303083] Searching for audio playlist "classical"
[1495816303083] Sending request to http://redacted/jsonr
pc from device amzn1.ask.device.redacted
[1495816303275] Trying to match: classical
[1495816303275] Simple match on direct comparison
[1495816303275] Located audio playlist "Classical"
[1495816303275] Sending request to http://redacted
pc from device amzn1.ask.device.redacted
[1495816304340] Sending request to http://redacted pc from device amzn1.ask.device.
redactred
[1495816304512] Sending request to http://redacted pc from device amzn1.ask.device.redacted[1495816304735] Adding 100 items to the queue...
[1495816304735] Sending request to httpredactedpc from device amzn1.ask.device.redacted
[1495816307262] Sending request to http://redacted pc from device amzn1.ask.device.redacted
[1495816308094] [INFO] 2017-05-26T16:31:48.94Z cd2b748b-4230-11e7-8e66-35349efbd
fc6 <IP_ADDRESS> - - [26/May/2017:16:31:48 +0000] "POST / HTTP/1.1" 200 286 ""
"Apache-HttpClient/4.5.x (Java/1.8.0_112)" 0/5435.766
[1495816427118] Playing audio playlist
[1495816427407] Trying to match: classical
[1495816427407] Simple match on direct comparison
[1495816427407] Located audio playlist "Classical"
[1495816427407] Sending request to http://redacted pc from device amzn1.ask.device.redacted
[1495816427575] Sending request to http redacted pc from device amzn1.ask.device.redacted
[1495816428248] [INFO] 2017-05-26T16:33:48.247Z 1741107a-4231-11e7-bfa1-95a5341e
5342 <IP_ADDRESS> - - [26/May/2017:16:33:48 +0000] "POST / HTTP/1.1" 200 276 ""
"Apache-HttpClient/4.5.x (Java/1.8.0_112)" 0/1274.454
[1495816518377] Playing audio playlist
[1495816518377] Searching for audio playlist "classical"
[1495816518377] Sending request to http://redacted pc from device amzn1.ask.device.redacted
[1495816518633] Trying to match: classical
[1495816518633] Simple match on direct comparison
[1495816518633] Located audio playlist "Classical"
[1495816518633] Sending request to http://redacted pc from device amzn1.ask.device.redacted
[1495816518801] Sending request to http://redacted
pc from device amzn1.ask.device.redacted
[1495816528388] [DEBUG] 2017-05-26T16:35:28.387Z 53b98fc7-4231-11e7-a5c8-d1b6f94
9f529 Zappa Event: {u'body': u'eyJ2ZXJzaW9uIjoiMS4wIiwic2Vzc2lvbiI6eyJuZXciOmZhb
HNlLCJzZXNzaW9uSWQiOiJhbXpuMS5lY2hvLWFwaS5zZXNzaW9uLjg3MTAxNTlkLTdjZTktNDExOS1hN
GE0LTI3YWZjOGM4MTdiYyIsImFwcGxpY2F0aW9uIjp7ImFwcGxpY2F0aW9uSWQiOiJhbXpuMS5hc2suc
2tpbGwuYTI1OWQ3NDUtNGIzOC00NjU2LWE3N2QtYWQ3MDBjYTExMjQ5In0sInVzZXIiOnsidXNlcklkI
joiYW16bjEuYXNrLmFjY291bnQuQUZXREk1T1FCVVhDU0JLRUFRUEtWSkhTR0FMNktXQlQzRUwyRVlTQ
TNWRVJJNUU1RzJHNTQzU1dXM0hVSUdKMlo1QlBPVjdBM1pRVUNZUkwzWERINEw1QllaTzRZVzVXVEZBS
k9KUjNCVERBSlhNS1VDRkNGS0hVQ0FMMlpLM0tHSENYT1NKT0NGREZPUUY2SVJUUjJPSk80NFQzU0RQN
0JXUkxLNEFPN1BIR1pDSkhOTERIUlVIRENRQUhEREdRUEVRNEFQWjI0S0taWDZBIn19LCJjb250ZXh0I
jp7IlN5c3RlbSI6eyJhcHBsaWNhdGlvbiI6eyJhcHBsaWNhdGlvbklkIjoiYW16bjEuYXNrLnNraWxsL
mEyNTlkNzQ1LTRiMzgtNDY1Ni1hNzdkLWFkNzAwY2ExMTI0OSJ9LCJ1c2VyIjp7InVzZXJJZCI6ImFte
m4xLmFzay5hY2NvdW50LkFGV0RJNU9RQlVYQ1NCS0VBUVBLVkpIU0dBTDZLV0JUM0VMMkVZU0EzVkVSS
TVFNUcyRzU0M1NXVzNIVUlHSjJaNUJQT1Y3QTNaUVVDWVJMM1hESDRMNUJZWk80WVc1V1RGQUpPSlIzQ
lREQUpYTUtVQ0ZDRktIVUNBTDJaSzNLR0hDWE9TSk9DRkRGT1FGNklSVFIyT0pPNDRUM1NEUDdCV1JMS
zRBTzdQSEdaQ0pITkxESFJVSERDUUFIRERHUVBFUTRBUFoyNEtLWlg2QSJ9LCJkZXZpY2UiOnsiZGV2a
WNlSWQiOiJhbXpuMS5hc2suZGV2aWNlLkFFWkxHTUNaWUdVS0Y0WURFWFkyVlRYSVdXWlRFT09ZSzRDN
zROQ09ONUdGMkRKRjZDRE40QkQ0V1dTTlg1NkNRNUc1N05WVEMzRFZDUzJXT0RERk1GSkNCREpPUEpaQ
UdCR0JDQks2MlJKN0pBVkZDRkdYWVJRWUpGNDNPSjJLTjNCU1lDNldPRUpDUEtDVVlYUlYzR0xKUlVTU
SIsInN1cHBvcnRlZEludGVyZmFjZXMiOnsiQXVkaW9QbGF5ZXIiOnt9fX0sImFwaUVuZHBvaW50Ijoia
HR0cHM6Ly9hcGkuYW1hem9uYWxleGEuY29tIn19LCJyZXF1ZXN0Ijp7InR5cGUiOiJTZXNzaW9uRW5kZ
WRSZXF1ZXN0IiwicmVxdWVzdElkIjoiYW16bjEuZWNoby1hcGkucmVxdWVzdC45MDgyOGMwYi00NzAxL
TQ2NmQtOGViZC0xZDdhYTEyODIwMTYiLCJ0aW1lc3RhbXAiOiIyMDE3LTA1LTI2VDE2OjM1OjI4WiIsI
mxvY2FsZSI6ImVuLVVTIiwicmVhc29uIjoiRVJST1IiLCJlcnJvciI6eyJ0eXBlIjoiSU5WQUxJRF9SR
VNQT05TRSIsIm1lc3NhZ2UiOiJBbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUgZGlzcGF0Y2hpbmcgd
GhlIHJlcXVlc3QgdG8gdGhlIHNraWxsLiJ9fX0=', u'resource': u'/', u'requestContext':
{u'resourceId': u'8fybqeqr5e', u'apiId': u'5fj5egsgn2', u'resourcePath': u'/', u
'httpMethod': u'POST', u'requestId': u'53b300b8-4231-11e7-a415-55fa2f79a9e1', u'
path': u'/dev', u'accountId': u'703057253001', u'identity': {u'apiKey': u'', u'u
serArn': None, u'cognitoAuthenticationType': None, u'accessKey': None, u'caller'
: None, u'userAgent': u'Apache-HttpClient/4.5.x (Java/1.8.0_112)', u'user': None
, u'cognitoIdentityPoolId': None, u'cognitoIdentityId': None, u'cognitoAuthentic
ationProvider': None, u'sourceIp': u'<IP_ADDRESS>', u'accountId': None}, u'stag
e': u'dev'}, u'queryStringParameters': None, u'httpMethod': u'POST', u'pathParam
eters': None, u'headers': {u'Content-Type': u'application/json; charset=utf-8',
u'Via': u'1.1 cbce93bae14c2990d9c172c1090b26cd.cloudfront.net (CloudFront)', u'C
loudFront-Is-Desktop-Viewer': u'true', u'CloudFront-Is-SmartTV-Viewer': u'false'
, u'SignatureCertChainUrl': u'https://s3.amazonaws.com/echo.api/echo-api-cert-4.
pem', u'CloudFront-Is-Mobile-Viewer': u'false', u'X-Forwarded-For': u'72.21.217.
106, <IP_ADDRESS>', u'CloudFront-Viewer-Country': u'US', u'X-Forwarded-Port': u
'443', u'Accept': u'application/json', u'User-Agent': u'Apache-HttpClient/4.5.x
(Java/1.8.0_112)', u'X-Amzn-Trace-Id': u'Root=1-59285950-7da619425eab7de52828cf5
6', u'Accept-Charset': u'utf-8', u'Host': u'5fj5egsgn2.execute-api.us-east-1.ama
zonaws.com', u'X-Forwarded-Proto': u'https', u'X-Amz-Cf-Id': u'EmtCz492REoPBcWWL
AZDvz25g44D2LhTlxNSnB3WtCFEQ8WXSITZqg==', u'CloudFront-Is-Tablet-Viewer': u'fals
e', u'Signature': u'I7D05HPG3j/YL0yuwCWwSjL07iCcPUgbCamK3g2fRz3l5euUKK6Md6A0XhqT
o88Wqabf4fRnz3I3PbHdgyJ7Tpi0ngSpfmIc18JW8FwJvt7j36l34Bo9o2B+pwGgzROxzLB+ktzcLJSR
tl+gmp41wfoqvsEKLhARgU7p33brwq7+eVkt2R0B3YrJX5ZN0HUSnXr4+LrRCf/ux4oN0XNwqqLR1lUy
VjRROvxNJU66mpvpdi1zpGzb+j7n2PvD7RFRjgaBQTCt0eHLs2TY8IOUgHwlbw/rUpiz90NiBuJ1dUxP
mnVD20qnLUXDGGLP+IMAeWQ74Mf3Q9Pi+QlMCuNzeg==', u'CloudFront-Forwarded-Proto': u'
https'}, u'stageVariables': None, u'path': u'/', u'isBase64Encoded': True}
[1495816528524] [INFO] 2017-05-26T16:35:28.524Z 53b98fc7-4231-11e7-a5c8-d1b6f949
f529 <IP_ADDRESS> - - [26/May/2017:16:35:28 +0000] "POST / HTTP/1.1" 200 0 "" "
Apache-HttpClient/4.5.x (Java/1.8.0_112)" 0/135.796
[1495816548265] 2017-05-26T16:35:48.263Z 4daddd74-4231-11e7-867e-ab04de192263 Ta
sk timed out after 30.00 seconds
I hope that makes sense to you.  gibberish to me.

That output doesn't match what you claim you said.  I need you to, specifically tell me exactly what you said to Alexa with the corresponding log output from zappa tail dev.  Just start over for now.

Sometimes it's hard to match up.  I will try again later.  Is there a way to 'clean out' the zappa dump to I can match up my invocation with the record more easily?

Tail should keep following the log I'd think, so just keep it going when you initiate it.

'Alexa, ask kodi media to listen to classical'
[1495819227418] [INFO] 2017-05-26T17:20:27.417Z 9bc430e2-4237-11e7-ae00-2df292a7
80fe <IP_ADDRESS> - - [26/May/2017:17:20:27 +0000] "POST / HTTP/1.1" 200 0 "" "
Apache-HttpClient/4.5.x (Java/1.8.0_112)" 0/1181.61
[1495819246161] 2017-05-26T17:20:46.159Z 95c157c1-4237-11e7-9554-c57c095c912b Ta
sk timed out after 30.00 seconds
[1495819331519] /var/task/fuzzywuzzy/fuzz.py:35: UserWarning: Using slow pure-py
thon SequenceMatcher. Install python-Levenshtein to remove this warning
[1495819331682] [DEBUG] 2017-05-26T17:22:11.682Z d9a9ae89-4237-11e7-8884-151cd03
af7db Zappa Event: {u'account': u'703057253001', u'region': u'us-east-1', u'deta
il': {}, u'detail-type': u'Scheduled Event', u'source': u'aws.events', u'version
': u'0', u'time': u'2017-05-26T17:21:25Z', u'id': u'0692e137-3919-4f66-85ff-baf3
da412200', u'resources': [u'arn:aws:events:us-east-1:703057253001:rule/kodi-alex
a-dev-zappa-keep-warm-handler.keep_warm_callback']}
10:20:17.279 T:1942905488  NOTICE: Previous line repeats 1 times.
10:20:17.279 T:1942905488  NOTICE: VideoPlayer: Opening: special://profile/playlists/music/Classical.xsp
10:20:17.279 T:1942905488 WARNING: CDVDMessageQueue(player)::Put MSGQ_NOT_INITIALIZED
10:20:17.279 T:1555227552  NOTICE: Creating InputStream
10:20:17.283 T:1555227552  NOTICE: Creating Demuxer
10:20:17.287 T:1555227552   ERROR: Open - error probing input format, special://profile/playlists/music/Classical.xsp
10:20:17.287 T:1555227552   ERROR: OpenDemuxStream - Error creating demuxer
10:20:17.287 T:1555227552  NOTICE: CVideoPlayer::OnExit()
10:20:17.288 T:1942905488   ERROR: Playlist Player: skipping unplayable item: 0, path [special://profile/playlists/music/Classical.xsp]
10:20:17.295 T:1942905488  NOTICE: CVideoPlayer::CloseFile()
10:20:17.295 T:1942905488  NOTICE: VideoPlayer: waiting for threads to exit
10:20:17.295 T:1942905488  NOTICE: VideoPlayer: finished waiting
10:20:17.296 T:1942905488  NOTICE: CVideoPlayer::CloseFile()
10:20:17.296 T:1942905488  NOTICE: VideoPlayer: waiting for threads to exit
10:20:17.296 T:1942905488  NOTICE: VideoPlayer: finished waiting
10:21:57.189 T:1622410144  NOTICE: AddOnLog: PVR IPTV Simple Client: EPG file path is not configured. EPG not loaded.
I swear these match.  Honest.

There's no output at all from the skill there?

I am away from home at the moment but when I get home I will try putting stuff in video playlists. Gillian's Island, Twilight Zone, Outer Limits, etc. stuff that sounds nothing like jazz or classical. Maybe that will help.
Sent from my iPhone

On May 26, 2017, at 9:45 AM, jingai<EMAIL_ADDRESS>wrote:
That output doesn't match what you claim you said. I need you to, specifically tell me exactly what you said to Alexa with the corresponding log output from zappa tail dev. Just start over for now.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.

No, it won't help.. it should not be adding it as a video playlist at all.
I need to see the debug output from the skill to help you.  Output like:
[1495816518377] Playing audio playlist
[1495816518377] Searching for audio playlist "classical"
[1495816518377] Sending request to http://redacted pc from device amzn1.ask.device.redacted

[1495816518633] Trying to match: classical
[1495816518633] Simple match on direct comparison
[1495816518633] Located audio playlist "Classical"

From cloud watch rather than Zappa?

Wherever it dumps the output from the skill.

for Alexa ask Kodi to play Classical here's all three logs.  I think I got them to line up time-wise.  Its hard.
Zappa Log
pc from device amzn1.ask.device.redacted
[1495826265952] Sending request to http://redacted:8080/jsonr
pc from device amzn1.ask.device.redacted
[1495826266576] [INFO] 2017-05-26T19:17:46.576Z ff72e3c9-4247-11e7-8f2f-0d051598
22bb <IP_ADDRESS> - - [26/May/2017:19:17:46 +0000] "POST / HTTP/1.1" 200 276 ""
"Apache-HttpClient/4.5.x (Java/1.8.0_112)" 0/1180.28
[1495826374802] Playing audio playlist
[1495826374802] Searching for audio playlist "classical"
[1495826374802] Sending request to http://redacted:8080/jsonr
pc from device amzn1.ask.device.redacted
[1495826375076] Trying to match: classical
[1495826375076] Simple match on direct comparison
[1495826375076] Located audio playlist "Classical"
[1495826375076] Sending request to http://redacted:8080/jsonr
pc from device amzn1.ask.device.redacted
[1495826375243] Sending request to http://redacted:8080/jsonr
pc from device amzn1.ask.device.redacted
[1495826385042] [INFO] 2017-05-26T19:19:45.42Z 46a9c897-4248-11e7-a453-4d5479f6c
565 <IP_ADDRESS> - - [26/May/2017:19:19:45 +0000] "POST / HTTP/1.1" 200 0 "" "A
pache-HttpClient/4.5.x (Java/1.8.0_112)" 0/82.34
[1495826404711] 2017-05-26T19:20:04.711Z 4098e619-4248-11e7-ac87-25ba35dd997a Ta
sk timed out after 30.00 seconds
[1495828211619] /var/task/fuzzywuzzy/fuzz.py:35: UserWarning: Using slow pure-py
thon SequenceMatcher. Install python-Levenshtein to remove this warning
[1495828211801] [DEBUG] 2017-05-26T19:50:11.801Z 86865e21-424c-11e7-b2e3-313c7a2
c6524 Zappa Event: {u'account': u'703057253001', u'region': u'us-east-1', u'deta
il': {}, u'detail-type': u'Scheduled Event', u'source': u'aws.events', u'version
': u'0', u'time': u'2017-05-26T19:49:25Z', u'id': u'6a081ff7-acfc-4a69-b8dc-beb4
c81358e1', u'resources': [u'arn:aws:events:us-east-1:703057253001:rule/kodi-alex
a-dev-zappa-keep-warm-handler.keep_warm_callback']}
[1495828211802] [DEBUG] 2017-05-26T19:50:11.801Z 86865e21-424c-11e7-b2e3-313c7a2
c6524 Zappa Event: {}

From Kodi
12:19:35.815 T:1942905488  NOTICE: VideoPlayer: Opening: special://profile/playlists/music/Classical.xsp
12:19:35.815 T:1942905488 WARNING: CDVDMessageQueue(player)::Put MSGQ_NOT_INITIALIZED
12:19:35.816 T:1195373472  NOTICE: Creating InputStream
12:19:35.819 T:1195373472  NOTICE: Creating Demuxer
12:19:35.822 T:1195373472   ERROR: Open - error probing input format, special://profile/playlists/music/Classical.xsp
12:19:35.823 T:1195373472   ERROR: OpenDemuxStream - Error creating demuxer
12:19:35.823 T:1195373472  NOTICE: CVideoPlayer::OnExit()
12:19:35.823 T:1942905488   ERROR: Playlist Player: skipping unplayable item: 0, path [special://profile/playlists/music/Classical.xsp]
12:19:35.823 T:1942905488  NOTICE: CVideoPlayer::CloseFile()
12:19:35.823 T:1942905488  NOTICE: VideoPlayer: waiting for threads to exit
12:19:35.823 T:1942905488  NOTICE: VideoPlayer: finished waiting
12:19:35.824 T:1942905488  NOTICE: CVideoPlayer::CloseFile()
12:19:35.824 T:1942905488  NOTICE: VideoPlayer: waiting for threads to exit
12:19:35.824 T:1942905488  NOTICE: VideoPlayer: finished waiting
12:21:10.850 T:1622410144  NOTICE: AddOnLog: PVR IPTV Simple Client: EPG file path is not configured. EPG not loaded.

From Cloud Watch
Amazon Web Services, Inc. or its affiliates. All rights reserved.
"POST /jsonrpc HTTP/1.1" 200 38

17:35:18
[INFO]	2017-05-26T17:35:18.13Z	ae915b5a-4239-11e7-8aad-69df16bb08d0	<IP_ADDRESS> - - [26/May/2017:17:35:18 +0000] "POST / HTTP/1.1" 200 276 "" "Apache-HttpClient/4.5.x (Java/1.8.0_112)" 0/1173.69

17:35:18
END RequestId: ae915b5a-4239-11e7-8aad-69df16bb08d0

17:35:18
REPORT RequestId: ae915b5a-4239-11e7-8aad-69df16bb08d0	Duration: 1185.34 ms	Billed Duration: 1200 ms Memory Size: 512 MB	Max Memory Used: 50 MB

17:38:10
START RequestId: 160ebbf4-423a-11e7-81f4-a9dc29d221a8 Version: $LATEST

17:38:10
END RequestId: 160ebbf4-423a-11e7-81f4-a9dc29d221a8

17:38:10
REPORT RequestId: 160ebbf4-423a-11e7-81f4-a9dc29d221a8	Duration: 4.89 ms	Billed Duration: 100 ms Memory Size: 512 MB	Max Memory Used: 50 MB

17:39:25
START RequestId: 42cd3317-423a-11e7-a5b9-0f775d45e92b Version: $LATEST

17:39:26
Playing audio playlist

17:39:26
Searching for audio playlist "classical"

17:39:26
Sending request to http://orangecaweather.duckdns.org:8080/jsonrpc from device amzn1.ask.device.AEZLGMCZYGUKF4YDEXY2VTXIWWZTEOOYK4C74NCON5GF2DJF6CDN4BD4WWSNX56CQ5G57NVTC3DVCS2WODDFMFJCBDJOPJZAGBGBCBK62RJ7JAVFCFGXYRQYJF43OJ2KN3BSYC6WOEJCPKCUYXRV3GLJRUSQ

17:39:26
Trying to match: classical

17:39:26
Simple match on direct comparison

17:39:26
Located audio playlist "Classical"

17:39:26
Sending request to http://orangecaweather.duckdns.org:8080/jsonrpc from device amzn1.ask.device.AEZLGMCZYGUKF4YDEXY2VTXIWWZTEOOYK4C74NCON5GF2DJF6CDN4BD4WWSNX56CQ5G57NVTC3DVCS2WODDFMFJCBDJOPJZAGBGBCBK62RJ7JAVFCFGXYRQYJF43OJ2KN3BSYC6WOEJCPKCUYXRV3GLJRUSQ

17:39:26
Sending request to http://orangecaweather.duckdns.org:8080/jsonrpc from device amzn1.ask.device.AEZLGMCZYGUKF4YDEXY2VTXIWWZTEOOYK4C74NCON5GF2DJF6CDN4BD4WWSNX56CQ5G57NVTC3DVCS2WODDFMFJCBDJOPJZAGBGBCBK62RJ7JAVFCFGXYRQYJF43OJ2KN3BSYC6WOEJCPKCUYXRV3GLJRUSQ

17:39:55
END RequestId: 42cd3317-423a-11e7-a5b9-0f775d45e92b

17:39:55
REPORT RequestId: 42cd3317-423a-11e7-a5b9-0f775d45e92b	Duration: 30003.43 ms	Billed Duration: 30000 ms Memory Size: 512 MB	Max Memory Used: 50 MB

17:39:55
2017-05-26T17:39:55.483Z 42cd3317-423a-11e7-a5b9-0f775d45e92b Task timed out after 30.00 seconds

17:42:10
START RequestId: a507fd23-423a-11e7-955a-4787aaadaa55 Version: $LATEST

17:42:11
/var/task/fuzzywuzzy/fuzz.py:35: UserWarning: Using slow pure-python SequenceMatcher. Install python-Levenshtein to remove this warning

17:42:12
[DEBUG]	2017-05-26T17:42:12.41Z	a507fd23-423a-11e7-955a-4787aaadaa55	Zappa Event: {u'body': u'eyJ2ZXJzaW9uIjoiMS4wIiwic2Vzc2lvbiI6eyJuZXciOnRydWUsInNlc3Npb25JZCI6ImFtem4xLmVjaG8tYXBpLnNlc3Npb24uMmI0ZWJiOTQtZmRlZi00OTMxLWEzYjItNTBlMjg2YTVjNzAzIiwiYXBwbGljYXRpb24iOnsiYXBwbGljYXRpb25JZCI6ImFtem4xLmFzay5za2lsbC5hMjU5ZDc0NS00YjM4LTQ2NTYtYTc3ZC1hZDcwMGNhMTEyNDkifSwidXNlciI6eyJ1c2VySWQiOiJhbXpuMS5hc2suYW

17:42:12
Playing audio playlist

17:42:12
Searching for audio playlist "classical"

17:42:12
Sending request to http://orangecaweather.duckdns.org:8080/jsonrpc from device amzn1.ask.device.AEZLGMCZYGUKF4YDEXY2VTXIWWZTEOOYK4C74NCON5GF2DJF6CDN4BD4WWSNX56CQ5G57NVTC3DVCS2WODDFMFJCBDJOPJZAGBGBCBK62RJ7JAVFCFGXYRQYJF43OJ2KN3BSYC6WOEJCPKCUYXRV3GLJRUSQ

17:42:12
[DEBUG]	2017-05-26T17:42:12.139Z	a507fd23-423a-11e7-955a-4787aaadaa55	Starting new HTTP connection (1): orangecaweather.duckdns.org

17:42:12
[DEBUG]	2017-05-26T17:42:12.386Z	a507fd23-423a-11e7-955a-4787aaadaa55	http://orangecaweather.duckdns.org:8080 "POST /jsonrpc HTTP/1.1" 200 312

17:42:12
Trying to match: classical

17:42:12
Simple match on direct comparison

17:42:12
Located audio playlist "Classical"

17:42:12
Sending request to http://orangecaweather.duckdns.org:8080/jsonrpc from device amzn1.ask.device.AEZLGMCZYGUKF4YDEXY2VTXIWWZTEOOYK4C74NCON5GF2DJF6CDN4BD4WWSNX56CQ5G57NVTC3DVCS2WODDFMFJCBDJOPJZAGBGBCBK62RJ7JAVFCFGXYRQYJF43OJ2KN3BSYC6WOEJCPKCUYXRV3GLJRUSQ

17:42:12
[DEBUG]	2017-05-26T17:42:12.400Z	a507fd23-423a-11e7-955a-4787aaadaa55	Starting new HTTP connection (1): orangecaweather.duckdns.org

17:42:12
[DEBUG]	2017-05-26T17:42:12.564Z	a507fd23-423a-11e7-955a-4787aaadaa55	http://orangecaweather.duckdns.org:8080 "POST /jsonrpc HTTP/1.1" 200 36

17:42:12
Sending request to http://orangecaweather.duckdns.org:8080/jsonrpc from device amzn1.ask.device.AEZLGMCZYGUKF4YDEXY2VTXIWWZTEOOYK4C74NCON5GF2DJF6CDN4BD4WWSNX56CQ5G57NVTC3DVCS2WODDFMFJCBDJOPJZAGBGBCBK62RJ7JAVFCFGXYRQYJF43OJ2KN3BSYC6WOEJCPKCUYXRV3GLJRUSQ

17:42:12
[DEBUG]	2017-05-26T17:42:12.566Z	a507fd23-423a-11e7-955a-4787aaadaa55	Starting new HTTP connection (1): orangecaweather.duckdns.org

17:42:13
[DEBUG]	2017-05-26T17:42:13.206Z	a507fd23-423a-11e7-955a-4787aaadaa55	http://orangecaweather.duckdns.org:8080 "POST /jsonrpc HTTP/1.1" 200 38

17:42:13
[INFO]	2017-05-26T17:42:13.210Z	a507fd23-423a-11e7-955a-4787aaadaa55	<IP_ADDRESS> - - [26/May/2017:17:42:13 +0000] "POST / HTTP/1.1" 200 276 "" "Apache-HttpClient/4.5.x (Java/1.8.0_112)" 0/1168.86

17:42:13
END RequestId: a507fd23-423a-11e7-955a-4787aaadaa55

17:42:13
REPORT RequestId: a507fd23-423a-11e7-955a-4787aaadaa55	Duration: 2668.89 ms	Billed Duration: 2700 ms Memory Size: 512 MB	Max Memory Used: 50 MB

18:10:10
START RequestId: 8e2738ea-423e-11e7-aa21-556c4b57e9aa Version: $LATEST

18:10:10
END RequestId: 8e2738ea-423e-11e7-aa21-556c4b57e9aa

18:10:10
REPORT RequestId: 8e2738ea-423e-11e7-aa21-556c4b57e9aa	Duration: 0.72 ms	Billed Duration: 100 ms Memory Size: 512 MB	Max Memory Used: 50 MB

18:14:10
START RequestId: 1d6e9afa-423f-11e7-a9ca-2b7669ffd213 Version: $LATEST

18:14:10
END RequestId: 1d6e9afa-423f-11e7-a9ca-2b7669ffd213

18:14:10
REPORT RequestId: 1d6e9afa-423f-11e7-a9ca-2b7669ffd213	Duration: 0.44 ms	Billed Duration: 100 ms Memory Size: 512 MB	Max Memory Used: 50 MB

18:18:10
START RequestId: ac8a5837-423f-11e7-8cab-b54fc67f7ca3 Version: $LATEST

18:18:10
END RequestId: ac8a5837-423f-11e7-8cab-b54fc67f7ca3

18:18:10
REPORT RequestId: ac8a5837-423f-11e7-8cab-b54fc67f7ca3	Duration: 0.54 ms	Billed Duration: 100 ms Memory Size: 512 MB	Max Memory Used: 50 MB

18:22:10
START RequestId: 3baa0e3e-4240-11e7-a5fa-e3effad51306 Version: $LATEST

18:22:10
END RequestId: 3baa0e3e-4240-11e7-a5fa-e3effad51306

18:22:10
REPORT RequestId: 3baa0e3e-4240-11e7-a5fa-e3effad51306	Duration: 0.80 ms	Billed Duration: 100 ms Memory Size: 512 MB	Max Memory Used: 50 MB

18:26:09
START RequestId: ca4ccbe7-4240-11e7-a7dd-797eb6bc05be Version: $LATEST

18:26:10
END RequestId: ca4ccbe7-4240-11e7-a7dd-797eb6bc05be

18:26:10
REPORT RequestId: ca4ccbe7-4240-11e7-a7dd-797eb6bc05be	Duration: 0.44 ms	Billed Duration: 100 ms Memory Size: 512 MB	Max Memory Used: 50 MB

18:30:10
START RequestId: 59844ef9-4241-11e7-a824-0b977efe1ff3 Version: $LATEST

18:30:10
END RequestId: 59844ef9-4241-11e7-a824-0b977efe1ff3

18:30:10
REPORT RequestId: 59844ef9-4241-11e7-a824-0b977efe1ff3	Duration: 0.48 ms	Billed Duration: 100 ms Memory Size: 512 MB	Max Memory Used: 50 MB

18:58:10
START RequestId: 42e4d8c5-4245-11e7-82c0-af1565edc713 Version: $LATEST

18:58:10
END RequestId: 42e4d8c5-4245-11e7-82c0-af1565edc713

18:58:10
REPORT RequestId: 42e4d8c5-4245-11e7-82c0-af1565edc713	Duration: 0.44 ms	Billed Duration: 100 ms Memory Size: 512 MB	Max Memory Used: 50 MB

19:02:10
START RequestId: d1db0e00-4245-11e7-8412-53777247779e Version: $LATEST

19:02:10
END RequestId: d1db0e00-4245-11e7-8412-53777247779e

19:02:10
REPORT RequestId: d1db0e00-4245-11e7-8412-53777247779e	Duration: 0.59 ms	Billed Duration: 100 ms Memory Size: 512 MB	Max Memory Used: 50 MB

19:06:10
START RequestId: 60e71481-4246-11e7-aa01-2f5f7f0df85d Version: $LATEST

19:06:10
END RequestId: 60e71481-4246-11e7-aa01-2f5f7f0df85d

19:06:10
REPORT RequestId: 60e71481-4246-11e7-aa01-2f5f7f0df85d	Duration: 0.52 ms	Billed Duration: 100 ms Memory Size: 512 MB	Max Memory Used: 50 MB

19:10:10
START RequestId: f01a78fa-4246-11e7-b22f-f30f24da5340 Version: $LATEST

19:10:10
END RequestId: f01a78fa-4246-11e7-b22f-f30f24da5340

19:10:10
REPORT RequestId: f01a78fa-4246-11e7-b22f-f30f24da5340	Duration: 0.44 ms	Billed Duration: 100 ms Memory Size: 512 MB	Max Memory Used: 50 MB

19:14:10
START RequestId: 7f6731a2-4247-11e7-81ab-c104cb88cfbb Version: $LATEST

19:14:10
END RequestId: 7f6731a2-4247-11e7-81ab-c104cb88cfbb

19:14:10
REPORT RequestId: 7f6731a2-4247-11e7-81ab-c104cb88cfbb	Duration: 8.46 ms	Billed Duration: 100 ms Memory Size: 512 MB	Max Memory Used: 50 MB

19:17:45
START RequestId: ff72e3c9-4247-11e7-8f2f-0d05159822bb Version: $LATEST

19:17:45
Playing audio playlist

19:17:45
Searching for audio playlist "classical"

19:17:45
Sending request to http://orangecaweather.duckdns.org:8080/jsonrpc from device amzn1.ask.device.redacted

19:17:45
Trying to match: classical

19:17:45
Simple match on direct comparison

19:17:45
Located audio playlist "Classical"

19:17:45
Sending request to http://redacted:8080/jsonrpc from device amzn1.ask.device.redacted

19:17:45
Sending request to http://orangecaweather.duckdns.org:8080/jsonrpc from device amzn1.ask.device.redacted

19:17:46
[INFO]	2017-05-26T19:17:46.576Z	ff72e3c9-4247-11e7-8f2f-0d05159822bb	<IP_ADDRESS> - - [26/May/2017:19:17:46 +0000] "POST / HTTP/1.1" 200 276 "" "Apache-HttpClient/4.5.x (Java/1.8.0_112)" 0/1180.28

19:17:46
END RequestId: ff72e3c9-4247-11e7-8f2f-0d05159822bb

19:17:46
REPORT RequestId: ff72e3c9-4247-11e7-8f2f-0d05159822bb	Duration: 1181.34 ms	Billed Duration: 1200 ms Memory Size: 512 MB	Max Memory Used: 50 MB

19:18:10
START RequestId: 0e119080-4248-11e7-9520-c74fadb86331 Version: $LATEST

19:18:10
END RequestId: 0e119080-4248-11e7-9520-c74fadb86331

19:18:10
REPORT RequestId: 0e119080-4248-11e7-9520-c74fadb86331	Duration: 0.78 ms	Billed Duration: 100 ms Memory Size: 512 MB	Max Memory Used: 50 MB

19:19:34
START RequestId: 4098e619-4248-11e7-ac87-25ba35dd997a Version: $LATEST

19:19:34
Playing audio playlist

19:19:34
Searching for audio playlist "classical"

19:19:34
Sending request to http://redacted/jsonrpc from device amzn1.ask.device.redacted

19:19:35
Trying to match: classical

19:19:35
Simple match on direct comparison

19:19:35
Located audio playlist "Classical"

19:19:35
Sending request to http://redacted/jsonrpc from device amzn1.ask.redacted

19:19:35
Sending request to http://redacted/jsonrpc from device amzn1.ask.device.redacted:8080

19:20:04
END RequestId: 4098e619-4248-11e7-ac87-25ba35dd997a

19:20:04
REPORT RequestId: 4098e619-4248-11e7-ac87-25ba35dd997a	Duration: 30002.97 ms	Billed Duration: 30000 ms Memory Size: 512 MB	Max Memory Used: 50 MB

19:20:04
2017-05-26T19:20:04.711Z 4098e619-4248-11e7-ac87-25ba35dd997a Task timed out after 30.00 seconds
No newer events found at the moment. Retry.
Feedback
English
Terms of UsePrivacy Policy© 2008 - 2017, Amazon Web Services, Inc. or its affiliates. All rights reserved.

I mean.. it's doing the right thing.  It identifies it as an audio playlist and it calls Player.Open() with it.
What version of Kodi?

My best guess is Kodi is having trouble figuring out what kind of playlist it is.  Not sure why, but maybe I can help if you can provide me with the contents of userdata/playlists/music/Classical.xsp

all

Classical

100

Shuffle doesn't open the playlist directly -- it adds the items from the playlist to a temporary playlist.

Posted the problem on the Libreelec forum.
http://forum.kodi.tv/newreply.php?tid=298461&processed=1

Try replacing it with this one.  I don't think you have to restart Kodi, but you might do it just to be sure.
classical_with_name.zip

Good thought but the behavior was identical.

The only other thing I can think of then is that they deprecated "file":"playlist_filename" in Player.Open() in Kodi 18.
Is there any way you could try Kodi 17 just to verify this?

With difficulty. I will try asking the question on their forum first.
Sent from my iPhone

On May 26, 2017, at 3:12 PM, jingai<EMAIL_ADDRESS>wrote:
The only other thing I can think of then is that they deprecated "file":"playlist_filename" in Player.Open() in Kodi 18.
Is there any way you could try Kodi 17 just to verify this?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.

Cleaning out this thread off off-topic conversation.  @bill-orange, if you can't sort this out, either post to the forum or open another issue for it.

Great minds think alike.  This has really drifted off-topic.
However can you give me the call again that may have been depreciated so I can post it on the libreelec forum?

Not the call, but a parameter to the call, specifically when it's a playlist.
We call Player.Open with the "file" parameter set to the playlist file.  Something in the back of my mind is telling me it may have been up for the chopping block at some point.. but I can't remember where I saw that.
Of course, my memory could just be crummy these days too :P

Cluttering things up more here but.. kinda curious.  If you add a video playlist, can you open it with (specifically):
"Alexa, ask kodi media to play video playlist {myvideoplaylist}"
?

I was sure it would work!  I didn't.  Same result but a different error.
16:26:07.514 T:1943417488 WARNING: CGUIWindowManager - OnAction - ignoring action 107, because topmost modal dialog closing animation is running
16:26:40.313 T:1911550880 WARNING: Previous line repeats 4 times.
16:26:40.313 T:1911550880  NOTICE: CAESinkPi:AddPackets Underrun (delay:0.00 frames:1102)
16:26:51.795 T:1943417488  NOTICE: VideoPlayer: Opening: special://profile/playlists/video/Science Fiction.xsp
16:26:51.795 T:1943417488 WARNING: CDVDMessageQueue(player)::Put MSGQ_NOT_INITIALIZED
16:26:51.795 T:1398485920  NOTICE: Creating InputStream
16:26:51.799 T:1398485920  NOTICE: Creating Demuxer
16:26:51.803 T:1398485920   ERROR: Open - error probing input format, special://profile/playlists/video/Science Fiction.xsp
16:26:51.803 T:1398485920   ERROR: OpenDemuxStream - Error creating demuxer
16:26:51.803 T:1398485920  NOTICE: CVideoPlayer::OnExit()
16:26:51.803 T:1943417488   ERROR: Playlist Player: skipping unplayable item: 0, path [special://profile/playlists/video/Science Fiction.xsp]
16:26:51.804 T:1943417488  NOTICE: CVideoPlayer::CloseFile()
16:26:51.804 T:1943417488  NOTICE: VideoPlayer: waiting for threads to exit
16:26:51.804 T:1943417488  NOTICE: VideoPlayer: finished waiting
16:26:51.804 T:1943417488  NOTICE: CVideoPlayer::CloseFile()
16:26:51.804 T:1943417488  NOTICE: VideoPlayer: waiting for threads to exit
16:26:51.804 T:1943417488  NOTICE: VideoPlayer: finished waiting
16:26:56.730 T:1943417488 WARNING: CGUIWindowManager - OnAction - ignoring action 107, because topmost modal dialog closing animation is running

All done.  Clean away.  I copied what I needed into the other forum.

Yeah, either it's a bug in Kodi 18, libreelec, or the parameter for our use-case has been deprecated.  Let us know what you find.

Just speeking for me, I only have something about, don't exactly know but, ~35 genres for music since this is the only tag field I edit manually. The rest is done by picard. I decided to do so in the early days when I started tagging my music exactly because of those millions of genres these days that for me to really improve something. And on the other hand the musicbrainz genres are, let's say sometimes, just not really matching (for me).
So for me "playing genre rock" would deliver the same results as my playlist rock now does :) But for me the real benefits from being able to access those music genres would be:

Be able to listen to e.g. christmas music by Celine Dion / Johnny Cash / ....
Then hopefully also be able to exclude certain genres like christmas, kids, etc. from the matches of "play music by artist". Again let's take Celine Dion, usually if I want to listen to her, I'm not expecting christmas music :)
I could think about adding a genre "live". Then I could make something like "play some live music by Celine Dion".

Btw I haven't listened to Celine Dion for years now but she was the first one I found I have christmas and usual music from :)

Added this with https://github.com/m0ngr31/kodi-alexa/pull/199
Could use some testers for it, though.

Added.


Phx 1671 instansiate in unittest

Thanks for the updates, James! I ran the unit tests locally and it worked like a charm! Before final approval and merge there's a few clean-up items I'd love for us to include.

Remove the npm-debug.log file and add to .gitignore
Update the README to say ZF3 instead of ZF2.
Add the composer.lock file to version control and remove from .gitignore. This is now recommended by composer and will help make sure that our dependencies stay locked into the set you were using that are functioning correctly.

Good call evan, sorry I lost those earlier 😅


Rule discussion: Arrow function should not return assignment

What version of standard?
v12.0.1
What operating system, Node.js, and npm version?
Node.js
What did you expect to happen?
When trying to sum the sizes of an array of Sets I tried to write
sets.reduce((acc, set) => acc += set.size, 0)

What actually happened?
Standard shows the error
Arrow function should not return assignment. (no-return-assign)

I don't think this rule is helpful in this scenario, I can't use Array.reduce at all in this scenario AFAIK. I understand why you don't want to allow the following code, but this Array.reduce use case seems more legitimate
const foo = x => x = 2
// or
function foo (x) {
  return x = 2
}
// The author in either of these examples probably meant to return a comparison

If the above is is intentional, please can someone explain what code smell I'm creating here?
If not, I'd like to suggest changing the rule to except-parens[1] option provided by Eslint or remove it completely.
The except-parens option would allow for the following style which I like because it clearly signals the author's intent to return an assignment.
sets.reduce((acc, set) => (acc += set.size), 0)

I actually think is a quite good rule to have since it's quite uncommon to want to return an assignment value. This is currently enforced regardless of wether it is an arrow function or not btw, so return a += 1 is invalid. The proper way to signal that it was the intention, is to wrap it in a parenthesis: return (a += 1), which is valid.
In your code it seems like there is no need to modify acc since that is only a local copy to your function, is there any reason to not write it like this?
sets.reduce((acc, set) => acc + set.size, 0)

@LinusU For some reason I had to mutate the accumulator, thanks for the tip 🤦♂
Also, looks like the except-parens is already turned on so this ticket is just completely bogus, please close!

No stress 👌


Show user error message for XPathTypeMismatchException app crashes

Helped Kriti debug an app today by simply providing her with the XPathTypeMismatchException error message Location /data/ql_dep_drug_history/dep_other_detail was not found.
She said it would be really helpful if the app just told her that, so I decided to enable it for the https://github.com/dimagi/commcare-odk/pull/606 feature I implemented.
NOTE: this prevents the crash from being reported on ACRA. I don't think there is any way to report to ACRA due to threading issues. Figure it is much more valuable for the user to see these crashes than for us to see them. I did make sure the exception log submission task is called when crashes are caught this way.

Hey, @phillipm. This is super helpful to have, although it duplicates some funcitonality in the Form Entry activity that does more or less the same thing (shows the user an error with their form), that I think we're just missing because we aren't wrapping the right things with a try/catch.
We generally expect to catch these in showNextView in the catch that runs CommCareActivity.createErrorDialog

As per @ctsims advice, going to try to accomplish this by wrapping offending expressions: see https://github.com/dimagi/commcare-odk/pull/713


Missing configuration key error

Hi, would be great if anyone could help me. I have followed all the steps but I get an error when building with Travis.
xxxxx/node_modules/appr/scripts/config.js:20
throw new Error(Missing configuration key ${key});
^
Error: Missing configuration key expUsername
This is the pull request/repo I am working on for reference:
https://github.com/TK-data/it2901-15/pull/18
Thanks!

Thanks you for extremely fast response. I apparently stopped reading after "Enable Travis", since this was already done on my project. Sorry! and thanks again!


Decl'HDF5 fails to detect parallel HDF5 when built with cmake

When parallel HDF5 is built with CMake, Decl'HDF5 detects it as sequential...

or
project(tst)
cmake_minimum_required(VERSION 3.10)
find_package(HDF5)
message("HDF5_IS_PARALLEL: ${HDF5_IS_PARALLEL}")

-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found HDF5: hdf5-shared (found version "1.10.7")
HDF5_IS_PARALLEL: ON
-- Configuring done
-- Generating done

using our provided cmake scripts (including FindHDF5.cmake) also works:
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found HDF5: hdf5-shared (found version "1.10.7")
HDF5_IS_PARALLEL: ON
-- Configuring done
-- Generating done

except if we also request a specific version:
project(tst)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
cmake_minimum_required(VERSION 3.10)
find_package(HDF5 1.8.0)
message("HDF5_IS_PARALLEL: ${HDF5_IS_PARALLEL}")

-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- HDF5: Using hdf5 compiler wrapper to determine C configuration
-- Found HDF5: /opt/software/linux-ubuntu18.04-skylake/gcc-7.5.0/hdf5-1.10.7-x4wmh27l25vh5k7nt5dh4jqulmc3usuo/lib/libhdf5.so;/opt/software/linux-ubuntu18.04-skylake/gcc-7.5.0/openmpi-4.1.1-24vrlbobzssegoenzkff25ew3uv763qy/lib/libmpi.so (Required is at least version "1.8.0") found components:  C
HDF5_IS_PARALLEL: FALSE
-- Configuring done
-- Generating done

created merge request !375 to address this issue

On the same system a simple CMakeLists.txt works:
project(tst)
cmake_minimum_required(VERSION 3.10)
set(HDF5_NO_FIND_PACKAGE_CONFIG_FILE true)
find_package(HDF5 MODULE)
message("HDF5_IS_PARALLEL: ${HDF5_IS_PARALLEL}")

-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- HDF5 C compiler wrapper is unable to compile a minimal HDF5 program.
-- Found HDF5: /opt/software/linux-ubuntu18.04-skylake/gcc-7.5.0/hdf5-1.10.7-x4wmh27l25vh5k7nt5dh4jqulmc3usuo/lib/libhdf5.so (found version "1.10.7")
HDF5_IS_PARALLEL: TRUE
-- Configuring done
-- Generating done

with recent Find, no issue though:
project(tst)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
cmake_minimum_required(VERSION 3.10)
find_package(HDF5 1.8.0)
message("HDF5_IS_PARALLEL: ${HDF5_IS_PARALLEL}")

-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- HDF5 C compiler wrapper is unable to compile a minimal HDF5 program.
-- Found HDF5: /opt/software/linux-ubuntu18.04-skylake/gcc-7.5.0/hdf5-1.10.7-x4wmh27l25vh5k7nt5dh4jqulmc3usuo/lib/libhdf5.so (found suitable version "1.10.7", minimum required is "1.8.0")
HDF5_IS_PARALLEL: TRUE
-- Configuring done
-- Generating done


Free and Open Source license missing

Hi Jon,
I'd like to try out the keyboard code but I am afraid to do so because there is no official licence that states that I can do so. Would you be kind and add e.g. Apache Licence 2.0 or something similar? Ofc. only if you want this repository to be free of use :)
Best,
Olavur

All set!


Create "postByAuthorId" query automatically in the forum example

Hi! Thank you for the awesome tool!
I've read the following example.
https://github.com/postgraphql/postgraphql/tree/master/examples/forum
I have a simple question.
What should I do if I want to retrieve all posts from a specific user?
If it is not my misunderstanding, postgraphql automatically creates allPosts and postById queries.
Is there a way to create postByAuthorId query automatically?
Shoud I CREATE FUNCTION by myself?
I'm sorry about the rudimentary question.
Thanks!

I think you could use the "condition" filter on allPosts to limit by authorId?

Oh! This is what I was looking for!
Thank you for the answer!
It's really a useful tool.
Many Thanks.

@benjie
I'm sorry. I have one more question.
As you said, I can use condition: {authorId: 1}. Thank you very much!
In addition, is it possible to specify multiple authorIds like condition: {authorId: [1, 2]}?
"message": "Argument \"condition\" has invalid value {serverId: [1, 2]}.\nIn field \"serverId\": Expected type \"Int\", found [1, 2]."

No, for that you'll need to write a custom function, something like:
Create function posts_by_author_ids(author_ids integer[]) returns setof posts as $$
Select * from posts where author_id = any(author_ids);
$$ language sql stable;

Written on my phone, forgive mistakes ;)

I see.
It worked as you wrote.
Thank you very much!!


[S2GRAPH-17] Remove unnecessary abstraction layer, Storage.

This is quite large PR. apologize for large changes.
The main motivation on this PR is changing followings.

remove unnecessary abstraction like MutationBuilder, QueryBuilder.
make code more understandable for otheres, especially for who is interested in implementing other storage backend.

the commit is too large, so let me squash all commits and reopen another PR for this Issue.


Parallel tools and compiling

Fix #706

Summary
Introduces the ability to run functions in parallel.
The following routines have been added:

Parallel tools parallel_map.

This is supposed to replace #679.
Details and comments
parallel_map uses the multiprocessing library that is not efficient on Windows, and therefore implements a serial loop on Win platforms.  In addition, it checks if the input has len(value)==1 and just returns the single execution result.
The parallel_map is smart in the sense that it checks for the QISKIT_IN_PARALLEL env flag and will not execute in parallel if this flag is 'TRUE', as set when the parallel_map is being executed.  So you can nest calls to parallel_map, and only the outer one will execute in parallel.  This flag is set to 'FALSE' at init, and is reset when a QISKitError is raised.
The number of processes to spawn is set automatically to the number of physical cpus on the local machine.  Discovering this value on Windows requires the use of the comtypes module.  Although this is an extra dependency, it is installed by default in Anaconda on Windows.

@diego-plan9, @atilag, and @ajavadia you probably have thoughts on this PR.  Please let me know.
@chunfuchen Does this look like what you aimed to do in #679?  Don't want to step on your toes here.

@nonhermitian Yes, this way is excellent :), it is what I want to do in #679 .

Thanks @nonhermitian
This is going to be actually a great improvement in our compilation times. It won't improve anything on Windows though but this is something we can't fix in the short term, and definitely nothing that the Python concurrent API could tackle.
As commented by @jaygambetta in #704 , let's merge #704 first and then tackle this one.
Anyway, we may need to work out some refactoring of this PR. Splitting it into two PRs could make sense because there are actually two features introduced here:

Parallel compilation

Jupyter notebook progress bar

So a PR with the first point using some sort of event mechanism (Pub/Sub?) to decouple the progress bar from the compilation could be an option (we can follow up on issue #706)
And another PR implementing the Progress bar into the wrapper, and, possibly, as part of a new Jupyter Notebook tooling (following up on #708?)
Does it make sense @nonhermitian?

The refactor is fine by me.  I will make a new PR for the parallel parts, and let you handle the progress bar stuff as I am sure you will want to rework that as part of the Pub/Sub framework.
This will also allow me to merge #383 with the parallel components, as that PR gives a nice way of returning the number of physical CPU cores, rather than the number of cores + hyperthreads that is returned by the multiprocessing library.  Thus we can avoid dispatching too many processes.

@atilag, This has been updated in the direction that you suggested.  In addition, the HTMLProgressBar uses Jupyter widgets, and there are new magic functions to make life easier in the notebook env.

Would it be possible to really follow @atilag suggestion for making the first PR only related with the real functionality that will provide parallelization, keeping all non-essential code for that feature as part of a later PR?
This would help keeping the lifetime of the PR more manageable - as usual, the bigger the PR, the bigger the risk that the review spans in time (which is specially relevant during this round of development, with a lot of dependent PRs and changes overall), and the bigger the need for tests and similar.

@diego-plan9 the extra components have been removed.

Thanks - please do keep them around somewhere for the follow-up PR! Can you actually go one step further and also postpone the implementation of the CLI progress bar? It seems it would reduce qiskit/_parallel.py to a minimum and make the PR very lean, and we can handle the "optional progress visualization functionality" as a whole in the next one.

@diego-plan9 I need some kind of progressbar object to act as a placeholder if a progress bar is not generated.  Here, that is the BaseProgressBar class, which by design, does nothing.  From there, it is only a short step to the TextProgressBar, and requires nothing extra.

We are going to add a progress bar and many other tooling because IMO they are pretty neat and useful.
But they should be added in a follow up PR, not in this one.
We are tacking parallel compilation here, so let's remove anything non strictly related to it (like the progress bar) from the code.
The plan is:

Introduce parallel compilation the way you did in this PR.
Add a Pub/Sub mechanism on top of it.
Add Jupyter tools (starting with the progress bar), using the  Pub/Sub system.
These three steps should be addressed in their respective PRs, and in this very order.
What do you think @diego-plan9 @nonhermitian?
Do you agree with the plan?

@atilag what is wrong with the current implementation?  The Receiver class basically does what you envisioned.  The Jupyter tools have already been moved to PR #734.

It's mainly for reviewing convenience, the concept of progress bar or event mechanisms shouldn't be introduced here.
For example, I see that you are coupling  a ProgressBar to something that should know nothing about progress bars: _parallel.py: serial_map() / parallel_map(). These methods should emit events, behaving as publishers (like in the Pub/Sub pattern), and instances of ProgressBar should be registered as subscribers, but this registration should not happen at transpiler level but at Wrapper level... maybe here: https://github.com/Qiskit/qiskit-terra/blob/master/qiskit/wrapper/_wrapper.py in the compile() method?? (haven't thought too much about it). The point of having a Pub/Sub (or Observer) pattern is to keep core components like the transpiler, as self contained and isolated as possible.
But I don't really want to add the Pub/Sub implementation in this PR either, as it comes with it's unique complexity and problems.

@nonhermitian can you please rebase this now that #705 is merged?

@ajavadia This has been redone, please take a look.

Iterating in parallel over a single variable is really quite standard.  For example, this is the only thing Matlab allows via their parfor function.  Basically, if you write your parallel function correctly, it is always possible to iterate over a single var.  Taking a matrix for example, it is best to iterate in parallel only over the columns or rows, not both.  This would be an outer loop in parallel, and an inner loop in serial.

Moving some discussion from the internal comments to here, to avoid having it buried in upcoming commits and as I feel they are design decisions that need to be discussed further:
Handling concurrent parallelized calls
(from https://github.com/Qiskit/qiskit-terra/pull/701#discussion_r213049695)
The proposed solution uses an environment variable acting as a  "lock". However, this will just not work across different qiskit invocations (as each one will have its own environment variables, and modifying them in one invocation will not have any effect on the other instances), which seems to be the main reason for using an environment variable - and I actually lean towards just not dealing with the "multiple qiksit invocations" scenario altogether, which seems a bit exotic and out of the scope.
If that scenario is ruled out, what are our actual needs and use cases, @nonhermitian ? If the goal is preventing several concurrent paralellized calls, there are synchronization primitives in the standard library that can be used - and actually, another option is to just have a "static-ish" pool of workers and just dispatch the tasks to them letting the pool handle the issue (as in, if the pool has N workers and you send M tasks, you still can have N-M free workers for whichever task comes in the meantime).
parallel_map signature and design
(from https://github.com/Qiskit/qiskit-terra/pull/701#discussion_r213270028)
It seems that with the current proposal:
parallel_map(task, values, task_args=tuple(), task_kwargs={}, ...)

values is the list/array which will be iterated over (ie. task(values[0],...), task(values[1], ...), ... will be executed). This actually imposes that the functions to be used with parallel_map will always have one (and only one) "significant" argument, constraining their signature and leading to issues such as:
def _transpile_dags_parallel(VALUE, basis_gates='u1,u2,u3,cx,id', ...
    """"
    Args:
        VALUE (tuple[DAGCircuit,dict]): Tuple of DAG and intial_layout.

where that VALUE argument is forced to be a tuple, hindering maintainability artificially. We should be able to come up with a solution that does not require the task function to have any knowledge or constraints about how it is called (regularly or via parallelization).
Can we also get the list of use cases and scenarios for this decision, and find out a better solution? Actually, do we really have a need for parallel_map to exist separately? It feels considerably close to the standard Pool.map_async() (itself a version of Python's plain map), and the variant Pool.starmap_async() (for dealing with unpacked arguments) - if we can take advantage of standard functionality, it is very encouraged.

It is basically a wrapper of pool.apply_async().  See line 99 in _parallel.py

The example highlighted here where values is a tuple of two variables is in some sense an artifact of the way transpile.compile and transpile._transpile_dags are partitioned.  If the check for initial_layout was done in transpile._transpile_dags, then there would be a single iteration variable of type DAGCircuit.  From a parallel perspective, that would be ideal as the checks for matching the coupling map, or picking the best layout are on a per circuit basis, and can (perhaps should?) be done in the parallel calls.  Another way to say it would be that we should be able to call a higher-level parallel function inside of transpile.compile that does the whole chain of events in parallel, and would only need a single variable.  This would be an example of where the env var check for nested calls to parallel_map comes in handy.

Currently, the only use cases are for the transpiler.  These are requested by @chunfuchen and @jaygambetta for 0.6.  While these are the only cases that need to be addressed now, it is possible, and probably quite likely, that there will be other bottlenecks that arise that would benefit from running in parallel.  This PR is quite general, allowing for basically any embarrassingly easy parallel task to be executed (except on Win).
Using only a single variable in a parallel iteration is quite common, and really the standard thing to do.  The functions you are complaining about are functions that were made solely for the purpose of parallelization.  I did not change the signatures of any current functionality.  In fact, the new functions have the same signature even if the routine is called with a single variable that triggers a serial evaluation.  But to the larger picture, parallel algorithms usually are quite a bit different than their serial counterparts, so a possible change in signature should not come as a surprise.
This PR addresses the requested functionality in a completely general manner, and using tools that have been well used over the last eight years.  I think this PR is basically done.  @diego-plan9 if you have any issues with the code as is, you are more than welcome to jump in an correct them, or close this and start your own.

Example on how to call the progress bars:

import time
from qiskit._parallel import parallel_map
from qiskit._progressbar import TextProgressBar

def _parfunc(x):
    time.sleep(1)
    return 0

TextProgressBar()
parallel_map(_parfunc,list(range(10)))

@mtreinish, @ajavadia  please take a look.

@nonhermitian can you put all the utils inside the transpiler folder and then we are good to merge this PR. How it talks to other parts of qiskit-terra we will discuss later.


VSCode won't open up new window when one is open with same name (capitalization issue)

Issue Type: Bug
I have two folders both of which I want to open with "code ." as they have different repos.
One is Public-website, the other public-website.
Difference is a capital P.
Whichever one is open, when I try to open another it refuses... presumably because of the name matching.
marts@laptop:~/public-website/public-website$ code .
marts@laptop:~/public-website/public-website$ cd ../Public-Website/
marts@laptop:~/public-website/Public-Website$ code .

VS Code version: Code 1.66.0 (e18005f0f1b33c29e81d732535d8c0e47cafb0b5, 2022-03-30T05:50:14.623Z)
OS version: Windows_NT x64 10.0.22000
Restricted Mode: No
Remote OS version: Linux x64 <IP_ADDRESS>-microsoft-standard-WSL2
Remote OS version: Linux x64 <IP_ADDRESS>-microsoft-standard-WSL2

System Info

Item
Value

CPUs
Intel(R) Core(TM) i7-10610U CPU @ 1.80GHz (8 x 2304)

GPU Status
2d_canvas: enabledcanvas_oop_rasterization: disabled_offdirect_rendering_display_compositor: disabled_off_okgpu_compositing: enabledmultiple_raster_threads: enabled_onoop_rasterization: enabledopengl: enabled_onrasterization: enabledraw_draw: disabled_off_okskia_renderer: enabled_onvideo_decode: enabledvideo_encode: enabledvulkan: disabled_offwebgl: enabledwebgl2: enabled

Load (avg)
undefined

Memory (System)
47.73GB (24.19GB free)

Process Argv
--folder-uri=vscode-remote://wsl+Ubuntu-20.04/home/marts/public-website/public-website --remote=wsl+Ubuntu-20.04 --crash-reporter-id 906383b3-2c9c-43cb-b820-d2e0caffe1f8

Screen Reader
no

VM
0%

Item
Value

Remote
WSL: Ubuntu-20.04

OS
Linux x64 <IP_ADDRESS>-microsoft-standard-WSL2

CPUs
Intel(R) Core(TM) i7-10610U CPU @ 1.80GHz (8 x 2304)

Memory (System)
23.34GB (19.15GB free)

VM
0%

Item
Value

Remote
WSL: Ubuntu-20.04

OS
Linux x64 <IP_ADDRESS>-microsoft-standard-WSL2

CPUs
Intel(R) Core(TM) i7-10610U CPU @ 1.80GHz (8 x 2304)

Memory (System)
23.34GB (19.15GB free)

VM
0%

Extensions (7)

Extension
Author (truncated)
Version

terraform
has
2.22.0

remote-wsl
ms-
0.66.0

gitlens
eam
12.0.6

terraform
has
2.22.0

azure-pipelines
ms-
1.202.0

azure-account
ms-
0.10.1

vsliveshare
ms-
1.0.5527

A/B Experiments
vsliv368cf:30146710
vsreu685:30147344
python383:30185418
vspor879:30202332
vspor708:30202333
vspor363:30204092
pythonvspyl392:30443607
pythontb:30283811
pythonvspyt551cf:30345471
pythonptprofiler:30281270
vshan820:30294714
vstes263:30335439
vscoreces:30445986
pythondataviewer:30285071
vscod805cf:30301675
pythonvspyt200:30340761
binariesv615:30325510
bridge0708:30335490
bridge0723:30353136
vsaa593cf:30376535
vsc1dst:30438360
pythonvs932:30410667
wslgetstarted:30449410
pythonvsnew555:30457759
vscscmwlcmt:30465135
cppdebugcf:30475217

This seems to me an issue with how we wrongly assume the Windows (host) sensitivity of the paths when we need to respect the Linux (remote) sensitivity.

windowsFinder sees the inputs as vscode-remote URI and uses extUriBiasedIgnorePathCase.
There's currently no way way of knowing the exact casing of vscode-remote URI when in electron-main.
We can change it to case sensitive but then possibly break remote windows.
We can also hard code knowledge about WSL (vscode-remote://wsl+...) bet we don't want to do that.

We closed this issue because we don't plan to address it in the foreseeable future. If you disagree and feel that this issue is crucial: we are happy to listen and to reconsider.
If you wonder what we are up to, please see our roadmap and issue reporting guidelines.
Thanks for your understanding, and happy coding!


Page timeout due to script loading error/timeout

Puppeteer version: 1.13 and 1.15
Platform / OS version: Ubuntu 18.04
URLs (if applicable): https://www.echt-susteren.nl/ and https://www.noordwijk.nl/
Node.js version: v8.16.0

I use Puppeteer to check 360 sites for cookies. 358 of them work with a 9s timeout. 2 of them don't work at all, not even with a 90s timeout.
Script:
const browser = await puppeteer.launch(/*{executablePath: '/usr/bin/chromium-browser'}*/);
const page = await browser.newPage();

try {
	await page.goto(url, {timeout: 90000});
}
catch (ex) {
	console.log(ex.constructor.name + ': ' + ex.message);
	process.exit();
}

Only for those 2 URLs, it keeps crashing with TimeoutError: Navigation Timeout Exceeded: 90000ms exceeded.
A separately installed chromium (via executablePath) (73.0.3683.86) doesn't change anything.
I can't see why it times out. Only that it times out. Can't it connect? Is it loading too much? They work fine in my real (Windows) Chrome browser. The other 358 sites work fine too. Is there a more debug mode? A Network panel?

https://try-puppeteer.appspot.com/ doesn't work either, for either URL. Same timeout (but after the default 30s).

It might be because a single JS resource can't be loaded. The normal browser gives up after X seconds, and keeps going with the rest of the page. Puppeteer gives up completely. Can I set single resource timeout to something lower? I want to wait for the 'load' event, unless a resource times out. Just like the real browser, right?

Though it would probably be best if puppeteer could support it out of the box.
But you can wait for domcontentloaded in your goto function, afterward, wait for the native js load function.

How do I "wait for the native js load function"? I do need to wait for load, domcontentloaded is too soon for my use. Will the "native js load" be executed like in the real browser?, after a certain timeout.

Do you have an example page for me to reproduce?

Of course:

URLs (if applicable): https://www.echt-susteren.nl/ and https://www.noordwijk.nl/

Times out after ~20 sec in real Chrome. Breaks Puppeteer after 30 sec (by default).

Just curious, of the 358, are those two your only sites using https?

No, about 350 are https. The problem is the single JS resource that doesn't load, which makes the onload event not trigger, which hangs the headless browser, but not the real browser. I still have no good fix for this. Only an external timeout works (process A with timeout that calls process B that calls Puppeteer), since Puppeteer doesn't seem to have a timeout setting for this.

@rudiedirkx The https://www.noordwijk.nl doesn't load for me in a desktop browser either, so puppeteer's timeout is a fair error. Why do you think it's wrong/bad?

Actually, chrome has a 1 minute timeout for pending requests, so the following works fine for me:
const puppeteer = require('puppeteer');

(async() => {
    const browser = await puppeteer.launch({
      headless: false,
    });
    const [page] = await browser.pages();
    await page.goto('https://www.noordwijk.nl/', {
      timeout: 90000,
    });
    await browser.close();
})();

That's not what I see. Neither.
The real/desktop browser times out resources after 20 sec, and then the page load event triggers. Not so in Puppeteer.
My Puppeteer keeps waiting, minutes and minutes, not 1 minute, for unloadable resources. With {headless: true} of course, because headless is the point.
It still seems headless Puppeteer does resource timeout differently than the real/desktop browser. Automatic 20 sec timeout in desktop. No timeout at all in Puppeteer.

The automatic 20 (21?) sec timeout in the real browser:

If I try on https://try-puppeteer.appspot.com/
const browser = await puppeteer.launch(); // same with {headless: false}, if that works there

const page = await browser.newPage();
await page.goto('https://www.noordwijk.nl/', {timeout: 90000});

console.log(await page.content());
await page.screenshot({path: 'screenshot.png'});

await browser.close();

it errors after a while:

Error running your code. TimeoutError: Navigation Timeout Exceeded: 90000ms exceeded

because the entire page times out, instead of the 1 broken resource, so this entire page is unloadable. Not so in the real browser.

Soooo? Anyway to avoid this resource timeout with Puppeteer? Seems to me like kind of a big issue. Am I doing something wrong? Is there a better event to wait for? Or a workaround? Or update or patch something?

Can confirm this with puppeteer 2.1.1
const puppeteer = require('puppeteer');
const url = 'https://www.youtube.com/channel/UCxhygwqQ1ZMoBGQM2yEcNug/videos';

async function run() {
  try {
    const browser = await puppeteer.launch({ headless: true });
    const page = await browser.newPage();
    await page.goto(url, { waitUntil: 'networkidle2' });
    await page.waitForSelector('#items');
    // Throws TimeoutError when headless is set to true
  } catch (e) {
    console.log(e);
  }
}

run();

I have a similar issue. In my case I discovered that on the page I goto there is a script that redirects and I don't know how to fix it. but when I remove the page from the script seems to work!

Hi, I have the same problem, when I'm trying to get channel /videos page. When Puppeteer is set to headless: true the page is just not loading the content.  Im using also this plugin https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth
Do you think that they somehow recognize headless browser?

Hi, I have the same problem, when I'm trying to get channel /videos page. When Puppeteer is set to headless: true the page is just not loading the content. Im using also this plugin https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth
Do you think that they somehow recognize headless browser?

Yes, looks like they recognize the headless browser already.

I guess the only way to make this work is to keep headless option to false and just save the data to a json file or db and do a cron job.

@dealeros @sorxrob That's a different issue. If you can make a screenshot, there's no script timeout.

@rudiedirkx My screenshot was taken before page.waitFor(element). After that is timeout.
        await page.waitFor(5000);
        await page.screenshot({
            path: './images/screenshot.jpg',
            type: 'jpeg',
            quality: 70
        })
        await page.waitFor('#metadata-line .style-scope.ytd-grid-video-renderer');

@sorxrob I found the solution. Just add to launch args - --enable-blink-features=HTMLImports
browser = await puppeteer.launch({
            //headless: false,
            'args': [
                '--enable-blink-features=HTMLImports'
            ]
        });

@dealeros This issue isn't about waitFor(element). It's about page.goto(url) timing out due to a website script not loading. The real browser handles that (it just quits after 20 secs), but headless breaks.

I am facing the same issue on my laptop.
I cannot access to some websites with puppeteer, but I can access them in a normal chrome instance.
However, when I am trying the same script on my virtual machine it works perfectly.
My scripts:
const puppeteer = require('puppeteer');
const utils = require('./utils');
const url = "https://google.com";

(async () => {
  const browser = await puppeteer.launch({
      headless: false
  });
  const page = await browser.newPage();
  await page.goto(url, {
      waitUntil: 'domcontentloaded',
      timeout: 100000
    });
  await utils.sleep(3000);
  await browser.close();
})();

My laptop environment:
OS: Windows 1089
puppeteer version: 2.1.1
My VM environment:
OS: Microsoft Windows Server 2019 (Windows 1089)
puppeteer version: 2.1.1
BTW, it takes an extremely long time to load the page completely when I am using headless chrome to access specific URLs on my laptop.

@kingiw use this code to generate console logs to cmd:
page
        .on('console', message =>
        console.log(`${message.type().substr(0, 3).toUpperCase()} ${message.text()}`))
        .on('pageerror', ({ message }) => console.log(message))
        .on('response', response =>
        console.log(`${response.status()} ${response.url()}`))
        .on('requestfailed', request =>
        console.log(`${request.failure().errorText} ${request.url()}`));

It should help you to find the problem. Just compare logs when headless and not.

@dealeros Thanks for your quick response.
The log shows a 200 status code to load an image:
200 data:image/png;base64,iVBORw0KGgoAAAANSUhE...

The full error messages are:
et::ERR_TIMED_OUT [MY_URL]
(node:3308) UnhandledPromiseRejectionWarning: Error: net::ERR_TIMED_OUT at [MY_URL]
    at navigate (D:\work\sysuthesis\bot\node_modules\puppeteer\lib\FrameManager.js:120:37)
    at process._tickCallback (internal/process/next_tick.js:68:7)
  -- ASYNC --
    at Frame.<anonymous> (D:\work\sysuthesis\bot\node_modules\puppeteer\lib\helper.js:111:15)
    at Page.goto (D:\work\sysuthesis\bot\node_modules\puppeteer\lib\Page.js:672:49)
    at Page.<anonymous> (D:\work\sysuthesis\bot\node_modules\puppeteer\lib\helper.js:112:23)
    at D:\work\sysuthesis\bot\example.js:25:14
    at process._tickCallback (internal/process/next_tick.js:68:7)
(node:3308) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:3308) [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.
200 data:image/png;base64,iVBORw0KGgoAAAANSUhEU...

@kingiw I can't reproduce your issue. On my machine it just work ok.  Maybe you are banned.  The implementation is just:
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());

@dealeros Yep, and that's why the problem is tricky.
I simply ran into this problem on my personal laptop with puppeteer.
I can access the page with a real chrome instance without any proxy on my personal laptop.
I can also run the script on my virtual machine, with totally the same version of node/puppeteer/etc.

In my case the goto timeout happens because of a forever-loading blocking resource (js or css). That'll never trigger the page's load or domcontentloaded. A bug in Puppeteer IMO, but whatever.
My fix (FINALLY!) is to do what Lighthouse does in its Driver: a Promise.race() for a custom 'timeout'-ish. The shorter version I used:
const LOAD_FAIL = Math.random();

const sleep = (options) => {
	return new Promise(resolve => {
		options.timer = setTimeout(resolve, options.ms, options.result === undefined ? true : options.result);
	});
};

const sleepOptions = {ms: TIMEOUT - 1000, result: LOAD_FAIL};
const response = await Promise.race([
	sleep(sleepOptions),
	page.goto(url, {timeout: TIMEOUT + 1000}),
]);
clearTimeout(sleepOptions.timer);
const success = response !== LOAD_FAIL;

The sleep() and page.goto() race. If it's the timeout, the result is clearly a fail (LOAD_FAIL). Otherwise it's whatever page.goto() returns. Like this, it doesn't throw a TimeoutException, and the page is still queryable.
That was my issue. I don't know all your semi-related issues.

I am facing the same issue on my laptop.
I cannot access to some websites with puppeteer, but I can access them in a normal chrome instance.
However, when I am trying the same script on my virtual machine it works perfectly.
My scripts:
const puppeteer = require('puppeteer');
const utils = require('./utils');
const url = "https://google.com";

(async () => {
  const browser = await puppeteer.launch({
      headless: false
  });
  const page = await browser.newPage();
  await page.goto(url, {
      waitUntil: 'domcontentloaded',
      timeout: 100000
    });
  await utils.sleep(3000);
  await browser.close();
})();

My laptop environment:
OS: Windows 1089
puppeteer version: 2.1.1
My VM environment:
OS: Microsoft Windows Server 2019 (Windows 1089)
puppeteer version: 2.1.1
BTW, it takes an extremely long time to load the page completely when I am using headless chrome to access specific URLs on my laptop.

@kingiw I am having the exact same issue as you, except that my laptop environment uses OSX and VM environment uses Centos 7.4, and puppeteer 1.9.0 on both of them.

In my case the goto timeout happens because of a forever-loading blocking resource (js or css). That'll never trigger the page's load or domcontentloaded. A bug in Puppeteer IMO, but whatever.
My fix (FINALLY!) is to do what Lighthouse does in its Driver: a Promise.race() for a custom 'timeout'-ish. The shorter version I used:
const LOAD_FAIL = Math.random();
const sleep = options => new Promise(resolve => {
	options.timer = setTimeout(resolve, options.ms, options.result === undefined ? true : options.result);
});

const sleepOptions = {ms: TIMEOUT - 1000, result: LOAD_FAIL};
const response = await Promise.race([
	sleep(sleepOptions),
	page.goto(url, {timeout: TIMEOUT + 1000}),
]);
clearTimeout(sleepOptions.timer);
const success = response !== LOAD_FAIL;

The sleep() and page.goto() race. If it's the timeout, the result is clearly a fail (LOAD_FAIL). Otherwise it's whatever page.goto() returns. Like this, it doesn't throw a TimeoutException, and the page is still queryable.
That was my issue. I don't know all your semi-related issues.

Does this actually solve any problem at all? I have an exact problem as you right now, site with custom code block failed to load in Puppeteer headless mode.
My understanding of your above code is just to allow it timeout more gracefully, but it does not solve the screenshot problem, it will still not able to do a screenshot.


Check for previous/existing GitHub issues/module proposals

[X] I have checked for previous/existing GitHub issues/module proposals.

Check this module doesn't already exist in the module indexes

[X] I have checked for that this module doesn't already exist in the module indexes.

Bicep or Terraform?
Bicep
Module Classification?
Pattern Module
Module Name
avm/ptn/container-service/aks-baseline
Module Details
Please add a Pattern Module named avm/ptn/container-service/aks-baseline, this module will create the required resources for the baseline architecture for an Azure Kubernetes Service (AKS) cluster.
For details, please refer to:

https://github.com/mspnp/aks-baseline/
https://learn.microsoft.com/azure/architecture/reference-architectures/containers/aks/baseline-aks

Do you want to be the owner of this module?
No
Module Owner's GitHub Username (handle)
No response
(Optional) Secondary Module Owner's GitHub Username (handle)
No response

@WayneHoggett-ACG, thank you for proposing this module!
Please note that as this is categorized as a pattern module, its approval will require a more thorough assessment. The AVM core team will get back to you soon. Thank you for your patience!
If this module gets to get built the proposed way and there's an opportunity to do so, would you also like to contribute to it?

I‘m also interested in contributing to this module.


refactor(sender): split signer address checks into gas-oracle and rollup-relayer

Purpose or design rationale of this PR
Decouples the config dependencies so that gas-oracle and rollup-relayer only need to initialize the needed accounts.
PR title
Your PR title must follow conventional commits (as we are doing squash merge for each PR), so it must start with one of the following types:

[x] refactor: A code change that doesn't fix a bug, or add a feature, or improves performance

Deployment tag versioning
Has tag in common/version.go been updated or have you added bump-version label to this PR?

[x] Yes

Breaking change label
Does this PR have the breaking-change label?

[x] No, this PR is not a breaking change

Summary by CodeRabbit

New Features

Simplified error handling for sender address validation in the Layer2 Relayer service.
Updated error messages to align with the new validation logic focusing on commit and finalize sender addresses.

Bug Fixes

Improved control flow and error handling related to sender address configurations.

Codecov Report
Attention: Patch coverage is 18.18182% with 9 lines in your changes missing coverage. Please review.

Project coverage is 52.06%. Comparing base (fa2401c) to head (5dcdbae).

Files with missing lines
Patch %
Lines

rollup/internal/controller/relayer/l2_relayer.go
18.18%
6 Missing and 3 partials :warning:

Additional details and impacted files
@@           Coverage Diff            @@
##           develop    #1568   +/-   ##
========================================
  Coverage    52.06%   52.06%
========================================
  Files          157      157
  Lines        12479    12472    -7
========================================
- Hits          6497     6494    -3
+ Misses        5421     5418    -3
+ Partials       561      560    -1

Flag
Coverage Δ

rollup
57.15% <18.18%> (+0.02%)
:arrow_up:

Flags with carried forward coverage won't be shown. Click here to find out more.

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


Problem with retrieval of Octopuns

http://www.octopuns.net/ seems to be dead now :(

I contacted the author and he replied me a few weeks ago. Now the site seems to be back :-).


Add SIWE page

https://app.clickup.com/t/2wu1jvz

TODO:

[ ] Increase max line length in Prettier
[ ] Change the sign message and the screenshot
[ ] Check the signature object in Ethersjs / web3js


Create folder

How do you create a folder via this library? Can you create a folder, if not already existent, and PUT a file in it in 1 call?

This is a StackOverflow question, not an issue with the library.

Fair enough


Installation error

I was unable to install the package with 'pip install Flask-User' and got this error.
pip install Flask-User
Collecting Flask-User
Using cached https://files.pythonhosted.org/packages/10/3c/00776d0521f6269e6df65e3e0a80bfd11fff7d9d87a514a439db3c85b2bd/Flask-User-<IP_ADDRESS>.tar.gz
ERROR: Command errored out with exit status 1:
After installing flask-login, I was able to install flask-user.  My apologies if this is an oversight on my end, but I haven't worked with flask-user yet and was just following the docs

Hi @joeybellerose! Thank you for taking a minute and writing us! But I'm afraid that we don't have enough data to diagnose this issue.
Questions:

What Python version do you use? You can check it if you execute python -V.
What pip version do you use? pip -V
Have you tried to just re-run the command? Probably it was some one-time network related issue.

Just checked it, I can successfully install Flask-User on Python 3.6, 3.7 and 3.8 using pip 19.3.1.

I'm going to close the issue, but if the error appears again -- feel free to write here :)

@and-semakin , my apologies for not giving you more info.
pip version: 19.3.1
python verison: 3.8
I re-ran the command a couple of times and was unable to get it to work until I installed Flask-Login.
Either way, agreed that there is no action here....just wanted to let you know in case it pops up for someone else.


--device-id argument is not supplied to flutter build ios

The --device-id argument is not supplied to flutter build ios, making it impossible to run flutter build ios --simulator for an app with a watch companion app.
Steps to Reproduce

Start with an app with an iOS watch companion app.
Run flutter build ios --simulator -d {DEVICE ID OF SIMULATOR}
Note the error from the build tool:

No simulator device ID has been set.
A device ID is required to build an app with a watchOS companion app.
Please run "flutter devices" to get a list of available device IDs
and specify one using the -d, --device-id flag.
Encountered error while building for simulator.

Logs

Logs
Output of flutter build ios --simulator -d {DEVICE ID OF SIMULATOR}
Building com.flutter.example for simulator (ios)...
Watch companion app found.
No simulator device ID has been set.
A device ID is required to build an app with a watchOS companion app.
Please run "flutter devices" to get a list of available device IDs
and specify one using the -d, --device-id flag.
Encountered error while building for simulator.

Output of running flutter doctor -v:
[✓] Flutter (Channel stable, 2.8.1, on macOS 12.1 21C52 darwin-arm, locale en-NL)
    • Flutter version 2.8.1 at /Users/Macbook/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 77d935af4d (4 weeks ago), 2021-12-16 08:37:33 -0800
    • Engine revision 890a5fca2e
    • Dart version 2.15.1

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/Macbook/Library/Android/sdk
    • Platform android-31, build-tools 31.0.0
    • ANDROID_HOME = /Users/Macbook/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.2.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.11.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2020.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)

[✓] IntelliJ IDEA Ultimate Edition (version 2021.2.2)
    • IntelliJ at /Applications/IntelliJ IDEA.app
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart

[✓] VS Code (version 1.63.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.32.0

[✓] Connected device (2 available)
    • iPhone 13 (mobile) • 97A403AF-4F89-4465-BDAF-AB2CA9187571 • ios            •
      com.apple.CoreSimulator.SimRuntime.iOS-15-2 (simulator)
    • Chrome (web)       • chrome                               • web-javascript • Google Chrome
      97.0.4692.71

• No issues found!

Issue
buildXcodeProject() in mac.dart requires a device id, and for apps with a watch companion app run on a simulator, throws an error if device id is not supplied.
However, build_ios.dart does not supply the device id from the command line argument to buildXcodeProject(), making it impossible to execute this build.

@putnokiabel
Check if your issue is similar to https://github.com/flutter/flutter/issues/85871

@darshankawar
It looks like the same issue that @LongXiangGuo mentioned on the same thread: the "global" command line arguments (like --device-id) aren't used by the flutter build ios command, even though the command implicitly requires them in some cases (like building an app with a watch companion for an iOS simulator).
However, I don't think it it is the same issue, or that is is solved by, the original proposal in #85871.

Thanks for the update. I am able to replicate this by adding Watch App for iOS App as a new target under watchOS and then trying to run flutter build ios --simulator -d {device_id} gives below error in the console:
dhs@Dhss-MacBook-Pro ios_bug % flutter build ios --simulator -d A5473606-0213-4FD8-BA16-553433949729
Building com.example.iosBug for simulator (ios)...
Running pod install...                                             14.0s
Watch companion app found.
No simulator device ID has been set.
A device ID is required to build an app with a watchOS companion app.
Please run "flutter devices" to get a list of available device IDs
and specify one using the -d, --device-id flag.
Encountered error while building for simulator.

 stable, master flutter doctor -v

[[✓] Flutter (Channel stable, 2.8.1, on Mac OS X 10.15.4 19E2269 darwin-x64,
    locale en-GB)
    • Flutter version 2.8.1 at /Users/dhs/documents/fluttersdk/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 77d935af4d (13 hours ago), 2021-12-16 08:37:33 -0800
    • Engine revision 890a5fca2e
    • Dart version 2.15.1

[✓] Android toolchain - develop for Android devices (Android SDK version 30)
    • Android SDK at /Users/dhs/Library/Android/sdk
    • Platform android-30, build-tools 30.0.3
    • ANDROID_HOME = /Users/dhs/Library/Android/sdk
    • Java binary at: /Users/dhs/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/202.7486908/Android
      Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.3, Build version 12C33
    • CocoaPods version 1.10.1

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
    • Android Studio at /Users/dhs/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/202.7486908/Android
      Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6915495)

[✓] VS Code (version 1.57.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.21.0

[✓] Connected device (4 available)
    • Darshan's iphone (mobile)  • 21150b119064aecc249dfcfe05e259197461ce23 •
      ios            • iOS 14.4.1 18D61
    • iPhone 12 Pro Max (mobile) • A5473606-0213-4FD8-BA16-553433949729     •
      ios            • com.apple.CoreSimulator.SimRuntime.iOS-14-3 (simulator)
    • macOS (desktop)            • macos                                    •
      darwin-x64     • Mac OS X 10.15.4 19E2269 darwin-x64
    • Chrome (web)               • chrome                                   •
      web-javascript • Google Chrome 93.0.4577.82

• No issues found!

[✓] Flutter (Channel master, 2.9.0-1.0.pre.363, on Mac OS X 10.15.4 19E2269
    darwin-x64, locale en-GB)
    • Flutter version 2.9.0-1.0.pre.363 at
      /Users/dhs/documents/fluttersdk/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 9e9a728667 (4 hours ago), 2022-01-14 09:40:11 +0800
    • Engine revision f121c1fe68
    • Dart version 2.17.0 (build 2.17.0-11.0.dev)
    • DevTools version 2.9.2

[✓] Android toolchain - develop for Android devices (Android SDK version 30)
    • Android SDK at /Users/dhs/Library/Android/sdk
    • Platform android-30, build-tools 30.0.3
    • ANDROID_HOME = /Users/dhs/Library/Android/sdk
    • Java binary at: /Users/dhs/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/202.7486908/Android
      Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.5.1, Build version 12E507
    • CocoaPods version 1.10.1

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
    • Android Studio at /Users/dhs/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/202.7486908/Android
      Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6915495)

[✓] VS Code (version 1.57.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.21.0

[[✓] Connected device (4 available)
    • Darshan's iphone (mobile)  • 21150b119064aecc249dfcfe05e259197461ce23 •
      ios            • iOS 14.4.1 18D61
    • iPhone 12 Pro Max (mobile) • A5473606-0213-4FD8-BA16-553433949729     •
      ios            • com.apple.CoreSimulator.SimRuntime.iOS-14-3 (simulator)
    • macOS (desktop)            • macos                                    •
      darwin-x64     • Mac OS X 10.15.4 19E2269 darwin-x64
    • Chrome (web)               • chrome                                   •
      web-javascript • Google Chrome 93.0.4577.82

• No issues found!

You're right, this was never hooked up for flutter build ios, only flutter run.


Animation Samplers CubicSpline & Step

Vulkan-glTF-PBR is the best C++ animated glTF viewer implementation so far!
For animations, can CubicSpline and Step interpolation support be added?
Cubicspline animation doesn't currently animate because glTF cubicspline animation sampler data layout is different from linear/step (cubicspline uses additional in-tangent and out-tangent vectors)
Step animation animates, Step just needs frame interpolation turned off
Cubicspline animation expects output*3 vectors total to store the cubicspline intangent and out tangent

"CUBICSPLINE" The animation's interpolation is computed using a cubic spline with specified tangents.
The number of output elements must equal three times the number of input elements. For each input element, the output stores three elements, an in-tangent, a spline vertex, and an out-tangent. There must be at least two keyframes when using this interpolation.

(From: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation )

Here's a suggestion for cubicspline animation support:
Vulkan-glTF-PBR needs to write in-tangent and out-tangent when loading cubicspline animations
void loadAnimations
https://github.com/SaschaWillems/Vulkan-glTF-PBR/blob/master/base/VulkanglTFModel.hpp#L1064
should  export extra intange and outtangent for the cubicspline interpolation,
in addition to outputsVec4
In updateAnimation
https://github.com/SaschaWillems/Vulkan-glTF-PBR/blob/master/base/VulkanglTFModel.hpp#L1346
Interpolation update can change to support all 3 styles
if cubicspline
   cubic bezier interpolation
else if linear
   mix/lerp
else if step
  like linear, just without mix/lerp

"LINEAR" The animated values are linearly interpolated between keyframes.
When targeting a rotation, spherical linear interpolation (slerp) should be used to interpolate quaternions. The number output of elements must equal the number of input elements.
"STEP" The animated values remain constant to the output of the first keyframe, until the next keyframe. The number of output elements must equal the number of input elements.

Here's a similar glTF cubicspline animation issue for reference: https://github.com/mrdoob/three.js/pull/12907

attached is a zip of the 3 animation sample types in glTF
glTF_3_animation_types.zip

Yes, that's on my todo list. I got cubic spline already up and running, but I haven't had the time to polish it up. The samples from your last issue are already working.
Spare time is currently a bit limited, so it may take some time.

I have pushed a new branch that adds step and cubic spline based interpolations for animation samplers. It's still wip, but if you need a reference you may want to take a look at it.

Cubic spline interpolation should work now. I have tested with this scene: https://github.com/KhronosGroup/glTF-Sample-Assets/tree/main/Models/InterpolationTest
And every animation type worked as expected.


Add new args to AutoDock-Vina wrapper

Hello,
I've added num_modes, min_rmsd and nergy_range flags to the AutoDock-Vina wrapper.
Best,
Nazanin

Hi @ndonyapour, thanks for your contribution! It will be added in the next release.
best.


Doesn't find clangd anymore after update from 0.21.0 to 0.21.1

After updating coc-clangd from 0.21.0 to 0.21.1, clangd is not found anymore. A downgrade to 0.21.0 makes it work again.
This is on Linux, with clangd in PATH:
$ which clangd
/usr/bin/clangd

System information
Clangd version:
Debian clangd version 13.0.1-3+b1
Features: linux+grpc
Platform: x86_64-pc-linux-gnu

clangd extension version (from :CocInfo): 0.21.1

Try v0.21.2.

Nope still can't find it.

@derekschrock do you have clangd.path set in your coc-settings.json? In my tests, you don't need to set clangd.path, coc-clangd will find clangd from bundled, PATH.

Try v0.21.3

Thanks, this works now.