[Websocket] Websocket connection always exit(normal).

Hi, @essen, I'm an emqx developer, we integrated cowboy in emqx to handle the mqtt packets in websocket connection. However, we found some problems when we use websocket behavior in the cowboy.
Here is the code used to resolve the shutdown of the process:
https://github.com/emqx/emqx/blob/master/src/emqx_ws_channel.erl#L346-L349
Why do we not just return {stop, State} instead of sending a {stop, State} msg to self() pid? Because when a websocket mqtt connection is creating and if the connect packet is refused by mqtt broker, the MQTT broker has to send a connack packet which contains error code to mqtt client before the connection pid stopped. So we do a trick that send {stop, State} msg to websocket pid which aims to delay the pid stop of the websocket connection to resolve this problem.
However, there are still some problems in websocket behavior. For example, In mqtt spec, there is a concept called will msg, In emqx architecture, we implemented this feature in session processes. When emqx_session process receive a exit signal from connection process with abnormal reason, it should send will msg to specified will topic. In the cowboy_websocket module, I found that we can not pass mqtt reason code to websocket pid and let it stop with abnormal reason. I'm stuck in this problem. I hope that I can refactor this code snippets:
https://github.com/ninenines/cowboy/blob/master/src/cowboy_websocket.erl#L617-L619
let the terminate function in handler module return the real reason code, like this
HandlerReasonCode = handler_terminate(State, HandlerState, Reason),
exit(HandlerReasonCode).

I am afraid I do not really understand. For the {stop, State} in particular you can return a list of commands, allowing you to reply then close (either via {reply, [{text|binary, Data}, close], State} or the new {[{text|binary, Data}, close], State}.
The latter part of the ticket seems to be about wanting a better exit signal, I think we have a ticket about that and I wouldn't mind changing it to {shutdown, Reason} but we cannot use what the terminate callback returns as that is ignored. It'd have to be the argument we pass to it.

Thanks for your reply, what about add one case in handler_call function of the cowboy_websocket module like this {stop, HandlerState2, Reason} ?

Again I do not understand the purpose. I need to understand what you're trying to do before discussing any interface changes.

Sorry for my vague description, I want to let the websocket process exit with the reason which is not normal, and let the linked process to get the abnormal exit signal. Let me show you the code
https://github.com/emqx/emqx/blob/master/src/emqx_session.erl#L618-L647

And this exit reason is different from the Websocket close code I assume?

Yes, because we use websocket to wrap mqtt packet, the reason should be consistent with the reason defined in the mqtt protocol.

OK makes sense. Then I guess we need a new command to set the exit reason so that it becomes {shutdown, Reason} instead of normal, for the cases where it exits normally.

Yes.:) Indeed we need it.

You're in luck! Done in d52e84bdd97b93d7d9cea827de57bd4a0edea9a8 just in time for Cowboy 2.7. Closing, thanks!

Haha, thanks, essen !

When will cowboy 2.7 be released ?


Release 0.13.1

/test-all
/test-ipv6-all
/test-ipv6-only-all
/test-whole-conformance

Codecov Report

:exclamation: No coverage uploaded for pull request base (release-0.13@90b1cc7). Click here to learn what that means.
The diff coverage is n/a.

@@               Coverage Diff               @@
##             release-0.13    #1948   +/-   ##
===============================================
  Coverage                ?   61.10%
===============================================
  Files                   ?      199
  Lines                   ?    17237
  Branches                ?        0
===============================================
  Hits                    ?    10532
  Misses                  ?     5602
  Partials                ?     1103

Flag
Coverage Δ

kind-e2e-tests
50.97% <0.00%> (?)

unit-tests
40.94% <0.00%> (?)

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

I don't think https://github.com/vmware-tanzu/antrea/commit/803893528327a033f334977f8ea9c6ad650161a6 is a good candidate for a bug fix release. It extends the scope of Traceflow and changes the API.
Would you say c07c21e27f5cfbde9ce94429b8635249f738edc3 and 0b3304ce6e8a81a04667facd2ac1529a4eaecd81 are essential bug fixes? The first one is more of an improvement. The second one does look like a good candidate and I can add it.

I think https://github.com/vmware-tanzu/antrea/commit/0b3304ce6e8a81a04667facd2ac1529a4eaecd81 is more important. https://github.com/vmware-tanzu/antrea/commit/c07c21e27f5cfbde9ce94429b8635249f738edc3 can be viewed as an enhancement too.

@jianjuns I added the "antctl trace-packet" fix

/test-all
/test-ipv6-all
/test-ipv6-only-all
/test-whole-conformance

/test-conformance

All the tests have passed, including for cloud-managed services (AKS / EKS / GKE) - will fix the type reported by Quan and merge


Fixed Infinite Loading Screen (Northstar #489)

Previously if a server crashed while the client was in the map loading screen, all clients would be stuck in an infinite loading screen. (This was reproduced by multiple people)
This boots clients back to the menu if the game hasn't loaded within 30 seconds (server crash) and loads the main menu, it doesn't affect the campaign's "continue" feature either.
Video below (some footage sped up by 8x to reduce video size)
https://github.com/R2Northstar/NorthstarMods/assets/122132914/f1e1cc3f-bbd2-408e-9f0f-ef7ef89cf296

Maybe open a dialog when returning to the main menu that tells the user that the loading has timed out

Added an error message for when this happens

My main concern would be what if the loading actually takes more than 30 seconds?
Please also comment your code, scripts are already chaotic the way they are right now

I have no idea what you did there
But it didn't load the main menu ui, only the dialog and .bik file

The current code still works but likely isn't the most optimal, if anyone has an alternative that doesn't use EndSignal (which seems to be causing issues) let me know

I'll take a look tomorrow

Added the comments and uni's suggestions, also added a loop to reduce the chance of a false positive from loading multiple times.

Make sure to click the Resolve button on the conversations where it's applicable so we know that part has been addressed  ^^

I'll take a look tomorrow

@uniboi bump

Figured I should work on this again
@uniboi the problem was the LevelFinishedLoading had to be called before the disconnect, ending the thread so it never actually got to the disconnect
Changed it to LevelShutdown ( as @ASpoonPlaysGames recommended originally) and tested extensively, works (and now prevents the false kick if you happen to join and leave servers at a specific time)
Ready for review

Added ConVar and per Spoon's request added it to modsettings
This also adds a Northstar.Client section to modsettings
This PR now fixes an issue where modsettings cannot take an "int" ConVar

Changed it from an int to a float

I got an odd error while playing with this and I think its related

nslog2023-08-27 12-09-30.txt

indeed it is

I believe its fixed with an "IsConnected()" check I just added, works fine in testing

Also this fix works if the masterserver was to go down while someone was loading for some reason


[WIP] Add internationalization support

Description
First step towards solving #302: add react-intl & configure codebase to support translations.
TODO

[ ] Configure the codebase to support translations

[x] Add react-intl & src/intl/ file structure
[ ] Add react-helmet to set lang HTML attribute depending on route

[ ] Re-work app copy & design to avoid string fragments (which break translations)
[ ] Refactor all app copy into source language file (i.e. src/intl/en.json)

Added react-helmet here: https://github.com/ethereum/eth2.0-deposit/pull/309


Use a config variable to store configuration changes

Please check if the PR fulfills these requirements**

[ ] The commit message follows our guidelines

Where is commit message guidelines?

[ ] Tests for the changes have been added (for bug fixes / features)

Adding resilience so I don't think new test cases need to be formulated.

[ ] Docs have been added / updated (for bug fixes / features)

Context
When using for example the neovim language server client, the contextive language server does not acquire the proper settings sent by the client in the OnStarted handler. However, the settings are passed correctly using the OnDidChangeConfiguration handler.
What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)
This change introduces a scoped variable in the server start function to hold a mutable field for the Contextive path configuration. The configuration variable is initialized with the default path for Contextive definitions introduced in commit 23f9049. If the language configuration does not have a config value, it will use the value from the configuration variable instead. This works the same way as it did previously, but the source is now a parameter of the function.
What is the current behavior? (You can also link to an open issue here)
Currently the configuration initialization does not work correctly with nvim (v0.9.2) language client server. I've spent multiple hours trying to understand the cause for this, but alas I'm empty handed here. There must be something that is not right, maybe it could be an OmniSharp issue too.
Other information:
This work is related to https://github.com/dev-cycles/contextive/issues/33

I have a setup like this for the contextive language server with custom settings for the contextive path:
lspconfig.contextive.setup {
  settings = {
    contextive = {
      path = vim.loop.cwd() .. "/.contextive.yml"
    }
  },
  on_init = function(client)
    if next(client.config.settings) then
      client.notify('workspace/configuration', { settings = client.config.settings })
      client.notify('workspace/didChangeConfiguration', { settings = client.config.settings })
    end
  end
}

The additional client.notify is just to make sure that the notification is sent (This happens automatically on neovim 0.8 onwards). The above configuration does not work with the current contextive language server, but with the changes in the PR this is possible. I'm not sure why this happens and I'm also eager to hear your thoughts on this implementation.

It's quite puzzling to me as to why this would work:
In the getConfig function, this line triggers the LSP's workspace/configuration request from server to client.  The only reason your change could make any difference is if that request was not being handled by the neovim lsp client. However the lsp client specifically says:
settings: Map with language server specific settings. These are returned to the language server if requested via workspace/configuration. Keys are case-sensitive.

One possibility is that the Omnisharp library will not even make the request if the client has not advertised the configuration capability.  I would be interested to see what capabilities the client is advertising.
So something that would help is if you can find a way to enable protocol-level logging of the LSP messages.  I've found that a trace of the LSP messages sent back and forth usually sheds a lot of light on what's going on with these things - including the initialize method which contains the advertised capabilities.
Also odd is that your setting includes:
client.notify('workspace/configuration', { settings = client.config.settings })

