Can't connect to Outlook OAuth IMAP

I have hijacked the issue https://github.com/Webklex/php-imap/issues/50 but I guess it's better to create a new one.
   $client = Client::make([
            'host' => 'outlook.office365.com',
            'port' => 993,
            'encryption' => 'ssl', // 'tls',
            'validate_cert' => false,
            'username' =><EMAIL_ADDRESS>            'password' => 'AccessToken',
            'protocol' => 'imap',
            'authentication' => "oauth",
   ]);

User/pass on my email server works
Gmail OAuth works
Outlook OAuth don't

In the outlook webapp it says the IMAP info is:
Host: outlook.office365.com
Port: 993
Method: TLS
In the Azure panel, I have setup a Web authenticated App with Access Tokens and ID Tokens enabled, Live SDK Yes and Public client No.
With the following APIs permissions:

Microsoft Graph
-- email
-- IMAP.AccessAsUser.All
-- offline_access
-- openid
-- profile
-- User.Read

I'm getting the tokens via oauth2-azure plugin for PHP League's OAuth 2.0 Client setting the scope as 'openid profile email offline_access %root%/IMAP.AccessAsUser.All %root%/User.Read'.
The MS Activity Page shows only my ok browser logins, nothing to validate there.
I got Google OAuth IMAP working in the same day, but after almost a week, Outlook is driving me nuts.
With SSL encryption  Webklex/php-imap returns "Connection setup failed" and logs out "NOTICE: PHP message: got failure response: NO AUTHENTICATE failed.".
With TLS secutity it hangs till time-out after Nginx 1 minute limit.
Any ideas?

Hi @EthraZa ,
thanks for the detailed report. Unfortunately I have no way to test / verify this.
In order to get some additional context you could enable the debug mode to see the communication with the mail server.
Open https://github.com/Webklex/php-imap/blob/6c2c54f9f99a1f5fff99f98bfacc2dcd706c9c9a/src/Connection/Protocols/Protocol.php#L32 and change the debug attribute from false to true.
If the TLS encryption method results in a timeout, the server is not responding. Maybe it's not supported by the server or runs under a different port?
Instead of using oAuth, could you generate an "app password" and use it instead?
Best regards,

Hi @EthraZa ,
thanks for the detailed report. Unfortunately I have no way to test / verify this.
In order to get some additional context you could enable the debug mode to see the communication with the mail server.
Open https://github.com/Webklex/php-imap/blob/6c2c54f9f99a1f5fff99f98bfacc2dcd706c9c9a/src/Connection/Protocols/Protocol.php#L32 and change the debug attribute from false to true.
If the TLS encryption method results in a timeout, the server is not responding. Maybe it's not supported by the server or runs under a different port?
Instead of using oAuth, could you generate an "app password" and use it instead?
Best regards,

Hi.
I have activated the debug and tested with Basci Auth (User/Pass) and OAuth.
As you can see bellow, M$ IMAP server works with Basic Auth but not with OAuth. And Basic Auth works with SSL, TLS just timeouts too.
Basic Auth:
>> TAG1 LOGIN<EMAIL_ADDRESS>"PASS"
<< []
>> TAG2 LIST "" "*"
<< [["LIST",["\\HasNoChildren"],"\/","Notes"],["LIST",["\\HasNoChildren"],"\/","Archive"],["LIST",["\\HasNoChildren"],"\/","Arquivo Morto"],["LIST",["\\Marked","\\HasNoChildren"],"\/","Inbox"],["LIST",["\\HasNoChildren"],"\/","Outbox"],["LIST",["\\HasNoChildren","\\Sent"],"\/","Sent"],["LIST",["\\HasNoChildren","\\Trash"],"\/","Deleted"],["LIST",["\\HasNoChildren","\\Junk"],"\/","Junk"],["LIST",["\\HasNoChildren","\\Drafts"],"\/","Drafts"]]
>> TAG3 LOGOUT
<< ["BYE Microsoft Exchange Server IMAP4 server signing off.\r\n"]
{"success":1,"S":[["Notes"],["Archive"],["Arquivo Morto"],["Inbox"],["Outbox"],["Sent"],["Deleted"],["Junk"],["Drafts"]]}

OAuth:
>> TAG1 AUTHENTICATE XOAUTH2 AbCdEfG=
>> TAG2 LOGOUT
<< ["BYE Microsoft Exchange Server IMAP4 server signing off.\r\n"]
{"success":1,"S":"connection setup failed"}

OAuth Log:
NOTICE: PHP message: got failure response: NO AUTHENTICATE failed.
I'm not sure, but it really seems it's connecting and authenticating to IMAP server, but failing elsewhere.

About App Password, it looks like it will not work for me because it needs 2FA and my system is a server-side app that collect emails attachments and need to work without user intervention. Anyways Google, Microsoft and everybody else seems to think that OAuth is the way to go and will deprecate other forms of login in the near future.

Starting February 15, 2021, G Suite accounts will only allow access to apps using OAuth
Microsoft's Outlook 365 will block IMAP except via OAuth2

Hi.
I have activated the debug and tested with Basci Auth (User/Pass) and OAuth.
As you can see bellow, M$ IMAP server works with Basic Auth but not with OAuth. And Basic Auth works with SSL, TLS just timeouts too.
Basic Auth:
>> TAG1 LOGIN<EMAIL_ADDRESS>"PASS"
<< []
>> TAG2 LIST "" "*"
<< [["LIST",["\\HasNoChildren"],"\/","Notes"],["LIST",["\\HasNoChildren"],"\/","Archive"],["LIST",["\\HasNoChildren"],"\/","Arquivo Morto"],["LIST",["\\Marked","\\HasNoChildren"],"\/","Inbox"],["LIST",["\\HasNoChildren"],"\/","Outbox"],["LIST",["\\HasNoChildren","\\Sent"],"\/","Sent"],["LIST",["\\HasNoChildren","\\Trash"],"\/","Deleted"],["LIST",["\\HasNoChildren","\\Junk"],"\/","Junk"],["LIST",["\\HasNoChildren","\\Drafts"],"\/","Drafts"]]
>> TAG3 LOGOUT
<< ["BYE Microsoft Exchange Server IMAP4 server signing off.\r\n"]
{"success":1,"S":[["Notes"],["Archive"],["Arquivo Morto"],["Inbox"],["Outbox"],["Sent"],["Deleted"],["Junk"],["Drafts"]]}

OAuth:
>> TAG1 AUTHENTICATE XOAUTH2 AbCdEfG=
>> TAG2 LOGOUT
<< ["BYE Microsoft Exchange Server IMAP4 server signing off.\r\n"]
{"success":1,"S":"connection setup failed"}

OAuth Log:
NOTICE: PHP message: got failure response: NO AUTHENTICATE failed.
I'm not sure, but it really seems it's connecting and authenticating to IMAP server, but failing elsewhere.

About App Password, it looks like it will not work for me because it needs 2FA and my system is a server-side app that collect emails attachments and need to work without user intervention. Anyways Google, Microsoft and everybody else seems to think that OAuth is the way to go and will deprecate other forms of login in the near future.

Starting February 15, 2021, G Suite accounts will only allow access to apps using OAuth
Microsoft's Outlook 365 will block IMAP except via OAuth2

Hi @EthraZa ,
thanks for the quick followup.
Please try to connect to the mail server via cli:
openssl s_client -crlf -connect outlook.office365.com:993

..and enter:
TAG1 AUTHENTICATE XOAUTH2 AbCdEfG=

I suspect you'll receive something like this: NO AUTHENTICATE failed
If so this would indicate that the auth payload https://github.com/Webklex/php-imap/blob/6c2c54f9f99a1f5fff99f98bfacc2dcd706c9c9a/src/Connection/Protocols/ImapProtocol.php#L393
is invalid.
Try to update L393 and replace \1 with \001. Or generate a new payload on the fly by calling:
echo base64_encode("user={User}\001auth=Bearer {Token}\001\001");

If you receive something else as a response, please let me know.
I'm aware of the upcoming changes regarding Google and Microsoft :)
Best regards and thanks a lot for testing and debugging.

Hi @EthraZa ,
thanks for the quick followup.
Please try to connect to the mail server via cli:
openssl s_client -crlf -connect outlook.office365.com:993

..and enter:
TAG1 AUTHENTICATE XOAUTH2 AbCdEfG=

I suspect you'll receive something like this: NO AUTHENTICATE failed
If so this would indicate that the auth payload https://github.com/Webklex/php-imap/blob/6c2c54f9f99a1f5fff99f98bfacc2dcd706c9c9a/src/Connection/Protocols/ImapProtocol.php#L393
is invalid.
Try to update L393 and replace \1 with \001. Or generate a new payload on the fly by calling:
echo base64_encode("user={User}\001auth=Bearer {Token}\001\001");

If you receive something else as a response, please let me know.
I'm aware of the upcoming changes regarding Google and Microsoft :)
Best regards and thanks a lot for testing and debugging.

I have tryed the openssl command with access_tokens generated before and after changing line 393, both have returned:
TAG1 NO AUTHENTICATE failed.
Here is the full session after change the line:
# openssl s_client -crlf -connect outlook.office365.com:993
CONNECTED(00000003)
depth=2 C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G3
verify return:1
depth=0 C = US, ST = Washington, L = Redmond, O = Microsoft Corporation, CN = outlook.com
verify return:1
---
Certificate chain
 0 s:C = US, ST = Washington, L = Redmond, O = Microsoft Corporation, CN = outlook.com
   i:C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G3
 1 s:C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G3
   i:C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIIqzCCB5OgAwIBAgIMbeoL4ZcnYKFZsYVgMA0GCSqGSIb3DQEBCwUAMGYxCzAJ
BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTwwOgYDVQQDEzNH
bG9iYWxTaWduIE9yZ2FuaXphdGlvbiBWYWxpZGF0aW9uIENBIC0gU0hBMjU2IC0g
RzMwHhcNMjAwODEzMjMxODQ5WhcNMjIwODE0MjMxODQ5WjBqMQswCQYDVQQGEwJV
UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMRQwEgYDVQQDEwtvdXRsb29rLmNvbTCC
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMkgP1e5+XGqPGoKXT/JjZml
UCYlTtxpUrMzcOdyooOSVNHUhhXyxGX4vOXSHhIlnnWOd9KOlMoDS/TIyuPjm2aj
oTd0zP7EHmTc4xi6wXs5W7FH6RGS7+7mCM2TewnHOf7l4kc/aHikF3gTyxI4nYkr
H3Wbh11T/LAqry2GinY7zl6uQ3Rowyi/EC/d2UNLLabcH22Q0M4UHmzcewbke6mB
QO3eGLffU2G8GIMRx7Qbme8U5GM541wv54lYW9oDOjmWispP2ONsf27T5zA0nNuL
6GqmCHcdY9ZXnc2nRwU5lnv9mgmZ70mxiQK+T7jvoAQpdPuafp2oEPt+sGxgT1cC
AwEAAaOCBVMwggVPMA4GA1UdDwEB/wQEAwIFoDCBngYIKwYBBQUHAQEEgZEwgY4w
SwYIKwYBBQUHMAKGP2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0
L2dzb3JnYW5pemF0aW9udmFsc2hhMmczLmNydDA/BggrBgEFBQcwAYYzaHR0cDov
L29jc3AyLmdsb2JhbHNpZ24uY29tL2dzb3JnYW5pemF0aW9udmFsc2hhMmczMFYG
A1UdIARPME0wQQYJKwYBBAGgMgEUMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3
Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMAgGBmeBDAECAjAJBgNVHRMEAjAA
MEYGA1UdHwQ/MD0wO6A5oDeGNWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vZ3Nv
cmdhbml6YXRpb252YWxzaGEyZzMuY3JsMIICEAYDVR0RBIICBzCCAgOCC291dGxv
b2suY29tghYqLmNsby5mb290cHJpbnRkbnMuY29tgg0qLmhvdG1haWwuY29tghYq
LmludGVybmFsLm91dGxvb2suY29tggoqLmxpdmUuY29tghYqLm5yYi5mb290cHJp
bnRkbnMuY29tggwqLm9mZmljZS5jb22CDyoub2ZmaWNlMzY1LmNvbYINKi5vdXRs
b29rLmNvbYIXKi5vdXRsb29rLm9mZmljZTM2NS5jb22CG2F0dGFjaG1lbnQub3V0
bG9vay5saXZlLm5ldIIdYXR0YWNobWVudC5vdXRsb29rLm9mZmljZS5uZXSCIGF0
dGFjaG1lbnQub3V0bG9vay5vZmZpY2VwcGUubmV0ghZhdHRhY2htZW50cy5vZmZp
Y2UubmV0ghphdHRhY2htZW50cy1zZGYub2ZmaWNlLm5ldIIdY2NzLmxvZ2luLm1p
Y3Jvc29mdG9ubGluZS5jb22CIWNjcy1zZGYubG9naW4ubWljcm9zb2Z0b25saW5l
LmNvbYILaG90bWFpbC5jb22CFm1haWwuc2VydmljZXMubGl2ZS5jb22CDW9mZmlj
ZTM2NS5jb22CEm91dGxvb2sub2ZmaWNlLmNvbYIUc3Vic3RyYXRlLm9mZmljZS5j
b22CGHN1YnN0cmF0ZS1zZGYub2ZmaWNlLmNvbTAdBgNVHSUEFjAUBggrBgEFBQcD
AQYIKwYBBQUHAwIwHwYDVR0jBBgwFoAUaIa4fXrZbUlrhy8YixU0bNe0eg4wHQYD
VR0OBBYEFIp8c0RwqE2DJW+mU9pCUpbJFXEhMIIBfAYKKwYBBAHWeQIEAgSCAWwE
ggFoAWYAdgAiRUUHWVUkVpY/oS/x922G4CMmY63AS39dxoNcbuIPAgAAAXPqHn0v
AAAEAwBHMEUCIQD0UI/nOMl60ff3acUF6o4DgCyHBgO2m+algy+5r3u0rAIgUaaP
6OVsp/8WAX4VQhEx3NzHN3xkLKzdQrs8eTF0zJ0AdQApeb7wnjk5IfBWc59jpXfl
vld9nGAK+PlNXSZcJV3HhAAAAXPqHnqnAAAEAwBGMEQCIAPxGdcPL8SphKAz1Ham
7vGu4APnrphDF7AP+xK7E9o0AiAQ5qkdixxk1Mn3wD08d0mxCD0dXjT52RB8dGsY
xl5tBwB1AFWB1MIWkDYBSuoLm1c8U/DA5Dh4cCUIFy+jqh0HE9MMAAABc+oefa4A
AAQDAEYwRAIgJiFk26biPTJ9n6iutym3QptJqvWlwBIBobbn8gHUL0UCIE4Zukd1
i0nXS7oEYt2it2sF0AEffDYXJymyFxx/EIGKMA0GCSqGSIb3DQEBCwUAA4IBAQAm
9KN3HdyexBqIIzCM4RT5Yg6/rSTJq6vQaIu88ewc0Jat+V/d4O6o4Cw6GaVoDG7+
5oDOoztsAIhcvzzYaAg2uZ6Em1+X+3fqcvtzRwCwqHxkOPHMwClxZ2V2TIBYl8hi
Yz7xPsAOSF9VIY+WaL1BFHoLjDFbOayjoJlYJPrZGTIcny2p7bmXpGYwKdiCovX8
bRDxrB0/+96hDraEkNRVXCEbHyFFksWaRwUPuBx4brlro6mNsVn/9OZxdzgS/kGP
BJIIPzIqkl4Ke34E7iQQOfOsXgSTkaKPkAQzXFyUs4ArQ7/jdGQg9ACybHuod/t0
Nc7dtl+DGMTnMRqNMA3E
-----END CERTIFICATE-----
subject=C = US, ST = Washington, L = Redmond, O = Microsoft Corporation, CN = outlook.com

issuer=C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G3

---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA
Server Temp Key: ECDH, P-384, 384 bits
---
SSL handshake has read 3913 bytes and written 471 bytes
Verification: OK
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: BB250000BC2041427B6953AE49C04B712878A809F66FBE17ABF2A62A6509768F
    Session-ID-ctx:
    Master-Key: 65E75660D1D96EA0A646E4EA32CB8ED2AE8B9DB520D97FAE4316ABF78C32FFFD7A8F6697892F37DC1AE8317402294FAD
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time:<PHONE_NUMBER>
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: yes
---
* OK The Microsoft Exchange IMAP4 service is ready. [QwBQADIAUAAyADEANQBDAEEAMAAwADMAOQAuAEwAQQBNAFAAMgAxADUALgBQAFIATwBEAC4ATwBVAFQATABPAE8ASwAuAEMATwBNAA==]
TAG1 AUTHENTICATE XOAUTH2 EwCAA8l6BAAU6k7+XVQzkGyMv7VHB/h4cHbJYRAAAej8qGUaldjLIGYgDr9H4qv1UGc7egOk98CRImrV0kpR56j9NJ4kczsgEbJbdefkZq0uifNFNMIkLVXLUQpKotVKIkbKkBUZuXHXjT+nJlHtOuhRKFG3f5cBfpL115aweJFCXYhBxNj8etbk7VtBJ5qSjJ0Dds+6t2c3a2KWOSSYJL+/ZQJnMpFP58TMz1hJqJqYDmPM9P7hfL/KGaPLQbsTIIzBi+KO589I6xXdz2teJrGZp+A1FgZPU8cSEAxcgsWH+mwZ4KZOZ2FzvjAgV/PjM3bVOekqdMcTQfWxn0x+jKDkJtNiBwKiN8t0rQK16Pg5L2BHBEqMT+dniqtTDxwDZgAACBLRJ9iAXqrGUALCm9u9e7lZtXMVuX1Q5gEreI8PobfJpreZ1uvE3wMPk1eCdM7qaHII9v9OcJSPKTkwyXQAxcP0gtxqclgqjHW2LWRhzp9nECVkQ1dwqnDEnieHTa87fphOsDuNfpr3sodslF21NS0E/dq7zP2DWB38vZgXOwFUd7gLino8JyeWXr+qU/PGYcGZrBuyJmlB3deYuGF+qa9JlWZuKTy+kq7gTx9/tDgDyP0dog5cS5bbYK315VpJEYKr7rSZsYG4xBeYqgJcbMYVRtGoaNuoEevPj3TcYPdnRnTdtD9Q+NqUzhpKzr62lWTXKjhK97iq624lYuCJDnTAizbQnOM7Z5TBdsYfDFxlG8o1YlOWpyA7Dg3BS7FlG1di8KlZR4g5XezPTyF9bxRliMdQbZhgqa0Kt5gvbZL3IF6O0NRf4og6aO9ltuBWFIl38XNx8ZsPuyXl+hVoxHlpLU6Ynsriy9cG+Cje/tzCtZk1tT/8RTi0gMCA+B2EOUKqZ5w9+y6TGqGJevn6Jg+RB/+85av58X8k58VjxhmIPFY0DsC9A+Y0gJ+LdPk9L7CRFYMQEwtuX0+/3riIHaglJtch9wr0yMs6HxNDFPYjD1G35GViCRlT9J9nm6+e4XhcVIgsGCp5YCqi6XnBCixvkLAtOuu5+MC4srilsW4v1CD0yYi+1BqxFNEurF0bvWrX2eQ21wrlRRIvtuVd76DXBf34Gn+iTqRogmSc1U+P8gYEACWa24T4fjLBJ1i4e+JKNwr7nE95O721Ahlrh9Q5fQwB/gL3aMulgAI=
TAG1 NO AUTHENTICATE failed.

I have tryed the openssl command with access_tokens generated before and after changing line 393, both have returned:
TAG1 NO AUTHENTICATE failed.
Here is the full session after change the line:
# openssl s_client -crlf -connect outlook.office365.com:993
CONNECTED(00000003)
depth=2 C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G3
verify return:1
depth=0 C = US, ST = Washington, L = Redmond, O = Microsoft Corporation, CN = outlook.com
verify return:1
---
Certificate chain
 0 s:C = US, ST = Washington, L = Redmond, O = Microsoft Corporation, CN = outlook.com
   i:C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G3
 1 s:C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G3
   i:C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIIqzCCB5OgAwIBAgIMbeoL4ZcnYKFZsYVgMA0GCSqGSIb3DQEBCwUAMGYxCzAJ
BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTwwOgYDVQQDEzNH
bG9iYWxTaWduIE9yZ2FuaXphdGlvbiBWYWxpZGF0aW9uIENBIC0gU0hBMjU2IC0g
RzMwHhcNMjAwODEzMjMxODQ5WhcNMjIwODE0MjMxODQ5WjBqMQswCQYDVQQGEwJV
UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMRQwEgYDVQQDEwtvdXRsb29rLmNvbTCC
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMkgP1e5+XGqPGoKXT/JjZml
UCYlTtxpUrMzcOdyooOSVNHUhhXyxGX4vOXSHhIlnnWOd9KOlMoDS/TIyuPjm2aj
oTd0zP7EHmTc4xi6wXs5W7FH6RGS7+7mCM2TewnHOf7l4kc/aHikF3gTyxI4nYkr
H3Wbh11T/LAqry2GinY7zl6uQ3Rowyi/EC/d2UNLLabcH22Q0M4UHmzcewbke6mB
QO3eGLffU2G8GIMRx7Qbme8U5GM541wv54lYW9oDOjmWispP2ONsf27T5zA0nNuL
6GqmCHcdY9ZXnc2nRwU5lnv9mgmZ70mxiQK+T7jvoAQpdPuafp2oEPt+sGxgT1cC
AwEAAaOCBVMwggVPMA4GA1UdDwEB/wQEAwIFoDCBngYIKwYBBQUHAQEEgZEwgY4w
SwYIKwYBBQUHMAKGP2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0
L2dzb3JnYW5pemF0aW9udmFsc2hhMmczLmNydDA/BggrBgEFBQcwAYYzaHR0cDov
L29jc3AyLmdsb2JhbHNpZ24uY29tL2dzb3JnYW5pemF0aW9udmFsc2hhMmczMFYG
A1UdIARPME0wQQYJKwYBBAGgMgEUMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3
Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMAgGBmeBDAECAjAJBgNVHRMEAjAA
MEYGA1UdHwQ/MD0wO6A5oDeGNWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vZ3Nv
cmdhbml6YXRpb252YWxzaGEyZzMuY3JsMIICEAYDVR0RBIICBzCCAgOCC291dGxv
b2suY29tghYqLmNsby5mb290cHJpbnRkbnMuY29tgg0qLmhvdG1haWwuY29tghYq
LmludGVybmFsLm91dGxvb2suY29tggoqLmxpdmUuY29tghYqLm5yYi5mb290cHJp
bnRkbnMuY29tggwqLm9mZmljZS5jb22CDyoub2ZmaWNlMzY1LmNvbYINKi5vdXRs
b29rLmNvbYIXKi5vdXRsb29rLm9mZmljZTM2NS5jb22CG2F0dGFjaG1lbnQub3V0
bG9vay5saXZlLm5ldIIdYXR0YWNobWVudC5vdXRsb29rLm9mZmljZS5uZXSCIGF0
dGFjaG1lbnQub3V0bG9vay5vZmZpY2VwcGUubmV0ghZhdHRhY2htZW50cy5vZmZp
Y2UubmV0ghphdHRhY2htZW50cy1zZGYub2ZmaWNlLm5ldIIdY2NzLmxvZ2luLm1p
Y3Jvc29mdG9ubGluZS5jb22CIWNjcy1zZGYubG9naW4ubWljcm9zb2Z0b25saW5l
LmNvbYILaG90bWFpbC5jb22CFm1haWwuc2VydmljZXMubGl2ZS5jb22CDW9mZmlj
ZTM2NS5jb22CEm91dGxvb2sub2ZmaWNlLmNvbYIUc3Vic3RyYXRlLm9mZmljZS5j
b22CGHN1YnN0cmF0ZS1zZGYub2ZmaWNlLmNvbTAdBgNVHSUEFjAUBggrBgEFBQcD
AQYIKwYBBQUHAwIwHwYDVR0jBBgwFoAUaIa4fXrZbUlrhy8YixU0bNe0eg4wHQYD
VR0OBBYEFIp8c0RwqE2DJW+mU9pCUpbJFXEhMIIBfAYKKwYBBAHWeQIEAgSCAWwE
ggFoAWYAdgAiRUUHWVUkVpY/oS/x922G4CMmY63AS39dxoNcbuIPAgAAAXPqHn0v
AAAEAwBHMEUCIQD0UI/nOMl60ff3acUF6o4DgCyHBgO2m+algy+5r3u0rAIgUaaP
6OVsp/8WAX4VQhEx3NzHN3xkLKzdQrs8eTF0zJ0AdQApeb7wnjk5IfBWc59jpXfl
vld9nGAK+PlNXSZcJV3HhAAAAXPqHnqnAAAEAwBGMEQCIAPxGdcPL8SphKAz1Ham
7vGu4APnrphDF7AP+xK7E9o0AiAQ5qkdixxk1Mn3wD08d0mxCD0dXjT52RB8dGsY
xl5tBwB1AFWB1MIWkDYBSuoLm1c8U/DA5Dh4cCUIFy+jqh0HE9MMAAABc+oefa4A
AAQDAEYwRAIgJiFk26biPTJ9n6iutym3QptJqvWlwBIBobbn8gHUL0UCIE4Zukd1
i0nXS7oEYt2it2sF0AEffDYXJymyFxx/EIGKMA0GCSqGSIb3DQEBCwUAA4IBAQAm
9KN3HdyexBqIIzCM4RT5Yg6/rSTJq6vQaIu88ewc0Jat+V/d4O6o4Cw6GaVoDG7+
5oDOoztsAIhcvzzYaAg2uZ6Em1+X+3fqcvtzRwCwqHxkOPHMwClxZ2V2TIBYl8hi
Yz7xPsAOSF9VIY+WaL1BFHoLjDFbOayjoJlYJPrZGTIcny2p7bmXpGYwKdiCovX8
bRDxrB0/+96hDraEkNRVXCEbHyFFksWaRwUPuBx4brlro6mNsVn/9OZxdzgS/kGP
BJIIPzIqkl4Ke34E7iQQOfOsXgSTkaKPkAQzXFyUs4ArQ7/jdGQg9ACybHuod/t0
Nc7dtl+DGMTnMRqNMA3E
-----END CERTIFICATE-----
subject=C = US, ST = Washington, L = Redmond, O = Microsoft Corporation, CN = outlook.com

issuer=C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G3

---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA
Server Temp Key: ECDH, P-384, 384 bits
---
SSL handshake has read 3913 bytes and written 471 bytes
Verification: OK
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: BB250000BC2041427B6953AE49C04B712878A809F66FBE17ABF2A62A6509768F
    Session-ID-ctx:
    Master-Key: 65E75660D1D96EA0A646E4EA32CB8ED2AE8B9DB520D97FAE4316ABF78C32FFFD7A8F6697892F37DC1AE8317402294FAD
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time:<PHONE_NUMBER>
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: yes
---
* OK The Microsoft Exchange IMAP4 service is ready. [QwBQADIAUAAyADEANQBDAEEAMAAwADMAOQAuAEwAQQBNAFAAMgAxADUALgBQAFIATwBEAC4ATwBVAFQATABPAE8ASwAuAEMATwBNAA==]
TAG1 AUTHENTICATE XOAUTH2 EwCAA8l6BAAU6k7+XVQzkGyMv7VHB/h4cHbJYRAAAej8qGUaldjLIGYgDr9H4qv1UGc7egOk98CRImrV0kpR56j9NJ4kczsgEbJbdefkZq0uifNFNMIkLVXLUQpKotVKIkbKkBUZuXHXjT+nJlHtOuhRKFG3f5cBfpL115aweJFCXYhBxNj8etbk7VtBJ5qSjJ0Dds+6t2c3a2KWOSSYJL+/ZQJnMpFP58TMz1hJqJqYDmPM9P7hfL/KGaPLQbsTIIzBi+KO589I6xXdz2teJrGZp+A1FgZPU8cSEAxcgsWH+mwZ4KZOZ2FzvjAgV/PjM3bVOekqdMcTQfWxn0x+jKDkJtNiBwKiN8t0rQK16Pg5L2BHBEqMT+dniqtTDxwDZgAACBLRJ9iAXqrGUALCm9u9e7lZtXMVuX1Q5gEreI8PobfJpreZ1uvE3wMPk1eCdM7qaHII9v9OcJSPKTkwyXQAxcP0gtxqclgqjHW2LWRhzp9nECVkQ1dwqnDEnieHTa87fphOsDuNfpr3sodslF21NS0E/dq7zP2DWB38vZgXOwFUd7gLino8JyeWXr+qU/PGYcGZrBuyJmlB3deYuGF+qa9JlWZuKTy+kq7gTx9/tDgDyP0dog5cS5bbYK315VpJEYKr7rSZsYG4xBeYqgJcbMYVRtGoaNuoEevPj3TcYPdnRnTdtD9Q+NqUzhpKzr62lWTXKjhK97iq624lYuCJDnTAizbQnOM7Z5TBdsYfDFxlG8o1YlOWpyA7Dg3BS7FlG1di8KlZR4g5XezPTyF9bxRliMdQbZhgqa0Kt5gvbZL3IF6O0NRf4og6aO9ltuBWFIl38XNx8ZsPuyXl+hVoxHlpLU6Ynsriy9cG+Cje/tzCtZk1tT/8RTi0gMCA+B2EOUKqZ5w9+y6TGqGJevn6Jg+RB/+85av58X8k58VjxhmIPFY0DsC9A+Y0gJ+LdPk9L7CRFYMQEwtuX0+/3riIHaglJtch9wr0yMs6HxNDFPYjD1G35GViCRlT9J9nm6+e4XhcVIgsGCp5YCqi6XnBCixvkLAtOuu5+MC4srilsW4v1CD0yYi+1BqxFNEurF0bvWrX2eQ21wrlRRIvtuVd76DXBf34Gn+iTqRogmSc1U+P8gYEACWa24T4fjLBJ1i4e+JKNwr7nE95O721Ahlrh9Q5fQwB/gL3aMulgAI=
TAG1 NO AUTHENTICATE failed.

It's maybe related to https://github.com/MicrosoftDocs/office-developer-exchange-docs/issues/87 and https://github.com/MicrosoftDocs/office-developer-exchange-docs/issues/100

It's maybe related to https://github.com/MicrosoftDocs/office-developer-exchange-docs/issues/87 and https://github.com/MicrosoftDocs/office-developer-exchange-docs/issues/100

According to these two the payload should be correct and the request as well, or am I missing something?

According to these two the payload should be correct and the request as well, or am I missing something?

