Table Storage fails querying for empty partition key

Which service(blob, file, queue, table) does this issue concern?
table
Which version of the Azurite was used?
<EMAIL_ADDRESS>Where do you get Azurite? (npm, DockerHub, NuGet, Visual Studio Code Extension)
npm
What's the Node.js version?
v12.18.3
What problem was encountered?
Table queries for empty string partition key fail with this exception:
Unhandled exception. Azure.RequestFailedException: The query condition specified in the request is invalid.
RequestId:3abe68fd-60cb-40c1-9cf8-c1af9e947d41
Time:2021-05-19T16:50:57.616Z
Status: 400 (Bad Request)
ErrorCode: InvalidInput

Content:
{"odata.error":{"code":"InvalidInput","message":{"lang":"en-US","value":"The query condition specified in the request is invalid.\nRequestId:3abe68fd-60cb-40c1-9cf8-c1af9e947d41\nTime:2021-05-19T16:50:57.616Z"}}}

Headers:
Server: Azurite-Table/3.12.0
x-ms-error-code: REDACTED
x-ms-request-id: 3abe68fd-60cb-40c1-9cf8-c1af9e947d41
x-ms-version: REDACTED
Date: Wed, 19 May 2021 16:50:57 GMT
Connection: keep-alive
Transfer-Encoding: chunked
Content-Type: application/json; odata=minimalmetadata; streaming=true; charset=utf-8

Steps to reproduce the issue?
using Azure.Data.Tables;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var tableServiceClient = new TableServiceClient("UseDevelopmentStorage=true");
            var tableClient = tableServiceClient.GetTableClient("test");
            await tableClient.CreateIfNotExistsAsync();
            await tableClient.QueryAsync<TableEntity>(x => x.PartitionKey == "").GetAsyncEnumerator().MoveNextAsync();
        }
    }
}