But workspace/configuration is not a notification - it's a request sent from server to client.  So the client should be registering a handler for that request, not sending it as a notification.  I suspect that the server is ignoring or erroring on receiving that notification. But is that the 'extra' notify you were referring to?
Further Thoughts
Interestingly, the way the config is making it through with this PR is that you are capturing the value provided in the didChangeConfiguration notification, storing it in a mutable, and then providing it if the getConfig method wasn't able to obtain a value from the workspace/configuration requestion.
However if you think about it, when we get didChangeNotification, we are triggering a reload of the definitions file.  We currently pass in a delegate that calls back to the getConfig method - but if we have the actual value, we could just pass in the value and eliminate the delegate (and mutable) altogether.
I think the reason I didn't do that initially is that an older version of the Omnisharp library didn't make the config settings available properly in the notification, so I had no choice but to use the didChangeConfiguration notification only to trigger a reload of the definitions (not to capture the value), and in the reload get the value by using the workspace/configuration request.
I'll do some testing because if neovim and vscode and omnisharp now all properly work together to provide the value in the didchangeconfiguration notification, then the whole structure can be much simpler - we can just pass the new config value directly to the definitions reloader!
This is a pretty major change, but if it is possible, would be worth it - I should have a chance to look into it in the next day or so.

It's quite puzzling to me as to why this would work:
In the getConfig function, this line triggers the LSP's workspace/configuration request from server to client. The only reason your change could make any difference is if that request was not being handled by the neovim lsp client. However the lsp client specifically says:
settings: Map with language server specific settings. These are returned to the language server if requested via workspace/configuration. Keys are case-sensitive.

One possibility is that the Omnisharp library will not even make the request if the client has not advertised the configuration capability. I would be interested to see what capabilities the client is advertising.

I can print out the capabilities and configuration from the neovim directly.
This is the workspace configuration:
workspace = {
  applyEdit = true,
  configuration = true,
  didChangeWatchedFiles = <table 19>,
  semanticTokens = <table 20>,
  symbol = <table 21>,
  workspaceEdit = <table 22>,
  workspaceFolders = true
}

and these are the capabilities:
capabilities = {
  textDocument = {
    callHierarchy = <table 1>,
    codeAction = <table 2>,
    completion = {
      completionItem = {
        commitCharactersSupport = true,
        deprecatedSupport = true,
        documentationFormat = <table 3>,
        insertReplaceSupport = true,
        insertTextModeSupport = <26>{
          valueSet = { 1, 2 }
        },
        labelDetailsSupport = true,
        preselectSupport = true,
        resolveSupport = <27>{
          properties = { "documentation", "detail", "additionalTextEdits", "sortText", "filterText", "insertText", "textEdit", "insertTextFormat", "insertTextMode" }
        },
        snippetSupport = true,
        tagSupport = <28>{
          valueSet = { 1 }
        }
      },
      completionItemKind = <table 4>,
      completionList = <29>{
        itemDefaults = { "commitCharacters", "editRange", "insertTextFormat", "insertTextMode", "data" }
      },
      contextSupport = true,
      dynamicRegistration = false,
      insertTextMode = 1
    },
    declaration = <table 5>,
    definition = <table 6>,
    documentHighlight = <table 7>,
    documentSymbol = <table 8>,
    hover = <table 9>,
    implementation = <table 10>,
    publishDiagnostics = <table 11>,
    references = <table 12>,
    rename = <table 13>,
    semanticTokens = <table 14>,
    signatureHelp = <table 15>,
    synchronization = <table 16>,
    typeDefinition = <table 17>
  },

Maybe you can see something out of place in that data?

So something that would help is if you can find a way to enable protocol-level logging of the LSP messages. I've found that a trace of the LSP messages sent back and forth usually sheds a lot of light on what's going on with these things - including the initialize method which contains the advertised capabilities.

I can try to enable the debugging for the lsp protocol and paste the logs here.

Also odd is that your setting includes:
client.notify('workspace/configuration', { settings = client.config.settings })

But workspace/configuration is not a notification - it's a request sent from server to client. So the client should be registering a handler for that request, not sending it as a notification. I suspect that the server is ignoring or erroring on receiving that notification. But is that the 'extra' notify you were referring to?

Yes that is the 'extra' I mentioned. I am quite puzzled myself too as why this isn't working. Everything seems to be how it should. I have even ventured to omnisharp source code to understand it better. There is a mention in the microsoft language server extension guide however that the language server should support a situation where workspace is not supported. It is hidden in the example code comments:
// The global settings, used when the `workspace/configuration` request is not supported by the client.
// Please note that this is not the case when using this server with the client provided in this example
// but could happen with other clients.
const defaultSettings: ExampleSettings = { maxNumberOfProblems: 1000 };
let globalSettings: ExampleSettings = defaultSettings;

// Cache the settings of all open documents
let documentSettings: Map<string, Thenable<ExampleSettings>> = new Map();

connection.onDidChangeConfiguration(change => {
  if (hasConfigurationCapability) {
    // Reset all cached document settings
    documentSettings.clear();
  } else {
    globalSettings = <ExampleSettings>(
      (change.settings.languageServerExample || defaultSettings)
    );
  }

  // Revalidate all open text documents
  documents.all().forEach(validateTextDocument);
});

Further Thoughts
Interestingly, the way the config is making it through with this PR is that you are capturing the value provided in the didChangeConfiguration notification, storing it in a mutable, and then providing it if the getConfig method wasn't able to obtain a value from the workspace/configuration requestion.
However if you think about it, when we get didChangeNotification, we are triggering a reload of the definitions file. We currently pass in a delegate that calls back to the getConfig method - but if we have the actual value, we could just pass in the value and eliminate the delegate (and mutable) altogether.
I think the reason I didn't do that initially is that an older version of the Omnisharp library didn't make the config settings available properly in the notification, so I had no choice but to use the didChangeConfiguration notification only to trigger a reload of the definitions (not to capture the value), and in the reload get the value by using the workspace/configuration request.
I'll do some testing because if neovim and vscode and omnisharp now all properly work together to provide the value in the didchangeconfiguration notification, then the whole structure can be much simpler - we can just pass the new config value directly to the definitions reloader!
This is a pretty major change, but if it is possible, would be worth it - I should have a chance to look into it in the next day or so.

Sounds good to me! Yeah initially I was thinking that probably the right way to change this is actually a bigger overhaul on how the configuration is passed forward. Anyways it feels dirty to have a mutable field. 😅

Here is the LSP debug log. It tries to find contextive definitions from a custom path, which is provided with the settings from neovim client.
[INFO][2023-10-22 20:29:13] .../lua/vim/lsp.lua:1875	"exit_handler"	{ {
    _on_attach = <function 1>,
    attached_buffers = { true },
    cancel_request = <function 2>,
    commands = {},
    config = {
      _on_attach = <function 3>,
      autostart = true,
      capabilities = {
        textDocument = {
          callHierarchy = {
            dynamicRegistration = false
          },
          codeAction = {
            codeActionLiteralSupport = {
              codeActionKind = {
                valueSet = { "", "quickfix", "refactor", "refactor.extract", "refactor.inline", "refactor.rewrite", "source", "source.organizeImports" }
              }
            },
            dataSupport = true,
            dynamicRegistration = false,
            isPreferredSupport = true,
            resolveSupport = {
              properties = { "edit" }
            }
          },
          completion = {
            completionItem = {
              commitCharactersSupport = true,
              deprecatedSupport = true,
              documentationFormat = { "markdown", "plaintext" },
              insertReplaceSupport = true,
              insertTextModeSupport = {
                valueSet = { 1, 2 }
              },
              labelDetailsSupport = true,
              preselectSupport = true,
              resolveSupport = {
                properties = { "documentation", "detail", "additionalTextEdits", "sortText", "filterText", "insertText", "textEdit", "insertTextFormat", "insertTextMode" }
              },
              snippetSupport = true,
              tagSupport = {
                valueSet = { 1 }
              }
            },
            completionItemKind = {
              valueSet = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 }
            },
            completionList = {
              itemDefaults = { "commitCharacters", "editRange", "insertTextFormat", "insertTextMode", "data" }
            },
            contextSupport = true,
            dynamicRegistration = false,
            insertTextMode = 1
          },
          declaration = {
            linkSupport = true
          },
          definition = {
            linkSupport = true
          },
          documentHighlight = {
            dynamicRegistration = false
          },
          documentSymbol = {
            dynamicRegistration = false,
            hierarchicalDocumentSymbolSupport = true,
            symbolKind = {
              valueSet = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 }
            }
          },
          hover = {
            contentFormat = { "markdown", "plaintext" },
            dynamicRegistration = false
          },
          implementation = {
            linkSupport = true
          },
          publishDiagnostics = {
            relatedInformation = true,
            tagSupport = {
              valueSet = { 1, 2 }
            }
          },
          references = {
            dynamicRegistration = false
          },
          rename = {
            dynamicRegistration = false,
            prepareSupport = true
          },
          semanticTokens = {
            augmentsSyntaxTokens = true,
            dynamicRegistration = false,
            formats = { "relative" },
            multilineTokenSupport = false,
            overlappingTokenSupport = true,
            requests = {
              full = {
                delta = true
              },
              range = false
            },
            serverCancelSupport = false,
            tokenModifiers = { "declaration", "definition", "readonly", "static", "deprecated", "abstract", "async", "modification", "documentation", "defaultLibrary" },
            tokenTypes = { "namespace", "type", "class", "enum", "interface", "struct", "typeParameter", "parameter", "variable", "property", "enumMember", "event", "function", "method", "macro", "keyword", "modifier", "comment", "string", "number", "regexp", "operator", "decorator" }
          },
          signatureHelp = {
            dynamicRegistration = false,
            signatureInformation = {
              activeParameterSupport = true,
              documentationFormat = { "markdown", "plaintext" },
              parameterInformation = {
                labelOffsetSupport = true
              }
            }
          },
          synchronization = {
            didSave = true,
            dynamicRegistration = false,
            willSave = true,
            willSaveWaitUntil = true
          },
          typeDefinition = {
            linkSupport = true
          }
        },
        window = {
          showDocument = {
            support = true
          },
          showMessage = {
            messageActionItem = {
              additionalPropertiesSupport = false
            }
          },
          workDoneProgress = true
        },
        workspace = {
          applyEdit = true,
          configuration = true,
          didChangeWatchedFiles = {
            dynamicRegistration = false,
            relativePatternSupport = true
          },
          semanticTokens = {
            refreshSupport = true
          },
          symbol = {
            dynamicRegistration = false,
            hierarchicalWorkspaceSymbolSupport = true,
            symbolKind = {
              valueSet = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 }
            }
          },
          workspaceEdit = {
            resourceOperations = { "rename", "create", "delete" }
          },
          workspaceFolders = true
        }
      },
      cmd = { "/Users/erik/bin/contextivels" },
      cmd_cwd = "/Users/erik/git/contextive-demo-go-common",
      flags = {},
      get_language_id = <function 4>,
      handlers = <1>{},
      init_options = {
        AutomaticWorkspaceInit = true
      },
      log_level = 2,
      message_level = 2,
      name = "contextive",
      on_attach = <function 5>,
      on_exit = <function 6>,
      on_init = <function 7>,
      root_dir = "/Users/erik/git/contextive-demo-go-common",
      settings = {
        contextive = {
          path = "/Users/erik/git/contextive-demo-go-common/.contextive.yml"
        }
      },
      workspace_folders = <2>{ {
          name = "/Users/erik/git/contextive-demo-go-common",
          uri = "file:///Users/erik/git/contextive-demo-go-common"
        } },
      <metatable> = <3>{
        __tostring = <function 8>
      }
    },
    handlers = <table 1>,
    id = 1,
    initialized = true,
    is_stopped = <function 9>,
    messages = {
      messages = {},
      name = "contextive",
      progress = {},
      status = {}
    },
    name = "contextive",
    notify = <function 10>,
    offset_encoding = "utf-16",
    request = <function 11>,
    request_sync = <function 12>,
    requests = {},
    rpc = {
      is_closing = <function 13>,
      notify = <function 14>,
      request = <function 15>,
      terminate = <function 16>
    },
    server_capabilities = {
      completionProvider = vim.empty_dict(),
      experimental = vim.empty_dict(),
      hoverProvider = vim.empty_dict(),
      textDocumentSync = {
        change = 1,
        openClose = true,
        save = {
          includeText = true
        }
      },
      workspace = {
        fileOperations = vim.empty_dict(),
        workspaceFolders = {
          changeNotifications = true,
          supported = true
        }
      }
    },
    stop = <function 17>,
    supports_method = <function 18>,
    workspace_did_change_configuration = <function 19>,
    workspace_folders = <table 2>
  } }