Now I am feeling a mixture of shame (of not RTFM), anger (to the M$) and relief (to get things work).
According to the issue 87, the guy find out that the scope should be https://outlook.office365.com/IMAP.AccessAsUser.All instead of https://graph.microsoft.com/IMAP.AccessAsUser.All.
But since M$ can't make up their minds about what their domain should be, at least for now, the scope must be https://outlook.office.com/IMAP.AccessAsUser.All.
Thank you so much for your attention. Webklex rocks.

Now I am feeling a mixture of shame (of not RTFM), anger (to the M$) and relief (to get things work).
According to the issue 87, the guy find out that the scope should be https://outlook.office365.com/IMAP.AccessAsUser.All instead of https://graph.microsoft.com/IMAP.AccessAsUser.All.
But since M$ can't make up their minds about what their domain should be, at least for now, the scope must be https://outlook.office.com/IMAP.AccessAsUser.All.
Thank you so much for your attention. Webklex rocks.

Hi @EthraZa ,
thank you for finding and posting a solution. I'll add it to the documentation (including credits of course) :)
Thanks again,

Hi @EthraZa ,
thank you for finding and posting a solution. I'll add it to the documentation (including credits of course) :)
Thanks again,

Hi @EthraZa ,
thank you for finding and posting a solution. I'll add it to the documentation (including credits of course) :)
Thanks again,

Hi @EthraZa ,
thank you for finding and posting a solution. I'll add it to the documentation (including credits of course) :)
Thanks again,

@EthraZa Did you connect to the free Outlook mail? or to Microsoft Exchange Server?
By some reason we keep receiving NO AUTHENTICATE failed. error when trying to connect via IMAP: https://github.com/Webklex/php-imap/issues/207

Hi @freescout-helpdesk ,
It's usually a missing permission / option within the configured azure app. An invalid, or incomplete scope can also cause the same issue.
Here are some more information:

https://www.php-imap.com/examples/oauth
https://github.com/MicrosoftDocs/office-developer-exchange-docs/issues/87
https://github.com/MicrosoftDocs/office-developer-exchange-docs/issues/100

Best regards,

When I try to add https://outlook.office365.com/IMAP.AccessAsUser.All it doesn't show up.  The Azure does have the https://graph.microsoft.com/IMAP.AccessAsUser.All.

Connection to MS365 was working fine, but since recently we can't connect it via OAuth. Does anybody knows if Microsoft made some changes to their Azure system?
connection setup failed; File: /vendor/webklex/php-imap/src/Client.php (391)

Do you guys know how to have a longer lifetime of the token? (in azure)

Thanks for sharing. In my case, I must set the scope to ' https://outlook.office365.com/IMAP.AccessAsUser.All ' or the token won't work. I'm using o365 services with custom domain name.


Release new node-libs-browser + webpack with bumped crypto-browserify dependency

The crypto-browserify version that's shipping with webpack (dependency via node-libs-browser) is seriously outdated and missing much functionality. See https://github.com/webpack/node-libs-browser/issues/34 for background, though this issue only talks about one particular problem.
I've created https://github.com/webpack/node-libs-browser/pull/36 to address the dependency issue in node-libs-browser. It'd be great to get a new release of node-libs-browser and accordingly a new release of webpack with those updated dependencies.

Agreed. Pretty please? :)

Agreed. Pretty please? :)

I am looking forward to this too. Is there anything that is preventing the implementation of the proposed solution?

No, but a workaround is to declare node-libs-browser from github master as a dependency of your application. that overrides the subdependency of webpack (worked for me)
...
"node-libs-browser": "webpack/node-libs-browser"

@mroswald Thanks for the pointer. I went with shrinkwrap overriding the crypto-browserify dependency to a current version though.

Any updates here? Chrome's Dev and Canary channels now throw when trying to use crypto.
Failed to execute 'getRandomValues' on 'Crypto': parameter 1 is not of type 'ArrayBufferView'.
A release would be nice to alleviate this issue.

According to the commit log this issue should be resolved since version 2.0.5-beta of webpack because webpack depends on node-libs-browser "^1.0.0" which in turn depends on crypto-browserify "^3.11.0".