2021-05-19T16:51:48.023Z 	 info: Azurite Blob service is starting on <IP_ADDRESS>:10000
2021-05-19T16:51:48.024Z 	 info: AccountDataStore:init() Refresh accounts from environment variable AZURITE_ACCOUNTS with value undefined
2021-05-19T16:51:48.024Z 	 info: AccountDataStore:init() Fallback to default emulator account devstoreaccount1.
2021-05-19T16:51:48.049Z 	 info: BlobGCManager:start() Starting BlobGCManager. Set status to Initializing.
2021-05-19T16:51:48.049Z 	 info: BlobGCManager:start() Trigger mark and sweep loop. Set status to Running.
2021-05-19T16:51:48.050Z 	 info: BlobGCManager:markSweepLoop() Start next mark and sweep.
2021-05-19T16:51:48.050Z 	 info: BlobGCManager:markSweep() Get all extents.
2021-05-19T16:51:48.050Z 	 info: BlobGCManager:start() BlobGCManager successfully started.
2021-05-19T16:51:48.062Z 	 info: BlobGCManager:markSweep() Got 0 extents.
2021-05-19T16:51:48.063Z 	 info: BlobGCManager:markSweep() Get referred extents.
2021-05-19T16:51:48.063Z 	 info: BlobGCManager:markSweep() Got referred extents, unreferenced extents count is 0.
2021-05-19T16:51:48.063Z 	 info: BlobGCManager:markSweepLoop() Mark and sweep finished, taken 13ms.
2021-05-19T16:51:48.063Z 	 info: BlobGCManager:markSweepLoop() Sleep for 600000ms.
2021-05-19T16:51:48.066Z 	 info: Azurite Blob service successfully listens on http://<IP_ADDRESS>:10000
2021-05-19T16:51:48.067Z 	 info: Azurite Queue service is starting on <IP_ADDRESS>:10001
2021-05-19T16:51:48.067Z 	 info: AccountDataStore:init() Refresh accounts from environment variable AZURITE_ACCOUNTS with value undefined
2021-05-19T16:51:48.067Z 	 info: AccountDataStore:init() Fallback to default emulator account devstoreaccount1.
2021-05-19T16:51:48.096Z 	 info: QueueGCManager:start() Starting QueueGCManager, set status to Initializing
2021-05-19T16:51:48.096Z 	 info: QueueGCManager:start() Trigger mark and sweep loop, set status to Running.
2021-05-19T16:51:48.096Z 	 info: QueueGCManager:markSweepLoop() Start new mark and sweep.
2021-05-19T16:51:48.097Z 	 info: QueueGCManger:markSweep() Get all extents.
2021-05-19T16:51:48.097Z 	 info: QueueGCManager:start() QueueGCManager successfully started.
2021-05-19T16:51:48.097Z 	 info: QueueGCManager:marksweep() Get 0 extents.
2021-05-19T16:51:48.097Z 	 info: QueueGCManager:markSweep() Get referred extents, then remove from allExtents.
2021-05-19T16:51:48.097Z 	 info: QueueGCManager:markSweep() Got referred extents, unreferenced extents count is 0.
2021-05-19T16:51:48.097Z 	 info: QueueGCManager:markSweepLoop() Mark and sweep finished, take 0ms.
2021-05-19T16:51:48.097Z 	 info: QueueGCManager:markSweepLoop() Sleep for 60000
2021-05-19T16:51:48.098Z 	 info: Azurite Queue service successfully listens on http://<IP_ADDRESS>:10001
2021-05-19T16:51:48.099Z 	 info: Azurite Table service is starting on <IP_ADDRESS>:10002
2021-05-19T16:51:48.099Z 	 info: AccountDataStore:init() Refresh accounts from environment variable AZURITE_ACCOUNTS with value undefined
2021-05-19T16:51:48.099Z 	 info: AccountDataStore:init() Fallback to default emulator account devstoreaccount1.
2021-05-19T16:51:48.112Z 	 info: Azurite Table service successfully listens on http://<IP_ADDRESS>:10002
2021-05-19T16:51:50.899Z 5f6d63d1-915f-4dcc-b65c-bace938a1513 info: TableStorageContextMiddleware: RequestMethod=POST RequestURL=http://<IP_ADDRESS>/devstoreaccount1/Tables?$format=application%2Fjson%3Bodata%3Dminimalmetadata RequestHeaders:{"host":"<IP_ADDRESS>:10002","x-ms-version":"2019-02-02","dataserviceversion":"3.0","accept":"application/json;odata=minimalmetadata","x-ms-client-request-id":"1dce5d2e-4b23-48c8-ac75-7da82751c2e1","x-ms-return-client-request-id":"true","user-agent":"azsdk-net-Data.Tables/12.0.0-beta.8 (.NET 5.0.6; Microsoft Windows 10.0.19043)","x-ms-date":"Wed, 19 May 2021 16:51:50 GMT","authorization":"SharedKeyLite devstoreaccount1:gw7laeNdEq0fjiWkneXQHqR3A+ixo4OaG9RuU8Y6s4c=","content-type":"application/json;odata=nometadata","content-length":"20"} ClientIP=<IP_ADDRESS> Protocol=http HTTPVersion=1.1
2021-05-19T16:51:50.899Z 5f6d63d1-915f-4dcc-b65c-bace938a1513 debug: tableStorageContextMiddleware: Dispatch pattern string: /Tables
2021-05-19T16:51:50.899Z 5f6d63d1-915f-4dcc-b65c-bace938a1513 info: tableStorageContextMiddleware: Account=devstoreaccount1 tableName=undefined
2021-05-19T16:51:50.899Z 5f6d63d1-915f-4dcc-b65c-bace938a1513 verbose: DispatchMiddleware: Dispatching request...
2021-05-19T16:51:50.901Z 5f6d63d1-915f-4dcc-b65c-bace938a1513 info: DispatchMiddleware: Operation=Table_Create
2021-05-19T16:51:50.901Z 5f6d63d1-915f-4dcc-b65c-bace938a1513 verbose: AuthenticationMiddlewareFactory:createAuthenticationMiddleware() Validating authentications.
2021-05-19T16:51:50.901Z 5f6d63d1-915f-4dcc-b65c-bace938a1513 info: TableSharedKeyLiteAuthenticator:validate() Start validation against account shared key authentication.
2021-05-19T16:51:50.902Z 5f6d63d1-915f-4dcc-b65c-bace938a1513 info: TableSharedKeyLiteAuthenticator:validate() [STRING TO SIGN]:"Wed, 19 May 2021 16:51:50 GMT\n/devstoreaccount1/devstoreaccount1/Tables"
2021-05-19T16:51:50.902Z 5f6d63d1-915f-4dcc-b65c-bace938a1513 info: TableSharedKeyLiteAuthenticator:validate() Calculated authentication header based on key1: SharedKeyLite devstoreaccount1:gw7laeNdEq0fjiWkneXQHqR3A+ixo4OaG9RuU8Y6s4c=
2021-05-19T16:51:50.902Z 5f6d63d1-915f-4dcc-b65c-bace938a1513 info: TableSharedKeyLiteAuthenticator:validate() Signature 1 matched.
2021-05-19T16:51:50.903Z 5f6d63d1-915f-4dcc-b65c-bace938a1513 verbose: DeserializerMiddleware: Start deserializing...
2021-05-19T16:51:50.905Z 5f6d63d1-915f-4dcc-b65c-bace938a1513 debug: deserialize(): Raw request body string is (removed all empty characters) {"TableName":"test"}
2021-05-19T16:51:50.906Z 5f6d63d1-915f-4dcc-b65c-bace938a1513 info: HandlerMiddleware: DeserializedParameters={"options":{"queryOptions":{"format":"application/json;odata=minimalmetadata"},"requestId":"1dce5d2e-4b23-48c8-ac75-7da82751c2e1","dataServiceVersion":"3.0"},"version":"2019-02-02","tableProperties":{"tableName":"test"},"body":"ReadableStream"}
2021-05-19T16:51:50.907Z 5f6d63d1-915f-4dcc-b65c-bace938a1513 verbose: SerializerMiddleware: Start serializing...
2021-05-19T16:51:50.908Z 5f6d63d1-915f-4dcc-b65c-bace938a1513 debug: Serializer: Raw response body string is {"odata.metadata":"http://<IP_ADDRESS>:10002/devstoreaccount1/$metadata#Tables/@Element","TableName":"test"}
2021-05-19T16:51:50.908Z 5f6d63d1-915f-4dcc-b65c-bace938a1513 info: Serializer: Start returning stream body.
2021-05-19T16:51:50.909Z 5f6d63d1-915f-4dcc-b65c-bace938a1513 info: EndMiddleware: End response. TotalTimeInMS=11 StatusCode=201 StatusMessage=Created Headers={"server":"Azurite-Table/3.12.0","content-type":"application/json;odata=minimalmetadata","x-ms-client-request-id":"1dce5d2e-4b23-48c8-ac75-7da82751c2e1","x-ms-request-id":"5f6d63d1-915f-4dcc-b65c-bace938a1513","x-ms-version":"2020-06-12","date":"Wed, 19 May 2021 16:51:50 GMT","preference-applied":"return-content"}
2021-05-19T16:51:50.946Z bcc82040-ce96-430b-bfe5-05bcd827d69a info: TableStorageContextMiddleware: RequestMethod=GET RequestURL=http://<IP_ADDRESS>/devstoreaccount1/test()?$format=application%2Fjson%3Bodata%3Dminimalmetadata&$filter=PartitionKey%20eq%20%27%27 RequestHeaders:{"host":"<IP_ADDRESS>:10002","x-ms-version":"2019-02-02","dataserviceversion":"3.0","accept":"application/json;odata=minimalmetadata","x-ms-client-request-id":"798145a7-5e5f-41ef-aafe-cbe68ed9a8f9","x-ms-return-client-request-id":"true","user-agent":"azsdk-net-Data.Tables/12.0.0-beta.8 (.NET 5.0.6; Microsoft Windows 10.0.19043)","x-ms-date":"Wed, 19 May 2021 16:51:50 GMT","authorization":"SharedKeyLite devstoreaccount1:0hf9M7D06+bgvex+V333OlXZyWRgMG0HLS55k2zords="} ClientIP=<IP_ADDRESS> Protocol=http HTTPVersion=1.1
2021-05-19T16:51:50.946Z bcc82040-ce96-430b-bfe5-05bcd827d69a debug: tableStorageContextMiddleware: Dispatch pattern string: /test()
2021-05-19T16:51:50.947Z bcc82040-ce96-430b-bfe5-05bcd827d69a info: tableStorageContextMiddleware: Account=devstoreaccount1 tableName=test
2021-05-19T16:51:50.947Z bcc82040-ce96-430b-bfe5-05bcd827d69a verbose: DispatchMiddleware: Dispatching request...
2021-05-19T16:51:50.947Z bcc82040-ce96-430b-bfe5-05bcd827d69a info: DispatchMiddleware: Operation=Table_QueryEntities
2021-05-19T16:51:50.947Z bcc82040-ce96-430b-bfe5-05bcd827d69a verbose: AuthenticationMiddlewareFactory:createAuthenticationMiddleware() Validating authentications.
2021-05-19T16:51:50.947Z bcc82040-ce96-430b-bfe5-05bcd827d69a info: TableSharedKeyLiteAuthenticator:validate() Start validation against account shared key authentication.
2021-05-19T16:51:50.947Z bcc82040-ce96-430b-bfe5-05bcd827d69a info: TableSharedKeyLiteAuthenticator:validate() [STRING TO SIGN]:"Wed, 19 May 2021 16:51:50 GMT\n/devstoreaccount1/devstoreaccount1/test()"
2021-05-19T16:51:50.947Z bcc82040-ce96-430b-bfe5-05bcd827d69a info: TableSharedKeyLiteAuthenticator:validate() Calculated authentication header based on key1: SharedKeyLite devstoreaccount1:0hf9M7D06+bgvex+V333OlXZyWRgMG0HLS55k2zords=
2021-05-19T16:51:50.947Z bcc82040-ce96-430b-bfe5-05bcd827d69a info: TableSharedKeyLiteAuthenticator:validate() Signature 1 matched.
2021-05-19T16:51:50.948Z bcc82040-ce96-430b-bfe5-05bcd827d69a verbose: DeserializerMiddleware: Start deserializing...
2021-05-19T16:51:50.948Z bcc82040-ce96-430b-bfe5-05bcd827d69a info: HandlerMiddleware: DeserializedParameters={"options":{"queryOptions":{"format":"application/json;odata=minimalmetadata","filter":"PartitionKey eq ''"},"requestId":"798145a7-5e5f-41ef-aafe-cbe68ed9a8f9","dataServiceVersion":"3.0"},"version":"2019-02-02"}
2021-05-19T16:51:50.950Z bcc82040-ce96-430b-bfe5-05bcd827d69a error: ErrorMiddleware: Received a MiddlewareError, fill error information to HTTP response
2021-05-19T16:51:50.950Z bcc82040-ce96-430b-bfe5-05bcd827d69a error: ErrorMiddleware: ErrorName=StorageError ErrorMessage="The query condition specified in the request is invalid."  ErrorHTTPStatusCode=400 ErrorHTTPStatusMessage=undefined ErrorHTTPHeaders={"x-ms-error-code":"InvalidInput","x-ms-request-id":"bcc82040-ce96-430b-bfe5-05bcd827d69a","x-ms-version":"2020-06-12"} ErrorHTTPBody="{\"odata.error\":{\"code\":\"InvalidInput\",\"message\":{\"lang\":\"en-US\",\"value\":\"The query condition specified in the request is invalid.\\nRequestId:bcc82040-ce96-430b-bfe5-05bcd827d69a\\nTime:2021-05-19T16:51:50.950Z\"}}}" ErrorStack="\"StorageError: The query condition specified in the request is invalid.\\n    at Function.getQueryConditionInvalid (C:\\\\Users\\\\jver\\\\AppData\\\\Roaming\\\\npm\\\\node_modules\\\\azurite\\\\dist\\\\src\\\\table\\\\errors\\\\StorageErrorFactory.js:76:16)\\n    at LokiTableMetadataStore.queryTableEntities (C:\\\\Users\\\\jver\\\\AppData\\\\Roaming\\\\npm\\\\node_modules\\\\azurite\\\\dist\\\\src\\\\table\\\\persistence\\\\LokiTableMetadataStore.js:329:49)\\n    at TableHandler.queryEntities (C:\\\\Users\\\\jver\\\\AppData\\\\Roaming\\\\npm\\\\node_modules\\\\azurite\\\\dist\\\\src\\\\table\\\\handlers\\\\TableHandler.js:273:81)\\n    at C:\\\\Users\\\\jver\\\\AppData\\\\Roaming\\\\npm\\\\node_modules\\\\azurite\\\\dist\\\\src\\\\table\\\\generated\\\\middleware\\\\HandlerMiddlewareFactory.js:58:18\\n    at C:\\\\Users\\\\jver\\\\AppData\\\\Roaming\\\\npm\\\\node_modules\\\\azurite\\\\dist\\\\src\\\\table\\\\generated\\\\ExpressMiddlewareFactory.js:77:63\\n    at Layer.handle [as handle_request] (C:\\\\Users\\\\jver\\\\AppData\\\\Roaming\\\\npm\\\\node_modules\\\\azurite\\\\node_modules\\\\express\\\\lib\\\\router\\\\layer.js:95:5)\\n    at trim_prefix (C:\\\\Users\\\\jver\\\\AppData\\\\Roaming\\\\npm\\\\node_modules\\\\azurite\\\\node_modules\\\\express\\\\lib\\\\router\\\\index.js:317:13)\\n    at C:\\\\Users\\\\jver\\\\AppData\\\\Roaming\\\\npm\\\\node_modules\\\\azurite\\\\node_modules\\\\express\\\\lib\\\\router\\\\index.js:284:7\\n    at Function.process_params (C:\\\\Users\\\\jver\\\\AppData\\\\Roaming\\\\npm\\\\node_modules\\\\azurite\\\\node_modules\\\\express\\\\lib\\\\router\\\\index.js:335:12)\\n    at next (C:\\\\Users\\\\jver\\\\AppData\\\\Roaming\\\\npm\\\\node_modules\\\\azurite\\\\node_modules\\\\express\\\\lib\\\\router\\\\index.js:275:10)\""
2021-05-19T16:51:50.951Z bcc82040-ce96-430b-bfe5-05bcd827d69a error: ErrorMiddleware: Set HTTP code: 400
2021-05-19T16:51:50.951Z bcc82040-ce96-430b-bfe5-05bcd827d69a error: ErrorMiddleware: Set HTTP Header: x-ms-error-code=InvalidInput
2021-05-19T16:51:50.951Z bcc82040-ce96-430b-bfe5-05bcd827d69a error: ErrorMiddleware: Set HTTP Header: x-ms-request-id=bcc82040-ce96-430b-bfe5-05bcd827d69a
2021-05-19T16:51:50.951Z bcc82040-ce96-430b-bfe5-05bcd827d69a error: ErrorMiddleware: Set HTTP Header: x-ms-version=2020-06-12
2021-05-19T16:51:50.951Z bcc82040-ce96-430b-bfe5-05bcd827d69a error: ErrorMiddleware: Set content type: application/json;odata=minimalmetadata;streaming=true;charset=utf-8
2021-05-19T16:51:50.951Z bcc82040-ce96-430b-bfe5-05bcd827d69a error: ErrorMiddleware: Set HTTP body: "{\"odata.error\":{\"code\":\"InvalidInput\",\"message\":{\"lang\":\"en-US\",\"value\":\"The query condition specified in the request is invalid.\\nRequestId:bcc82040-ce96-430b-bfe5-05bcd827d69a\\nTime:2021-05-19T16:51:50.950Z\"}}}"
2021-05-19T16:51:50.951Z bcc82040-ce96-430b-bfe5-05bcd827d69a info: EndMiddleware: End response. TotalTimeInMS=5 StatusCode=400 StatusMessage=Bad Request Headers={"server":"Azurite-Table/3.12.0","x-ms-error-code":"InvalidInput","x-ms-request-id":"bcc82040-ce96-430b-bfe5-05bcd827d69a","x-ms-version":"2020-06-12","content-type":"application/json;odata=minimalmetadata;streaming=true;charset=utf-8"}
2021-05-19T16:51:54.677Z 	 info: Azurite Blob service is closing...
2021-05-19T16:51:54.677Z 	 info: Azurite Queue service is closing...
2021-05-19T16:51:54.678Z 	 info: Azurite Table service is closing...
2021-05-19T16:51:54.678Z 	 info: BlobGCManager:close() Start closing BlobGCManager. Set status to Closing.
2021-05-19T16:51:54.678Z 	 info: QueueGCManager:close() Start closing QueueGCManager, set status to Closing.
2021-05-19T16:51:54.679Z 	 info: BlobGCManager:start() Mark and sweep loop is closed.
2021-05-19T16:51:54.679Z 	 info: BlobGCManager:close() BlobGCManager successfully closed. Set status to Closed.
2021-05-19T16:51:54.679Z 	 info: QueueGCManager:start() Mark and sweep loop is closed.
2021-05-19T16:51:54.679Z 	 info: QueueGCManager:close() QueueGCManager successfully closed, set status to Closed.
2021-05-19T16:51:54.679Z 	 info: Azurite Table service successfully closed
2021-05-19T16:51:54.679Z 	 info: Azurite Blob service successfully closed
2021-05-19T16:51:54.679Z 	 info: Azurite Queue service successfully closed

Please be sure to remove any PII or sensitive information before sharing!
The debug log will log raw request headers and bodies, so that we can replay these against Azurite using REST and create tests to validate resolution.
Have you found a mitigation/solution?

Hi,
I looked into this, and am able to repro, thanks for the sample!
We are working on fixing it.

@CodeUnicornMartha
This is caused by generateQueryEntityWhereFunction
Line 665
Query is deserialized into the function as PartitionKey eq ''
We are expecting the quotes to be escaped, rather than there being an empty string.
.replace(/''/g, "@ESCAPEDQUOTE@")

Fix in Review


Sema: Reject unavailable associated types and observing accessors