[DEBUG][2023-10-22 20:29:13] .../vim/lsp/rpc.lua:284	"rpc.send"	{
  id = 2,
  jsonrpc = "2.0",
  method = "shutdown"
}
[START][2023-10-22 20:29:14] LSP logging initiated
[INFO][2023-10-22 20:29:14] .../vim/lsp/rpc.lua:662	"Starting RPC client"	{
  args = {},
  cmd = "/Users/erik/bin/contextivels",
  extra = {
    cwd = "/Users/erik/git/contextive-demo-go-common"
  }
}
[DEBUG][2023-10-22 20:29:14] .../vim/lsp/rpc.lua:284	"rpc.send"	{
  id = 1,
  jsonrpc = "2.0",
  method = "initialize",
  params = {
    capabilities = {
      textDocument = {
        callHierarchy = {
          dynamicRegistration = false
        },
        codeAction = {
          codeActionLiteralSupport = {
            codeActionKind = {
              valueSet = { "", "quickfix", "refactor", "refactor.extract", "refactor.inline", "refactor.rewrite", "source", "source.organizeImports" }
            }
          },
          dataSupport = true,
          dynamicRegistration = false,
          isPreferredSupport = true,
          resolveSupport = {
            properties = { "edit" }
          }
        },
        completion = {
          completionItem = {
            commitCharactersSupport = true,
            deprecatedSupport = true,
            documentationFormat = { "markdown", "plaintext" },
            insertReplaceSupport = true,
            insertTextModeSupport = {
              valueSet = { 1, 2 }
            },
            labelDetailsSupport = true,
            preselectSupport = true,
            resolveSupport = {
              properties = { "documentation", "detail", "additionalTextEdits", "sortText", "filterText", "insertText", "textEdit", "insertTextFormat", "insertTextMode" }
            },
            snippetSupport = true,
            tagSupport = {
              valueSet = { 1 }
            }
          },
          completionItemKind = {
            valueSet = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 }
          },
          completionList = {
            itemDefaults = { "commitCharacters", "editRange", "insertTextFormat", "insertTextMode", "data" }
          },
          contextSupport = true,
          dynamicRegistration = false,
          insertTextMode = 1
        },
        declaration = {
          linkSupport = true
        },
        definition = {
          linkSupport = true
        },
        documentHighlight = {
          dynamicRegistration = false
        },
        documentSymbol = {
          dynamicRegistration = false,
          hierarchicalDocumentSymbolSupport = true,
          symbolKind = {
            valueSet = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 }
          }
        },
        hover = {
          contentFormat = { "markdown", "plaintext" },
          dynamicRegistration = false
        },
        implementation = {
          linkSupport = true
        },
        publishDiagnostics = {
          relatedInformation = true,
          tagSupport = {
            valueSet = { 1, 2 }
          }
        },
        references = {
          dynamicRegistration = false
        },
        rename = {
          dynamicRegistration = false,
          prepareSupport = true
        },
        semanticTokens = {
          augmentsSyntaxTokens = true,
          dynamicRegistration = false,
          formats = { "relative" },
          multilineTokenSupport = false,
          overlappingTokenSupport = true,
          requests = {
            full = {
              delta = true
            },
            range = false
          },
          serverCancelSupport = false,
          tokenModifiers = { "declaration", "definition", "readonly", "static", "deprecated", "abstract", "async", "modification", "documentation", "defaultLibrary" },
          tokenTypes = { "namespace", "type", "class", "enum", "interface", "struct", "typeParameter", "parameter", "variable", "property", "enumMember", "event", "function", "method", "macro", "keyword", "modifier", "comment", "string", "number", "regexp", "operator", "decorator" }
        },
        signatureHelp = {
          dynamicRegistration = false,
          signatureInformation = {
            activeParameterSupport = true,
            documentationFormat = { "markdown", "plaintext" },
            parameterInformation = {
              labelOffsetSupport = true
            }
          }
        },
        synchronization = {
          didSave = true,
          dynamicRegistration = false,
          willSave = true,
          willSaveWaitUntil = true
        },
        typeDefinition = {
          linkSupport = true
        }
      },
      window = {
        showDocument = {
          support = true
        },
        showMessage = {
          messageActionItem = {
            additionalPropertiesSupport = false
          }
        },
        workDoneProgress = true
      },
      workspace = {
        applyEdit = true,
        configuration = true,
        didChangeWatchedFiles = {
          dynamicRegistration = false,
          relativePatternSupport = true
        },
        semanticTokens = {
          refreshSupport = true
        },
        symbol = {
          dynamicRegistration = false,
          hierarchicalWorkspaceSymbolSupport = true,
          symbolKind = {
            valueSet = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 }
          }
        },
        workspaceEdit = {
          resourceOperations = { "rename", "create", "delete" }
        },
        workspaceFolders = true
      }
    },
    clientInfo = {
      name = "Neovim",
      version = "0.9.2"
    },
    processId = 82064,
    rootPath = "/Users/erik/git/contextive-demo-go-common",
    rootUri = "file:///Users/erik/git/contextive-demo-go-common",
    trace = "off",
    workspaceFolders = { {
        name = "/Users/erik/git/contextive-demo-go-common",
        uri = "file:///Users/erik/git/contextive-demo-go-common"
      } }
  }
}
[DEBUG][2023-10-22 20:29:16] .../vim/lsp/rpc.lua:387	"rpc.receive"	{
  id = 1,
  jsonrpc = "2.0",
  result = {
    capabilities = {
      completionProvider = vim.empty_dict(),
      experimental = vim.empty_dict(),
      hoverProvider = vim.empty_dict(),
      textDocumentSync = {
        change = 1,
        openClose = true,
        save = {
          includeText = true
        }
      },
      workspace = {
        fileOperations = vim.empty_dict(),
        workspaceFolders = {
          changeNotifications = true,
          supported = true
        }
      }
    },
    serverInfo = {
      name = "Contextive.LanguageServer",
      version = "1.10.2"
    }
  }
}
[DEBUG][2023-10-22 20:29:16] .../vim/lsp/rpc.lua:284	"rpc.send"	{
  jsonrpc = "2.0",
  method = "initialized",
  params = vim.empty_dict()
}
[DEBUG][2023-10-22 20:29:16] .../vim/lsp/rpc.lua:284	"rpc.send"	{
  jsonrpc = "2.0",
  method = "workspace/didChangeConfiguration",
  params = {
    settings = {
      contextive = {
        path = "/Users/erik/git/contextive-demo-go-common/.contextive.yml"
      }
    }
  }
}
[DEBUG][2023-10-22 20:29:16] .../vim/lsp/rpc.lua:284	"rpc.send"	{
  jsonrpc = "2.0",
  method = "workspace/configuration",
  params = {
    settings = {
      contextive = {
        path = "/Users/erik/git/contextive-demo-go-common/.contextive.yml"
      }
    }
  }
}
[DEBUG][2023-10-22 20:29:16] .../vim/lsp/rpc.lua:284	"rpc.send"	{
  jsonrpc = "2.0",
  method = "workspace/didChangeConfiguration",
  params = {
    settings = {
      contextive = {
        path = "/Users/erik/git/contextive-demo-go-common/.contextive.yml"
      }
    }
  }
}
[DEBUG][2023-10-22 20:29:16] .../vim/lsp/rpc.lua:284	"rpc.send"	{
  jsonrpc = "2.0",
  method = "workspace/didChangeConfiguration",
  params = {
    settings = {
      contextive = {
        path = "/Users/erik/git/contextive-demo-go-common/.contextive.yml"
      }
    }
  }
}
[INFO][2023-10-22 20:29:16] .../lua/vim/lsp.lua:1344	"LSP[contextive]"	"server_capabilities"	{
  server_capabilities = {
    completionProvider = vim.empty_dict(),
    experimental = vim.empty_dict(),
    hoverProvider = vim.empty_dict(),
    textDocumentSync = {
      change = 1,
      openClose = true,
      save = {
        includeText = true
      }
    },
    workspace = {
      fileOperations = vim.empty_dict(),
      workspaceFolders = {
        changeNotifications = true,
        supported = true
      }
    }
  }
}
[DEBUG][2023-10-22 20:29:16] .../vim/lsp/rpc.lua:284	"rpc.send"	{
  jsonrpc = "2.0",
  method = "textDocument/didOpen",
  params = {
    textDocument = {
      languageId = "go",
      text = 'package sample\n\nfunc Sample() string {\n\treturn "This is a great sample!"\n}\n\n',
      uri = "file:///Users/erik/git/contextive-demo-go-common/sample.go",
      version = 0
    }
  }
}
[DEBUG][2023-10-22 20:29:16] .../vim/lsp/rpc.lua:387	"rpc.receive"	{
  jsonrpc = "2.0",
  method = "window/logMessage",
  params = {
    message = "Starting Contextive.LanguageServer v1.10.2...",
    type = 3
  }
}
[INFO][2023-10-22 20:29:16] ...lsp/handlers.lua:539	"Starting Contextive.LanguageServer v1.10.2..."
[DEBUG][2023-10-22 20:29:16] .../vim/lsp/rpc.lua:387	"rpc.receive"	{
  jsonrpc = "2.0",
  method = "window/logMessage",
  params = {
    message = "Loading contextive from /Users/erik/git/contextive-demo-go-common/.contextive/definitions.yml...",
    type = 3
  }
}
[INFO][2023-10-22 20:29:16] ...lsp/handlers.lua:539	"Loading contextive from /Users/erik/git/contextive-demo-go-common/.contextive/definitions.yml..."
[DEBUG][2023-10-22 20:29:16] .../vim/lsp/rpc.lua:387	"rpc.receive"	{
  jsonrpc = "2.0",
  method = "window/logMessage",
  params = {
    message = "Error loading definitions: Definitions file not found.",
    type = 3
  }
}
[INFO][2023-10-22 20:29:16] ...lsp/handlers.lua:539	"Error loading definitions: Definitions file not found."
[DEBUG][2023-10-22 20:29:16] .../vim/lsp/rpc.lua:387	"rpc.receive"	{
  jsonrpc = "2.0",
  method = "window/showMessage",
  params = {
    message = "Error loading definitions: Definitions file not found.",
    type = 2
  }
}