I would like to use the RSA functionality of the crypto API, which is already provided by the latest version of [crypto-browserify][https://github.com/crypto-browserify/crypto-browserify].
Please update the crypto dependency as soon as possible!

@mroswald Your solution worked for me - thanks.
Can this be merged? I've had a nightmarish few hours trying to iron out an annoyingly subtle bug this is causing with eth-lightwallet.

Wasn't able to figure out @mroswald solution, but here is what worked for me:
Create npm-shrinkwrap.json with following contents, and update versions as needed (maybe you are using another version of webpack)
{
  "dependencies": {
    "webpack": {
      "version": "1.13.1",
      "from"<EMAIL_ADDRESS>      "dependencies": {
        "node-libs-browser": {
          "version": "1.0.0",
          "from"<EMAIL_ADDRESS>        }
      }
    }
  }
}

After that, npm install will use 1.0.0 of node-libs-browser inside of webpack.

This is getting super annoying. Hacking inside shrinkwrap like this is unmaintainable. I will use beta webpack from now on, since it's just impossible to remember to rewrite the shrinkwrap all the damn time

Based on https://github.com/webpack/node-libs-browser this should be fixed now. Please re-open if you still encounter problems.

Thanks a lot! Yes, I can confirm that it's fixed. :1st_place_medal:

It seems like this made my bundle ~ 250kb larger by adding bn.js, elliptic and a few others into my production app.js. 👎


[BUGFIX] Adjust the path in translation files for auto synchronisation

Problem
When new labels are added, the translations are not automatically update.
Solution
Set the path in the .po files and the .pot file.
For testing
Add a new label in the bnote apps. Open the translation model in PoEdit. Goto translations>Update from source code.
The new label will be appear.
Util
You can download PoEdit on this page.

Finally, the po files are actualize with a shell script.


[BUG] Param "dark" not work

dark does not work in the current version.
It's worked well in older versions. I didn't change my code and just run an old notebook.
I can only click the theme buttons to change the theme, and my choice won't be remembered.
Name: pygwalker
Version: <IP_ADDRESS>
Python 3.9 Jupyter Lab

Hi @Erimus-Koo, thanks for reporting this issue.
It looks like the dark parameter has been replaced with appearance in the current version. You can update your code like this:
pyg.walk(df, appearance="dark")

We'll address this in the next release to ensure backward compatibility or add a warning.

想试来着
但我刚好用pip重装了一下jupyter lab，现在跑不通了，是有啥依赖我漏装了嘛？

 jupyter --version
Selected Jupyter core packages...
IPython          : 8.25.0
ipykernel        : 6.29.4
ipywidgets       : 8.1.3
jupyter_client   : 7.4.9
jupyter_core     : 5.7.2
jupyter_server   : 2.14.1
jupyterlab       : 3.6.7
nbclient         : 0.10.0
nbconvert        : 7.16.4
nbformat         : 5.10.4
notebook         : 6.5.7
qtconsole        : not installed
traitlets        : 5.14.3

Python 3.12.1
pygwalker <IP_ADDRESS>

More info 👆🏻

Hi @Erimus-Koo
This may be caused by the inconsistent jupyter extension versions that jupyterlab and ipywidgets depend on.
pip install --upgrade jupyterlab
pip install --upgrade ipywidgets

Then restart jupyter lab.

pip install --upgrade ipywidgets

ipywidgets helps, thanks.
Maybe this could be included in the readme.md or FAQ.
BTW, appearance worked.
And I've noticed that the spec has a new json version, that's great.
Is there a changelog, I'm afraid for missing something new.


Dev tooling 31 - adds an 'includeShared' mixin for sharing jade snippets.

adds an 'includeShared' mixin for sharing jade snippets.

Would this allow an author to have a jade dcument that pulls in parts from other jade documents?

Exactly!
           Markup consists of a jade file follows the same #docregion #enddocregion conventions as elsewhere.  The comment delimiter for jade files is a ‘//’.

           So in your jade file simply add something like:

// #docregion foo
… jade content
// #enddocregion
           All of the capabilities of nested and combined regions are supported here just like elsewhere.

           To consume the shared section use the ‘includeShared’ mixin.  It takes two arguments

+includeShared(filePath, region)
           So you could use it from a js jade doc  to point to a section in the ts file in the ts folder with something like this.

+includeShared(‘../../ts/xxx.jade’, ‘foo’)
           But because I am assuming that you are going to be sharing with similarly named files across directories there is a shortcut for this.  i.e.  a/b/ts/xx/yy/aaa.jade will be used by a/b/js/xx/yy/aaa.js

+includeShared(‘{ts}’, foo)
           The ‘{ts}’ is a shorthand to go up and over and down to the same file in the ‘ts’ subfolder.  Similarly if you wanted to point to a js file from a ts file you would use ‘{js}’.

Side note:  Not needed to use the tool, but be aware that ‘shredding’ jade files does not use the fragments folder but instead shreds in place in the source folder and creates files that begin with ‘_.’

Amazing work Jay! This will surely help in producing a shared infrastructure for producing chapters in TS/JS/Dart.

Huge payoff!
Here is what the jade looks like (or would look like if we had the JS versions of the doc pages that are linked in the original) for the Developers Guide home page:
include ../../../../_includes/_util-fns
+includeShared('{ts}', 's1')
:marked
  Look for a link to a running version of that sample near the top of each page such as this
  [live example](/resources/live-examples/architecture/js/plnkr.html) from the [Architecture](architecture.html) chapter.
+includeShared('{ts}', 's2')
:marked

It required exactly TWO // #docregion markups, named 's1' and 's2'

Merged by 45ac0ee37dd0f0075fed9ba23a24ebc692de1d4f


After training for one epoch it stops

train:   0% 0/7 [00:00<?, ?it/s]2023-10-05 11:40:26,836   INFO  Train:    1/80 (  1%) [   0/7 (  0%)]  Loss: 40.40 (40.4)  LR: 1.000e-03  Time cost: 03:40/25:40 [03:40/34:14:24]  Acc_iter 1           Data time: 209.04(209.04)  Forward time: 11.07(11.07)  Batch time: 220.11(220.11)
Wherever I trained on the custom datasets it stops after one epoch. How can I resolve this? Thank you

I have same issue. It randomly stopped without any error.


typos

I know concatenation is a word. I don't really think concatentation is but I've been wrong before.

Nope, you are right. Thanks!


Statically-linked SDL

Lite is a great editor and one of the rare programs that load super fast - would you consider statically linking SDL2 for the Windows build (and the CRT too, if that's not the case)? A single self-contained executable would be great to carry around and maybe even run from a remote server when I need to. The increased utility from this portability is worth it IMO and since the project is open source any issues that can be fixed with updating the SDL2 DLL can be done directly to the source / build.

Thanks for the kind words! I typically do static link on other projects for the reason you listed, of having a single executable -- for this particular project I didn't feel it made sense as you always need the data directory and all the files in it, so you're always having to deal with more than a single file anyway which somewhat invalidates the reasons for doing this.

ahem I was planning to take it and embed the other files inside the executable as resources, as described / done here: https://sherief.fyi/post/atomic-walk/  :D would that change your mind?

Just chiming in that I feel like half the appeal of lite is being able to tinker with most of the guts of the program by just modifying lua files, and that a resources-in-binary approach would be counter to that.
I support statically linking SDL though :wink:

I totally agree and I plan to mount the local directory in addition to the embedded resources so local files overwrite the ones in the executable. You can read my thoughts and the process at https://sherief.fyi/post/atomic-application/

I personally like people to play around with my apps and modify shaders to their heart’s content so I always mount the current working directory and also add a command line option to extract the built-in archive so someone who only has the app can run it using the command line option --extract [path] and it will extract the built-in archive to the specified path so the user can inspect and modify the files.

@sherief: the approach you are suggesting is absolutely legit and tried and tested, see for example in the Tcl/Tk world Starkits and Starpacks.
Googling around I see that is somewhat popular even in the Lua world, see Bundle, Amalg, Squish and so on. Note in particular that (at least) Bundle has the upgradability feature that you mentioned in your last comment:

How it works
[...] This allows mixed deployments where some modules and assets are bundled inside the exe and some are left outside, with no changes to the code and no rebundling needed. External modules always take precedence over embedded ones, allowing partial upgrades to the original executable without the need for a rebuild. Finally, one of the modules (embedded or not) can be specified to run instead of the usual REPL, effectively enabling single-executable app deployment for pure Lua apps with no glue C code needed.

I managed to statically link SDL2 in Lite. I'm on Windows 10 (64 bits) and I use msys2 to build (if I recall correctly, after installation a pacman -S base-devel gcc zip should be sufficient to build Lite).
It's just a matter of adding some linker flags.
But first in build.sh I changed
cflags="-Wall -O3 -g -std=gnu11 -Isrc"

in
cflags="-Wall -Os -lto -fuse-linker-plugin -std=gnu11 -Isrc"

For -Os, -flto and -fuse-linker-plugin flags see GCC docs. This is not necessary but it results in a bit smaller executable and it starts a bit faster on my old machine.
Now the changes necessary to link SDL2 statically. Again in build.sh in the if that selects the platform
if [[ $* == *windows* ]]; then
  platform="windows"
  outfile="lite.exe"
  compiler="x86_64-w64-mingw32-gcc"
  cflags="$cflags -DLUA_USE_POPEN -Iwinlib/SDL2-2.0.10/x86_64-w64-mingw32/include"
  lflags="$lflags -Lwinlib/SDL2-2.0.10/x86_64-w64-mingw32/lib"
# ADD HERE
  lflags="-lmingw32 -lSDL2main $lflags -mwindows -o $outfile res.res"
  x86_64-w64-mingw32-windres res.rc -O coff -o res.res
else

I added the line:
  lflags="-static $lflags -lsetupapi -ldinput8 -ldxguid -ldxerr8 -lkernel32 \
          -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion \
          -luuid -static-libgcc"

I obtained an executables of 1.618.432 bytes.
In build_release.sh I commented what is not relevant for me (I don't cross-compile for other platforms):
#!/bin/bash
./build.sh release windows
#./build.sh release
rm lite.zip 2>/dev/null
#cp winlib/SDL2-2.0.10/x86_64-w64-mingw32/bin/SDL2.dll SDL2.dll
#strip lite
strip lite.exe
#strip SDL2.dll
#zip lite.zip lite lite.exe SDL2.dll data -r
zip lite.zip lite.exe data -r

Next thing I want to try is to compile SDL2 from sources with Link Time Optimizations (-flto -fuse-linker-plugin) like all the rest.

I compiled SDL2 (2.0.12) with LTO and linked statically to Lite with this small addition to build.sh:
cflags="$cflags -fno-asynchronous-unwind-tables -fno-unwind-tables"

after the previous setting of cflags.
The resulting executable is of 1'211'904 bytes and starts immediately after a double click in explorer on my 14 years old pc.

The world needs more people like you, @MaD70

@sherief: for what it's worth, I would like that more people were sensible to human factors as you seem to be. But after all these years the inmate are still running the asylum (yes, they really are) and are still producing coffeepots for masochists at an alarming rate.

As a curiosity I compiled SDL2 disabling most subsystems with the following script. lite went down to 979 KiB (1'003'008 bytes).
In what follow <base dir> is the base directory where you are putting the directory SDL2 (see the directory tree in the script). Download SDL2-2.0.12 source code (.zip) and unzip it under SDL2.
First in <base dir>/SDL2/SDL2-2.0.12/src/dynapi/SDL_dynapi.h remember to change SDL_DYNAMIC_API from 1 to 0:
/* everyone else. This is where we turn on the API if nothing forced it off. */
#ifndef SDL_DYNAMIC_API
#define SDL_DYNAMIC_API 1
#endif

Before running it remember to replace <base dir> in the following script too.
#!/bin/bash
# ---------------------------------------------------------
# directory tree:
# SDL2 <─ put this script here, it must be already created
# ├ build <───┮ this dirs are created by the script
# ├ install <─┘
# └ SDL2-2.0.12 <─ created by unpacking SDL sources in SDL2
# ---------------------------------------------------------
mkdir build
mkdir install
cd build

export CFLAGS="-Os -flto -fuse-linker-plugin"

../SDL2-2.0.12/configure --prefix=<base dir>/SDL2/install --build=x86_64-w64-mingw32 \
  --disable-shared --disable-libc --disable-audio --disable-joystick --disable-haptic \
  --disable-sensor --disable-power --disable-timers --disable-oss --disable-alsa \
  --disable-alsatest --disable-alsa-shared --disable-jack --disable-jack-shared \
  --disable-esd --disable-esdtest --disable-esd-shared --disable-pulseaudio \
  --disable-pulseaudio-shared --disable-arts --disable-arts-shared --disable-nas \
  --disable-nas-shared --disable-sndio --disable-sndio-shared --disable-fusionsound \
  --disable-fusionsound-shared --disable-diskaudio --disable-dummyaudio \
  --disable-libsamplerate --disable-libsamplerate-shared --disable-video-vulkan \
  --disable-libudev --disable-dbus --disable-ime --disable-ibus --disable-fcitx \
  --disable-input-tslib --disable-pthreads --disable-pthread-sem --disable-sdl-dlopen \
  --disable-hidapi --disable-clock_gettime --disable-rpath

make
make install

When it finishes, create a directory SDL2-2.0.12-lto under winlib in the directory of lite source code, then copy into it the content of directory <base dir>/SDL2/install. Update the build.sh script that compile lite accordingly:
  cflags="$cflags -DLUA_USE_POPEN -Iwinlib/SDL2-2.0.12-lto/include"
  lflags="$lflags -Lwinlib/SDL2-2.0.12-lto/lib"

Run it and it should produce a leaner lite.

I get the error in the attached screenshot on Windows 10 for both 1.11 and 1.10, Am I missing something?


Organised construction graphs into folders

At the request of mirrorcult and shadowcommander, organised the construction graphs into their respective parent folders in preperation for adding more construction graphs in futurer PRs.
Prior to consolidation there were 27 graphs in the structures folder and now they're nearly organised. I also combined some of the main types into their respective categories such as lighting and conveyors into the structures folder.
Was torn on disposals whether to merge under power which matches the entities entry or change to utilities (power was under utility anyways) so went with merging so atmos can also live here.
Also put things like tables and chairs under furniture instead of structures as I'll be adding more furniture.
Side effect of this sort out is I found the toilet did not have a construction entry so that can now be constructed and deconstructed to the content of our builder players out there

afaict, this still removes the railings

afaict, this still removes the railings

Think my local git branches are canned so did a sh*tcode webedit to add them back.


PR for issue 153, to prevent possible race condition

Hi! Thanks for the submission -- please can you sign the CLA such that we can review this code. Thanks, r.

Sorry @bkreddy14, I didn't know that you have signed the CLA, and I reviewed PR#157 first.


⚠ Jenkins Plugins Artifactory has degraded performance

In c9c322d, Jenkins Plugins Artifactory (https://get.jenkins.io/plugins/artifactory/) experienced degraded performance:

HTTP code: 200
Response time: 1311 ms

Resolved: Jenkins Plugins Artifactory performance has improved in 3f4994c after 32 minutes.


Feature/custom attributes

Extending UAA schema to allow custom attributes based on discussion here

We're aware of the missing CLA. We're working with our legal team to have it done

I went through code and about users db enhancement. Why dont you use and extend user_info and info blob field which is also json as far as I see ?
To me it makes sense to (re-)use this schema and store custom attributes in info field as json similar then you do it

Thanks @strehle for reviewing this. Re-using the userAttributes in UserInfo was our initial option as well, but for the following reasons we decided to put it in ScimUser itself.

If one wants to update custom attributes on the user, currently there is no API to set the same. The only operation on userInfo is the OIDC standard GET /userinfo
UserInfo seems to be used when UAA is federating with external IdP (SAML etc) and we wanted this to be available natively as a first class property, when UAA acts as the user store/source of truth.

@strehle Did you get a chance to review the above comment?

added other maintainers and request their feedback.
So I wont block this if other say yes, but if nobody answer I would like to seperate the attribute persistency into another db and then I will accept it , as mentioned I recommend exiting user_info


network, setup: Refactor the pod networking configuration to use a declerative API (nmstate)

What this PR does / why we need it:
The existing network setup has become over the years challenging to maintain.
Most of the setup process is iterative with hard to track abstraction levels.
The refactoring work introduced in this PR are mainly focus on:

Providing abstractions which allows the business logic to describe the desired network configuration in a declarative manner, deferring down the stack the details of how this is implemented.
Improving tests, to express better the desired final status of the pod network stack in various scenarios.
Decoupling the network configuration from the cache data collection and storage. Allowing each to evolve independently.

The suggested changes are also opening up some other possibilities in the future, including:

Fully idempotent network setup, which can correct itself and work seamlessly in a reconcile loop.
Including the nftable configuration in the declarative API (nmstate).
Offloading the network configuration backends to existing tools (e.g. nmstate with its kernel backend).
Pluggable bindings and extensions (e.g. decoupling the binding implementation from the core setup flow).
(at build time)

Some of the building blocks introduced in this PR can be re-used in other projects in order to modify and query the pod network namespace.
The changes mainly include the following parts:

Drivers (or perhaps we should actually call them adapters) that provide a thin layer to external network tools/libs (e.g. netlink, ethtool, sysfs).
An nmstate(-like) API with a backed that implements it (the nmstate backend is using the adapters/drivers mentioned in the previous point).
A network pod setup object (NetPod) that has all the business logic about how each network binding config looks like. Per the VMI spec and the current pod network status, it composes a desired state spec (for nmstate to consume).
The nftable configuration has its own setup, and it is not yet included in the nmstate API.

Which issue(s) this PR fixes (optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close the issue(s) when PR gets merged):
Fixes #
Special notes for your reviewer:
The change is not small and most likely its code can be improved for readability.
I would also expect to see some unit tests missing, hopefully we can close any gaps quickly.
The nmstate package also includes integration tests, which are currently marked as pending.
They cannot run with the current unit tests due to the required privileges (they need to change the network stack).
Having a new target to run such tests will be really nice, if reviewers have some ideas (and time), it will be great to do some more work on it. Nevertheless, I do not consider missing such a target on CI as a blocker to this change.
Depends on #9055
Release note:
NONE

/test all

/test pull-kubevirt-e2e-k8s-1.24-sig-network
/test pull-kubevirt-e2e-k8s-1.25-sig-network
/test pull-kubevirt-e2e-k8s-1.26-sig-network
/test pull-kubevirt-e2e-k8s-1.25-ipv6-sig-networt
/test pull-kubevirt-e2e-kind-1.23-sriov

/test pull-kubevirt-e2e-k8s-1.24-sig-network
/test pull-kubevirt-e2e-k8s-1.25-sig-network
/test pull-kubevirt-e2e-k8s-1.26-sig-network
/test pull-kubevirt-e2e-k8s-1.25-ipv6-sig-networt
/test pull-kubevirt-e2e-kind-1.23-sriov

/test all

/test pull-kubevirt-e2e-k8s-1.24-sig-network
/test pull-kubevirt-e2e-k8s-1.25-sig-network
/test pull-kubevirt-e2e-k8s-1.26-sig-network
/test pull-kubevirt-e2e-k8s-1.25-ipv6-sig-networt
/test pull-kubevirt-e2e-kind-1.23-sriov

/test all

/uncc rmohr rthallisey
/cc @AlonaKaplan

just a first glance at the first 3 commits. Had some questions, thanks!

@RamLavi , the first two commits are from #9055 . Can you please comment there?

change: Rebase

change: Rebase

Using nmstate might be nice, and all, but, from their page I read:

Nmstate is aimed to satisfy enterprise needs to manage host networking through a northbound declarative API and multi provider support on the southbound. NetworkManager acts as the main (and currently the only) provider supported.

I'm very concerned about relying on network manager in the pods.
Or is this feature planning on using the kernel module ?... According to the docs above, that's not supported.
... or is this just an nmstate docs issue ?
@EdDev

Using nmstate might be nice, and all, but, from their page I read:

Nmstate is aimed to satisfy enterprise needs to manage host networking through a northbound declarative API and multi provider support on the southbound. NetworkManager acts as the main (and currently the only) provider supported.

I'm very concerned about relying on network manager in the pods.
Or is this feature planning on using the kernel module ?... According to the docs above, that's not supported.
... or is this just an nmstate docs issue ? @EdDev

This change is not using nmstate from the ref project, it uses only its API with an aim to replace the implementation (which this change introduces natively) in the future.
NetworkManager is not relevant in the pod network container and when we will use the original nmstate project, it cannot use it as the backend implementation.

Using nmstate might be nice, and all, but, from their page I read:

Nmstate is aimed to satisfy enterprise needs to manage host networking through a northbound declarative API and multi provider support on the southbound. NetworkManager acts as the main (and currently the only) provider supported.

I'm very concerned about relying on network manager in the pods.
Or is this feature planning on using the kernel module ?... According to the docs above, that's not supported.
... or is this just an nmstate docs issue ? @EdDev

This change is not using nmstate from the ref project, it uses only its API with an aim to replace the implementation (which this change introduces natively) in the future.
NetworkManager is not relevant in the pod network container and when we will use the original nmstate project, it cannot use it as the backend implementation.

I had to reach out privately to figure out what this means (I'm extra thick today ...):
this PR only uses the nmstate API and provides a golang implementation for it.
Long term plan is to drop the golang implementation and use the kernel backend nmstate is now providing / will provide.

change: Rebase

/test pull-kubevirt-build
/test pull-kubevirt-build-arm64
/test pull-kubevirt-generate
/test pull-kubevirt-manifests
/test pull-kubevirt-unit-test
/test pull-kubevirt-e2e-k8s-1.26-sig-network

/test pull-kubevirt-build
/test pull-kubevirt-build-arm64
/test pull-kubevirt-generate
/test pull-kubevirt-manifests
/test pull-kubevirt-unit-test
/test pull-kubevirt-e2e-k8s-1.26-sig-network

/test pull-kubevirt-build
/test pull-kubevirt-build-arm64
/test pull-kubevirt-generate
/test pull-kubevirt-manifests
/test pull-kubevirt-unit-test
/test pull-kubevirt-e2e-k8s-1.26-sig-network

/retest

change: Answered review comments.

change: Answered review comments.

Failed for unrelated reasons, retry.
Ref:

https://prow.ci.kubevirt.io/view/gs/kubevirt-prow/pr-logs/pull/kubevirt_kubevirt/9064/pull-kubevirt-unit-test/1689578834485055488
https://prow.ci.kubevirt.io/view/gs/kubevirt-prow/pr-logs/pull/kubevirt_kubevirt/9064/pull-kubevirt-e2e-k8s-1.27-sig-network/1689578849727156224

/test pull-kubevirt-unit-test
/test pull-kubevirt-e2e-k8s-1.27-sig-network

change: Answered latest round of comments from @AlonaKaplan .

/approve
Great work!

/test pull-kubevirt-e2e-k8s-1.27-sig-network


Website link to salad dressing commercial?

Project looks great but we were thrown off by this website link in the project description:
https://www.youtube.com/watch?v=sKhsy0e0lqk

Ha! Thanks @gsf this was a bit of an in-joke between us from much earlier this year. We ended up abandoning development on this project (read more here) in favor of different work (github, end of year report)

There's a few gifs of what the template maker looks like in this blog post as well


feat: update queue item on session completion

Summary
feat(app): update queue item's session on session completion
The session is never updated in the queue after it is first enqueued. As a result, the queue detail view in the frontend never never updates and the session itself doesn't show outputs, execution graph, etc.
We need a new method on the queue service to update a queue item's session, then call it before updating the queue item's status.
Queue item status may be updated via a session-type event or queue-type event. Adding the updated session to all these events is a hairy - simpler to just update the session before we do anything that could trigger a queue item status change event:

Before calling emit_session_complete in the processor (handles session error, completed and cancel events and the corresponding queue events)
Before calling cancel_queue_item in the processor (handles another way queue items can be canceled, outside the session execution loop)

When serializing the session, both in the new service method and the get_queue_item endpoint, we need to use exclude_none=True to prevent unexpected validation errors.
Related Issues / Discussions
Closes #5933
QA Instructions

On main, generate an image & wait for it to finish
Check the queue tab and expand the queue item detail view
Observe that the execution graph, results and such are empty
Check out this PR
Do the same thing
Observe that the queue item detail view shows the executed session
Invoke a workflow that will error (e.g. integer primitive of 0 into a resize image node's width)
Observe that the queue item detail view shows a partially executed session w/ error

Merge Plan
This is based on #5748. I'll merge and update this PR as required after that one is merged.
Checklist

[x] The PR has a short but descriptive title, suitable for a changelog
[ ] Tests added / updated (if applicable)
[x] Documentation added / updated (if applicable)

Marked as draft to prevent premature merge

superseded by #6419


Should Babel transpile node_modules folder by default?

What problem does this feature solve?
Babel-loader recommends not transpiling node_modules folder, because it slows down compilation process.
https://github.com/babel/babel-loader#babel-loader-is-slow
However, I see that vue-cli transpiles node_modules folder. Only core-js and @babel/runtime are not getting transpiled.
https://github.com/vuejs/vue-cli/blob/4ce7edd3754c3856c760d126f7fa3928f120aa2e/packages/%40vue/babel-preset-app/index.js#L262
Maybe this default behavior should be changed?
What does the proposed API look like?
Do not transpile node_modules folder by default.

Just for anyone coming here, node_modules is not transpiled by default, but it can be configured in https://cli.vuejs.org/config/#transpiledependencies
// vue.config.js
transpileDependencies: ['my-dependency-goes-here'],

@tfoxkiu Which compiler does it use behind the scenes to compile packages?


ForwardingHistory: intelligently handle vague requests

Background
If no parameters are given, the ForwardingHistory RPC queries the ChannelDB for the last 24 hours of forwarding events.  This behaviour may not be expected considering the name of the RPC; one might expect that a full history, or the most recent chunk of forwarding events be returned rather than a time slice of 24 hours.
I suggest the default behavior of ForwardingHistory be changed to look for the 100 most recent forwarding events.  Also, if a user provides only one of StartTime or EndTime, ForwardingHistory should assume a default StartTime of the seed birthday, or a default EndTime of time.Now().  This might also help in cases such as #2585.
Alternatively (and more simply), we can default end_time to time.Now() so users can omit it in favor of just providing a start_time.
This is separate from #1233.
Steps to reproduce

Record a specific forwarding event
Wait 24 hours
Run $ lncli fwdinghistory

Expected behaviour
All forwarding events are shown, or the most recent X forwarding events are shown.
Actual behaviour
The specific forwarding event is not shown.  It must be found by specifying StartTime and EndTime together.

If the idea sticks, I'd like to take this on.

Fixed by #3246.


Remove access control decorations in WGSL

This CL removes access control decorations in WGSL example as newly defined in https://www.w3.org/TR/WGSL/#storage-class-table
I've updated samples as well.
@kangz PTAL

@petele please merge and push live once @Kangz has approved.


Syntax Error creating RPM Package

OS : Fedora 26
Desktop : Gnome 3.24
Hi !
First of all thank you for your work, it's really appreciated. I just  updated to Fedora 26 and i get this problem, any help ? There is no RPM file output.

Hello !
The fedora tools that build the RPM package do not support paths with accents like Téléchargements. It's a known limitation of the RPM devtools that I can't fix :/
Move the repository to another path, like the Documents, and it should work.

That was it !
Thanks for the help and for your reactivity :-)
Problem is solved, i close the issue.
Keep up the good work ! Cheers

You're welcome :-)


docs: fix Overlay issue in docs page

There are some pages where page has horizontal scrolling  due to content being overflowed
Example - https://www.netlifycms.org/docs/gatsby/
This PR formats the docs

@mbj36 thanks for this, but I'm not sure we want to solve this just by adding line breaks in various locations as future content might have the same issue (or even existing content that we've missed).
Updating the site css or making sure the content is formatted to a certain width might be a better approach.

@erezrokah I agree...i will create a new fix for this.


Add tool to modify properties in ZooKeeper without a running cluster

The tool provides an way to modify properties stored in a single ZooKeeper node as of 2.1, without a running cluster.  The options provided are similar to the shell config command.  The tool can be used to view properties in a node, (with filters) set or delete a single property.  The tool is intended for emergency use when a cluster is not available - otherwise, users should prefer to use the shell.

creates keyword executable zoo-prop-set-tool and tests
moves common functions from ZooInfoViewer in ZooPropUtils for use by both tools.
contains changes in PR #3444, removing -s safemode from ConfigOpts. (That PR should be merged first)

Sample print output:
System:
> accumulo zoo-prop-set-tool --instanceId 856dadc5-d072-45e9-94f9-c6c4acf8ce55

- Instance name: uno
- Instance id: 856dadc5-d072-45e9-94f9-c6c4acf8ce55
- Property scope: - SYSTEM
- id: 856dadc5-d072-45e9-94f9-c6c4acf8ce55, data version: 1, timestamp: 2023-06-02T16:13:48.690791Z
table.bloom.enabled=true

Namespace:
> zoo-prop-set-tool --instanceId 856dadc5-d072-45e9-94f9-c6c4acf8ce55 -ns ns1

- Instance name: uno
- Instance id: 856dadc5-d072-45e9-94f9-c6c4acf8ce55
- Property scope: - NAMESPACE
- id: 1, data version: 1, timestamp: 2023-06-02T16:13:52.63487Z
table.bloom.enabled=true

Table:
> accumulo zoo-prop-set-tool --instanceId 856dadc5-d072-45e9-94f9-c6c4acf8ce55 -t ns1.tbl1

- Instance name: uno
- Instance id: 856dadc5-d072-45e9-94f9-c6c4acf8ce55
- Property scope: - TABLE
- id: 2, data version: 2, timestamp: 2023-06-02T16:14:00.504751Z
table.bloom.enabled=true
table.constraint.1=org.apache.accumulo.core.data.constraints.DefaultKeySizeConstraint
table.iterator.majc.vers=20,org.apache.accumulo.core.iterators.user.VersioningIterator
table.iterator.majc.vers.opt.maxVersions=1
table.iterator.minc.vers=20,org.apache.accumulo.core.iterators.user.VersioningIterator
table.iterator.minc.vers.opt.maxVersions=1
table.iterator.scan.vers=20,org.apache.accumulo.core.iterators.user.VersioningIterator
table.iterator.scan.vers.opt.maxVersions=1

Updated output:
> accumulo zoo-prop-editor -t ns1.tbl1

+ Instance name: uno
+ Instance id: acccdd62-bb86-43c8-91ff-e57fb9e1fe85
+ Property scope: - TABLE
+ id: 2, data version: 2, timestamp: 2023-06-09T16:03:04.008849Z
table.bloom.enabled=true
table.constraint.1=org.apache.accumulo.core.data.constraints.DefaultKeySizeConstraint
table.iterator.majc.vers=20,org.apache.accumulo.core.iterators.user.VersioningIterator
table.iterator.majc.vers.opt.maxVersions=1
table.iterator.minc.vers=20,org.apache.accumulo.core.iterators.user.VersioningIterator
table.iterator.minc.vers.opt.maxVersions=1
table.iterator.scan.vers=20,org.apache.accumulo.core.iterators.user.VersioningIterator
table.iterator.scan.vers.opt.maxVersions=1

To strip the header:

> accumulo zoo-prop-editor -t ns1.tbl1 | grep -v +

table.bloom.enabled=true
table.constraint.1=org.apache.accumulo.core.data.constraints.DefaultKeySizeConstraint
table.iterator.majc.vers=20,org.apache.accumulo.core.iterators.user.VersioningIterator
table.iterator.majc.vers.opt.maxVersions=1
table.iterator.minc.vers=20,org.apache.accumulo.core.iterators.user.VersioningIterator
table.iterator.minc.vers.opt.maxVersions=1
table.iterator.scan.vers=20,org.apache.accumulo.core.iterators.user.VersioningIterator
table.iterator.scan.vers.opt.maxVersions=1

Updated output:

Looks better, but instead of a blank line, can we prefix that with the same prefix as the other informational output, so it can be grepped out also? Can also add another one after the info, as in:
sh$ accumulo zoo-prop-editor -t ns1.tbl1
+
+ Instance name: uno
+ Instance id: acccdd62-bb86-43c8-91ff-e57fb9e1fe85
+ Property scope: - TABLE
+ id: 2, data version: 2, timestamp: 2023-06-09T16:03:04.008849Z
+
table.bloom.enabled=true
table.constraint.1=org.apache.accumulo.core.data.constraints.DefaultKeySizeConstraint

I'm changing it to use ':', but there is no blank line.  That is an artifact of me pasting the command and output and manually separating them for clarity so the command stood out.  From the command line, there is some log4j output, but it does not appear when piped.

web-site documentation for tool is provided with https://github.com/apache/accumulo-website/pull/386

I choose to leave the set / delete commands silent on success, think that may be more friendly if the actions were scripted.

I choose to leave the set / delete commands silent on success, think that may be more friendly if the actions were scripted.

The main use case I was thinking was if a user ran a set or delete operation, but wanted to revert it, they wouldn't have any info about what the old value was. They also don't get any feedback from the process exit code on whether it was successful or not, unless there's an exception thrown (which should cause a non-zero exit code).
I was thinking just add DEBUG logging, which can easily be sent to STDERR if the user wants to ignore it.
It's not critical, though. The tool is an emergency tool, and is not expected to be used carelessly. These would be minor improvements... if we get around to it.


use kube_pod_labels to select query targets

should be more reliable than pod name patterns, which don't work for my deployment which happens to be called hub.
expands most queries to multi-line since they are getting long with these joins. I don't know how expensive these joins might be for lots of pods, or if there's a better order to express them in.
using these queries, add one panel for all hub components cpu/memory usage by component name, replacing the userScheduler panel which wasn't on the page. It seems like hub, proxy, everything else makes sense to me, rather than needing a panel for every component.

\o/ Let's monitor prometheus resource usage and modify these if necessary. I think if they are expensive, we will probably need to use recording rules


Filter ActionView output with Nokogiri

Note, we can add fast paths for some of the output helpers with predictable output. For example, link_to has a predictable output and we know where to find the id in the arguments. Our adapter can look for that without having to parse anything.


Add client and server span attributes

Are you not missing changes/additional tests in the systemtests tracing part?


Error with large number of array references

I am trying to use LoopVectorization to speed up a generated function with a very large loop body. I get the following error:
BoundsError: attempt to access 328-element Vector{LoopVectorization.ArrayReferenceMeta} at index [0]
 Stacktrace:
    [1] getindex
      @ ./array.jl:924 [inlined]
    [2] getindex
      @ ./abstractarray.jl:1244 [inlined]
    [3] mref_elbytes
      @ ~/.julia/packages/LoopVectorization/FMfT8/src/reconstruct_loopset.jl:607 [inlined]
    [4] add_op!(ls::LoopVectorization.LoopSet, instr::LoopVe ... es::Vector{Int64})
      @ LoopVectorization ~/.julia/packages/LoopVectorization/FMfT8/src/reconstruct_loopset.jl:624
    [5] add_ops!(ls::LoopVectorization.LoopSet, instr::Vecto ... edv::Vector{Bool})
      @ LoopVectorization ~/.julia/packages/LoopVectorization/FMfT8/src/reconstruct_loopset.jl:738
    [6] avx_loopset!(ls::LoopVectorization.LoopSet, instr::V ... Core.SimpleVector)
      @ LoopVectorization ~/.julia/packages/LoopVectorization/FMfT8/src/reconstruct_loopset.jl:868
    [7] _turbo_loopset(OPSsv::Any, ARFsv::Any, AMsv::Any, LP ... t64, Int64, Bool})
      @ LoopVectorization ~/.julia/packages/LoopVectorization/FMfT8/src/reconstruct_loopset.jl:933
....

Still working on a minimal reproduction. It seems to me this is related to the casting of indices to a UInt8. I'm happy to try and tackle this if you can give some guidance.

It seems to me this is related to the casting of indices to a UInt8. I'm happy to try and tackle this if you can give some guidance.

There are places where we do have a reason to do that, e.g. when using a single UInt128 to represent a bunch of values.
That superficially does not seem to be the case here:
https://github.com/JuliaSIMD/LoopVectorization.jl/blob/c74cd3362866d2b8527b0432d371fde3a8871b91/src/condense_loopset.jl#L150-L161
I'd have to look more to see if there's another place storing these as bits within a larger UInt or UInt128. If not great. If the former, we could bump it up to a UInt128 and double the number of bits. If the latter, more changes would be needed.
The purpose of these is to transfer a description of the loops into an @generated function.
Why do you have 328 unique arrays you're using in the same loop?
That is a lot of arrays.

Hmmm, I definitely don't have 328 distinct arrays. I believe I know how to get to that number though. I have 81 pairs of statements like this:
                #= /Users/jack/projects/VlasovMDG/src/fulltensor/2d2v/free_transport.jl:193 =#
df_M[9, 9, λx, λy, λvx, λvy] -= a_y * a_vx * a_vy * ((((((0 + (a_vx * 0.10666666666666669) * ifelse(b_vx_gt_0, f[7, 8, λx, λy, λvx, λvy] * 0.4, f[7, 8, λx + 1, λy, λvx, λvy] * 0.4)) + (b_vx * 0.16000000000000003) * ifelse(b_vx_gt_0, f[7, 9, λx, λy, λvx, λvy] * 0.4, f[7, 9, λx + 1, λy, λvx, λvy] * 0.4)) + (a_vx * 0.10666666666666669) * ifelse(b_vx_gt_0, f[8, 8, λx, λy, λvx, λvy] * 0.4, f[8, 8, λx + 1, λy, λvx, λvy] * -0.4)) + (b_vx * 0.16000000000000003) * ifelse(b_vx_gt_0, f[8, 9, λx, λy, λvx, λvy] * 0.4, f[8, 9, λx + 1, λy, λvx, λvy] * -0.4)) + (a_vx * 0.10666666666666669) * ifelse(b_vx_gt_0, f[9, 8, λx, λy, λvx, λvy] * 0.4, f[9, 8, λx + 1, λy, λvx, λvy] * 0.4)) + (b_vx * 0.16000000000000003) * ifelse(b_vx_gt_0, f[9, 9, λx, λy, λvx, λvy] * 0.4, f[9, 9, λx + 1, λy, λvx, λvy] * 0.4))
                #= /Users/jack/projects/VlasovMDG/src/fulltensor/2d2v/free_transport.jl:194 =#
                df_M[9, 9, λx + 1, λy, λvx, λvy] += a_y * a_vx * a_vy * ((((((0 + (a_vx * 0.10666666666666669) * ifelse(b_vx_gt_0, f[7, 8, λx, λy, λvx, λvy] * 0.4, f[7, 8, λx + 1, λy, λvx, λvy] * 0.4)) + (b_vx * 0.16000000000000003) * ifelse(b_vx_gt_0, f[7, 9, λx, λy, λvx, λvy] * 0.4, f[7, 9, λx + 1, λy, λvx, λvy] * 0.4)) + (a_vx * 0.10666666666666669) * ifelse(b_vx_gt_0, f[8, 8, λx, λy, λvx, λvy] * 0.4, f[8, 8, λx + 1, λy, λvx, λvy] * -0.4)) + (b_vx * 0.16000000000000003) * ifelse(b_vx_gt_0, f[8, 9, λx, λy, λvx, λvy] * 0.4, f[8, 9, λx + 1, λy, λvx, λvy] * -0.4)) + (a_vx * 0.10666666666666669) * ifelse(b_vx_gt_0, f[9, 8, λx, λy, λvx, λvy] * 0.4, f[9, 8, λx + 1, λy, λvx, λvy] * 0.4)) + (b_vx * 0.16000000000000003) * ifelse(b_vx_gt_0, f[9, 9, λx, λy, λvx, λvy] * 0.4, f[9, 9, λx + 1, λy, λvx, λvy] * 0.4))

So if it's counting a separate ArrayReferenceMeta for each of df_M[1, 1, λx..., df_M[1, 1, λx+1..., f[1, 1, λx..., f[1, 1, λx+1..., that makes 4*81 = 324. Then there are four more arrays referenced at the start of the loop.

Writing an actual loop won't double count, and will allow it to not repeatedly reload from the same array.
Base.broadcasted(+, a, a) has the same type as Base.broadcasted(+, a, b) when typeof(b) == typeof(a).
Meaning, you have to treat each repeated occurrence of the same array as a separate array -- because you can't tell they aren't the same one.
Of course, you could perhaps get really fancy in the @turbo macro to analyze the expression, and generate a different broadcast that somehow communicates which of the arrays are the same...

Of course, you could perhaps get really fancy in the @turbo macro to analyze the expression, and generate a different broadcast that somehow communicates which of the arrays are the same...

If you want to take this route, I'd define an AliasIDWrapper{ID,T}; x::T; end.
You could then define
function add_broadcast!(
  ls::LoopSet,
  aliasdict::Dict{Int,Operation}, # or maybe just a vector
  mC::Symbol,
  bcname::Symbol,
  loopsyms::Vector{Symbol},
  @nospecialize(arg::Type{AliasIDWrapper{ID,BC}}),
  dontbc,
  elementbytes::Int,
) where {ID,BC}
    get(aliasdict, ID) do
        add_broadcast!(aliasdict, mV, bcname, loopsyms, BC, dontbc, elementbytes)
    end
end

and add an aliasdict that you pass around everywhere.
You should also check if the destination you store into has an entry and matches a load.
In that case, you do need a different operation -- a store instead of a load -- but you can copy the ArrayRef from it so it has the same array ID.
Then when parsing a broadcast expression, you could add an AliasIDWrapper. You could do it in a single pass by having a Dict{Symbol,Int} and get!ing from it as you walk the broadcast expression.

Thank you for your thoughtsThe reason for using a generated function to unroll this inner loop is that the matrices in question are extremely sparse, so in practice it seems to be absolutely worth it (like, 20x speedups worth it).  This is good enough, but I am definitely interested in improving the story here along the lines of your suggestion, to hopefully save on loads.
Can you clarify why you are talking about broadcast expressions? I'm dealing with an explicit for loop, does LV somehow lower that to a broadcast internally?

Can you clarify why you are talking about broadcast expressions? I'm dealing with an explicit for loop, does LV somehow lower that to a broadcast internally?

Sorry, I misunderstood/didn't look at the problem too closely.
Yes, every offset expression has a separate mref.
So having

df_M[1, 1, λx..., df_M[1, 1, λx+1..., f[1, 1, λx..., f[1, 1, λx+1...

would be 4 different array references, exactly as you said.
If any of this loading could be represented by a loop, that would help.
Otherwise, the focus should be on increasing the number of array references LV supports, as suggested initially.


Corrected find_ident_end for identifiers ending with a multibyte UTF-8 char

There was an implicit assumption in find_ident_end that the last character of the identifier was encoded as a single UTF-8 byte. If this was not the case, the index returned would cause an "index does not lie on character boundary" panic when used.

Nice catch! Thanks v much @inrustwetrust


Move the icon behind the date?

Is there anyway to move the icon so that it sits behind the user specified time?

No, there isn't a way to do this. What would be the reason to do this?

preference?

@mboevink What do you mean by moving the icon behind the time? Do you mean moving the icon of Itsycal behind the macOS system time?

@julianschacherpp so I want itsycal to handle both the time and date item in my task bar, but I want the date box to sit behind the time so it aligns nicely with the edge.

@mboevink The implementation of time in the Itsycal Icon would be a good step into making it more unified and flush with the mac task bar. Having the option to display the Itsycal date without any  border or background and just having the plain text would be nice as well tho.
Regarding the position of the Itsycal icon: You can move it to the right of the system time, if that's what you mean.


(#174) Initial support to parametrize public-key and symmetric-key algorithms.

This commit lays down the plumbing to parametrize the names of the public-key and symmetric-key algorithms that will be used by the simple_app. Currently, these are hard-coded to 'Enc_method_rsa_2048' and 'Enc_method_aes_256_cbc_hmac_sha256', respectively.
This commit now supports --public_key_alg and --symmetric_key_alg flags that can be supplied to the simple_app/example_app.exe program.
An initial list of char *Enc_public_key_algorithms[] and char *Enc_symmetric_key_algorithms[] has been created in src/certifier_algorithms.cc. The idea is that we can run test-executions choosing pairs of these algorithms to drive the simple_app.
High-level changes:

Support --public_key_alg and --symmetric_key_alg flags which can be supplied [only] to the simple_app/example_app.exe program.

An initial list of char *Enc_public_key_algorithms[] and
char *Enc_symmetric_key_algorithms[] has been created in src/certifier_algorithms.cc

run_example.sh:

Refactor methods implementing simple_app_python tests into their own functions as argument-parsing is different for C++  v/s Python apps. (New args added with this work are n/a for the Python simple_app.)

Add new test-method run_test-crypto_algorithms(), which will exercise the sub-steps needed to run simple_app with different  pairs of crypto algorithms.

CI/test.sh, build.yml: Add test-simple_app-with-crypto_algorithms, which will invoke said test case. This invokes
run_test-crypto_algorithms() named earlier.

Pulled-out testing of simple_app_python with 'warm-restart'  functionality into its own test-case invocation.
Adds test-simple_app_python-with-warm-restart().

Cleaned-up some dependency of 'setup' step for simple_apps to reduce CI test run-times.

Hi, @jlmucb - I did a minor rework of this change-set subsequent to our discussion this morning.
See the diffs applied in this commit.
There are still some things that do not work:

Using ecc-384 as a public-key algorithm name.
Using any one of these as an authenticated symmetric-key algorithm name: aes-128-cbc-hmac-sha256, or aes-256-cbc-hmac-sha384, aes-256-gcm. These run into limitations as documented in run_example.sh around L3214.

I'd like to get the bulk of the rest of this testing / refactoring machinery reviewed and merged.
Then, you / I can separately investigate why the choice of these diff crypto algorithms is not working.


[VS Code] Joining collaboration session: Could not connect to the server. HTTPS connection failed, verify there are no self-signed certificates or custom cert validation policies blocking Live Share.

Error:
Joining collaboration session: Could not connect to the server. HTTPS connection failed, verify there are no self-signed certificates or custom cert validation policies blocking Live Share.
Steps to Reproduce:
1.
2.

Version Data

extensionName
VSLS

extensionVersion
1.0.379

protocolVersion
2.2

applicationName
VSCode

applicationVersion
1.34.0

platformName
Linux

platformVersion
4.15.0-50-generic

Hi @codekyd , thank you for reporting the issue. Which Linux distro are you on ? Also, your logs may provide us with helpful information. You can access them via the "Live Share: Export Logs" command from the command palette (ctrl + shift + p) and attach them to the issue. We are tracking the issue in # . I consolidate the issue with #. Please attach your logs there and help us to investigate.

@codekyd potentially dupe of #2216
Refer to the workaround here: https://github.com/MicrosoftDocs/live-share/issues/2216#issuecomment-501372336