Improve the diagnostics for @available by rejecting the attribute whenever it would make either an associated type declaration or an observing accessor unavailable. The compiler does not consider the availability of these declarations when emitting code that uses them, so it is misleading to accept the @available attribute on them.
Resolves rdar://80337141.

@swift-ci please smoke test

@swift-ci please test source compatibility

Source compatibility failures are all from a known issue.

@swift-ci please smoke test

@swift-ci please smoke test


labeled tuple types

[@gavinking] Record types are a construct popular in ML-like languages, that are a bit like C-style structs. From our point of view, they are tuples with named elements. An elegant way to add support for record types to Ceylon would be via shared parameters of class aliases, for example:
class Person(shared String first, shared String last, shared Integer age) => [first, last, age];

Then you could write:
Person person = Person("Joe", "Bloggs", 32);
String firstName = person.first;
String lastName = person.last;
Integer age = person.age;

Where Person is just an alias for the type [String,String,Integer], and person.last is just sugar for person[1].
But would this feature be useful to us? I dunno. It might be useful for working with APIs that query relational databases. Apart from that, I can't think of much use, since for us classes are just much more powerful.
One use we do have for record types is to encode parameter names to function types. But I don't think the above approach helps us much there. For that problem we would need to be able to write down types like:
Callable<Anything, [String first, String last, Integer age]>

without needing to define an alias first.
[Migrated from ceylon/ceylon-spec#745]

These days, I lean more toward the idea of being able to "decorate" tuple types with element names. In this approach, as in the ancient proposal in this issue description, record types would remain as a typechecker-level fiction, that is, they would not be reified types.
You could write:
value joe = [first="Joe"; last="Bloggs"; age=32];
[String firstName, String lastName, Integer age] person = joe; //ok
[String street, String city, Integer zip] address = joe; //error!

But at runtime, a [String firstName, String lastName, Integer age] is just a regular [String, String, Integer] tuple. So this whole language feature would have no impact on the backends.
Of course, you could still provide an alias for a record type, but it would be a regular alias, not a class alias:
alias Person => [String firstName, String lastName, Integer age];
value joe = [first="Joe"; last="Bloggs"; age=32];
Person person = joe; //ok

To be honest I can't think of a particularly good reason why I shouldn't just sit down and try to implement this!

So this whole language feature would have no impact on the backends.

Oh, well, that's not true: it affects the model loader, I guess.

it affects the model loader, I guess

Actually the impact on the model loader would be quite small: just an enhancement to the type parser.
However, it does impact the backends in that they need to now handle a named reference to a tuple element. Still, that seems like a pretty slight impact.

@gavin:

You could write:

value joe = [first="Joe"; last="Bloggs"; age=32];
[String firstName, String lastName, Integer age] person = joe; //ok
[String street, String city, Integer zip] address = joe; //error!

I think (in your examples here) you meant firstName and lastName in the tuple value, rather than first and last.

@lucono yes, I did. Edited and fixed.

But at runtime, a [String firstName, String lastName, Integer age] is just a regular [String, String, Integer] tuple. So this whole language feature would have no impact on the backends.

This to me departs from the general Ceylon direction of having more (or even "complete") metadata available at runtime (than e.g. Java)..

This issue reminds me of https://twitter.com/1ovthafew/status/787742681912995845 :)

Labeled tuples would be a great benefit together with the |> operator, but only if labeled tuples behave like data structures that can be composed. So it would be possible to pass a lightweight environment through pipes from one funtion/procedure to the next and append them. So the latter computation has access to the "scopes" from previous computations.
The crucial point would be that their composition models overlapping scopes like in the monadic for in scala:
for {
x <- f(...)
y <- g(..., x) // has access to x from previous computation
z <- h(..., x, y) // has access to x and y from previous computation
} yield i(x, y, z) // has access to x, y and z from previous computation
(Of course, for can do more than provide overlapping scopes, but that is not of interest in this example.)
There are 2 alternatives:
1.One could alternatively explicitly pass or return an so called "object" (what is that?) from previous computation to the next. It was mentioned, that labeled tuples implicitly are  objects and labeled tuple types implicitly are classes - nothing new. But, this works on the heap and generates a lot of garbage.

Another alternative is instead of passing objects from previous calculation to the next calculation - one could pass continuations from the next computation to the previous before running them. This works on the stack (isnt it a bit "Rusty"?) but it causes "lisps": Lots of insignificant parentheses. At least when using the dreaded ( ) { } -syntax.

There are other alternatives:

Introducing the for construct in ceylon. This would add more than required (In the Ceylon-world this seems to be tabooed).

Optimising these objects or labelled tuples away, when possible. Because passing an object from one computation to the next means in most cases abusing the semantics of it to avoid a complicated syntax (lisps).

Instead of using the |> operator to bind functions together one could concatenate objects (e.g. :: operator) that model computation steps before running them. This could be optimized for specific well known computation objects and their concatenation, and e.g. labelled tuples as a lightweight environment. These should be appendable and immutable.

Alternetive 5 makes it possible to control the structure of computations and so create "islands of purity" in a "sea of imperative ceylon tea".
Ceylon's declarative tree-like structures would fit well with that. One could then check if computations are pure in a functional sense.

@welopino Interesting comment, thanks.

This feels very backward to me. When I think “person”, I think “class” and not “tuple”. This seems to me like a very weird, way less powerful, harder to reason about, less semantical kind of class. Beside introducing more special case reasoning for tuples. I really don’t understand what you are trying to acomplish with this.

value joe = [firstName="Joe"; lastName="Bloggs"; age=32];
[String firstName, String lastName, Integer age] person = joe; //ok
[String street, String city, Integer zip] address = joe; //error!

Do record types cover each other? Would the last assignment be legal as joe of [String street, String city, Integer zip]?

I think that should not be an error, even without of. People will want to add labels to Tuple return types as a convenience to callers, but that would become a significant inconvenience for callers that want to use their own labels, need to return the Tuple, or pass it as an argument to a parameter that has different labels.
The same concern would exist to an even greater extent if Callables were to support labels.

Hm, that’s a good point, we certainly don’t want process.arguments.each(print) to become illegal just because Iterable.each’s step’s parameter is called element and print’s parameter is called val.

About labeled tuple types.About labeled tuple types.
I think this feature can be useful, because in this case we will have data type functionality.
If we write
class Person(shared String first, shared String last, shared Integer age) => [first, last, age];

then we have immutable Person class with overriden equals and hashcode. So, it can be simular to case classes in scala.
And one question - will it be possible to convert field name to index in tuple?
For example:
Integer positionInTuple = getPos(Person.age)
If this feature will be implemented, theoretically it will be possible to write clone with mutation functionality:
for example:
value cloned = clone(oldPersion, getPos(`Persion.age`), oldPersion.age + 1);

And ceylon will have data types feature.

Record types are in F# and other ML dialects considered as the default option.
Unnamed tuples are only recommended for internal computations.
This increases the readability. Which is the declared aim of this language. :slightly_smiling_face:

Record types are in F# and other ML dialects considered as the default option.
Unnamed tuples are only recommended for internal computations.
This increases the readability, which is a declared goal of this language here, yes?

@ShalokShalom well as I wrote in the issue description:

It might be useful for working with APIs that query relational databases. Apart from that, I can't think of much use, since for us classes are just much more powerful.

We don't have a strong motivation for record types here because we already have classes. My "labeled tuples" experiment could kinda sorta make sense in combination with some currently-nonexistent database access API based around tuple types, but apart from that I can't think of much in the way of really good uses for it.

How you do that with classes?

Do what precisely?

And is this fully immutable?

Class attributes are immutable by default.

How to name tuples with classes?

AFAICT You don't name tuples with classes. You simply have classes that have named attributes.

The point is there is very little conceptual difference between "record types" (tuples with named elements) and "classes". I guess the major difference is structural vs nominal typing.

I think this is worth to get mentioned in your docs


Create universal client lib

Not everyone will use vue therefore we must package it for more frameworks than just vue. We would have to rewrite this very much

https://lit.dev/

Resolved via #64


[Feature]: dialog trigger focus for slot content

Describe the feature
When using a Dialog, I would like to use a slot for the DialogTrigger content in my own UI library, so any actual dialog implementation can use custom content generated on the fly for the trigger.
However, this means setting it's as property to something other than a button and then the focus is not returned the content afterwards. Is there a way this can be done without sacrificing accessibility?
Additional information

[ ] I intend to submit a PR for this feature.
[ ] I have already implemented and/or tested this feature.

Hey @wyrd-code . As long as your component has tabindex="0", that should be able to focus nicely. However, if the element is not a button or a, the screen reader might not indicate correctly that the element is clickable even with tabindex available. So there's some minor drawback here.


Doc : add license link

Checklist

[ ] Updated guide with pertinent info (may not always apply).
[ ] Squash down commits to one or two logical commits which clearly describe the work you've done.
[ ] Unittest is a friend:)

This change is

Thank you man.
The commit message should starts with Doc:  not Doc :. The pull request title does not matter.
You could fix it with git commit --amend to update the commit message and git push --force to update the remote branch.

Thank you man.
The commit message should starts with Doc:  not Doc :. The pull request title does not matter.
You could fix it with git commit --amend to update the commit message and git push --force to update the remote branch.

Thank you for reminding me


Print help_text and observable.description from management cmd get_column_names

Currently, this custom management command only prints the column names that can be used to create bulk upload data - it should, optionally, also include explanation text (where present).
See both the following sections in the README for instructions on how this command can be run:

custom commands
custom commands from AWS

@Alvaro-FG Hey, please see the above instructions about how to get a full list of column names for the bulk metadata, as previously discussed.


Update Read.md Overview and Features

Hello,
Zulip documentation is great, however, I believe the read.md page could be improved to include a more detailed description of what the product does, and its real-world scenarios use.  This pull request includes additions to the overview section, and the creation of new features heading, emphasizing some of the vital Zulip features

Fixes:

Screenshots and screen captures:

Self-review checklist

[ ] Self-reviewed the changes for clarity and maintainability
(variable names, code reuse, readability, etc.).

Communicate decisions, questions, and potential concerns.

[ ] Explains differences from previous plans (e.g., issue description).
[ ] Highlights technical choices and bugs encountered.
[ ] Calls out remaining decisions and concerns.
[ ] Automated tests verify logic where appropriate.

Individual commits are ready for review (see commit discipline).

[ ] Each commit is a coherent idea.
[ ] Commit message(s) explain reasoning and motivation for changes.

Completed manual review and testing of the following:

[ ] Visual appearance of the changes.
[ ] Responsiveness and internationalization.
[ ] Strings and tooltips.
[ ] End-to-end functionality of buttons, interactions and flows.
[ ] Corner cases, error conditions, and easily imagined bugs.

This was done for a school assignment

Thanks for the suggestion, but we will not be moving forward with these changes.


Horizon theme style inconsistency: rounded corners #2

OpenUI5 version: 1.106.0
Following Horizon theme style inconsistency: rounded corners #1, open https://openui5nightly.hana.ondemand.com/tools, the ballons there have rounded corners:

Bearing in mind that on https://github.com/SAP/openui5/issues/3542 these rounded corners have been fixed (removed), should the rounded corners to be fixed on https://openui5nightly.hana.ondemand.com/tools as well?

Hi @pubmikeb,
The component in question is sap.f.Card. According to the Horizon specification, it is expected to have rounded corners, as you can see here: https://ui5.sap.com/?sap-theme=sap_horizon_dark#/entity/sap.f.Card/sample/sap.f.sample.Card
Regards,
Stanislav


Silence warnings in generated FlatBuffers headers

:notebook_with_decorative_cover: Description
Around a third of the remaining clang-tidy warnings in our code base stem from the generated FlatBuffers headers, and since we cannot realistically fix them we should just include the files as system-provided includes.
Additionally, this adds a build option VAST_ENABLE_CLANG_TIDY that enables clang-tidy for select targets.
:memo: Checklist

[x] All user-facing changes have changelog entries.
[x] The changes are reflected on docs.tenzir.com/vast, if necessary.
[x] The PR description contains instructions for the reviewer, if necessary.

:dart: Review Instructions
Commit-by-commit.

Would've loved to add this to CI, but this only works with clang-tidy 12 and newer, which is not packaged for Debian yet.


west.yml: update manifest to support spi_flash driver

Update manifest to add support to spi_flash operations.
Signed-off-by: Glauber Maroto Ferreira<EMAIL_ADDRESS>

@sylvioalves Please, take a look


RTL For StepList

Hi,
Is would be nice to enable to RTL support for the StepList too. Right now when I enable the Right to Left property, everything works fine except the step list.
It is neccessary for the right to left languages like Arabic,Persian and ...
Thanks
Originally posted: 2014-11-10T22:20:06

Yes I need it too,If Steplist follows right to left It will be great
Originally posted: 2014-11-29T11:47:32

It is now fixed in the 2.0.5 release. I have also allowed custom drawing of the step list.
Originally posted: 2014-12-12T09:32:16


Error.stack property is not a string in ipc.ts

Does this issue occur when all extensions are disabled?: Yes/No
Yes

VS Code Version:
Version: 1.69.2 (Universal)
Commit: 3b889b090b5ad5793f524b5d1d39fda662b96a2a
Date: 2022-07-18T16:12:57.074Z (2 wks ago)
Electron: 18.3.5
Chromium: 100.0.4896.160
Node.js: 16.13.2
V8: <IP_ADDRESS>-electron.0
OS: Darwin arm64 21.6.0

OS Version:
macOS Monterey Version 12.5

Steps to Reproduce:
First noticed the problem when using executeCommand on the ICommandService service. If this command fails the stack property on the Error object that is returned is not a string as was expected. After digging deeper it seem that in ipc.ts the stack property on an Error gets converted to a string[] on a failed call.

Indeed, for errors we read the .stack property and convert it to a string[] here. On the other side, we then set the .stack property and it becomes a string[] instead of the usual string here.

verified in sources


Rails Rspec instruction unclear and not working

Description
rspec-autotest version: latest
Rails Version: 5.1.4
I have to update .autotest file to the following, in order to autotest working with Rails:
require "autotest/rails_rspec"

It was not picked up automatically, as stated in the README.md.

This shouldn't be necessary, did you add the extra gem as specified in the readme/


Conditional dependencies works only when specified in requirements.yaml and not in charts.yaml

Output of helm version:
version.BuildInfo{Version:"v3.2.4", GitCommit:"0ad800ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState:"dirty", GoVersion:"go1.14.3"}
Output of kubectl version:
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.4", GitCommit:"c96aede7b5205121079932896c4ad89bb93260af", GitTreeState:"clean", BuildDate:"2020-06-18T02:57:24Z", GoVersion:"go1.14.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.3", GitCommit:"2e7996e3e2712684bc73f0dec0200d64eec7fe40", GitTreeState:"clean", BuildDate:"2020-05-20T12:43:34Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
minikube
I tried to use conditional helm dependency and it seems that it works only if dependency is specified in requirements.yaml file.
If I move it to charts.yaml it's ignored (so dependency is always installed)
A lot of documentation not directly, but suggests that dependencies can be specified in chart.yaml file
For example here: https://helm.sh/docs/helm/helm_dependency/
But conditional expression seems to not work in such case.
Is it a bug and if so. Is it in helm or rather documentation could be improved?

To be more specific.
This is my values.yaml
mysql:
nameOverride: db
root:
password: xxx
enabled: false
and requirements.yaml
dependencies:

name: mysql
condition: mysql.enabled
alias: helmmysql
version: ~6.14.4
repository: https://charts.bitnami.com/bitnami

In such setup all works (dependency is not installed as value of mysql.enabled is false)
If I move dependencies section to charts.yaml dependency is installed always.

@pjastrzabek I wasn't able to reproduce. I used the same values that you provided, but maybe the problem is a yaml formatting issue (it's hard to tell without the formatting in your github post).
I have a Chart.yaml with the following:
apiVersion: v2
name: my-test
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: 1.16.0
dependencies:
  - name: mysql
    condition: mysql.enabled
    alias: helmmysql
    version: ~6.14.4
    repository: https://charts.bitnami.com/bitnami

and the values.yaml file with this, where i turn on/off the mysql.enabled
replicaCount: 1

image:
  repository: nginx
  pullPolicy: IfNotPresent
  tag: ""

mysql:
  enabled: false
  nameOverride: db
  root:
    password: xxx

and I run helm install example my-test and in between disabling/enabling the dependency I delete the release: helm delete example