Thanks for sharing the log - this is very interesting!  I would have expected a rpc.receive with method workspace/configuration but there is none - so for some reason the OmniSharp server has decided not to issue a configuration request.  But this does explain the issue you were having because without that request, you'd never get a response, and as a result you'd experience the issue you found which required you to introduce the mutable for capturing the value from the didChangeConfiguration notification.
I'll review the vscode protocol logs and look for what the differences are prior to that point... probably some subtlety in the initialize request...

Thanks for sharing the log - this is very interesting! I would have expected a rpc.receive with method workspace/configuration but there is none - so for some reason the OmniSharp server has decided not to issue a configuration request. But this does explain the issue you were having because without that request, you'd never get a response, and as a result you'd experience the issue you found which required you to introduce the mutable for capturing the value from the didChangeConfiguration notification.
I'll review the vscode protocol logs and look for what the differences are prior to that point... probably some subtlety in the initialize request...

No problem! Very interesting indeed, and well yeah that explains it on why defining the settings did not work as expected.

Hi @erikjuhani, I've had a chance to dig into this a bit further and I think I see why it's hard to diagnose... I think we're dealing with the intersection of two bugs - one in neovim and one in OmniSharp :rofl:
OmniSharp Bug
The neovim lsp client does not send the DidChangeConfiguration capability - only the Configuration capability.  While in theory this should be sufficient, for some reason the omnisharp server is conflating the Configuration capability and the DidChangeConfiguration capability, and only sending a workspace/configuration request if the client advertised the DidChangeConfiguration capability - it should send the workspace/configuration request as long as the Configuration capability has been advertised.
I'm working through this to confirm, and once I do I'll raise a bug with the OmniSharp library.
NeoVim Bug
While it's technically correct that the nevom lsp client doesn't advertise the capability (because it has no support for monitoring the configuration settings and sending a notification when they are modified), it DOES actually send the DidChangeConfiguration notification after initialisation if there are any settings configured (after 0.8, as you noted above).  This is probably not technically correct in the spec, as the server would be entitled to ignore that notification given that the capability was not advertised, so it really should be advertising the capability.
Solutions
While fixes to upstream of either bug would resolve the situation, there are some potential ways to resolve it from the contextive end:

Migrate to an IDE agnostic config approach, as per your suggestion in #54 - this is probably end-goal, but needs some careful thought for reasons I'll shortly explain on that ticket
Abandon use of the workspace/configuration request, and rely solely on the didChangeConfiguration notification.  This has some pros and cons - pros, it would work for both vscode and neovim, cons are it might limit compatibility with other clients that only support workspace/configuration.  I think I initially adopted workspace/configuration thinking it was more likely to be supported by clients.  While this is the high level approach your PR takes, if we are going to do this I'd prefer to note use the mutable state management and the configGetter delegates and just pass the values directly to the definitions file handling.
Workaround the omnisharp bug by bypassing the convenience methods and directly sending the workspace/configuration request.  This is probably the hackiest but shortest path to getting a version that works until omnisharp resolves their issue.

Given that option 1 is 'end-goal', I'm thinking for now I'll go with option 3 as moving to 1 will involve a pretty big adjustment of the whole config approach, so not much point in doing option 2.
Any thoughts?

Have reported with OmniSharp here: https://github.com/OmniSharp/csharp-language-server-protocol/issues/1101

Closing in favour of #58


Updated ViSR staff

I've updated ViSR staff. Are we categorizing the members based on individual groups?

I've updated ViSR staff. Are we categorizing the members based on individual groups?

AFAIK the current template doesn't support individual groups. I'm guessing that is something that @kmpaul can add if we want? I'd suggest opening up a separate issue if we want to proceed.


[Feature] Allow project renaming directly from navbar

It might be more convinient for me to rename the project directly on the Navbar instead of having it in the properties modal. The modal could have functionalities specific to circuit only thereby improving user experience.
This was a recommendation on my personal preference. Feel free to add your thoughts

its great to have that . can I work on this issue?

@tanmoysrt, could you confirm if this is a valid new feature to be added?


Add passthrough schema and related tests + fix unwrap

Add passthrough and passthroughAsync function inspided by Zod to parse an ObjectSchema keeping extra props.
Hope I get the Types right ;-)

Thanks a lot for this PR! I have looked at the code and think that passthrough should be a method and not a schema, since it does not represent a type. What is your opinion on this?

Hi @fabian-hiller  onestly even I think that passthrough should be a method and initially put in in that directory, but when I looked at your code to take inspiration on how to implement it I initially copied from partial and merge but it doesn't work to use the object() constructor to implement it - Then I look at how you implement optional and others that are in schemas, and it works to me to code passthrough in the same way overriding the parse and using it as a "wrapper" so I implement is in this way, but I don't have any problem to move in the other directory if you prefer.
Sincerely I haven't realized what are the main main difference/choise that guide you to put in one or the other, I only look and "similar" code and put in the same place (I'm lazy)
PS: some more discussion point:

if you prefer other name please let me know I just use the same name of Zod... but open to alternative refactor
do you think that it's correct to implement it as a "wrapper"  and my modification to unwrap or do you prefer other way to implement it?
about this I was even thinking to implement it changing the object() implementation adding another overload with an optional strict: boolean param  before error - but to do it I need to change the implementation of getErrorAndPipe handling 3 params boolean, string, Pipe[] to discriminate...  I don't know if you'll approve/prefer this kind of implementation, maybe the result is more clear because the real natura of passthrough is just an ObjectSchema that keep the extra params, but don't know if you like it...
Or maybe on the same "idea" i can create other 2 function objectWithExtraProps that return ObjectSchema but simply use my parse override to keep props...

This are all the ideas I came up when implementing it, what's you opinions?

Currently, I am leaning towards one method. However, I don't have the time to think it through in more detail at the moment. Maybe it makes sense to move this topic to an issue for now and as soon as I get around to it, I can share my thoughts there. Regarding the name, I'm happy to hear about alternatives. I find passthrough ok but not perfect.

If you create an issue, I would be interested in use cases where passthrough is important and makes sense.

I added passthrough and strip in v0.14.0. Thank you for your contribution!


How Can I Implement Facebook Audince Ads

How Can I Implement Facebook Audience Ads In react native

Please use stackoverflow for general questions
we track issues + things that will result in changes to the code here
Thank you


org.http4s.MessageFailure does not return detailed error message

While using Rho I uncovered a case where json parsing errors are not returned in the message response for all http errors. If there is interest, I'd love to contribute a fix for this!

The toHttpResponse is terse for a reason: anything that contains any information from the request can be used in an XSS attack.  (This design was inherited from Spray, a very long time ago.)  It's a paranoid setting: the risk is much lower when the response is plain text, and it's difficult to exploit.  But we want to err on the side of security by default.
Wanting more verbose errors in the response instead of the logs is not unreasonable.  Maybe we should consider a middleware that intercepts these messages and generates something a bit friendlier?

@rossabaker thanks for looking and giving some feedback!

The toHttpResponse is terse for a reason: anything that contains any information from the request can be used in an XSS attack. (This design was inherited from Spray, a very long time ago.) It's a paranoid setting: the risk is much lower when the response is plain text, and it's difficult to exploit. But we want to err on the side of security by default.
That makes a lot of sense, thanks for explaining that!
Wanting more verbose errors in the response instead of the logs is not unreasonable. Maybe we should consider a middleware that intercepts these messages and generates something a bit friendlier?
I agree some sort of middleware would definitely be nice. The current workaround I'm using involves adding .withServiceErrorHandler then adding a message body to the NonFatal case and throwing an exception with a detailed json parsing error message. I'm not really sure where this interceptor should live so if you give me some pointers I can work on adjusting my current pr to reflect the proposed design. I'm guessing it would get enacted somewhere around here https://github.com/http4s/http4s/blob/main/blaze-server/src/main/scala/org/http4s/blaze/server/Http2NodeStage.scala#L235 ?

Sorry for the slow reply.  I changed jobs and went on vacation, and things got slow.
Yes, that's where exceptions that aren't handled get converted into a message by that particular backend.  (Similar calls exist in all the backends.)  The default service error handler is here.  It should log the entire message, with underlying exception, and then invoke .toHttpResponse for the more paranoidly secure response over the network.
There is also the ErrorAction middleware, which decorates your service.  That f on apply gives you a callback with the request and error to do your own thing, but I don't see how it lets you customize the response.  I think @ChristopherDavenport worked on these since I did, and I would defer to him on the state of the art.

@rossabaker I completely understand, congrats on the job switch and hope you had a relaxing vacation! @ChristopherDavenport any tips/suggestions would be appreciated, I'd love to contribute this to the project.


Search users with name shows unexpected result.

Describe the bug

Incorrect result when querying users
Steps to reproduce

Create four users admin, test, manager, ad
Search users with keyworkds n

Result

Expected behavior

Only shows manager and admin, the name contains key words.
Environment

Walrus version: v0.5.0-rc3

Additional context
Add any other context about the problem here.

Environment

Walrus version: main 7bb79389ab0436969f4c4214e38918ee6c6e9070
UI version: dev-1be55ba

Test Result: pass


Access to the ZBClient instance

I've written a new monitoring package for Zeebe clients and workers: https://github.com/jwulf/zeebe-canaryize.
It relies on an upcoming patch that makes the ZBClient and the ZBWorker event emitters that emit ready and connectionError events.
To use it, you need to pass in the ZBClient / ZBWorker instance to the canaryize function.
What's the best way to integrate this functionality with this package?

For the client, I can do this:
export class WorkflowController {
  constructor(
    @Inject(ZEEBE_CONNECTION_PROVIDER) private readonly zbClient: ZBClient,
    @Inject(WINSTON_MODULE_PROVIDER) private readonly logger: Logger,
  ) {
    canaryize(zbClient, {
      url: ChirpUrl,
      minutes: 5,
    })
  }

The workers are created behind the scenes in the zeebe-server.ts so only there will you gain access to it.


Use phantom on a badly signed https website --> error

Expected behavior
[Describe expected behavior here]
Should open the page even if there is a ssl or https error
Actual behavior
[Describe observed behavior here]
if there is a https it only give an empty page with a status failed
Normaly with phantomjs you can pass --ignore-ssl-errors parameters. Is there a way to do that with pahntomjs-node ? Or could it be done ?
Steps to reproduce the behavior
const instance = await phantom.create();
const page = await instance.createPage();
page.on("onResourceRequested", function(requestData) {});
const status = await page.open(
    "https://www....."
);

console.log("status of page", status)

let  content = await page.property('content');

console.log("content of generated page : ", content)

Environment

OS: FreeBSD
Node version (node -v): 6.14.3
package version: 6.0.3

Have you tried passing that to create()? http://amirraminfar.com/phantomjs-node/#/phantom_obj?id=create

Closing this ticket because there has been no response. We can reopen if needed.

thanks it works perfectly !!!


[TASK] Add test issues automatically added to the QA/DevOps Tasks project

          @yangchiu this issue was not automatically added to the `QA/DevOps Tasks` project. We need to fix this.

Originally posted by @innobead in https://github.com/longhorn/longhorn/issues/7187#issuecomment-1823737094

cc @longhorn/qa


ne: add module

Description
I've added a simple module to place configuration files for the ne text editor
Checklist

[x] Change is backwards compatible.

[x] Code formatted with ./format.

[x] Code tested through nix-shell --pure tests -A run.all.

[x] Test cases updated/added. See example.

[x] Commit messages are formatted like
{component}: {description}

{long description}

See CONTRIBUTING for more information and recent commit messages for examples.

If this PR adds a new module

[x] Added myself as module maintainer. See example.

[x] Added myself and the module files to .github/CODEOWNERS.

Thanks for the contribution, I've added some comments.

Thanks for the corrections, I'm still getting a hang of nix. I've force pushed the corrections. Please look at /tests/modules/programs/ne/passthroughs.nix to see if the added tests are appropriate.

Thanks, looks good! Rebased to master in 8f2342e13a2ddc84ed5053e2bfc393184258c686.


Build fails on OS X Catalina

The error I receive is:
PotreeConverter/PotreeConverter/src/PotreeWriter.cpp:298:20: error: non-const lvalue reference to
      type 'Potree::Point' cannot bind to a temporary of type 'Potree::Point'
                                        writer->write(reader->getPoint());

See https://github.com/potree/PotreeConverter/issues/382#issuecomment-559613216

Hi,
Closing this because PotreeConverer 1.7 is now replaced by a complete rewrite, PotreeConverter 2.0, and the old version will no longer be worked on.
At the moment, there are only windows builds available, though.


Add a surrounder for expect

I think it would be cool to have a simple statement surrounder (PhpStatementSurrounder) for expect.
Meaning you can easily select some code and trigger surround, to surround it with expect.

Added in main branch


Move corpusdir definition to top-level of package (in init.py)

move corpusdir and newarticledir into package init.py, change imports
I mentioned in #38 that a solution like this would be preferred. Let me know if needs any more documentation in the __init__.py. But other than that, this should work without issue.
I really think that corpusdir should be capitalised to be in line with PEP 8, but that kind of style change seems to be out of scope.

This also makes newarticledir behave as corpusdir and will now be linked to the allofplos directory.

Not needed before tutorial session Wed

I'll need to rewrite this to take into account the relative imports.


chore(deps): bump

Applied mkpr on undefined
/tmp/mkpr.sh

:tada: This PR is included in version 1.10.46 :tada:
The release is available on:

v1.10.46
GitHub release
npm package (@latest dist-tag)

Your semantic-release bot :package::rocket:


[IMPROVEMENT] Display help with bindings for summary

Right now the mappings defined in summary.mappings are only available through :h neotest.Config.summary, which is a bit tedious. I was wondering if adding a help message displaying the mappings with a binding on sth like g? is sth you would consider?

I just noticed https://github.com/nvim-neotest/neotest/issues/230, I blame the late hour for missing it..


All charging sessions show the same date

If I look back at previous charging sessions, they all show the same date (of one of the latest, but not the latest session, apparently 🤔).

@Ixam97 I sent you my logfiles yesterday, in which you can see that the different charging sessions have different dates


Ignore phaser text calculation to canvas randomisation

Fixes #610

Reviewer: @sammacbeth

Description:
See #610.
I've ignored for now only 255,0,0,255 pixels and 0,0,0,0 which are a canvas default.
I would normally assign these variables but we are in a very hot path here.
Steps to test this PR:

Visit: https://labs.phaser.io/edit.html?src=src/scenes/ui scene.js&v=3.53.1
See the score is in the wrong position (this might not be in a consistent place due to the random pixels)

After the fix is applied, the score text should be in the top left.
Automated tests:

[ ] Unit tests
[ ] Integration tests

Reviewer Checklist:

[ ] Ensure the PR solves the problem
[ ] Review every line of code
[ ] Ensure the PR does no harm by testing the changes thoroughly
[ ] Get help if you're uncomfortable with any of the above!
[ ] Determine if there are any quick wins that improve the implementation

PR Author Checklist:

[ ] Get advice or leverage existing code
[ ] Agree on technical approach with reviewer (if the changes are nuanced)
[ ] Ensure that there is a testing strategy (and documented non-automated tests)
[ ] Ensure there is a documented monitoring strategy (if necessary)
[ ] Consider systems implications

LGTM, but the privacy grade tests have failed several times in a row, any idea what's going on there?

I think they're just flakey but I can check later.
On Wed, 12 May 2021, 12:28 Sam Macbeth, @.***> wrote:

LGTM, but the privacy grade tests have failed several times in a row, any
idea what's going on there?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/duckduckgo/duckduckgo-privacy-extension/pull/657#issuecomment-839695813,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AACSYLGGNND4KC6IKGA5DCDTNJQ5RANCNFSM44YHZ3YA
.

I'm happy this test failure is unrelated. I'm going to merge as we are.
There probably should be a check into why reddit.com is rated C rather than the expected D.  @Charlie-belmer, @dharb how do these tests run, is there some dynamic element to ToSDR?

I'm not sure about those tests - I think the grade tests have always been a little unreliable, and perhaps should be moved to use privacy test pages at some point.


Handling of ignored windows.

@ix mentioned that he had some trouble with the way handling ignored windows works when attempting to switch from wmutils.
The exact issue happened when making a focus changing script. As listing the mountpoint shows every window, including ignored ones (overrride_redirect = true), and unmapped windows. This means when finding a new window to focus, instead of just picking the next id from the list he had to first go and check if that window was unmapped or ignored, and if it was, go and get a new id. Obviously this is quite a lot of messy code for something that should arguably be fairly simple. Contrast this to wmutils, where you can choose to list every window, just windows which aren't unmapped or ignored or only windows which are. I was wondering if would be possible to make this sort of thing easier, and am interested in hearing people's point of view on the matter.
As far as I see we have 3 options:

Leave it working how it does - people just have to go and check the mapped and ignored files when doing something like this.
Make ignored (and possibly unmapped windows) hidden. This would achieve something similar to what wmutils has, except it has the downside that not all windows can be accessed from /0xXXXXXXXX and when interacting with a certain window you would first have to work out if you needed to access it using /<winid> or /.<winid>.
Don't include ignored windows in the list at all. The override_redirect flag is for telling the wm not to interfere with the window, and we should respect this by making it impossible. This still leaves us with the problem of what to do with unmapped windows however.

If anyone has any strong opinions on which option to go for, or any other ideas, please tell me.
Thanks.

Perhaps have folders for each category:
$X11FS/all - All windows (override_redirect yes, unmapped, etc)
$X11FS/mapped - All mapped windows (with no override_redirect either)
$X11FS/unmapped - All unmapped windows (with no override_redirect)
$X11FS/override - Windows with override_redirect set

This seems like a good solution. Will attemt to implement it, perhaps using symlinks from the other dirsto $X11FS/all. I'll leave this issue open until this is implemented, thanks for your help.

I really prefer this to other solutions so far that I've brainstormed.


Fab positioning

Hi, thanks for nice library!
Can you please help me to build this layout.
In Expanded state fab should be here:

And in the collapsed state here

Thanks!

@pengrad As far as I know this should simply be copy and paste of the layout in the Readme, with the umanoFabMode set to leave_behind. Or did you encounter any issues doing that?

Yes, it works perfect until I resize panel. Then I found wrong fab position in collapsed state.
Anyway thanks for quick response, I decided to self positioning with CoordinatorLayout.

@pengrad How did you resize panel? I'm still interested in resolving this.

I have header (second child in SlidingPanel) as
<FrameLayout
            android:id="@+id/slide_header"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="0.5"/>

and resize it with
slideHeader.setLayoutParams(new SlidingUpPanelLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 0.7f));