I prepared sample project here
https://github.com/pjastrzabek/helm_dependency_bug
overriding from command line works as expected (--set mysql.enabled=false) so for whatever reason values in values.yaml
seems to be ignored.
According to doc. if expression is not found it's being ignored so I guess this is what happens..
My helm version is
version.BuildInfo{Version:"v3.2.4", GitCommit:"0ad800ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState:"dirty", GoVersion:"go1.14.3"}

works for me
$ git clone https://github.com/pjastrzabek/helm_dependency_bug.git
$ helm dep update helm_dependency_bug/
$ helm install example helm_dependency_bug
$ kubectl get pods
NAME                                         READY   STATUS    RESTARTS   AGE
example-helmdependencybug-65bc55bfdb-mdgrm   1/1     Running   0          7s
$ helm delete example
$ kubectl get pods
No resources found in default namespace.

edit the values.yaml file to set mysql.enabled to true
$ helm install example helm_dependency_bug
$ kubectl get pods
NAME                                         READY   STATUS    RESTARTS   AGE
example-helmdependencybug-65bc55bfdb-d8fhs   0/1     Running   0          5s
example-mysql-master-0                       0/1     Running   0          5s
example-mysql-slave-0                        0/1     Running   0          5s

looking at the example you gave, I saw that in the Chart.yaml file, you've added
mysql:
  enabled: false

this isn't going to have any effect. The value you need to change is in values.yaml

As described in readme I started verifying whether dependencies are being used by this command:
helm upgrade --install --debug --dry-run goodly-guppy  -v 3 ./  | less
With a --debug flag mysql services and deployments are being rendered regardless of mysql.enabled value.
When I remove --debug flag they disappear.
When I try to install package as you do, now I cannot reproduce the issue.
I believe the issue existed originally and only after that I switched to using --dry-run and --debug flags.
But now all seems to work (helm 3.3.1)
Thank you @jeff-knurek for reply. Closing the issue.


[Android] Added backface-visibility support for android

Motivation: Style backfaceVisibility was so far supported only on iOS
Test: I built react-native-flip-view and ensured that the back face of a rotated View is not visible anymore when its "backfaceVisibility" style is set to "hidden"
Implementation Details: Out of the box, Android doesn't support hiding a view's back face. The developed solution therefore takes into account the view's rotation. If its X or Y rotation is such that the back face is visible, it checks the backfaceVisibility setting. If it's set to "hidden", it sets the view's opacity to 0 -- otherwise it is set to the user defined value. Furthermore, this check is run whenever the view's opacity, transform matrix or backfaceVisibility changes.

Before:

After:

@mkonicek would you mind taking a look at this pull request? It's been a while since the last commit was reviewed.

@kmagiera I think you were interested in reviewing this?

It's been a while since the last commit was reviewed and the labels show this pull request needs review. Based on the blame information for the files in this pull request we identified @jesseruder as a potential reviewer. Could you take a look please or cc someone with more context?

any news?

any updates?

This would be awesome to get in.

Sorry about the delay! @foghina do you have any time to review? If not I'll review :)

Can't we use View.Invisible instead of opacity? Then we don't need to remember the last explicitly set value etc.

Hey, sorry we didn't get to review this faster. It looks like this PR has been abandoned though because it's been over a month without an author-response. I'm going to close this pull request for now, but the functionality does look pretty cool so it would be nice to have it in and if you are still working on it then please feel free to reopen it.

Any updates on this?

A PR for backface-visibility is here #15970!


Generated SPIRV code fails validation with -O3

Hi,
the generated SPIRV code for this slang shader fails vulkan validation:
struct Foo
{
    uint64_t address;

    int load() {
        return *((int *)(address));
    }
};

struct Bar {
    Foo foo;
    float3x4 baz; // removing this changes the error message
};

uniform StructuredBuffer<Bar> bar;
uniform RWStructuredBuffer<int> out;

[shader("compute")]
[numthreads(1, 1, 1)]
void computeMain()
{
    out[0] = bar[0].foo.load();
}

with this error message:
error: line 124: Expected Constituent type to be equal to the corresponding member type of Result Type struct
  %72 = OpCompositeConstruct %Bar %48 %71

when compiling it using slangc 2024.1.5 with the command line slangc -entry computeMain -stage compute -target spirv -emit-spirv-directly -O3. Validation was done using spirv-val from the Vulkan SDK 1.3.280.
Using -O1 instead of -O3 generates code that passes validation. -O2 still fails validation.
As I am not proficient with SPIRV assembly, I can't really tell if the assembly code is correct or not, so I also can't tell who is to blame here - slangc or the validation.
So can you have a look into the issue? Thanks!

Not sure if it is relevant, but the error message differs when removing baz from the struct:
Result type (OpTypeStruct) does not match the type that results from indexing into the composite (OpTypeStruct).
  %39 = OpCompositeExtract %Foo %36 0

If -O0 passes validation but -O3 fails, then this is a spirv-opt bug and should be filed in the official spirv-tools repo. Please attach the spirv generated with -O0 in that bug, and include the command line to run spirv-opt that can reproduce the crash in spirv-opt.


Allow showing different timeranges on a single page

This can be useful in a dashboard when you want to
see previous trends for a specific metric.
Intervals can be specified in the config file.

will reopen to my main branch


Add 1.9 to tests

Codecov Report

Merging #240 (8d51d1f) into main (16229cb) will increase coverage by 0.02%.
The diff coverage is 50.00%.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
@@            Coverage Diff             @@
##             main     #240      +/-   ##
==========================================
+ Coverage   95.63%   95.65%   +0.02%
==========================================
  Files          33       33
  Lines        1191     1197       +6
==========================================
+ Hits         1139     1145       +6
  Misses         52       52

Impacted Files
Coverage Δ

src/alg_utils.jl
84.21% <50.00%> (ø)

... and 6 files with indirect coverage changes
:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Support multiple NGINX IC App installations per TC

Towards https://github.com/giantswarm/giantswarm/issues/9060

Other question. We forced before to run kube-system namespace because cert-manager was only generating certs on that namespace. Is this any more a restriction?

We forced before to run (nginx in) kube-system namespace because cert-manager was only generating certs on that namespace.

It could be that cert-manager is a limiting factor.
Another one for sure is use of system-cluster-critical priority class in nginx Deployment. As name suggests and as enforced by pod priority admission plugin, only Pods running in kube-system namespace can reference that priority class. (found related discussion in https://github.com/kubernetes/kubernetes/issues/78383)
We're not eliminating that nginx IC App constraint with this PR/story.
Haven't heard any complaints yet from customers/SEs that it's a problem. If you know better, please file a ticket so we can deal with that aspect as well.
Until then, yes, all of the nginx app installations will still have to be deployed in kube-system namespace.
At least happa enforces it for UI installations. We may have to do a validating webhook to enforce it for other paths (e.g. more and more commonly used nginx infra management as code, via CP k8s API). Will check if this validation is not already there and if not create a ticket for supporting it.
Thanks for the reminder about this constraint!


Release 1.8.0

Release checklist:

[x] Update the Roadmap calling out shipped features
[x] Create and update a Milestone for the release

[x] Assign this task
[x] Assign all the shipped roadmap Issues
[x] Assign the relevant recently closed Isssues

Code changes:

[x] Create a release branch 'release-x.y.z': git checkout -b release-1.8.0
[x] Create a temporary tag git tag v1.8.0 && git push opensource --tags
[x] Create a New Draft GitHub Release, and generate the automated changelog (for new contributors)
[ ] Update the release version in package.json, and npm i
[ ] Update in-app News src/apps/news/news.data.tsx
[ ] Update the in-app News version number
[ ] Update the readme with the new release
[ ] Copy the highlights to the docs/changelog.md

Release:

[ ] merge onto main
[ ] verify deployment on Vercel
[ ] verify container on GitHub Packages
create a GitHub release

[ ] name it 'v1.8.0'
[ ] copy the release notes and link appropriate artifacts

Announce:

[ ] Discord announcement
[ ] Twitter announcement

Links
Milestone:
Former release task:
GitHub release:
Artifacts Generation

The following is my opensource application

paste README.md

I am announcing a new version, 1.7.0. The following were the announcements for 1.6.0. Discord announcement, GitHub Release, in-app news.data.tsx, changelog.md.

paste the former: discord announcement, GitHub release, news.data.tsx, changelog.md

The following is the new data I have for 1.7.0

paste the link to the milestone (closed) and each individual issue (content will be downloaded)
paste the git changelog  git log v1.6.0..v1.7.0 | clip

news.data.TSX
I need the following from you:

1. a table summarizing all the new features in 1.8.0 (description, significance, usefulness, do not link the commit, but have the issue number), which will be used for the artifacts later
2. after the table score each feature from a user impact and magnitude point of view
3. Improve the table, in decreasing order of importance for features, fixing any detail that's missing, in particular check if there are commits of significance from a user or developer point of view, which are not contained in the table
4. I want you then to update the news.data.tsx for the new release

GitHub release
Now paste the former release (or 1.5.0 which was accurate and great), including the new contributors and
some stats (# of commits, etc.), and roll it for the new release.
Discord announcement
Can you generate my 1.8.0 big-AGI discord announcement from the GitHub Release announcement, and the in-app News?

Release notes additions:

More: fixed keyboard shortcuts on Mac

Milestone:

In-App News:

GitHub Release

Discord message


Desktop Library | Clicking, Input, and Clearing

Pull Request Test Coverage Report for Build 173

24 of 24 (100.0%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 100.0%

Totals

Change from base Build 166:
0.0%

Covered Lines:
535

Relevant Lines:
535

💛  - Coveralls


Chore/feedback implementation

What does this PR do?

Implementation of defense feedback.

Description of Task to be completed?

Google sign in
Unit and server tests
Create a production webpack.
Fix all bug.
Remove dead codes
Message notifications
Expansion of message board to take the remaining sreen boarder.
Update readme with very good mark down implementation

Screenshots?

Changes Unknown when pulling 09837e08cc92993b8d2d78ebf5037155ec5b928c on chore/feedback-implementation into ** on staging**.

Changes Unknown when pulling 09837e08cc92993b8d2d78ebf5037155ec5b928c on chore/feedback-implementation into ** on staging**.

Changes Unknown when pulling 698feb42aa11a68dcc096dece69702299900412f on chore/feedback-implementation into ** on staging**.

Changes Unknown when pulling f9a1b26a7936fb0e6f15997b186b0d6267f14049 on chore/feedback-implementation into ** on staging**.

Changes Unknown when pulling ae8fe143961a47a21252e3e3bef7e78477911777 on chore/feedback-implementation into ** on staging**.

Changes Unknown when pulling 3061a04fe21c3a53ba43519704c8557cfded10a4 on chore/feedback-implementation into ** on staging**.


Public CI?

Is there a public CI for this project?

This is the CI framework that is used for the virtio-win drivers: https://github.com/hck-ci
It runs MS WHQL tests for the drivers in the project. The results of the CI run can be seen in the PR status.
Best regards,
Yan.


SaveFileDialog does not open under Linux

Hi,
I have following code in view model. On windows it work flawlessly, however when publish app to Ubuntu, it does not appear in any shape or form.
No log messages, no exceptions. just hangs on await. Modality of window is not applied, so after hanging I can work with app.
public ReactiveCommand<Unit, Unit> SetSavePathCommand => ReactiveCommand.CreateFromTask(GetSavePath);
        private async Task GetSavePath()         {             Log.ForContext<ExportViewModel>().Debug("Creating savedialog");             var dialog = new SaveFileDialog();             dialog.DefaultExtension = "csv";             dialog.InitialFileName = "export";             Log.ForContext<ExportViewModel>().Debug("Opening savedialog");             SelectedPath = await dialog.ShowAsync(MainWindow.I);             Log.ForContext<ExportViewModel>().Debug("Closed savedialog");             ValidPath = !string.IsNullOrWhiteSpace(SelectedPath);         }
What am I doing wrong? Is there better way?

Devel on Win10, dotnet core 2.2
Runtime on virtualized Ubuntu 19.04 with Gnome. (all defaults, no system modifications from my side). App is published as self-containing

Thank you for your time.
PS: Please excuse static on to MainWindow, it is PoC. MainWindow.I is filled in constructor of MainWindow with latest instance. I am creating only one MainWindow.

Probably something wrong with GTK interop. We are currently working on a managed file dialog implementation that won't be broken with some random changes in GTK and random distro-specific patches

All right. Is there any way how to debug this behavior on my virtual?
Also user target machine is Mac, so that brings question if it will work under osx. Unfortunately I do not have mac on my own, so cannot check.
What do you think?

Currently we have "freedesktop" file dialog (in master) and managed file dialog (in stable) as alternatives.


[swiftSyntax] Fix issue where swiftc was not found when swiftSyntax is build via Xcode

swiftSyntax finds swiftc based on the directory layout of the build folder. However, that layout is different if swiftSyntax is built via Xcode than if it's built with Ninja.
For Ninja:
- bin/
  - swiftc
- lib/
  - swift/
    - ${target}/
      - libswiftSwiftSyntax.[dylib|so]

For Xcode:
- bin/
  - swiftc
- lib/
  - swift/
    - macosx/
      - x86_64/
        - libswiftSwiftSyntax.[dylib|so]

Allow swiftSyntax to find swiftc by traversing up to the lib folder and then moving to bin/ instead of hardcoding the nesting level of libswiftSwiftSyntax.dylib inside lib.

@swift-ci Please smoke test

This is definitely an improvement, thanks!

@swift-ci Please smoke test and merge

Hmm, is there a reason to not try to make the layout uniform across the two builds?  It seems that it only complicates things to have the different layouts.  Making the code more robust anyways is probably a good idea.

@compnerd I think this is the correct answer -- this library is going to be somewhere under lib/ on all platforms, so walking up to lib/ and then to bin/ seems like a good way to support all layouts.
I agree that the layouts should match across platforms, but that's a more invasive change.

@swift-ci Please smoke test and merge

@harlanhaskins - also would be interesting to consider windows :-)

Sorry @ahoppen about causing the conflicts.  Should be relatively easy to get these changes moved on top of the changes that I had.

@compnerd Ah, yes! Apologies -- I am admittedly entirely uninformed of Windows library structure. What does the layout currently look like on Windows?

@swift-ci Please smoke test


Fix a number of code style issues found by various ESLint rules, to make it easier to switch from JSHint to ESLint

I've been looking into switching to ESLint, which I mentioned on IRC about a year ago and have finally had time to actually do now, since it's got a number of benefits compared to JSHint[1]. Among those are:
rules that can help find subtle bugs (e.g. PR #7881), a lot more (fine-grained) options, the ability to enforce larger parts of the style guide, more modern and thus easier to work with. (Also, locally gulp lint actually seems to run ~25% quicker when using ESLint instead of JSHint.)
In order to be able to make the switch, and to enable a decent amount of rules from the start, I figured that one big PR that both changes the linter and fixes various new linting failures would be unnecessarily big and thus time consuming to review.
Hence I'm submitting this PR which addresses a bunch of linting issue found by ESLint first, to make the PR that actually changes the linter somewhat smaller and simpler to review. (I'm hoping to have time to finish it up, and submit the actual ESLint PR this weekend.)
@timvandermeij Since you very graciously offered to help with reviewing, in https://github.com/mozilla/pdf.js/pull/7881#issuecomment-266449803, I'm assigning this to you :-)

[1] Looking at http://jshint.com/docs/options/, it seems that some of the JSHint rules that we depend on is (or will be) removed in upcoming versions, so we wouldn't be able to upgrade without loosing lint coverage.

/botio test

/botio-linux test

/botio-linux preview

Nice work! I like the clean-up and that this is separated from the actual ESLint switch.


Move src/bin/main.rs -> src/main.rs

With the old name, cargo install would install a binary called main. Now, cargo will install a binary named genfut.

Alternatively, if you don't like to have the file directly in src, it should be called src/bin/genfut.rs.

Thanks for the PR


fix: broken scripts

fixes #4

Install-ContainerTools should call Install-*?

all 93 tests are passing as well

Please squash commits

Install-ContainerTools should call Install-*?

The Install-ContainerTools command does the most basic: (1) Uninstall the tools (2) Download the files (3) "Install" the tool.
This should be a quick setup. For more control, the user should use the Install-* commands. For example, if they want to register and start the containerd, they can't do that with Install-ContainerTools. They'll have to use Install-Containerd

@TinaMor does this mean Install-ContainerTools will not register the service? Can we add a switch to provide a Register-Service option


Configurable index path for production build

Is your feature request related to a problem? Please describe.
Not particularly no, it's more like a "nice to have" based on my previous experiences with vue-cli. With Laravel and Vue 2 I always used the basic structure outlined in Evan You's example Laravel application using vue-cli, see vue.config.js.
I can't see a way to get the same style build (i.e., separate output paths for _assets/ and index.html) with vite.config.js.
Describe the solution you'd like
I'm currently using this workaround deploy script in package.json:
"scripts": {
    "dev": "vite",
    "build": "vite build",
    "deploy": "rm -rf ../public/{_assets,favicon.ico} && mv ./dist/favicon.ico ../public && mv ./dist/_assets ../public/_assets && mv ./dist/index.html ../resources/views/app.blade.php && rm -rf ./dist"
},

It feels... hacky, and will probably need to be modified heavily as projects grow. An optional outputDir and indexPath setting in vite.config.js would clean this up, however I'm sure you guys had your reasons for omitting them. Perhaps someone could shed some light on a better way to go about this type of build? Or maybe I'm totally missing something and should adopt a new application structure.
I looked for an appropriate forum for this question but couldn't seem to find it, is https://forum.vuejs.org/ preferred for general Vite related questions? If so I am happy to move this thread there.

Closing as I found this.

解决吗，indexPath 在 vite.config.js 里面怎么配置

这么长时间了，vite还是不行啊


fix: width variable

Fixes Issue
**My PR closes #327 **
#327
👨💻 Changes proposed(What did you do ?)
-changed the width variable in css
✔ Check List (Check all the applicable boxes)

[x] My code follows the code style of this project.
[x] This PR does not contain plagiarized content.
[x] The title and description of the PR is clear and explains the approach.

Note to reviewers

📷 Screenshots

:tada: This PR is included in version 2.22.3 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Tracing window is never visible in Chrome

This issue pertains to the following package(s):

[ ] GraphQL Playground - Electron App
[ ] GraphQL Playground HTML
[x] GraphQL Playground
[ ] GraphQL Playground Express Middleware
[ ] GraphQL Playground Hapi Middleware
[ ] GraphQL Playground Koa Middleware
[ ] GraphQL Playground Lambda Middleware

What OS and OS version are you experiencing the issue(s) on?
Chrome Version 75.0.3770.90 (Official Build) (64-bit)
Mac
What version of graphql-playground(-electron/-middleware) are you experiencing the issue(s) on?
All versions 1.6.7 and later. Looking at the diff between those versions didn't give me too much insight, but I am not particularly familiar with the source.
What is the expected behavior?

What is the actual behavior?

What steps may we take to reproduce the behavior?
Open the most recent version in the most recent version of Chrome on Mac.

This happens on any Chromium based browser, had the same issue in Brave.

Bopping into dev tools, I was able to fix it by giving the element that had class .cRrmDs a min-height: 0.

Removing this line fixes it.
https://github.com/prisma/graphql-playground/blob/master/packages/graphql-playground-react/src/components/Playground/Results.tsx#L82

should we just remove this line?

I believe that will at least fix this issue fine, but there are still other height/scrolling issues with the tracing div. I ended up using version 1.7.10 which didn't have most of these issues.


update what gets scanned

https://github.com/MicrosoftDocs/windows-powershell-docs/issues/1607

Docs Build status updates of commit 8e238ed:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docset/windows/configci/New-CIPolicy.md
:white_check_mark:Succeeded

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

@VLG17 Please change the target branch of the PR from live to master to continue with the review.

@dariomws @get-itips @tseward
Peer review needed for this PR. Thanks.

Docs Build status updates of commit f5c45cb:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docset/windows/configci/New-CIPolicy.md
:white_check_mark:Succeeded

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


The possibility of partnership with the Avalonia project

It would be great for the community if a partnership happens, as Avalonia lacks an Accelerated Hardware API (OpenGL).
Mainly for OpenGL targets like Android, IOS, MacOs, Linux, WASM (WebAssembly)
https://github.com/AvaloniaUI/Avalonia/issues/1387#issuecomment-381389726

Feel free to use bgfx...
There is also alternative to nanovg based on bgfx:
https://github.com/jdryg/vg-renderer#vg-renderer


FD-005.2 Search component

Description:

Create a search field and build functionality
we want our users to be able to search by first name and last name and also by job title/profession

FIgma Link

Hi, I would like to start the search component.

Yes, I’m still working on it.
On Friday, September 1, 2023, Sydnee Sampson @.***>
wrote:

hey @cworthen https://github.com/cworthen can you work on this issue
still?
—
Reply to this email directly, view it on GitHub
https://github.com/Young-N-Ambitious/yna_frontend/issues/111#issuecomment-1703208518,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AD25CBWMUAKQVDB4SBKVW3DXYIXBPANCNFSM6AAAAAAY757BAA
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Candace Worthen

Side note,  since the member page currently looks like this and needs some base styling applied, I can add the styling in this ticket.

reference this issue if you will work on the header too @cworthen

Hey Team, here's the pull request for this issue.


Fix KeyValueConfigStore implicitly masking errors in the get method

Actual behavior

The KeyValueConfigStore currently attempts to fetch config data using one or more keys. If there is an error fetching a specific key, the error is ignored and an empty string value is returned instead without giving any indication to the user that an error occurred. This type of behavior is unhealthy UX for any user of these tools.
To Reproduce

Try to use any store that extends the key-value config store and induce a failure to fetch a specific key. See that the error is caught and ignored.
Culprit section of code:
  const kvPromises = keys.map(async (key) => {
      try {
        const value = await this.getByKey(key);
        if (!value) {
          throw new Error(`key ${key} has no value at ${this.constructor.name}`);
        }
        return { key, value };
      } catch (error) {
       // Do something with the error here
        return { key, value: '' };
      }
    });

Expected behavior

The error should be somehow displayed to the user or even cause a runtime error if the user wants that specific behavior.

Can i do this issue

Hello @Aman1919,
We're thrilled to see your eagerness to tackle this issue! Your interest is much appreciated. However, we currently need to conduct an internal discussion within our team to determine the best approach for this. Please rest assured that we'll prioritize this matter and endeavor to reach a decision as quickly as possible.
In the meantime, if you have any questions or need any assistance, feel free to ask. We value your contribution and look forward to working together to resolve this issue!
Thank you for your patience.

Hey @RichardAkman , could you please assign me this issue if your team is done with the discussion?


Unknown user does not behave consistently

Commit 8475da56da73467d0c848963f660f8086e66bad8 fixed the issues where the browser would not always prompt for certificates however if the user is unknown this does not always display correctly:

Tagging @bryanh1969 for awareness

Closing - I realized I had the wrong code version and this was on the UI with all the legacy packages pulled. Not a problem in production version of the code


Added source installation of php7-memcached to the image

This is needed while this https://github.com/alpinelinux/aports/pull/286 is waiting to go through and it's waiting for this upstream issue https://github.com/php-memcached-dev/php-memcached/issues/225

Upstream PR went through. Updated this PR accordingly. Merging.


remove support go 1.6

cloud.google.com/go has stopped supporting go 1.8 and earlier. We can now use context.

Maybe we can rollback on subtests removed for 1.6 support in https://github.com/firebase/firebase-admin-go/pull/120

Looks like a couple of errors were made when merging against the dev. Should be pretty straightforward to fix.


Missing top frame + context menu

I've 2 questions regarding the toolbar. Is it a known issue that the top frame is not drawn?
It happens on both examples

Also I was wondering if there is a way to emulate the right click context menu we usually have with native Windows frames.

the top frame is not drawn

Yes, if you want to get rid of the title bar provided by Windows, the top frame will get lost at the same time. There is one way I know to bring it back, but it doesn't work with QAbstractNativeEventFilter. I also spent a lot of time to find the solution, but currently no progress have been made, so sad.
You can draw a border line manually, by QPainter (for QWidgets) or Rectangle (for Qt Quick).
If you really want to use the system top frame, you can try the win10-only branch.

if there is a way to emulate the right click context menu

Here's how Firefox does it:
static bool DisplaySystemMenu(HWND hWnd, nsSizeMode sizeMode, bool isRtl,
                              int32_t x, int32_t y) {
  HMENU hMenu = GetSystemMenu(hWnd, FALSE);
  if (hMenu) {
    MENUITEMINFO mii;
    mii.cbSize = sizeof(MENUITEMINFO);
    mii.fMask = MIIM_STATE;
    mii.fType = 0;

    // update the options
    mii.fState = MF_ENABLED;
    SetMenuItemInfo(hMenu, SC_RESTORE, FALSE, &mii);
    SetMenuItemInfo(hMenu, SC_SIZE, FALSE, &mii);
    SetMenuItemInfo(hMenu, SC_MOVE, FALSE, &mii);
    SetMenuItemInfo(hMenu, SC_MAXIMIZE, FALSE, &mii);
    SetMenuItemInfo(hMenu, SC_MINIMIZE, FALSE, &mii);

    mii.fState = MF_GRAYED;
    switch (sizeMode) {
      case nsSizeMode_Fullscreen:
        // intentional fall through
      case nsSizeMode_Maximized:
        SetMenuItemInfo(hMenu, SC_SIZE, FALSE, &mii);
        SetMenuItemInfo(hMenu, SC_MOVE, FALSE, &mii);
        SetMenuItemInfo(hMenu, SC_MAXIMIZE, FALSE, &mii);
        break;
      case nsSizeMode_Minimized:
        SetMenuItemInfo(hMenu, SC_MINIMIZE, FALSE, &mii);
        break;
      case nsSizeMode_Normal:
        SetMenuItemInfo(hMenu, SC_RESTORE, FALSE, &mii);
        break;
      case nsSizeMode_Invalid:
        NS_ASSERTION(false, "Did the argument come from invalid IPC?");
        break;
      default:
        MOZ_ASSERT_UNREACHABLE("Unhnalded nsSizeMode value detected");
        break;
    }
    LPARAM cmd = TrackPopupMenu(
        hMenu,
        (TPM_LEFTBUTTON | TPM_RIGHTBUTTON | TPM_RETURNCMD | TPM_TOPALIGN |
         (isRtl ? TPM_RIGHTALIGN : TPM_LEFTALIGN)),
        x, y, 0, hWnd, nullptr);
    if (cmd) {
      PostMessage(hWnd, WM_SYSCOMMAND, cmd, 0);
      return true;
    }
  }
  return false;
}

Sadlly I'm not familiar with these APIs so I can't tell you more about this.

You can draw a border line manually, by QPainter (for QWidgets) or Rectangle (for Qt Quick).

May I ask how I can query for the currently set border (frame) color?

how I can query for the currently set border (frame) color

DwmGetColorizationColor: https://docs.microsoft.com/en-us/windows/win32/api/dwmapi/nf-dwmapi-dwmgetcolorizationcolor
Read ColorizationColor under HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM

how I can catch the right click event from WinNativeEventFilter:nativeEventFilter()

Sorry I don't know.

how I can catch the right click event from WinNativeEventFilter:nativeEventFilter()

Maybe you can capture mouse events in QWidget/QMainWindow (it's much more easier) and then trigger your displaySystemMenu(). You can make it a static function so you'll be able to call it like this: WinNativeEventFilter::displaySystemMenu().

Is it a known issue that the top frame is not drawn?

You can remove WNEF_WIN10_HAS_WINDOW_FRAME from DEFINES in the .pro file and the whole window frame will be hidden (not only the top frame), that will make the frameless window look less broken. Did you try this before?

You can make it a static function so you'll be able to call it like this: WinNativeEventFilter::displaySystemMenu()

I'll add it in later commits.

You can remove WNEF_WIN10_HAS_WINDOW_FRAME from DEFINES in the .pro file

It has been removed by myself. You can try to replace the #if 1 with #if 0 instead:
https://github.com/wangwenx190/framelesshelper/blob/5087c473f6acf50d12da0c1bb1c57d23e604fd70/winnativeeventfilter.cpp#L186

Do you have time to test the newly introduced function WinNativeEventFilter::displaySystemMenu()?
https://github.com/wangwenx190/framelesshelper/blob/3ffc8fd6812117ee9caac0054b7f6f39c2d47fe7/winnativeeventfilter.h#L133

I tried on my side when you shared the firefox example. I can tell it does display the context menu as expected.
Now if would be nice if we could catch the right click from WinNativeEventFilter and call the context menu on the right HWND maybe the connection could be done in updateQtFrame_internal?

maybe the connection could be done in updateQtFrame_internal?

According to https://docs.microsoft.com/en-us/windows/win32/menurc/wm-contextmenu, it seems we should do this in the WM_CONTEXTMENU block. But it doesn't work:
https://github.com/wangwenx190/framelesshelper/blob/e14f027277e4d33aad69d37d6bef4a2187b5858c/winnativeeventfilter.cpp#L1850
The context menu never show up. Currently don't know why.

case WM_CONTEXTMENU does show up when you press the contextmenu button on your keyboard. That's how I tried displaySystemMenu initially

press the contextmenu button on your keyboard

May I ask what key it is? If it's Alt + Space, the context menu will always show up, before I add the displaySystemMenu function.
But according to Microsoft's docs, the context menu should also show up when the user clicks the right button, but actually it has no effect at all.

May I ask what key it is?

All right, it's Shift + F10

You can remove WNEF_WIN10_HAS_WINDOW_FRAME from DEFINES in the .pro file

It has been removed by myself. You can try to replace the #if 1 with #if 0 instead:
https://github.com/wangwenx190/framelesshelper/blob/5087c473f6acf50d12da0c1bb1c57d23e604fd70/winnativeeventfilter.cpp#L186

Did you try this?

No I've not tried yet. My plan was to draw the border myself, monitor frame color changes and commit this to my qmainwindow example once it's clean

May I ask what key it is?

All right, it's Shift + F10

My plan was to draw the border myself, monitor frame color changes

You can have a look at the win10-only branch:
https://github.com/wangwenx190/framelesshelper/blob/cdab0dff14cf1262a629a50f964f34589a0b8643/qwinwidget.cpp#L581
Hacking into the WM_PAINT message is the only way I know to bring back the top frame, but that solution doesn't work well for QAbstractNativeEventFilter because Qt engineer told me doing this will break the painting mechanism of Qt. There won't be any official support for it. And I don't know how to solve this either.
By the way, how do you monitor frame color changes? The WM_DWMCOLORIZATIONCOLORCHANGED message? I tried to do this before, but the message doesn't come in time so the frame color doesn't change in time. Maybe you have better solution?

commit this to my qmainwindow example once it's clean

That sounds great. I'm looking forward to your code!

May I ask what key it is?

All right, it's Shift + F10

Thanks for your picture. I remember this key. But I'm using a laptop so I don't have this key. Anyway, Shift + F10 can emulate (or simulate? not good at English, sorry) this key.

draw the border myself

And you have to know it's only supported on Windows 10. My code will hide the whole window frame on Windows 7, 8 and 8.1, unconditionally.
Here is the reason:
First we assume the DPI is 96, which means no automatic scalling by Qt or the system. The border line on Win10 is 1px, however, it become 8px on Win7 to Win8.1. The window will look very strange if you still preserve the window frame on Win7 to Win8.1 (you can try it yourself using the win10-only branch, it can be run on Win7 as well). Actually, the border line is in the client area on Win10, but non-client area on older systems.

Thanks for point this out. Then I will probably hide the frame, maybe you should keep the #define then, what do you think?

I prefer hide the window frame totally even on Win10 because that gives you the most consistent appearance on all versions of Windows. And you don't have to draw the top frame manually and monitor the frame color in case it changes.
But honestly speaking, it's a real pain to loose the window frame on Win10. I think you can still continue your original plan to see if it works well. If your solution works, I can improve this repo as well. Just give it a try.

But don't worry, you can switch between the two solutions easily through the #define. This repo supports both solution, only lacks drawing the top frame and monitor the frame color.

As for the DPI problem mentioned in other issues, it's a bug indeed, but it's Qt's own bug, not this repo's, so I won't try to fix it.

Now I just want to figure out how to trigger the context menu from mouse.

It seems we should monitor WM_NCRBUTTONDOWN  see https://codersatellite.com/question-with-identifier-21691352
But I tried and it's never fired, maybe setContextMenuPolicy has to be changed on the widget?

It seems we should monitor WM_NCRBUTTONDOWN see https://codersatellite.com/question-with-identifier-21691352
But I tried and it's never fired, maybe setContextMenuPolicy has to be changed on the widget?

No matter it's setContextMenuPolicy's problem or not, we only need to monitor WM_CONTEXTMENU. According to MS's docs, WM_CONTEXTMENU will be fired when:

Right click on the client area (WM_RBUTTONUP)
Right click on the non-client area (WM_NCRBUTTONUP)
Keyboard (Shift + F10 or the context menu key)

See: https://docs.microsoft.com/en-us/windows/win32/menurc/wm-contextmenu

Don't your code hide the "non client area"? That would expect why we do not receive any mouse click

You can remove WNEF_WIN10_HAS_WINDOW_FRAME from DEFINES in the .pro file

It has been removed by myself. You can try to replace the #if 1 with #if 0 instead:
https://github.com/wangwenx190/framelesshelper/blob/5087c473f6acf50d12da0c1bb1c57d23e604fd70/winnativeeventfilter.cpp#L186

Did you try this?

If I do this, it seems that the top resize region is only 1pixel, very hard to grab.

Don't your code hide the "non client area"? That would expect why we do not receive any mouse click

Actually, the non-client area is covered by the client area, that's what we do in the WM_NCCALCSIZE block. But according to MS's docs, the WM_CONTEXTMENU should also be fired when we click in the client area.
And I tested WM_RBUTTONDOWN, WM_RBUTTONUP, WM_NCRBUTTONDOWN and WM_NCRBUTTONUP, the context menu doesn't show up as before.

If I do this, it seems that the top resize region is only 1pixel, very hard to grab.

I can't reproduce this with the QMainWindow example written by yourself.

It seems we should monitor WM_NCRBUTTONDOWN see https://codersatellite.com/question-with-identifier-21691352

That web page said he/she used WM_NCRBUTTONUP to show the context menu. But you wrote WM_NCRBUTTONDOWN. Is this a typo or something?

I can't reproduce this with the QMainWindow example written by yourself.

https://github.com/wangwenx190/framelesshelper/tree/master/examples/QMainWindow
The resize area is about 8px height (when DPI is 96).

It seems we should monitor WM_NCRBUTTONDOWN see https://codersatellite.com/question-with-identifier-21691352

That web page said he/she used WM_NCRBUTTONUP to show the context menu. But you wrote WM_NCRBUTTONDOWN. Is this a typo or something?

Yes it's a typo sorry

@JulienMaille You can now test the new demo: https://github.com/wangwenx190/framelesshelper/tree/master/examples/Win32Demo

Great! except:
Dragging is laggy when blur is enabled
Resizable toggle doesn work (it's always resizable)
maximize icons is blurry

Thanks for testing it!

Dragging is laggy when blur is enabled

I know this issue and it's a Windows 10 bug, not fixable from my side. I tested this demo in Win7 and Win8.1 few hours ago and the blur effect works perfectly.

Resizable toggle doesn work (it's always resizable)

Does it work if you get rid the window frame? It may not work if you are using the window frame provided by the system, I'll fix it later.

maximize icons is blurry

Not sure about the reason but I think it's not related to the frameless part. Since it's only a simple demo, I'm going to ignore it.

If you want to use the acrylic effect in Win10 for Win32 windows, you can change the following line
https://github.com/wangwenx190/framelesshelper/blob/0debbb890fdbe070ab959da7fd3d058db1fe4d6f/winnativeeventfilter.cpp#L2367
to:
https://github.com/wangwenx190/framelesshelper/blob/0debbb890fdbe070ab959da7fd3d058db1fe4d6f/winnativeeventfilter.cpp#L2371
ACCENT_ENABLE_BLURBEHIND is something like DWM blur, it's not the acrylic effect, but they look pretty similar to each other. The acrylic bug won't be triggered in this mode.

Even if you enabled the blur effect, if you don't set a palette for the window, the blur effect won't be seen. So don't forget it.
https://github.com/wangwenx190/framelesshelper/blob/0debbb890fdbe070ab959da7fd3d058db1fe4d6f/examples/Win32Demo/widget.cpp#L102

Resizable toggle doesn work (it's always resizable)

Fixed in latest commit. A helper function was introduced in that commit, but don't use it for frameless windows, it's designed for normal windows only.

Resizable toggle doesn work (it's always resizable)

Fixed in latest commit. A helper function was introduced in that commit, but don't use it for frameless windows, it's designed for normal windows only.

New commit uploaded just now. The Win32Demo project is now more robust.

Summary:

Dragging is laggy when blur is enabled

It's a bug of Windows 10 itself, not fixable from my side. Unless you use ACCENT_ENABLE_BLURBEHIND to replace ACCENT_ENABLE_ACRYLICBLURBEHIND.

Resizable toggle doesn work (it's always resizable)

Fixed. The context menu is updated to match the window state (if the window is not resizable, the context menu is a little different).

maximize icons is blurry

Not important and it's ignored by me for now.

If you have time to test the latest Win32Demo project, please let me know if you have any feedback.

Anyway, thanks for your participation!

Resize toggle is fixed.
The "blur" is just transparency, nothing like acrylic blur.
When using the windows frame and disabling resizing

alt+space: shows a context popup with resizing enabled
right-click on top bar: shows a context popup with resizing disabled

Thanks for testing it!

The "blur" is just transparency, nothing like acrylic blur.

I know the reason now. A gradient color needs to be set. Will fix this in later commit.

When using the windows frame and disabling resizing
* alt+space: shows a context popup with resizing enabled

* right-click on top bar: shows a context popup with resizing disabled

I found this issue as well. But currently I don't know how to control the context menu brought up from alt+space yet.

I think you need something like
accentPolicy.AccentFlags = 2;
accentPolicy.GradientColor = (0x80 << 24) | (0x000000 & 0xFFFFFF);
https://stackoverflow.com/questions/32724187/how-do-you-set-the-glass-blend-colour-on-windows-10/41433592#41433592

By the way, when using the "context menu" key on the keyboard. We enter WM_CONTEXT, but later you check mouse position and discard context menu because the mouse is not over the titlebar

I think you need something like
accentPolicy.AccentFlags = 2;
accentPolicy.GradientColor = (0x80 << 24) | (0x000000 & 0xFFFFFF);
https://stackoverflow.com/questions/32724187/how-do-you-set-the-glass-blend-colour-on-windows-10/41433592#41433592

Yes, you are right. I've fixed this already. Just not uploaded yet. I'm still testing it.

By the way, when using the "context menu" key on the keyboard. We enter WM_CONTEXT, but later you check mouse position and discard context menu because the mouse is not over the titlebar

Yes. What's wrong with it?

When using context menu key, I want the context menu to show, whatever the mouse position

When using context menu key, I want the context menu to show, whatever the mouse position

It will show. I use break in that case, which means let Qt handle the event.

@JulienMaille New commit uploaded. The Acrylic effect now works as expected. I tested it on Win7, Win8.1 and Win10, the blur effect works perfectly (despite of the laggy dragging on Win10).

You can use a custom gradient color for the Acrylic effect:
https://github.com/wangwenx190/framelesshelper/blob/226bc52ece48f6057e22c726442decc09af3539b/winnativeeventfilter.h#L147
For this code, it's semi-transparent white by default.

Even if you enabled the blur effect, if you don't set a palette for the window, the blur effect won't be seen. So don't forget it.
https://github.com/wangwenx190/framelesshelper/blob/0debbb890fdbe070ab959da7fd3d058db1fe4d6f/examples/Win32Demo/widget.cpp#L102

It's now done internally, no need to do it yourself.

Resizable toggle doesn work (it's always resizable)

Fixed in latest commit. A helper function was introduced in that commit, but don't use it for frameless windows, it's designed for normal windows only.

The function's internal logic has been changed. You can use it for both normal windows and frameless windows.
This repo is under active developing these days so APIs change very often, sorry for the inconvenience.

Any chance you could temporary switch to classic blur when moving window on win10?

Any chance you could temporary switch to classic blur when moving window on win10?

Sure. Will add it in next commit. But before it, is the Acrylic effect looks normal now?

New commit uploaded. The blur effect on Windows 10 is changed back to the classic blur instead of the broken Acrylic effect. But you have to know it's still different from DWM blur. See the Win32Demo project about how to force enabling the Acrylic effect on Win10.

Any chance you could temporary switch to classic blur when moving window on win10?

Maybe I misunderstood your question. I think the experience won’t be good to do so. The appearance of classic blur and the Acrylic effect is not exactly the same, if you keep switching between them, the window will look quite strange.
The updated Win32Demo project can switch between the classic blur and the Acrylic effect, you can try it and you’ll know what I mean.

The context menu issue is now solved! Checkout the latest code and test the Win32Demo project.

I'm closing this issue because we now have a workaround for the context menu problem. As for the top frame, we are discussing it in another issue already.

Tested on Fedora 32 just now and it works as expected. Some people say this repo has some issues on macOS, but I don't have a mac so I'm not able to test this repo on macOS.

The Win32Demo project has been updated just now. It now has four themed window borders on Win10. Can you test it?

The window may start flickering again when resizing.
The previous solution is to make the client area a little smaller than it should be, the flickering problem doesn't happen anymore indeed, however, it also means the "canvas" we use is smaller than what it should be. After some testing, I found it's causing many issues when I was trying to draw something manually by QPainter (Qt Quick is affected as well). So I commented out the line that reduce the client area. Now the flickering problem comes back but for now I don't know how to solve it without affecting the painting area of Qt yet.

There are small bugs when using blur and custom title bar
Blur is overflowing on the sides

Left frame is visible on launch

Color selection doesn't change anything

Blur is overflowing on the sides

It's not a bug. It's Microsoft's trick to make the resize area outside of a window. The overflowed area is the resize area, it's totally invisible unless you enable the blur effect.

Left frame is visible on launch

The window is not updated in time. You can drag the left edge or right edge to make Qt update the window immediately.

Color selection doesn't change anything

It selects the gradient color used by the Acrylic effect.

Color selection doesn't change anything

It selects the gradient color used by the Acrylic effect.

Ok but the blur effect is still the same grey

Left frame is visible on launch

I can reproduce this issue now. It only happens when your DPI scale level is 100%. It will not happen when your DPI scale level is larger than 100%.
I've fixed it and will upload new code later.

Color selection doesn't change anything

It selects the gradient color used by the Acrylic effect.

Ok but the blur effect is still the same grey

You need to set the alpha channel to a non-zero value.

You can test the latest Win32Demo project now. Despite of the resize area is still inside of the window, its appearance and behavior should be exactly the same with standard windows now.

It's quite nice now. The acrylic brush seems to have RGB channels reversed, don't you think so?

The acrylic brush seems to have RGB channels reversed

Fixed by 8c21be9e64c445bd57f6e03e69da371b4025878e . It now works correctly.
NOTE
Set the alpha channel to 0: the brush color will always be some kind of semi-transparent gray.
Set the alpha channel to 255: the brush color will be totally opaque (except the white color).
You can set the alpha channel to 127 to get the most consistent behavior among all colors.

New commit uploaded. The Win32Demo project should look and behave exactly the same with a standard window now. The resize area is outside of the window and the top frame is not missing. What's more, the flickering problem when resizing is solved without affecting Qt's paint area.
Do you have time to test it?

on first start it show white text on white background
apart from that it is good

on first start it show white text on white background

The initial acrylic brush color was changed to semi-transparent black, it should look better now. Actually, I could calculate the text color based on the background color but I think for a demo program the current solution is enough. Maybe I'll add this kind of function later.

margin above buttons is gibber than native windows

The latest code may fixed this issue.

@JulienMaille Currently I'm working on making win32 windows frameless in QPA: https://codereview.qt-project.org/c/qt/qtbase/+/318852, in this way we can get rid of the title bar and preserve the top frame. Still working in progress, though. We can discuss more details there.

Great idea. I don't see any feedback so far. How can we help?

I don't see any feedback so far

Because I haven't told anybody about this so far, except you.

How can we help?

I need some testers to test this code when it's stable enough. I'll tell you about it when it's ready.

@JulienMaille The decision has been made to move all the code to the QtWinExtras module because it will make the QPA code too complicated.

Makes sense to move it to QtWinExtras, however dropping Win7 support is a bit of shame, considering the work you've already done, and the fact that many users are still using win7

Makes sense to move it to QtWinExtras, however dropping Win7 support is a bit of shame, considering the work you've already done, and the fact that many users are still using win7

I don't want to drop it either, but Qt5 don't accept such big new change now. All new features must go in Qt6. And Qt6 will drop Win7 support, so it's meaningless to support Win7 in my code. It's a shame but I can't change this fact.

Oh you mean they won't backport it to Qt5?
With all the fuss surrounding Digia recent moves, and the fact many developer anticipate that Qt6 will be buggy for at least a couple releases, well, I'm not sure it's going to help your contribution to gain traction.
I don't want to sound harsh, but I believe it's better to keep it here.
Have you thought about opening a thread on their forum, in the showcase section if it still exists? Would be nice to have more developers using it!

Oh you mean they won't backport it to Qt5?

Yes, there won't be any new features for the Qt5 series. All new features must target the 6.x releases. And Qt6 may only support 64 bit Windows 10 (1809 or newer) according to QTBUG-85851 and QTBUG-85855.

I don't want to sound harsh, but I believe it's better to keep it here.

Don't worry, I'll keep maintaining this repo.

Have you thought about opening a thread on their forum, in the showcase section if it still exists? Would be nice to have more developers using it! https://forum.qt.io/category/8/showcase

Thanks, I'll think about this.

I won't drop Win7 support in this repo. What I mean is to drop Win7 support in the new feature of Qt6.

The new work in QtWinExtras: https://codereview.qt-project.org/c/qt/qtwinextras/+/321070


Applying Inter Font Everywhere

To apply the inter font family in the complete project.
Better to add it in index.css or globalstyle.css so that all the project can have it.
Also include the bold version of the font along side it.

I want to work on this under JWOC


[FR] Double clicking tab -> maximise view

Issue Type: Feature Request
Based on Eclipse, when we double click a file tab, we could hide

side panels
bottom console

To focus on one file. (but not zen mode, maybe optionally)
VS Code version: Code 1.52.1 (ea3859d4ba2f3e577a159bc91e3074c5d85c0523, 2020-12-16T16:34:46.910Z)
OS version: Windows_NT x64 6.1.7601

/duplicate of #16927

Sorry for the duplicate, neither VS bug report window, nor bot here showed a another existing one.
Cheers

No problem. Duplicates aren't always easy to find.


Prime Checker Program

💥 Proposal
(A clear and concise description of what the proposal is.)
Have you read the Contributing Guidelines on Pull Requests?
(Write your answer here.)

please assign this to me, i will code it in C++

💥 Proposal
(A clear and concise description of what the proposal is.)
Have you read the Contributing Guidelines on Pull Requests?
(Write your answer here.)

Yes. I have followed them

@snehaa1989 assigned to do prime checker program in c++

@amit14mitra @snehaa1989 Comment on #1372 to get this issue assigned to you.


Need support for MQTT Authentication

I'm using a basic username and password for my MQTT Broker (while it may not be as important), would it be possible to add MQTT Credentials for authentication?
Thanks!

Good idea! See commit 9224489. Give it a go and let me know if it works!
Username/Password auth is only enabled when both MQTT_USER and MQTT_PASSWORD are specified in settings.py
When both MQTT_USER and MQTT_PASSWORD are not specified in settings.py, it sets auth to None (for wide-open setups like mine)
I tested it with mosquitto on my network and it seems to work both with and without auth enabled now.

Works great! Thanks! I started to see meter data flow into my MQTT Broker and then I filled in my serial number hoping to see it broadcast soon. Thanks again for porting this awesome code over to MQTT!


Ensure isOptimisticReport is set and fix issues with optimistic reports getting deleted on reconnect

Details
Fixes an issue where when creating an optimistic report while offline, it is deleted on reconnect if creating the report failed instead of allowing the chat to show the error message.
Fixed Issues
$ https://github.com/Expensify/App/issues/34577
Tests

Log into NewDot on two devices, userA and userB
As userA, go offline and request money from userB
Verify an offline, optimistic request is created
As userB, go online and request money from userA
Verify the money request is successfully created
As userA, go back online
Verify the report fails to create and there is an error message about "a previously existing chat between these users."

QA Steps
Same as Tests
PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

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

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If the PR modifies the form input styles:

[x] I verified that all the inputs inside a form are aligned with each other.
[x] I added Design label so the design team can review the changes.

[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

🚀 Deployed to staging by https://github.com/thienlnam in version: 1.4.43-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

This PR is failing because of issue https://github.com/Expensify/App/issues/36928
The issue is reproducible in: Web
https://github.com/Expensify/App/assets/78819774/3b1c42d7-e3af-4603-a479-2ff7e9a4a72b

🚀 Deployed to production by https://github.com/puneetlath in version: 1.4.43-20 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