@pengrad Well, there's nothing I could do about that, you'd just have to call requestLayout() on the FloatingActionButtonLayout after this change.


Not working Readme example in the Typst App

#import "@preview/prooftrees:0.1.0"

#prooftree.tree(
    prooftree.axi[$A => A$],
    prooftree.uni[$A => A, B$]
)

This example is not working in the Typst Web App. (the prooftree function is not found). Which version of the code is in the Typst package manager ?
I am interested in helping in the project because I will using a lot this year. (I come from latex and was using the "mathpartir" package which kind of the industry standard for doing this kind for article with proof tree). I can do something if it can help.

This repo seems not to be maintained anymore. Look at curryst the package that does inference tree as well that is actively maintained.


fix typo

remove the extra the before option
Describe this PR

Changes

What issue does this fix?

Any other relevant information

Thanks for fixing this typo, @rawatdev!


Run test suite on push

we have it locally, but it needs to be run manually. Move it to run with github actions

Done


Improve zpage 404

https://free2z.com/Emersonflores/zpage/url
Presents scary double snack bar horror with error dump. Really this is just a normal 404 but it should be rendered better.

I would simply recommend that when it detects that something does not exist it redirects you to a 404 page, with an image saying that what you are looking for does not exist. Something much more intuitive than an error.
Something like this:

Hosted on a link like
https://free2z.cash/user404/
Or just redirect you to the 404 that already exists on free2z

Currently working on this, there are also some pages that doesn't render the 404 page, instead they show a notification. Is this an expected behavior?
For example
https://free2z.com/storytime/:creator/:slug

Also there are pages that doesnt show anything at all
for example:
https://free2z.com/converse/myfalsecomment


计算代价询问

作者你好，看到你们的工作之后感觉非常有意思。请问本工作的训练计算资源要求是什么样的？例如说训练过程需要什么级别的显卡，多少张，训练多久？

We recommend using at least 8/16 A100-80G GPUs to fine-tune our model, and the training time depends on the specific task which may take a week or more. We have not yet explored what the minimum data requirement would be if one were to use smaller data to reduce training costs.


Custom classes

Be able to extend classes as well as implement them (maybe both at the same time).
Resources:
http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/sun/misc/ProxyGenerator.java
https://marschall.github.io/2017/07/11/java-proxy-anatomy.html (see this one to save generated files)
Also experiment if ClassLoader#defineClass can be used properly (link)
Idea for syntax:
class extends AbstractMap:
# class [extends %javatype%] [implements %javatypes%]

	# access modifier: [(public|private|protected)]
	# %access modifier% %javatype% %identifier%
	public Integer testField

	# %access modifier% (%javatype%|void) %identifier%([parameters])
	# %identifier%: %javatype%
	public void doMethod(a: Integer, b: String):
		broadcast "HEY"

# note: %identifier% and %access modifier% aren't actual types, just to make it easy to read the syntax here

# look into:
	# class name
	# primitive types
	# syntax for varargs

EDIT: probably name this custom classes

I think this would be pretty cool to use, ngl it could help a lot with some things, the real issue i'd suspect is the implementation in skript itself.

The syntax has been changed since I made this issue, here's an example of the current syntax:
public class MyClass:

	private int myNumber

	public MyClass(int i):
		set this.myNumber to {_i}

	public int getMyNumber():
		return this.myNumber

So wait, its been added? Or were you just changing the initial syntax comment

It hasn't been added, but I've been working on it locally, although there are still things left to be done

Ah still, that'd be pretty cool once its done. If you need any testers just ask me.

any progress?

If there's any progress I'll post it here no need to ask

sad no progress for this

im using java now :')


[provider-local] Make dependency-watchdog-probe usable

How to categorize this PR?

/area dev-productivity
/kind enhancement
What this PR does / why we need it:
Lifts the limitation that dependency-watchdog-probe must be disabled in the local seed cluster since it was not able to resolve the DNS records for the kube-apiserver.
This PR basically injects the DNS configuration into the dependency-watchdog-probe pod pointing to the CoreDNS pod in the gardener-extension-provider-local-coredns namespace. With this, it is able to resolve the DNS names for the shoot clusters.
Which issue(s) this PR fixes:
Fixes one of the current limitations of provider-local.
Special notes for your reviewer:
Thanks @timebertt for the pairing on this topic!
Release note:

provider-local now allows to enable the [`dependency-watchdog-probe`](https://github.com/gardener/gardener/blob/master/docs/usage/seed_bootstrapping.md#dependency-watchdog) in the seed cluster.

/assign

/assign @oliver-goetz


Auto add converse as a sidecar panel to community web app

When the Community web app is opened, use the Pade web extension content page to inject JavaScript that provides a sidecar for Converse into the web page.  use the Gitter sidecar library to implement this.

This now available in version 0.6.0. This will only be applied when Community web application is enabled,  Converse web is disabled and Sidecar is enabled.

Community web app with sidecar enabled

Sidecar in action

Why is this so large?

Why is this so large?

Because it is using the converse full-screen view.  The sidecar is designed to share the screen 50/50 with the web app.
If you need a smaller chat panel,  then we could add an option for the standard converse view like the tiki converse plugin or the wordpress converse plugin that works like the chat widget in LinkedIn.


[3.2.3] Crash while click on a node in the nodetree

Godot version:
3.2.3-stable
OS/device including version:
Operating System: Manjaro Linux
Kernel Version: 5.10.4-arch2-1-vfio
Graphics Processor: AMD Radeon™ Vega 8 Graphics
amdgpu, GLES3
Issue description:
I was playing with the visual shader screen and then I clicked on of the nodes in the node tree.
Also there were a lot of same messages in the console like this:
ERROR: _copy_texscreen: Can't use screen texture copying in a render target configured without copy buffers.
At: drivers/gles3/rasterizer_canvas_gles3.cpp:1341.
Not sure if it is related to the crash
Steps to reproduce:
I tried to do something similar I did, but no success.
handle_crash: Program crashed with signal 11
Dumping the backtrace. Please include this when reporting the bug on https://github.com/godotengine/godot/issues
[1] /usr/lib/libc.so.6(+0x3d6a0) [0x7f74847306a0] (??:0)
[2] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0x292257e] (??:?)
[3] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0x20ff5e9] (??:?)
[4] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0x2101481] (??:?)
[5] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0x213c3d7] (??:?)
[6] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0x1f2aed5] (<artificial>:?)
[7] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0x2904e49] (??:?)
[8] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0xc579b3] (??:?)
[9] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0xc612d6] (??:?)
[10] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0xc622d0] (??:?)
[11] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0x21bbb51] (<artificial>:?)
[12] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0x2904e49] (??:?)
[13] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0xc579b3] (??:?)
[14] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0x91e6ed] (??:?)
[15] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0xc657fc] (??:?)
[16] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0x18e74a9] (??:?)
[17] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0x298fc05] (??:?)
[18] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0x85ce4d] (??:?)
[19] /usr/lib/libc.so.6(__libc_start_main+0xf2) [0x7f748471b152] (??:0)
[20] /home/*/projects/Godot_v3.2.3-stable_x11.64() [0x86b68e] (??:?)

@Voaz That backtrace isn't useful since official binaries don't contain debugging symbols. Could you try to reproduce the crash with a debug build?

Closing due to lack of response, if you provide the requested information this can be reopened


Update pvoutputorg to 1.8.10

Please update my adapter ioBroker.pvoutputorg to version 1.8.10.
This pull request was created by https://www.iobroker.dev c0726ff.

1.8.10 created 19.11.2023
8 User (>10%)
OK


Not type checking function parameters that are added to an object when that object is a parameter of a function

If we take an Object, pass it into a function, and then add a function to the object with a typed parameter, it doesn't appear to validate.
Simple example, this will not raise any errors when running flow
function A (b: Object) {
  b.foo = function (bar: string) {}
  b.foo(false); // no error
}

However, the following will properly validate
var b = {};
b.foo = function (bar: string) {};
b.foo(false); // error

Possibly related to #460

I think the problem here is that nothing is validated on Object, even things that we could track like the first example. internally, Object is represented by AnyObjT, which doesn't even keep track of its properties, let alone the types of those properties; while {...} is represented by ObjT, which does.
Using b: {[key: any]: any} instead of b: Object would make it work.
@avikchaudhuri, do we still want/need Object if we have {[key: any]: any}?

@mroch yeah Object is too useful in its any-like form. It is basically similar to a runtime tag check, and nothing else.
@ajwhite Closing this issue since the reported behavior is expected, as noted above.

So instead of
function A (b: Object) {
  b.foo = function (bar: string) {}
  b.foo(false); // no error
}

Would it suffice to do
function A (b: ObjT) {
  b.foo = function (bar: string) {}
  b.foo(false); // no error
}


Regex in Substitute not working

NetBox version
What version of NetBox are you currently running?
v4.0.11
Describe the bug
A clear and concise description of what the bug is.
plugin is not adding the substitute to template, it just adds the jinja2 variable name like {{ cisco_exclude_banner }}
To Reproduce
Steps to reproduce the behavior:

Go to 'Config Diff Plugin'
Click on 'Platform Settings'
Click on 'Add'
Click 'Platform' choose IOS (if you don't have platform go back to Device and create Platform)
For Driver type in cisco_iosxe
For Command 'show running-config'
Now Click on 'Create' to save Platform Settings
Next under Config Management Click on 'Substitutes'
Click 'Add'
Choose Platform settings create earlier (ex: IOS XE cisco_iosxe)
Name something like 'cisco_exclude_banner'
Regexp 'banner login [\S\s]+^C'
Click 'Create' to save Substitute
Now Click on 'Provisioning' and then 'Config Templates'
Create Template type Name ex: test
Template Code enter the Substitute as jinja2 variable like {% raw %}{{ cisco_exclude_banner }}{% endraw %}
Click on Devices and Edit and Choose the Config template for device (Device must be Active status and have Primary IP and Platform IOS)
Now go back to Config Diff Plugin and Click 'Configuration Requests'
Click 'Add' Find the device and Click 'Create' to Save
Now click on 'Collect diffs'
No Error

Expected behavior
A clear and concise description of what you expected to happen.
the matched config was not added into rendered output instead just the variable gets added {{ cisco_exclude_banner }}
Screenshots
If applicable, add screenshots to help explain your problem.

Additional context
Add any other context about the problem here.
sample_text_config.txt

Hi @jibz89, thanks for opening the issue.
I fix this bug in 2.7.0 version.
Please be caution with regex, because regex in exclude_snmp_traps matches snmp-server lines and lines after that section

substitutes

Rendered diff

Template

So I removed the snmp traps from the template but the banner substitutes is not still working (see screenshot). i also try creating another template with same code to exclude banner. i tested the regex in regex101.
how can i get into the dev env of this plugin to see what its actually doing ?

exclude_snmp_traps regex (snmp-server enable traps(?: .*$\n?)+)+ is only matching only lines starting with 'snmp-server enable traps'

Hi @jibz89 , please share with me next data, so I can test plugin on your data, maybe I miss something and that's why can't catch the bug:

actual config of the device (remove sensitive data)
how rendered config in netbox looks like for the device (also remove sensitive data)
what platform is assigned to the device
substitutes data: name, regex and platform setting
diff result from config compliance

how can i get into the dev env of this plugin to see what its actually doing ?

in my env Netbox is installed how it is described in official docs.
then git clone plugins repo, activate netbox virtualvenv and go to the plugins directory and run pip install -e .
after that you will get locally installed version of the plugin, you can do change in it and see it

actual config of the device (remove sensitive data)

actual config of device.txt

how rendered config in netbox looks like for the device (also remove sensitive data)

rendered config in netbox.txt

what platform is assigned to the device

Device Platform settings are
Platform: IOS XE
Driver: cisco_iosxe
Command: show running-config

substitutes data: name, regex and platform setting

Subtitutes Data:
Name: cisco_exclude_all_before_line
REGEXP: [.*\n\S\s]+^C\n!
Platform Settings: IOS XE cisco_iosxe
cisco_exclude_all_except_line_and_space
REGEXP: ^(?!line\b)(?!\s).+$
Platform Settings: IOS XE cisco_iosxe

diff result from config compliance

I notice if I click on "Collect diffs" button in Configuration Requests in does not get the regex right and just prints out the variable name in the diff.
Go to device and click on Config Compliance (screen shot below)

However, if I go to scripts and choose the device and check “Commit changes” I am getting the expected result, the regex is being captured and removed from the config diff.

thank you for looking into this issue.

@jibz89 I think I fix this bug, please check the new release 2.8.0


[SPARK-23375][SQL] Eliminate unneeded Sort in Optimizer

What changes were proposed in this pull request?
Added a new rule to remove Sort operation when its child is already sorted.
For instance, this simple code:
spark.sparkContext.parallelize(Seq(("a", "b"))).toDF("a", "b").registerTempTable("table1")
val df = sql(s"""SELECT b
                | FROM (
                |     SELECT a, b
                |     FROM table1
                |     ORDER BY a
                | ) t
                | ORDER BY a""".stripMargin)
df.explain(true)

before the PR produces this plan:
== Parsed Logical Plan ==
'Sort ['a ASC NULLS FIRST], true
+- 'Project ['b]
   +- 'SubqueryAlias t
      +- 'Sort ['a ASC NULLS FIRST], true
         +- 'Project ['a, 'b]
            +- 'UnresolvedRelation `table1`

== Analyzed Logical Plan ==
b: string
Project [b#7]
+- Sort [a#6 ASC NULLS FIRST], true
   +- Project [b#7, a#6]
      +- SubqueryAlias t
         +- Sort [a#6 ASC NULLS FIRST], true
            +- Project [a#6, b#7]
               +- SubqueryAlias table1
                  +- Project [_1#3 AS a#6, _2#4 AS b#7]
                     +- SerializeFromObject [staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, assertnotnull(assertnotnull(input[0, scala.Tuple2, true]))._1, true, false) AS _1#3, staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, assertnotnull(assertnotnull(input[0, scala.Tuple2, true]))._2, true, false) AS _2#4]
                        +- ExternalRDD [obj#2]

== Optimized Logical Plan ==
Project [b#7]
+- Sort [a#6 ASC NULLS FIRST], true
   +- Project [b#7, a#6]
      +- Sort [a#6 ASC NULLS FIRST], true
         +- Project [_1#3 AS a#6, _2#4 AS b#7]
            +- SerializeFromObject [staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, assertnotnull(input[0, scala.Tuple2, true])._1, true, false) AS _1#3, staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, assertnotnull(input[0, scala.Tuple2, true])._2, true, false) AS _2#4]
               +- ExternalRDD [obj#2]

== Physical Plan ==
*(3) Project [b#7]
+- *(3) Sort [a#6 ASC NULLS FIRST], true, 0
   +- Exchange rangepartitioning(a#6 ASC NULLS FIRST, 200)
      +- *(2) Project [b#7, a#6]
         +- *(2) Sort [a#6 ASC NULLS FIRST], true, 0
            +- Exchange rangepartitioning(a#6 ASC NULLS FIRST, 200)
               +- *(1) Project [_1#3 AS a#6, _2#4 AS b#7]
                  +- *(1) SerializeFromObject [staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, assertnotnull(input[0, scala.Tuple2, true])._1, true, false) AS _1#3, staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, assertnotnull(input[0, scala.Tuple2, true])._2, true, false) AS _2#4]
                     +- Scan ExternalRDDScan[obj#2]

while after the PR produces:
== Parsed Logical Plan ==
'Sort ['a ASC NULLS FIRST], true
+- 'Project ['b]
   +- 'SubqueryAlias t
      +- 'Sort ['a ASC NULLS FIRST], true
         +- 'Project ['a, 'b]
            +- 'UnresolvedRelation `table1`

== Analyzed Logical Plan ==
b: string
Project [b#7]
+- Sort [a#6 ASC NULLS FIRST], true
   +- Project [b#7, a#6]
      +- SubqueryAlias t
         +- Sort [a#6 ASC NULLS FIRST], true
            +- Project [a#6, b#7]
               +- SubqueryAlias table1
                  +- Project [_1#3 AS a#6, _2#4 AS b#7]
                     +- SerializeFromObject [staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, assertnotnull(assertnotnull(input[0, scala.Tuple2, true]))._1, true, false) AS _1#3, staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, assertnotnull(assertnotnull(input[0, scala.Tuple2, true]))._2, true, false) AS _2#4]
                        +- ExternalRDD [obj#2]

== Optimized Logical Plan ==
Project [b#7]
+- Sort [a#6 ASC NULLS FIRST], true
   +- Project [_1#3 AS a#6, _2#4 AS b#7]
      +- SerializeFromObject [staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, assertnotnull(input[0, scala.Tuple2, true])._1, true, false) AS _1#3, staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, assertnotnull(input[0, scala.Tuple2, true])._2, true, false) AS _2#4]
         +- ExternalRDD [obj#2]

== Physical Plan ==
*(2) Project [b#7]
+- *(2) Sort [a#6 ASC NULLS FIRST], true, 0
   +- Exchange rangepartitioning(a#6 ASC NULLS FIRST, 5)
      +- *(1) Project [_1#3 AS a#6, _2#4 AS b#7]
         +- *(1) SerializeFromObject [staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, assertnotnull(input[0, scala.Tuple2, true])._1, true, false) AS _1#3, staticinvoke(class org.apache.spark.unsafe.types.UTF8String, StringType, fromString, assertnotnull(input[0, scala.Tuple2, true])._2, true, false) AS _2#4]
            +- Scan ExternalRDDScan[obj#2]

this means that an unnecessary sort operation is not performed after the PR.
How was this patch tested?
added UT

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution/752/
Test PASSed.

Test build #87261 has started for PR 20560 at commit 550ff99.

Test build #87261 has finished for PR 20560 at commit 550ff99.

This patch passes all tests.
This patch merges cleanly.
This patch adds the following public classes (experimental):
abstract class KeepOrderUnaryNode extends UnaryNode
case class Subquery(child: LogicalPlan) extends KeepOrderUnaryNode
case class Project(projectList: Seq[NamedExpression], child: LogicalPlan)
case class GlobalLimit(limitExpr: Expression, child: LogicalPlan) extends KeepOrderUnaryNode

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/87261/
Test PASSed.

Merged build finished. Test PASSed.

Thanks! This should be added as a separate rule. It is actually to resolve the comment in https://github.com/apache/spark/pull/11480#discussion_r54840644
I did not review it carefully, but it requires more test cases, including unit tests and end-to-end tests

Test build #87288 has started for PR 20560 at commit 81e4828.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution/774/
Test PASSed.

@gatorsmile thanks for your comment. I moved it to a separate rule and added more tests.
As per the added value of this rule, I see 3 main points:

Let's imagine that a user exposes a cached sorted relation which can be queried by other users via JDBC. Other users cannot know that the table is already sorted and they may write query which cause an unnecessary sort.
Many tools which produce automatic SQL code are not very smart in creating it, so they can generate queries which cause unneeded sorts.
I think this is also enabling for more interesting use cases. What I am thinking about is that we may have some datasources which store sorted data and if we can express this in the logical plan, then we may avoid unneeded sorts.

What do you think?
Thanks.

Test build #87288 has finished for PR 20560 at commit 81e4828.

This patch passes all tests.
This patch merges cleanly.
This patch adds the following public classes (experimental):
case class LocalLimit(limitExpr: Expression, child: LogicalPlan) extends KeepOrderUnaryNode

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/87288/
Test PASSed.

Merged build finished. Test PASSed.

@mgaido91 Yeah, we definitely should include this rule. We just need more careful review and comprehensive test cases. Thanks for your work!

thank you @gatorsmile for taking a look at this. Let me know if there is something I can/should improve. Thanks.

@gatorsmile sorry, do you have time now to take a look at this? Or may I ping you some days later if you are busy? Thanks.

Will review this in the next few days.

kindly ping @gatorsmile

cc @cloud-fan @hvanhovell @wzhfy

retest this please

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution/2149/
Test PASSed.

Test build #89118 has finished for PR 20560 at commit 1c7cae6.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/89118/
Test FAILed.

Test build #89135 has started for PR 20560 at commit e376c19.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution/2164/
Test PASSed.

Test build #89135 has finished for PR 20560 at commit e376c19.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/89135/
Test PASSed.

Test build #89195 has started for PR 20560 at commit a1846ab.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution/2210/
Test PASSed.

Test build #89195 has finished for PR 20560 at commit a1846ab.

This patch fails to build.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/89195/
Test FAILed.

Test build #89197 has started for PR 20560 at commit 4e441f8.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution/2212/
Test PASSed.

Test build #89197 has finished for PR 20560 at commit 4e441f8.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/89197/
Test FAILed.

Test build #89249 has started for PR 20560 at commit 6e95e37.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/89249/
Test FAILed.

retest this please

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution/2255/
Test PASSed.

Test build #89257 has started for PR 20560 at commit 6e95e37.

Test build #89257 has finished for PR 20560 at commit 6e95e37.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/89257/
Test PASSed.

Test build #89330 has started for PR 20560 at commit 6c5f04c.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/testing-k8s-prb-make-spark-distribution/2309/
Test PASSed.

Test build #89330 has finished for PR 20560 at commit 6c5f04c.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/89330/
Test PASSed.

Merged build finished. Test PASSed.

thanks, merging to master!

Just saw this - this seems like a somewhat awkward way to do it by just matching on filter / project. Is the main thing lacking a way to do back propagation for properties? (We can only do forward propagation at the moment on properties so we can't eliminate subtree's sort based on the parent's sort).

@rxin  It seems you are talking about the followup PR: https://github.com/apache/spark/pull/21072
I think this is the way we do back propagation in catalyst: match a specific node, traverse down the subtree with the properties.
For forward propagation, we also need to carefully handle some nodes that would stop the propagation. In RemoveRedundantSorts.canEliminateSort, we are doing the same thing: only list the nodes that can retain the properties. e.g. Limit should stop propagating the sorting property. I think Project, Filter, Hint is good enough as an initial list, we can expand it later.


Crash server random

my server is crashing out of nowhere, randomly, I am seeing mysql and it is sending many queries, it sends 1,000 requests and crashes my server

https://pastebin.com/cPTLQY2u

That's not the full crash log, so I can't really comment on what the cause is.
Nothing there to suggest it's an LP problem though.


Get enabled/disabled dates in date values instead of boolean

Hi,
Using bootstrap-datetimepicker is new to me, so I need help with this issue. I have to get the enabled/disabled dates from the picker but the picker only returns an array of dates with boolean values. How do I convert them to Date values and format them? The docs aren't much help with this. If someone can help me I'd appreciate it very much.
This is the current result:
2015-09-10: true
2015-09-14: true
What I need is just the dates without the boolean value.
Thank you in advance.

I figured it out. Got the date values by using Object.keys(array). Thanks.


PSVersionInfo test failing due to SMA version

It looks like a PSVersionTable test is failing in CI, possibly because of a change to the version of System.Management.Automation.dll:
https://github.com/PowerShell/PowerShell/blob/945a23234170bd5ebdace8b6d10b82754354f68f/test/powershell/Host/PSVersionTable.Tests.ps1#L6-L24

All works well locally.
I build with ci.psm module as our CIs do
Import-Module .\tools\ci.psm1
Invoke-CIBuild

and get

It say something was changed in last release process.

All works well locally.

Yeah I just noticed this.
So where's the 8 coming from?

I built from master and get

Previous build was from my PR branch. So the issue is only in my PR. :-(

So where's the 8 coming from?

From ci.psm:
function Get-ReleaseTag
{
    $metaDataPath = Join-Path -Path $PSScriptRoot -ChildPath 'metadata.json'
    $metaData = Get-Content $metaDataPath | ConvertFrom-Json
    $releaseTag = $metadata.NextReleaseTag
    if($env:BUILD_BUILID)
    {
        $releaseTag = $releaseTag.split('.')[0..2] -join '.'
        $releaseTag = $releaseTag + '.' + $env:BUILD_BUILID
    }
    return $releaseTag
}

NextReleaseTag is v7.2.0-preview.8"

if($env:BUILD_BUILID)

Oh, I wonder how this works currently and tests are passed if the env name should be BUILD_BUILDID. Came from #8822.

It turned out that ci.psm1 always assigns it directly to dotnet and the code under if($env:BUILD_BUILID) is dead code.

@TravisEz13 @adityapatwardhan Friendly ping.

I don't see a clear action item expressed.

@TravisEz13 I don't understand your comment.
I guess function Get-ReleaseTag is broken and must be fixed. I don't know how since it is exclusively internal MSFT process. I'd want to get a fix commit so that #15603 passes the test.

I compared builds local, CI and release and I am at a loss.
We always put Product version including GitCommitId on all files in all builds. It is right.
But we lost GitCommitId in banner and PSVersionTable in non-local builds! Did it happen by accident?
When we discussed adding a GitCommitId to the PSVersionTable, we found it important to inform users what the last commit was for this build. And we lost it. It should be in the Release build and CI builds too.
(To be clear I expect short PSVersion in banner (like PowerShell 7.2.0) and full version with GitCommitId in PSVersionTable.GitCommitId (like 7.2.0-preview.10-166-g40837dd860e1bb69dd8238ff5e5ae360a7637c13).
Perhaps this is a consequence of how the release process is going.
This definitely violates generally accepted rules of open source projects.
Our Git Tags are broken. They seem to indicate the beginning of the next milestone, but they are not due to that we are backporting commits. The only way to do it right is to have release branches in the repository.
There is a related problem here. No community can release a version similar MSFT since nobody knows which commits were backported (specially in patches) and no public release branches exist - it breaks the open source nature of the project.
MSFT can have non-public release process but MSFT must keep release branches public with right git tags.
/cc @SteveL-MSFT @TravisEz13 @adityapatwardhan for review.
.


undefined reference to `_cgo_sys_thread_start'

Please answer these questions before submitting your issue. Thanks!

What version of Go are you using (go version)?
go version go1.6 linux/mips64le

What operating system and processor architecture are you using (go env)?
GOARCH="mips64le"
GOBIN=""
GOEXE=""
GOHOSTARCH="mips64le"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/lib/golang"
GOTOOLDIR="/usr/lib/golang/pkg/tool/linux_mips64le"
GO15VENDOREXPERIMENT="1"
CC="gcc"
GOGCCFLAGS="-fPIC -fmessage-length=0"
CXX="g++"
CGO_ENABLED="0"

What did you do?
download http://dl.fedoraproject.org/pub/fedora/linux/updates/23/SRPMS/r/runc-0.0.8-0.1.git1a124e9.fc23.src.rpm and build it. The build process is exit by ld returned 1 exit status.
The full error msg is as follow:
gcc -I . -fPIC -pthread -fmessage-length=0 -o $WORK/runtime/cgo/_obj/cgo.o $WORK/runtime/cgo/_obj/_cgo_main.o $WORK/runtime/cgo/_obj/_cgo_export.o $WORK/runtime/cgo/_obj/cgo.cgo2.o $WORK/runtime/cgo/_obj/gcc_fatalf.o $WORK/runtime/cgo/_obj/gcc_libinit.o $WORK/runtime/cgo/_obj/gcc_setenv.o $WORK/runtime/cgo/_obj/gcc_util.o -g -O2 -lpthread

runtime/cgo
/tmp/go-build507880994/runtime/cgo/_obj/gcc_util.o: In function x_cgo_thread_start': /usr/lib/golang/src/runtime/cgo/gcc_util.c:42: undefined reference to _cgo_sys_thread_start'
/usr/lib/golang/src/runtime/cgo/gcc_util.c:48: undefined reference to `_cgo_sys_thread_start'
collect2: error: ld returned 1 exit status

What did you expect to see?
build pass and no such error report.

What did you see instead?

I didn't think mips had cgo support at all, sort of surprised it got that far...

I found some one got support for cgo externel link @ https://github.com/golang/go/issues/14126

I think this can be merged into #14126 (cgo with extlink on mips64x)


eliminate words of less than three letters

words of less than three letters do not offer the players of spaceman a great enough challenge

I do not know what I'm doing with this. Please excuse my bumbling.