Implement document formatting using swift-format

Implements textDocument/formatting request using swift-format library.
It adds a dependency on swift-format which is finicky about which toolchain it uses - it needs to be swift-DEVELOPMENT-SNAPSHOT-2020-01-29-a or the library will complain at runtime.
By the way, is there a better way to get the last Position in a file than loading the contents of the url into a LineTable?

Very cool! I'll try to review the source changes soon, but first a note about the new dependency:

Since SwiftSyntax depends on the unstable parser library from swift itself, and we are going into the same toolchain as that swift, we should be using master branch of swiftsyntax and swift-format.  Otherwise we have no way to guarantee we will not hit the same runtime compatibility issues you mentioned.
Using a branch dependency will also mean we need to be really careful that changes to those projects do not break us, so we will need to update swift ci to test sourcekit-lsp in those repos' PR tests.

None of this is a problem; we just need to work through it before we land this PR.
CC @allevato @akyrtzi

Yeah, there's still a little bit of work we need to do on the swift-format side to get things CI ready, since right now the master branch is pinned to a specific snapshot (swift-DEVELOPMENT-SNAPSHOT-2020-01-29-a) instead of apple/swift master.
I've been carving out some time to push a bit more on that recently (e.g., https://github.com/apple/swift-format/pull/136 removes all @testable imports, which was mentioned as a blocker for CI due to the way things are built there), so next I need to start working on the build script helpers to get swift-format integrated with the rest of the toolchain.

@Trzyipolkostkicukru , @benlangmuir , @allevato any progress here?
Bump

I don't know what is needed for swift-format CI integration and haven't tried to find out, so I'm patiently waiting for someone else to do that. No progress from me

No updates from me either, we're blocked by being able to integrate the swift-format dependency.

Sorry for the delays on this, but we've finally managed to carve out time to make some progress here. https://github.com/apple/swift-format/pull/207 is the first PR, and with some follow-up work in the main Swift repository to hook it all together, that should unblock swift-format being used as a dependency of other projects.

@benlangmuir I rebased my changes to the master so that they could be merged. Unfortunately doing that broke the tests - it seems openDocument function is asynchronous, and I have for state to stabilize before trying to run the test. I had to use the sleep function for that, but is there some better solution that I am missing?

@Trzyipolkostkicukru sorry I missed this comment.

it seems openDocument function is asynchronous, and I have for state to stabilize before trying to run the test

To clarify, is the issue that openDocument is delayed until after build settings are available?  @DavidGoldman is there a good way to handle this in a test?

@Trzyipolkostkicukru sorry I missed this comment.

it seems openDocument function is asynchronous, and I have for state to stabilize before trying to run the test

To clarify, is the issue that openDocument is delayed until after build settings are available? @DavidGoldman is there a good way to handle this in a test?

Since registerToolchainTextDocumentRequest is used the formatting operation should be queued and completed once the document has opened + build settings received. What sort of issues were you seeing here that required a sleep?

sorry I missed this comment
I am used to waiting weeks and months :D Five days is quick!

and I have for state to stabilize
Oh god, I seem to have mangled that sentence. I meant to write "and I have to wait for state to stabilize".

What sort of issues were you seeing here that required a sleep?
The direct issue is that guard let snapshot = self.documentManager.latestSnapshot(req.params.textDocument.uri) at line 753 in SwiftLanguageServer.swift fails randomly.

If I remove all tests except one (I cannot filter out the other tests, so I just delete the files for other tests, and comment out the other tests in FormattingTests.swift), then it works more often than not. If I have more than one formatting tests, then it's very rare for more than one to be successful.
If I add var documents: [DocumentURI: Document] = [:] { didSet { print("didSet documents") } } at line 63 in DocumentManager.swift, then the print fires multiple times, even after the test already failed, which is why I thought openDocument is asynchronous.

Potential solution: If I move fetching snapshots into self.queue.async the tests pass, but I don't think it's thread safe. SwiftLanguageServer.queue and DocumentManager.queue don't seem to be related in any way, so tests passing must be a coincidence we cannot rely on. Thread sanitizer is complaining about something if I do that.

sorry I missed this comment

I am used to waiting weeks and months :D Five days is quick!

and I have for state to stabilize

Oh god, I seem to have mangled that sentence. I meant to write "and I have to wait for state to stabilize".

What sort of issues were you seeing here that required a sleep?

The direct issue is that guard let snapshot = self.documentManager.latestSnapshot(req.params.textDocument.uri) at line 753 in SwiftLanguageServer.swift fails randomly.
If I remove all tests except one (I cannot filter out the other tests, so I just delete the files for other tests, and comment out the other tests in FormattingTests.swift), then it works more often than not. If I have more than one formatting tests, then it's very rare for more than one to be successful.
If I add var documents: [DocumentURI: Document] = [:] { didSet { print("didSet documents") } } at line 63 in DocumentManager.swift, then the print fires multiple times, even after the test already failed, which is why I thought openDocument is asynchronous.
Potential solution: If I move fetching snapshots into self.queue.async the tests pass, but I don't think it's thread safe. SwiftLanguageServer.queue and DocumentManager.queue don't seem to be related in any way, so tests passing must be a coincidence we cannot rely on. Thread sanitizer is complaining about something if I do that.

Hmm, we should call self.documentManager.latestSnapshot on the queue, otherwise you will run into the synchronization issues that you're talking about (since you may try to fetch a snapshot before the open call makes it through the queue). What is thread sanitizer complaining about? We've spoken about removing the SwiftLanguageServer's DocumentManager in favor of the one in SourceKitServer but haven't gotten around to it yet (would be a largish refactor).

we should call self.documentManager.latestSnapshot on the queue, otherwise you will run into the synchronization issues that you're talking about (since you may try to fetch a snapshot before the open call makes it through the queue).

Good to know! I couldn't find any place where openDocument synchronized on "swift-language-server-queue" so I thought that they are independent.

What is thread sanitizer complaining about?

full output
-> % /Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin/swift test --sanitize=thread
warning: Source files for target SKSwiftPMWorkspaceTests should be located under /Users/cukier/Tools/cukr/sourcekit-lsp/Tests/SKSwiftPMWorkspaceTests
warning: Source files for target SKCoreTests should be located under /Users/cukier/Tools/cukr/sourcekit-lsp/Tests/SKCoreTests
warning: Source files for target SourceKitDTests should be located under /Users/cukier/Tools/cukr/sourcekit-lsp/Tests/SourceKitDTests
warning: Source files for target LSPLoggingTests should be located under /Users/cukier/Tools/cukr/sourcekit-lsp/Tests/LSPLoggingTests
warning: Source files for target LanguageServerProtocolJSONRPCTests should be located under /Users/cukier/Tools/cukr/sourcekit-lsp/Tests/LanguageServerProtocolJSONRPCTests
warning: Source files for target LanguageServerProtocolTests should be located under /Users/cukier/Tools/cukr/sourcekit-lsp/Tests/LanguageServerProtocolTests
warning: Source files for target SKSupportTests should be located under /Users/cukier/Tools/cukr/sourcekit-lsp/Tests/SKSupportTests
[5/5] Linking SourceKitLSPPackageTests
Test Suite 'All tests' started at 2020-07-22 16:30:23.752
Test Suite 'SourceKitLSPPackageTests.xctest' started at 2020-07-22 16:30:23.755
Test Suite 'FormattingTests' started at 2020-07-22 16:30:23.755
Test Case '-[SourceKitLSPTests.FormattingTests testConfigFile]' started.
Test Case '-[SourceKitLSPTests.FormattingTests testConfigFile]' passed (0.479 seconds).
Test Case '-[SourceKitLSPTests.FormattingTests testConfigFileInNestedDirectory]' started.
==================
WARNING: ThreadSanitizer: data race (pid=87916)
  Write of size 8 at 0x7b100000e0a8 by thread T8:
    #0 LocalConnection.close() Connection.swift:93 (SourceKitLSPPackageTests:x86_64+0x5308fb)
    #1 SwiftLanguageServer.shutdown() SwiftLanguageServer.swift:228 (SourceKitLSPPackageTests:x86_64+0xb8b5ef)
    #2 protocol witness for ToolchainLanguageServer.shutdown() in conformance SwiftLanguageServer <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xb8b4af)
    #3 SourceKitServer.shutdown(_:) SourceKitServer.swift:526 (SourceKitLSPPackageTests:x86_64+0xb2fce4)
    #4 implicit closure #8 in implicit closure #7 in SourceKitServer._registerBuiltinHandlers() SourceKitServer.swift:72 (SourceKitLSPPackageTests:x86_64+0xb2fa0d)
    #5 partial apply for implicit closure #8 in implicit closure #7 in SourceKitServer._registerBuiltinHandlers() <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xb56ae8)
    #6 closure #1 in LanguageServerEndpoint._register<A, B>(_:) LanguageServer.swift:114 (SourceKitLSPPackageTests:x86_64+0xa1575c)
    #7 partial apply for closure #1 in LanguageServerEndpoint._register<A, B>(_:) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa1a182)
    #8 thunk for @escaping @callee_guaranteed (@guaranteed Request<B>) -> () <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa157eb)
    #9 partial apply for thunk for @escaping @callee_guaranteed (@guaranteed Request<B>) -> () <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa1a262)
    #10 thunk for @escaping @callee_guaranteed (@in_guaranteed Request<A>) -> (@out ()) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa19870)
    #11 partial apply for thunk for @escaping @callee_guaranteed (@in_guaranteed Request<A>) -> (@out ()) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa1b580)
    #12 closure #1 in LanguageServerEndpoint.handle<A>(_:id:from:reply:) LanguageServer.swift:196 (SourceKitLSPPackageTests:x86_64+0xa18c4e)
    #13 partial apply for closure #1 in LanguageServerEndpoint.handle<A>(_:id:from:reply:) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa1ace7)
    #14 thunk for @escaping @callee_guaranteed () -> () <compiler-generated> (SourceKitLSPPackageTests:x86_64+0x17713)
    #15 __tsan::invoke_and_release_block(void*) <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x718fb)
    #16 _dispatch_client_callout <null>:2 (libdispatch.dylib:x86_64+0x2657)

  Previous read of size 8 at 0x7b100000e0a8 by thread T3:
    #0 LocalConnection.send<A>(_:) Connection.swift:107 (SourceKitLSPPackageTests:x86_64+0x5311d4)
    #1 SwiftLanguageServer.publishDiagnostics(response:for:compileCommand:) SwiftLanguageServer.swift:163 (SourceKitLSPPackageTests:x86_64+0xb886f3)
    #2 closure #1 in SwiftLanguageServer.openDocument(_:) SwiftLanguageServer.swift:320 (SourceKitLSPPackageTests:x86_64+0xb93c0e)
    #3 partial apply for closure #1 in SwiftLanguageServer.openDocument(_:) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xb93f9e)
    #4 thunk for @escaping @callee_guaranteed () -> () <compiler-generated> (SourceKitLSPPackageTests:x86_64+0x17713)
    #5 __tsan::invoke_and_release_block(void*) <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x718fb)
    #6 _dispatch_client_callout <null>:2 (libdispatch.dylib:x86_64+0x2657)

  Location is heap block of size 56 at 0x7b100000e080 allocated by thread T3:
    #0 malloc <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x4f42a)
    #1 swift_slowAlloc <null>:2 (libswiftCore.dylib:x86_64+0x2f2ca8)
    #2 makeLocalSwiftServer(client:sourcekitd:clientCapabilities:) SwiftLanguageServer.swift:1339 (SourceKitLSPPackageTests:x86_64+0xbbf1aa)
    #3 languageService(for:_:options:client:in:) SourceKitServer.swift:1009 (SourceKitLSPPackageTests:x86_64+0xb4298d)
    #4 closure #1 in SourceKitServer.languageService(for:_:in:) SourceKitServer.swift:263 (SourceKitLSPPackageTests:x86_64+0xb40f1c)
    #5 partial apply for closure #1 in SourceKitServer.languageService(for:_:in:) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xb51f6a)
    #6 thunk for @callee_guaranteed () -> (@owned ToolchainLanguageServer?, @error @owned Error) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xb42e46)
    #7 partial apply for thunk for @callee_guaranteed () -> (@owned ToolchainLanguageServer?, @error @owned Error) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xb51ff7)
    #8 orLog<A>(_:level:logger:_:) Logging.swift:58 (SourceKitLSPPackageTests:x86_64+0x50dea0)
    #9 SourceKitServer.languageService(for:_:in:) SourceKitServer.swift:262 (SourceKitLSPPackageTests:x86_64+0xb40a6a)
    #10 SourceKitServer.languageService(for:_:in:) SourceKitServer.swift:298 (SourceKitLSPPackageTests:x86_64+0xb4334c)
    #11 SourceKitServer.openDocument(_:workspace:) SourceKitServer.swift:556 (SourceKitLSPPackageTests:x86_64+0xb30ded)
    #12 implicit closure #12 in implicit closure #11 in SourceKitServer._registerBuiltinHandlers() SourceKitServer.swift:75 (SourceKitLSPPackageTests:x86_64+0xb308d0)
    #13 partial apply for implicit closure #12 in implicit closure #11 in SourceKitServer._registerBuiltinHandlers() <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xb56a40)
    #14 closure #1 in SourceKitServer.registerWorkspaceNotfication<A>(_:) SourceKitServer.swift:197 (SourceKitLSPPackageTests:x86_64+0xb3e971)
    #15 partial apply for closure #1 in SourceKitServer.registerWorkspaceNotfication<A>(_:) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xb49d34)
    #16 thunk for @escaping @callee_guaranteed (@guaranteed Notification<A>) -> () <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa164ab)
    #17 partial apply for thunk for @escaping @callee_guaranteed (@guaranteed Notification<A>) -> () <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa1a5a4)
    #18 thunk for @escaping @callee_guaranteed (@in_guaranteed Notification<A>) -> (@out ()) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa17860)
    #19 partial apply for thunk for @escaping @callee_guaranteed (@in_guaranteed Notification<A>) -> (@out ()) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa1b7a0)
    #20 closure #1 in LanguageServerEndpoint.handle<A>(_:from:) LanguageServer.swift:168 (SourceKitLSPPackageTests:x86_64+0xa177b7)
    #21 partial apply for closure #1 in LanguageServerEndpoint.handle<A>(_:from:) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa1aaa9)
    #22 thunk for @escaping @callee_guaranteed () -> () <compiler-generated> (SourceKitLSPPackageTests:x86_64+0x17713)
    #23 __tsan::invoke_and_release_block(void*) <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x718fb)
    #24 _dispatch_client_callout <null>:2 (libdispatch.dylib:x86_64+0x2657)

  Thread T8 (tid=2277677, running) is a GCD worker thread

  Thread T3 (tid=2277601, running) is a GCD worker thread

SUMMARY: ThreadSanitizer: data race Connection.swift:93 in LocalConnection.close()
==================
==================
WARNING: ThreadSanitizer: data race (pid=87916)
  Write of size 8 at 0x7b100000e0b0 by thread T8:
    #0 LocalConnection.close() Connection.swift:93 (SourceKitLSPPackageTests:x86_64+0x530913)
    #1 SwiftLanguageServer.shutdown() SwiftLanguageServer.swift:228 (SourceKitLSPPackageTests:x86_64+0xb8b5ef)
    #2 protocol witness for ToolchainLanguageServer.shutdown() in conformance SwiftLanguageServer <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xb8b4af)
    #3 SourceKitServer.shutdown(_:) SourceKitServer.swift:526 (SourceKitLSPPackageTests:x86_64+0xb2fce4)
    #4 implicit closure #8 in implicit closure #7 in SourceKitServer._registerBuiltinHandlers() SourceKitServer.swift:72 (SourceKitLSPPackageTests:x86_64+0xb2fa0d)
    #5 partial apply for implicit closure #8 in implicit closure #7 in SourceKitServer._registerBuiltinHandlers() <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xb56ae8)
    #6 closure #1 in LanguageServerEndpoint._register<A, B>(_:) LanguageServer.swift:114 (SourceKitLSPPackageTests:x86_64+0xa1575c)
    #7 partial apply for closure #1 in LanguageServerEndpoint._register<A, B>(_:) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa1a182)
    #8 thunk for @escaping @callee_guaranteed (@guaranteed Request<B>) -> () <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa157eb)
    #9 partial apply for thunk for @escaping @callee_guaranteed (@guaranteed Request<B>) -> () <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa1a262)
    #10 thunk for @escaping @callee_guaranteed (@in_guaranteed Request<A>) -> (@out ()) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa19870)
    #11 partial apply for thunk for @escaping @callee_guaranteed (@in_guaranteed Request<A>) -> (@out ()) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa1b580)
    #12 closure #1 in LanguageServerEndpoint.handle<A>(_:id:from:reply:) LanguageServer.swift:196 (SourceKitLSPPackageTests:x86_64+0xa18c4e)
    #13 partial apply for closure #1 in LanguageServerEndpoint.handle<A>(_:id:from:reply:) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa1ace7)
    #14 thunk for @escaping @callee_guaranteed () -> () <compiler-generated> (SourceKitLSPPackageTests:x86_64+0x17713)
    #15 __tsan::invoke_and_release_block(void*) <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x718fb)
    #16 _dispatch_client_callout <null>:2 (libdispatch.dylib:x86_64+0x2657)

  Previous read of size 8 at 0x7b100000e0b0 by thread T3:
    #0 LocalConnection.send<A>(_:) Connection.swift:107 (SourceKitLSPPackageTests:x86_64+0x5311f3)
    #1 SwiftLanguageServer.publishDiagnostics(response:for:compileCommand:) SwiftLanguageServer.swift:163 (SourceKitLSPPackageTests:x86_64+0xb886f3)
    #2 closure #1 in SwiftLanguageServer.openDocument(_:) SwiftLanguageServer.swift:320 (SourceKitLSPPackageTests:x86_64+0xb93c0e)
    #3 partial apply for closure #1 in SwiftLanguageServer.openDocument(_:) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xb93f9e)
    #4 thunk for @escaping @callee_guaranteed () -> () <compiler-generated> (SourceKitLSPPackageTests:x86_64+0x17713)
    #5 __tsan::invoke_and_release_block(void*) <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x718fb)
    #6 _dispatch_client_callout <null>:2 (libdispatch.dylib:x86_64+0x2657)

  Location is heap block of size 56 at 0x7b100000e080 allocated by thread T3:
    #0 malloc <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x4f42a)
    #1 swift_slowAlloc <null>:2 (libswiftCore.dylib:x86_64+0x2f2ca8)
    #2 makeLocalSwiftServer(client:sourcekitd:clientCapabilities:) SwiftLanguageServer.swift:1339 (SourceKitLSPPackageTests:x86_64+0xbbf1aa)
    #3 languageService(for:_:options:client:in:) SourceKitServer.swift:1009 (SourceKitLSPPackageTests:x86_64+0xb4298d)
    #4 closure #1 in SourceKitServer.languageService(for:_:in:) SourceKitServer.swift:263 (SourceKitLSPPackageTests:x86_64+0xb40f1c)
    #5 partial apply for closure #1 in SourceKitServer.languageService(for:_:in:) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xb51f6a)
    #6 thunk for @callee_guaranteed () -> (@owned ToolchainLanguageServer?, @error @owned Error) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xb42e46)
    #7 partial apply for thunk for @callee_guaranteed () -> (@owned ToolchainLanguageServer?, @error @owned Error) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xb51ff7)
    #8 orLog<A>(_:level:logger:_:) Logging.swift:58 (SourceKitLSPPackageTests:x86_64+0x50dea0)
    #9 SourceKitServer.languageService(for:_:in:) SourceKitServer.swift:262 (SourceKitLSPPackageTests:x86_64+0xb40a6a)
    #10 SourceKitServer.languageService(for:_:in:) SourceKitServer.swift:298 (SourceKitLSPPackageTests:x86_64+0xb4334c)
    #11 SourceKitServer.openDocument(_:workspace:) SourceKitServer.swift:556 (SourceKitLSPPackageTests:x86_64+0xb30ded)
    #12 implicit closure #12 in implicit closure #11 in SourceKitServer._registerBuiltinHandlers() SourceKitServer.swift:75 (SourceKitLSPPackageTests:x86_64+0xb308d0)
    #13 partial apply for implicit closure #12 in implicit closure #11 in SourceKitServer._registerBuiltinHandlers() <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xb56a40)
    #14 closure #1 in SourceKitServer.registerWorkspaceNotfication<A>(_:) SourceKitServer.swift:197 (SourceKitLSPPackageTests:x86_64+0xb3e971)
    #15 partial apply for closure #1 in SourceKitServer.registerWorkspaceNotfication<A>(_:) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xb49d34)
    #16 thunk for @escaping @callee_guaranteed (@guaranteed Notification<A>) -> () <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa164ab)
    #17 partial apply for thunk for @escaping @callee_guaranteed (@guaranteed Notification<A>) -> () <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa1a5a4)
    #18 thunk for @escaping @callee_guaranteed (@in_guaranteed Notification<A>) -> (@out ()) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa17860)
    #19 partial apply for thunk for @escaping @callee_guaranteed (@in_guaranteed Notification<A>) -> (@out ()) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa1b7a0)
    #20 closure #1 in LanguageServerEndpoint.handle<A>(_:from:) LanguageServer.swift:168 (SourceKitLSPPackageTests:x86_64+0xa177b7)
    #21 partial apply for closure #1 in LanguageServerEndpoint.handle<A>(_:from:) <compiler-generated> (SourceKitLSPPackageTests:x86_64+0xa1aaa9)
    #22 thunk for @escaping @callee_guaranteed () -> () <compiler-generated> (SourceKitLSPPackageTests:x86_64+0x17713)
    #23 __tsan::invoke_and_release_block(void*) <null>:3 (libclang_rt.tsan_osx_dynamic.dylib:x86_64h+0x718fb)
    #24 _dispatch_client_callout <null>:2 (libdispatch.dylib:x86_64+0x2657)

  Thread T8 (tid=2277677, running) is a GCD worker thread

  Thread T3 (tid=2277601, running) is a GCD worker thread

SUMMARY: ThreadSanitizer: data race Connection.swift:93 in LocalConnection.close()
==================
Test Case '-[SourceKitLSPTests.FormattingTests testConfigFileInNestedDirectory]' passed (3.932 seconds).
Test Case '-[SourceKitLSPTests.FormattingTests testConfigFileInParentDirectory]' started.
Test Case '-[SourceKitLSPTests.FormattingTests testConfigFileInParentDirectory]' passed (0.210 seconds).
Test Case '-[SourceKitLSPTests.FormattingTests testSpaces]' started.
Test Case '-[SourceKitLSPTests.FormattingTests testSpaces]' passed (0.206 seconds).
Test Case '-[SourceKitLSPTests.FormattingTests testTabs]' started.
Test Case '-[SourceKitLSPTests.FormattingTests testTabs]' passed (0.169 seconds).
Test Suite 'FormattingTests' passed at 2020-07-22 16:30:28.751.
         Executed 5 tests, with 0 failures (0 unexpected) in 4.995 (4.996) seconds
Test Suite 'SourceKitLSPPackageTests.xctest' passed at 2020-07-22 16:30:28.751.
         Executed 5 tests, with 0 failures (0 unexpected) in 4.995 (4.996) seconds
Test Suite 'All tests' passed at 2020-07-22 16:30:28.751.
         Executed 5 tests, with 0 failures (0 unexpected) in 4.995 (4.999) seconds
ThreadSanitizer: reported 2 warnings
Exited with signal code 6

we should call self.documentManager.latestSnapshot on the queue, otherwise you will run into the synchronization issues that you're talking about (since you may try to fetch a snapshot before the open call makes it through the queue).

Good to know! I couldn't find any place where openDocument synchronized on "swift-language-server-queue" so I thought that they are independent.

What is thread sanitizer complaining about?

full output

Hmm it looks like the shutdown method might need to do
// or maybe self.queue.sync
self.queue.async {
  client.close()
}

I think @benlangmuir has a better understanding of the shutdown flow

Yeah, that seems like it ought to work.  Or LocalConnection itself should be made thread-safe.

Ping.
Any news on this?

The Swift project moved the default branch to main and deleted master branch, so GitHub automatically closed the PR. Please re-create the pull request with main branch.
More detail about the branch update - https://forums.swift.org/t/updating-branch-names/40412


Add option for layout to access exposures

Fix https://github.com/dry-rb/dry-view/issues/84
@timriley I opened this PR so we can start a discussion of the best way to allow layout access exposures.
This implementation uses a new setting exposure_in_layout
Based on that setting it will pass the locals to the layout or not.
I think this is not a bad idea, but I guess it could get out of hand depending on the size of locals since it would be in both layout_scope and template_scope and maybe would affect the performance of the library
I thought of having an exposure option base implementation where the user, can decide with exposure will be available in the layout.
vc = Class.new(Dry::View::Controller) do
  configure do |config|
    config.paths = SPEC_ROOT.join('fixtures/templates')
    config.layout = 'app_with_users'
    config.template = 'users'
    config.default_format = :html
  end

  expose :users, layout: true
end.new

Of course, this implementation will require more changes in the codebase, but I wanted to open the discussion before starting to code.
Look forward to hearing your thoughts.

@timriley, of course, I will have another go 😉. Thanks for the feedback, I completely agree is much better to option per exposure reducing the number of locals that we pass to the layout.
Another question? Do we allow private exposures to be visible in the layout if the user set up that way?

Thanks for your feedback @timriley !
I forgot that parts had access to the context. It makes exposures and context different, of course. But, still, I don't see the differentiation between them completely clear. I'll try to explain the alternative way I have in mind.
First, I'd like to state that having both exposures and context adds complexity and cognitive load, so it should pay off somewhere.
As you say and as it is said in the docs, context is intended to be used as a "baseline rendering context". Reading the examples given in the docs it is clear what it means:

It most usefully holds data that you wouldn’t want to pass around explicitly, e.g.:
Request-specific data like CSRF tags
A “current user” or similar session-based data needed across multiple places
Application assets helpers
”content_for”-style helpers

So, that "baseline rendering context" is related to implicitness, right? But, being exposures inheritable, another possibility could be just defining the implicit variables in the parent view so all its descendants use them implicitly.
But then, as you made me realize, there are the parts. At first, I thought that we wouldn't loose too much forcing them to be explicit:
<%= user.render :form, csrf: :csrf_token %>

Then I re-read one of the points in the doc:

Application assets helpers

True! include's and similar... They would force us to do something a bit awkward in Ruby like providing a method like a "variable":
<%= user.render :form, csrf: :csrf_token, link_to: :link_to %>

In the previous example, maybe we should use internally something like Object#method, and maybe it would be necessary to call like link_to.() in the part. Right now, I'm in a funny moment because I have been one year out of Ruby and working with 100% functional languages Haskell & Elixir, so I'm seeing the language with new eyes and re-adapting to it :smile: I mean, I find the previous example usable, but I realize that it is not taking profit of Ruby strengths like implicitly.
But the point here, in my humble opinion, is to realize that having an additional context layer adds cognitive load and complexity but the trade-off is implicitness, internal simplicity (no Object#method machinery) and surely usability for Ruby conventions.


Update to docs for handle_RCPT

Looks like a copy/paste error from handle_MAIL
What do these changes do?
Update the docs.
Are there changes in behavior for the user?
No
Related issue number
None
Checklist

[x] Documentation reflects the changes

How in the name of all things holy I can rerun the GitHub CI workflow for this ...

@pepoluan try closing and re-opening the PR.

Also make an --allow-empty commit and push to the fork/branch

Or rebasing on main/master

Closing & reopening to trigger GHCI

@pepoluan try closing and re-opening the PR.

Yay this works!

Also make an --allow-empty commit and push to the fork/branch

Might also work but too much work for me 😜

One failure between 48 jobs. Actually, one single test (among thousands cumulatively). With no plausible reasons as to why.
I am tempted to attribute that to cosmic rays doing some inopportune interference, but let's just rerun the tests.

Now they all pass. Go figure 😛

Squamerging this now.


Support "strongly typed" cloud init documents

Currently I believe this provider requires the author of a Config to pass a cloud-config as opaque data, e.g:
apiVersion: cloudinit.crossplane.io/v1alpha1
kind: Config
metadata:
  name: cloudinit
  namespace: default
spec:
  writeCloudInitToRef:
    name: cloudinit
    namespace: default
    key: cloud-init
  forProvider:
    boundary: MIMEBOUNDARY
    parts:
    - configMapKeyRef:
      name: foo
      namespace: default
      key: foo
      optional: true
    - content: |
        #!/bin/sh
        echo "Hello World, from provider-cloudinit"
    - content: |
        #cloud-config
        users:
        - default
        - name: yourusername
          gecos: Your Name
          sudo: ALL=(ALL) NOPASSWD:ALL
          ssh_authorized_keys:
            - ssh-rsa YOURKEY

Would it be feasible to model (a subset of?) the config document as part of the actual schema? e.g.
---
apiVersion: cloudinit.crossplane.io/v1alpha1
kind: Config
metadata:
  name: cloudinit
  namespace: default
spec:
  writeCloudInitToRef:
    name: cloudinit
    namespace: default
    key: cloud-init
  forProvider:
    boundary: MIMEBOUNDARY
    parts:
    - configMapKeyRef:
      name: foo
      namespace: default
      key: foo
      optional: true
    # This is an opaque blob.
    - rawContent: |
        #!/bin/sh
        echo "Hello World, from provider-cloudinit"
    # This is validatable using our CRD schema.
    - content:
        users:
        - default
        - name: yourusername
          gecos: Your Name
          sudo: ALL=(ALL) NOPASSWD:ALL
          ssh_authorized_keys:
            - ssh-rsa YOURKEY

Thanks for creating this issue, @negz.
I had a similar thought when I was sketching this project out:
https://github.com/displague/provider-cloudinit/blame/main/SLIDES.md#L288
The thing that gave me hesitation was not knowing if the content could be serialized faithfully, strictly validated, or if there was any benefit over embedding cloud-config as text.
If we can't find an official go cloud-config definition, preferably with struct tags, this project might have to become a self-authority on that definition and that could lead to required maintainance to follow up stream changes.  An open text field avoids that, and is still permitted through rawContent.
https://github.com/juju/juju/blob/develop/cloudconfig/cloudinit/cloudinit.go

Taking this one step deeper, one piece of content, supported by cloud-config is write_files.
write_files:
  - content: |
        {
          "exec-opts": ["native.cgroupdriver=systemd"],
          "log-driver": "json-file",
          "log-opts": {
            "max-size": "100m"
          },
          "storage-driver": "overlay2"
        }
    path: /etc/docker/daemon.json
  - content: foo
    path: /root/foo

Should a cloud-config field like this one be made more accessible, allowing for the file to be ConfigMap derived:
---
apiVersion: cloudinit.crossplane.io/v1alpha1
kind: Config
metadata:
  name: cloudinit
  namespace: default
spec:
  writeCloudInitToRef:
    name: cloudinit
    namespace: default
    key: cloud-init
  forProvider:
    boundary: MIMEBOUNDARY
    parts:
    - configMapKeyRef:
        name: foo
        namespace: default
        key: foo
        optional: true
      writeFilesPath: /root/foo # or perhaps writeFile or path
      # this would construct the following part:
      #
      # #cloud-config
      # write-files:
      # - path: /root/foo
      #   content: foo


Metabase Dashboard Report: Minnesota

Description
Minnesota has request for a report that lists all SimpleReport senders currently submitting test results for COVID, FLU, and RSV for Minnesota.
Acceptance Criteria
The Metabase report should include:

Sender name
Sender location (location = city and state only, not address)
Sender org type
Number of results sent for COVID from the sender
Number of all flu results sent from the sender
Number of results sent for RSV from the sender

Limit the search to the past 3 months to show only "current" active senders.

Include the following two recipients on the distribution list:
Japa, Srujana (MDH<EMAIL_ADDRESS>Eweka, Beatrice (MDH<EMAIL_ADDRESS>
Additional context

For now, "senders" will be any facilities located in MN. https://skylight-hq.slack.com/archives/C065V4DHBQF/p1726074866839879

Added the two emails to the weekly distribution list! And initial email sent!


NameError: uninitialized constant Exponent

I've installed the gem in my rails app and this code:
client = Exponent::Push::Client.new
results in NameError: uninitialized constant Exponent.
 Any help will be appreciated.

I don't know what caused this, but I rebooted my computer and it went away.

I don't know what caused this, but I rebooted my computer and it went away.

It's just needed to restart the server to allow ./config initializers be loaded again.

I don't know what caused this, but I rebooted my computer and it went away.

It's just needed to restart the server to allow ./config initializers be loaded again.


"Time tracked" always shows 00m 00s

I have Toggl Button 0.80 installed and "Time Tracked" always shows 00m 00s in Trello cards.
Google Chrome Version 47.0.2526.111 (64-bit)
Ubuntu 15.10

I've looked into this issue and it seems that this can happen if the project is not automatically assigned. The "Time Tracked" calculation takes account the project and description of the task. If you change the project after starting the timer it will be assigned to another project and the calculation will not take it into account when summing up the time. The best way for this feature to work would be to have identical project name in Toggl and board name in Trello. That way project is assigned at timer start and Time tracked is calculated correctly.

Is this functionality going to change in the future? Wouldn't it be more useful to have Toggl display time tracked on any card, since not every project has its board? The good thing about Trello is that it's very flexible and it would be awesome if Toggl wouldn't be limited to a certain use case. I'm not sure about how difficult or time consuming would be such an implementation…

We will improve this functionality. The current solution is version one. We already have plans to make it work better with different types of cards.

Closing, any future development will be in #508.


revisit browser "edit mode" handling in QnA docs

Edit mode handling or QnA doc answers seems flaky -- sometmes duplicates last answer as a draft at bottom. Need to rework this to simplify the logic.

okay to push to 8.0-2? has anyone replicated this or is it more of a clean up task?

This is a real bug. I have half of a fix ready.

Went into http://rh6-intel64-80-qa-dev-2:3000/doc/soq25820489
added a comment ( Linux ML 01/22 and latest develop code)
Error is seen at the top .


test-css-border functional test fails

It seems the CSS border has problems cascading the following to the frame: border-top: 12px solid blue; The color gets lost in translation, somehow.
See : https://www.tribaal.org/images/test-css-border.png

That works now.


CSS for internal site

The CSS on the internal site works differently. When the headline/display is placed before the canvas it is not visable on the webpage.
The Element has to be after the canvas div however this get's changed during page loading.

This has been fixed with Z-Index property


Upgrade Terraform, AzureRM, Porter

What is being addressed

Upgrade Terraform CLI to 1.2.7
Upgrade Terraform's AzureRM in core to 3.19.1
Upgrade Porter to 0.38.12
Upgrade YQ to 4.27.2
Remove Terraform from Resource Processor image is it's not in use there.
Update Event Grid definition to use enable_local_debugging setting

/test

/test-extended

/test-extended

/test-destroy-env

/test-extended


error TS1110: Type expected.

after updating to 0.1.3 I received this error during build:

angular2-modal/dist/commonjs/models/ModalConfig.d.ts(1,42): error TS1110: Type expected.

even though modal still work find.

I have also this error with error above:
TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.
TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.

That's because he's now using string literal types, which is a feature added in TypeScript 1.8. You could either upgrade your (global) TypeScript compiler or change BootstrapModalSize to be 'string' instead.

Oh, thanks very much. such a simple solution


Too many files in root directory

Maybe we can move all libcontainer package files into a dir named libcontainer? Like Docker has a dir named Docker which contains main package files. WDYT?

I kinda like the root dir because its simple, there is only one place to look to find out where the code is.

Thanks for answering, just make sure you noticed this issue, anyway it's your call, let's leave it as it was.


Cannot update Crouton (Release does not match)

chronos@localhost /home/linux/chroots $ sudo edit-chroot -all -c /home/linux/chroots/
name: buster
encrypted: no
Entering /home/linux/chroots/buster...
crouton: version 1-20190403182822~master:174af0eb
release: buster
architecture: amd64
xmethod: xorg
targets: xfce
host: version 12871.48.0 (Official Build) beta-channel auron_yuna
kernel: Linux localhost 4.14.167-14953-g10fef9ca764e #1 SMP PREEMPT Tue Mar 17 00:20:24 PDT 2020 x86_64 GNU/Linux
freon: yes
Unmounting /home/linux/chroots/buster...
I have no idea why but the audio on my chroot always screws up at some point.
I have recently updated my debian distribution to bullseye (testing)
I am hoping to update the crouton in order to potentially fix my audio issue (no audio output coming out of the laptop when I am running linux xfce4)
When I try to update the crouton I get this error (see image)
Please help!

It turns out, that if your /etc/apt/sources.list file has something like 'testing' instead of the actual name of the release 'bullseye' then the release won't match because.. obviously the releases crouton shows when you list them... are their actual name.


How to delete a document inside DocArray by id correctly?

Hi, I'm trying to delete several documents using this syntax and elastic backend.
from docarray import Document, DocumentArray
import numpy as np

n_dim = 3

da = DocumentArray(
    storage="elasticsearch",
    config={
        "n_dim": n_dim,
        "columns": [("price", "int")],
        "distance": "l2_norm",
        "index_name": "old_stuff",
    },
)

with da:
    da.extend(
        [
            Document(id=f"r{i}", embedding=i * np.ones(n_dim), tags={"price": i})
            for i in range(10)
        ]
    )

print("\nIndexed Prices:\n")
for embedding, price in zip(da.embeddings, da[:, "tags__price"]):
    print(f"\tembedding={embedding},\t price={price}")

del da[["r0","r1"]]

print("\nIndexed Prices:\n")
for embedding, price in zip(da.embeddings, da[:, "tags__price"]):
    print(f"\tembedding={embedding},\t price={price}")

when I run those code, It print the correct output ( 2 doc deleted )
Indexed Prices:

        embedding=[0. 0. 0.],    price=0
        embedding=[1. 1. 1.],    price=1
        embedding=[2. 2. 2.],    price=2
        embedding=[3. 3. 3.],    price=3
        embedding=[4. 4. 4.],    price=4
        embedding=[5. 5. 5.],    price=5
        embedding=[6. 6. 6.],    price=6
        embedding=[7. 7. 7.],    price=7
        embedding=[8. 8. 8.],    price=8
        embedding=[9. 9. 9.],    price=9

Indexed Prices:

        embedding=[2. 2. 2.],    price=2
        embedding=[3. 3. 3.],    price=3
        embedding=[4. 4. 4.],    price=4
        embedding=[5. 5. 5.],    price=5
        embedding=[6. 6. 6.],    price=6
        embedding=[7. 7. 7.],    price=7
        embedding=[8. 8. 8.],    price=8
        embedding=[9. 9. 9.],    price=9

but when I execute the code again ( without adding more data, using the already initialized index ), the output become like this ( duplicate doc )
Indexed Prices:

        embedding=[2. 2. 2.],    price=2
        embedding=[3. 3. 3.],    price=3
        embedding=[4. 4. 4.],    price=4
        embedding=[5. 5. 5.],    price=5
        embedding=[6. 6. 6.],    price=6
        embedding=[7. 7. 7.],    price=7
        embedding=[8. 8. 8.],    price=8
        embedding=[9. 9. 9.],    price=9
        embedding=[8. 8. 8.],    price=8
        embedding=[9. 9. 9.],    price=9

and I notice that in es only the old_stuff index deleted ( from 10 -> 8 docs ), but the offset2id__old_stuff docs is not deleted ( still 10 docs )

Thank you for your insights, I am investigating this. I guess you mean you run the script provided twice. I would expect this to break since you want to add to the db many elements with the same ID but somehow it is not breaking.

Oh no actually, I still expect get r2 to r9, notes that I comment the extend and del part ag the second run

Isn't it will overwrite the docs if we use the same id? For the overwrite part it beahve already as I expected

I notice that in elastic GetSetDelMixin , there are no operation performed which involved self._index_name_offset2id operation on the delete operation which makes the offset and id mapping inconsistent @davidbp

Hey @alphinside ,
I will close this issue in favour of #412


Added triplet algorithm in all four languages using sorting

🛠 Issue #482
✔ Check List

[x] My code follows the code style of this project.
[x] This PR does not contain plagiarized content.
[x] The title of my pull request is a short description of the requested changes.

📄 Note to reviewers
Problem Description :
Given an array and a value, find if there is a triplet in the array whose sum is equal to the given value. If there is such a triplet present in the array, then print the triplet and return true. Else return false.
EXAMPLES:
1] Input: array = { 7, 10, 6, 14, 4, 9 }, sum = 25;
Output: Triplet is 4, 7, 14

📷 Screenshots

@atul1510 Take input from user, instead of giving it directly in program

@Arun9739  I have completed all the requested changes. please review them.


SampleApp couldn't establish connection.

We have problem to establish connection with AVS while we are testing RAR on SampleAPP.
Before yesterday, we disabled peer verify and it was okay to establish connection.
In prepareForTLS, we changed:  SETOPT(handle, CURLOPT_SSL_VERIFYPEER, 2L)， -> SETOPT(handle, CURLOPT_SSL_VERIFYPEER, 0L)，
But since yesterday, we couldn't establish connection and the log is (repeatingly):
HTTP2Transport::establishConnection -> long downchannelResponseCode = m_downchannelStream->getResponseCode(); return 0
E HTTP2Transport:networkLoopRetryingToConnect:reason=establishConnectionFailed,retryCount=1
Did the server modify its rules?
We tried to enable peer verify, but libcurl return this error: Peer certificate cannot be authenticated with given CA certificates.
Do we need to load any specified certificates and how to implement it?
Some detailed log printed by libcurl if we enable peer verify:

Hostname avs-alexa-na.amazon.com was found in DNS cache
Trying <IP_ADDRESS>...
TCP_NODELAY set
Connected to avs-alexa-na.amazon.com (<IP_ADDRESS>) port 443 (#2)
ALPN, offering h2
ALPN, offering http/1.1
Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to avs-alexa-na.amazon.com:443
stopped the pause stream!
Closing connection 2

I did a test on our CA, this is the result to connect to a example server:
root@TinaLinux:/etc# curl -vI https://www.example.com

Rebuilt URL to: https://www.example.com/
Trying <IP_ADDRESS>...
TCP_NODELAY set
Connected to www.example.com (<IP_ADDRESS>) port 443 (#0)
ALPN, offering h2
ALPN, offering http/1.1
Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
TLSv1.2 (OUT), TLS header, Certificate Status (22):
TLSv1.2 (OUT), TLS handshake, Client hello (1):
TLSv1.2 (IN), TLS handshake, Server hello (2):
TLSv1.2 (IN), TLS handshake, Certificate (11):
TLSv1.2 (IN), TLS handshake, Server finished (14):
TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
TLSv1.2 (OUT), TLS change cipher, Client hello (1):
TLSv1.2 (OUT), TLS handshake, Finished (20):
TLSv1.2 (IN), TLS change cipher, Client hello (1):
TLSv1.2 (IN), TLS handshake, Finished (20):
SSL connection using TLSv1.2 / AES128-GCM-SHA256
ALPN, server accepted to use h2
Server certificate:
subject: C=US; ST=California; L=Los Angeles; O=Internet Corporation for Assigned Names and Numbers; OU=Technology; CN=www.example.org
start date: Nov  3 00:00:00 2015 GMT
expire date: Nov 28 12:00:00 2018 GMT
subjectAltName: host "www.example.com" matched cert's "www.example.com"
issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert SHA2 High Assurance Server CA
SSL certificate verify ok.
Using HTTP2, server supports multi-use
Connection state changed (HTTP/2 confirmed)
Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
Using Stream ID: 1 (easy handle 0x37018)

HEAD / HTTP/2
Host: www.example.com
User-Agent: curl/7.54.0
Accept: /

Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 200
HTTP/2 200
< content-encoding: gzip
content-encoding: gzip
< accept-ranges: bytes
accept-ranges: bytes
< cache-control: max-age=604800
cache-control: max-age=604800
< content-type: text/html
content-type: text/html
< date: Thu, 21 Sep 2017 06:06:21 GMT
date: Thu, 21 Sep 2017 06:06:21 GMT
< etag: "359670651+gzip"
etag: "359670651+gzip"
< expires: Thu, 28 Sep 2017 06:06:21 GMT
expires: Thu, 28 Sep 2017 06:06:21 GMT
< last-modified: Fri, 09 Aug 2013 23:54:35 GMT
last-modified: Fri, 09 Aug 2013 23:54:35 GMT
< server: ECS (cpm/F9FC)
server: ECS (cpm/F9FC)
< x-cache: HIT
x-cache: HIT
< content-length: 606
content-length: 606

And here is the same steps to connect to target Amazon server:
root@TinaLinux:/etc# curl -vI https://api.amazon.com/auth/o2/token

Trying <IP_ADDRESS>...
TCP_NODELAY set
Connected to api.amazon.com (<IP_ADDRESS>) port 443 (#0)
ALPN, offering h2
ALPN, offering http/1.1
Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
TLSv1.2 (OUT), TLS header, Certificate Status (22):
TLSv1.2 (OUT), TLS handshake, Client hello (1):
TLSv1.2 (IN), TLS handshake, Server hello (2):
TLSv1.2 (IN), TLS handshake, Certificate (11):
TLSv1.2 (OUT), TLS alert, Server hello (2):
SSL certificate problem: certificate is not yet valid
stopped the pause stream!
Closing connection 0
TLSv1.2 (OUT), TLS alert, Client hello (1):
curl: (60) SSL certificate problem: certificate is not yet valid
More details here: https://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.
HTTPS-proxy has similar options --proxy-cacert and --proxy-insecure.

Not sure if it's the CA issue or Amazon server issue, it works now.

Hi,
If this reoccurs, please re-open the issue and we can help investigate further.


Array cells to be able to display the full array string rather than requiring expanding / collapsing to view n+1 array items

Is your feature request related to a problem? Please describe.
When DBeaver displays an array cell, it currently displays the first value and reduces the rest of the array to a count, with the ability to expand/collapse additional rows to view n+1 items in the array. While some users may prefer this style for their use cases, the pattern has the effect of creating an obfuscation that detracts from at-a-glance readability.
Describe the solution you'd like
DBeaver should be able to show the full array string, as if it were a regular text field. If not by default, and if not for all cases, then at least as a display preference.
Describe alternatives you've considered
I wrote into an earlier thread and was informed there is no way to disable this view right now, leaving with me no solution other than to work within the confines of the current feature set.
Additional context
Thank you!

Thanks for the issue


Google translate support should ignore region codes

Actually when you are using region codes like en-us or de-ch  you cannot auto translats it.
Error is language not supported.
The region code should be ignored for auto translation.

Already realized in xliffmerge.


Numerous doc issues

Description
The documentation currently hosted on gitbook.io is generally good but could be improved by addressing issues such as:

Inconsistent style of package names in text; all should be enclosed in backticks.

Inconsistent use of paragraph-per-line convention. Some sentences are split across lines. Addressing this will help automated grammar tools be effective.

Some bare links in text, where they are just clutter. Markdown link with alt text should be used consistently.

Numerous grammatical issues such as incorrect use of tense and ordinal agreement. Example from "Building Blocks":

In this section we are going to explain the building blocks of the boilerplate in details.

This would be better as:

In this section, we will explain the building blocks of the boilerplate in detail

Grammar: Use of "its" for the contraction of "it is", should be "it's".

Inconsistent capitalization of project names, e.g., "redux" and "react.

Grammar: Missing and misplaced punctuation.

Paragraph-quotes used in place of {% hint %} tags in several files.

Steps to reproduce
View the production documentation on gitbook.io](https://cansahin.gitbook.io/react-boilerplate-cra-template).
Expected behavior
The documentation should be both technically and semantically correct. To be accessible to users whose English may not be strong, complex sentences should be avoided. The style of presentation should be consistent throughout the docs so users find it familiar.
NOTE: A Gitbook of the proposed changes is available for review on gitbook.com. (The changes are on my fork of the repo.
Screenshots
n/a
Versions

react-boilerplate-cra-template: 1.0.1
Node/NPM: n/a
Browser: n/a

Why not a pull request. You already made the changes. Just submit as PR and I don't have to do them manually again :)

It's no surprise because most of the docs update I make is in my scattered free time (like over a year). So, its pretty discrete every time in my mind :)

added at 45c604c1e5ed7e29dfd0351b3b9c7eaf1cc01a05


Allow setting per-item expiry in cache

Useful directly, and also in some using projects.

Thanks, good catch!  Settings manager actually doesn't need this, so I just implemented it as a panic.


Syntax Error in Udacity example code

Please make sure that this is a bug. As per our GitHub Policy, we only address code/doc bugs, performance issues, feature requests and build/installation issues on GitHub. tag:bug_template
System information

Have I written custom code (as opposed to using a stock example script provided in TensorFlow): No
OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Windows 10
Mobile device (e.g. iPhone 8, Pixel 2, Samsung Galaxy) if the issue happens on mobile device: No
TensorFlow installed from (source or binary): Binary
TensorFlow version (use command below): 1.13.1
Python version: 3.6.8
Bazel version (if compiling from source): NA
GCC/Compiler version (if compiling from source): NA
CUDA/cuDNN version: 10.0
GPU model and memory: nVIDIA GTX 1050 Ti

You can collect some of this information using our environment capture script
You can also obtain the TensorFlow version with
python -c "import tensorflow as tf; print(tf.GIT_VERSION, tf.VERSION)"
Describe the current behavior
A syntax error is raised.
Describe the expected behavior
The example code should work without modifications.
Code to reproduce the issue
Provide a reproducible test case that is the bare minimum necessary to generate the problem.
The first code block on:
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/udacity/1_notmnist.ipynb
gives an error when it tries to execute:
# Config the matplotlib backend as plotting inline in IPython
%matplotlib inline

SyntaxError: invalid syntax
Other info / logs
Include any logs or source code that would be helpful to diagnose the problem. If including tracebacks, please include the full traceback. Large logs and files should be attached.

If you are not using Jupyter IPython notebook, just comment out (or delete) the line, everything will work fine and a separate plot window will be opened if you are running your python script from the console.
If you want to make use of the line, install Jupyter IPython and run the notebook through that.
Let me know if the issue still exists. Thanks :)

@Ayush517 Thanks! The tutorial didn't mention Jupyter anywhere that I saw. It also wasn't obvious how to get the .py code running in Jupyter, but I've got it working now!

If it's resolved, you can close the issue 😄
Just let us know if you have any more issues. Thanks


High CPU usage caused by integration

Version of the custom_component

Version: 0.1.2
Gecko Lib: 0.4.1
Configuration
inYT: 567 v5.0
Low-level Conf.: 8
Keypad: 109 v6.0

Describe the bug
When the integration is enabled CPU usage pegs a single core of my system to 100%.  Verified disabling the integration brings system usage back in line.

Logs
Debug log
<!-- To enable debug logs check this https://www.home-assistant.io/components/logger/ -->
2022-03-16 15:02:50 INFO (MainThread) [custom_components.gecko]
-------------------------------------------------------------------
Gecko
Version: 0.1.2
Gecko Lib: 0.4.1
This is a custom integration!
If you have any issues with this you need to open an issue here:
https://github.com/gazoodle/gecko-home-assistant/issues
-------------------------------------------------------------------
2022-03-16 15:02:50 DEBUG (MainThread) [custom_components.gecko] Setup entry for UUID 85e308fd-e9e7-4cbd-bc2a-1f5274c52060, ID SPA04:91:62:ce:e4:9b, address None (None)
2022-03-16 15:02:50 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.SPA_MAN_ENTER, state GeckoSpaState.IDLE
2022-03-16 15:02:51 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.LOCATING_STARTED, state GeckoSpaState.LOCATING_SPAS
2022-03-16 15:02:51 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.LOCATING_DISCOVERED_SPA, state GeckoSpaState.LOCATING_SPAS
2022-03-16 15:02:55 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.LOCATING_FINISHED, state GeckoSpaState.LOCATED_SPAS
2022-03-16 15:02:55 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.LOCATING_STARTED, state GeckoSpaState.LOCATING_SPAS
2022-03-16 15:02:55 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.LOCATING_DISCOVERED_SPA, state GeckoSpaState.LOCATING_SPAS
2022-03-16 15:02:55 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.LOCATING_FINISHED, state GeckoSpaState.LOCATED_SPAS
2022-03-16 15:02:55 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.CLIENT_HAS_STATUS_SENSOR, state GeckoSpaState.LOCATED_SPAS
2022-03-16 15:02:55 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.CLIENT_HAS_RECONNECT_BUTTON, state GeckoSpaState.CONNECTING
2022-03-16 15:02:55 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.CONNECTION_STARTED, state GeckoSpaState.CONNECTING
2022-03-16 15:02:55 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.RUNNING_PING_RECEIVED, state GeckoSpaState.CONNECTING
2022-03-16 15:02:55 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.CONNECTION_GOT_FIRMWARE_VERSION, state GeckoSpaState.CONNECTING
2022-03-16 15:02:55 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.CLIENT_HAS_PING_SENSOR, state GeckoSpaState.CONNECTING
2022-03-16 15:02:55 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.CONNECTION_GOT_CHANNEL, state GeckoSpaState.CONNECTING
2022-03-16 15:02:55 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.CONNECTION_GOT_CONFIG_FILES, state GeckoSpaState.CONNECTING
2022-03-16 15:02:55 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.CONNECTION_INITIAL_DATA_BLOCK_REQUEST, state GeckoSpaState.CONNECTING
2022-03-16 15:02:59 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.CONNECTION_SPA_COMPLETE, state GeckoSpaState.SPA_READY
2022-03-16 15:02:59 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.CLIENT_FACADE_IS_READY, state GeckoSpaState.CONNECTED
2022-03-16 15:02:59 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.CONNECTION_FINISHED, state GeckoSpaState.CONNECTED
2022-03-16 15:02:59 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.RUNNING_PING_RECEIVED, state GeckoSpaState.CONNECTED
2022-03-16 15:03:01 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.RUNNING_PING_RECEIVED, state GeckoSpaState.CONNECTED
2022-03-16 15:03:02 DEBUG (MainThread) [custom_components.gecko.spa_manager] Load platforms ['binary_sensor', 'button', 'fan', 'sensor', 'switch', 'climate', 'light']
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Circulating Pump/SPA049162cee49b-CIRCULATING PUMP
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Ozone/SPA049162cee49b-OZONE
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Smart Winter Mode:Active/SPA049162cee49b-SMART WINTER MODE:ACTIVE
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Filter Status:Clean/SPA049162cee49b-FILTER STATUS:CLEAN
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Filter Status:Purge/SPA049162cee49b-FILTER STATUS:PURGE
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Reconnect/SPA049162cee49b-RECONNECT
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Pump 2/SPA049162cee49b-P2
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Pump 1/SPA049162cee49b-P1
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Status/SPA049162cee49b-STATUS
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Last Ping/SPA049162cee49b-PING
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Smart Winter Mode:Risk/SPA049162cee49b-SMART WINTER MODE:RISK
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Rinse filter due/SPA049162cee49b-RinseFilter
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Clean filter due/SPA049162cee49b-CleanFilter
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Change water due/SPA049162cee49b-ChangeWater
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Check Spa due/SPA049162cee49b-CheckSpa
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Economy Mode/SPA049162cee49b-EconActive
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Heater/SPA049162cee49b-HEAT
2022-03-16 15:03:02 INFO (MainThread) [custom_components.gecko.entity] Setup entity Lights/SPA049162cee49b-LI
2022-03-16 15:03:03 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.RUNNING_PING_RECEIVED, state GeckoSpaState.CONNECTED
2022-03-16 15:03:05 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.RUNNING_PING_RECEIVED, state GeckoSpaState.CONNECTED
2022-03-16 15:03:07 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.RUNNING_PING_RECEIVED, state GeckoSpaState.CONNECTED
2022-03-16 15:03:09 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.RUNNING_PING_RECEIVED, state GeckoSpaState.CONNECTED
2022-03-16 15:03:11 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.RUNNING_PING_RECEIVED, state GeckoSpaState.CONNECTED
2022-03-16 15:03:13 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.RUNNING_PING_RECEIVED, state GeckoSpaState.CONNECTED
2022-03-16 15:03:15 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.RUNNING_PING_RECEIVED, state GeckoSpaState.CONNECTED
2022-03-16 15:03:18 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.RUNNING_PING_RECEIVED, state GeckoSpaState.CONNECTED
2022-03-16 15:03:20 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.RUNNING_PING_RECEIVED, state GeckoSpaState.CONNECTED
2022-03-16 15:03:22 DEBUG (MainThread) [custom_components.gecko.spa_manager] Event: GeckoSpaEvent.RUNNING_PING_RECEIVED, state GeckoSpaState.CONNECTED

Validated rolling back to v0.0.12 reduces usage, then upgrading to anything later than that causes the extra usage.

Thanks! I suspect that it's down to my lack of experience with Python asyncio. I'm sure there is a way to fix this, so I'll get on to that now!

v0.1.4 ought to address this.

It's definitely better so thanks!  Any thoughts on making the ping less frequent or configurable?  At every two seconds this integration is still using the most CPU out of all my integrations.  Currently HA idles at about 5% CPU with the integration enabled and .5% with the integration disabled.

Yes, making the ping less frequent is absolutely on my list. It’s actually currently 2 seconds because that’s what the in.touch2 app uses. I think it could quite reasonably be 15 or 30 seconds for HA, but ultimately I want to have a configurable setting for this, and other behaviour metrics such as timeouts, retries and so on.
Question: do you think that configuring stuff like that in the configuration.yaml file would be acceptable. I’m thinking something like
gecko:
    settings:
        ping-frequency: 30s
        task-tidy: 5s
        facade-update: 20s

Or a couple of variations, one for when the spa is idle and one for when it’s active…
That’s not a bad idea because there are several loops that keep the internal state accurate with the spa, and it’s always bugged me that this has to happen so frequently especially as I would think most spas are idle most of the time, so I’m thinking that can have a similar strategy … yes, I’m liking that, thanks @JBassett for putting me onto that.

Question: do you think that configuring stuff like that in the configuration.yaml file would be acceptable.

Wouldn't it go in the config flow as an option?

Or a couple of variations, one for when the spa is idle and one for when it’s active

That makes a lot of sense!

Question: do you think that configuring stuff like that in the configuration.yaml file would be acceptable.

Wouldn't it go in the config flow as an option?

Probably the best way, I'll have a play around

Or a couple of variations, one for when the spa is idle and one for when it’s active

That makes a lot of sense!

v0.1.5 now has the two modes, ping is 2 seconds when active and 2 minutes when idle. Hopefully will even further reduce CPU load most of the time. I'll leave this issue open as a reminder to provide configuration control over the values.

Just started my spa last weekend so gave your awesome integration a run! I was previously running a custom pooling only integration but your's is way better!
One thing though, I did notice the high CPU usage when it's enabled. My Pi normally runs at like 2-3% cpu top, and with the integration enabled, it's constantly sitting at 12-13%...
Thought I'd give a hello and some feedback!


[firestore-Translate Text] Hindi as a source language isn't getting translated

[READ] Step 1: Are you in the right place?
Issues filed here should be about bugs for a specific extension in this repository.
If you have a general question, need help debugging, or fall into some
other category use one of these other channels:

For general technical questions, post a question on StackOverflow
with the firebase tag.
For general Firebase discussion, use the firebase-talk
google group.
To file a bug against the Firebase Extensions platform, or for an issue affecting multiple extensions, please reach out to
Firebase support directly.

[REQUIRED] Step 2: Describe your configuration

Extension name: _ firestore-translate-text
Extension version: **_**0.1.5
Configuration values (redact info where appropriate):

_ Target languages - en,es,de,fr,hi,tl
_

[REQUIRED] Step 3: Describe the problem
When I am setting the text to be translated in Hindi, the text isn't getting translated. Though it works in google translator.
Steps to reproduce:
Set the text "Mera naam siddharth hai"
Expected result
en: My name is Siddharth
Actual result
Mera naam Siddharth hai

hi @itssidhere.
I have managed to successfully replicate the issue. Interestingly, this works as expected through Google Translate...
https://translate.google.com/?sl=hi&tl=en&text=Mera naam siddharth hai&op=translate
Using Hindi scripture also seems to work as expected...

but not when using Mera naam siddharth hai through the extension.
The extension utilises  the Node Api library, which under the hood calls the v2 rest Api endpoint. This endpoint returns the same response...
https://translation.googleapis.com/language/translate/v2?key=
Body:
{
  "q": ["Mera naam siddharth hai"],
  "target": "en"
}

Response:
{
    "data": {
        "translations": [
            {
                "translatedText": "Mera naam siddharth hai",
                "detectedSourceLanguage": "hi"
            }
        ]
    }
}

@dackers86 This also happens with the ML kit.

Hi there,
This doesn't seem to be an issue in the extension since the translation API returns the same response.

TL;DR;
As I understood, the provided example sentence isn't official Hindi, it's something called "Hindi Latin-Phonetics". It's not official and not widely supported, however, some translating services such as translate.google.com (the website) use an extra algorithm called phonetics converter allows non-Latin languages to be written with Latin characters.
For example, translation from Arabic using Latin letters:


Field with same name like the class name

I have the following classes:
Dtos:
public class InnerDto {

  private String code;

  private String name;
  //getters and setters
}

public class DtoWithInner {

  private Long id;

  private InnerDto dtoWithInner;
 //getters and setters
}

Entity:
public class PlaneEntity {

  private Long id;

  private String code;

  private String name;

//getters and setters
}

And mapper:
@Mapper(
    withIoC = IoC.SPRING,
    withIoCServiceName = "anyMapper",
    withIgnoreNullValue = true,
    withIgnoreMissing = IgnoreMissing.ALL,
    withCustomFields = {
        @Field({"dtoWithInner.code", "code"}),
        @Field({"dtoWithInner.name", "name"})
    }
)
public interface DtoEntityMapper  {
    PlaneEntity mapToEntity(DtoWithInner dto);

    DtoWithInner mapToDto(PlaneEntity entity);
}

As you can see there is field with the same name like the class name in DtoWithInner.
So I get the compilation error from selma-processor:
[ERROR] Bad custom field to field mapping: field out.dtowithinner from destination bean java.lang.String has no getter !
[ERROR] -->  Fix @Field({"name","dtowithinner.name"})
[ERROR] Bad custom field to field mapping: field out.dtowithinner from destination bean java.lang.String has no getter !
[ERROR] -->  Fix @Field({"code","dtowithinner.code"})

But the generated implementation of mapper has been produced successfully.
And I've got following:
@org.springframework.stereotype.Service("anyMapper")
public final class DtoEntityMapperSelmaGeneratedClass
    implements DtoEntityMapper {

  @Override
  public final PlaneEntity mapToEntity(DtoWithInner inDtoWithInner) {
    PlaneEntity out = null;
    if (inDtoWithInner != null) {
      out = new PlaneEntity();
      if (inDtoWithInner.getDtoWithInner() != null) {
        out.setCode(asString(inDtoWithInner.getDtoWithInner()));
      }
      if (inDtoWithInner.getId() != null) {
        out.setId(inDtoWithInner.getId());
      }
    }
    return out;
  }

  public final String asString(InnerDto inInnerDto) {
    java.lang.String out = null;
    if (inInnerDto != null) {
      out = new java.lang.String();
    }
    return out;
  }

@Override
  public final DtoWithInner mapToDto(PlaneEntity inPlaneEntity) {
    DtoWithInner out = null;
    if (inPlaneEntity != null) {
      out = new DtoWithInner();
      if (inPlaneEntity.getId() != null) {
        out.setId(inPlaneEntity.getId());
      }
    }
    return out;
  }

  /**
   * Single constructor
   */
  public DtoEntityMapperSelmaGeneratedClass() {
  }
}

But when I change name of field dtoWithInner to another one, I don't have the error messages.
So:

Is it known restriction that name of field cannot have the same name like the class.
Why does the error message have another order of the fields in @Field annotation:
[ERROR] -->  Fix @Field({"name","dtowithinner.name"})
Why has the mapper implementation been generated successfully?

Also I tested this configuration against latest snapshot and got the same result.
Thank you.

Just reporting that I have also recent run into this issue and had the same observations. Were you able to circumvent the problem?

Just wanted to provide an update to anyone else that may be running into this. I was able to circumvent the issue by providing FQCN's for both the input and output field mappings.


System variable are not taken into account in Links

Jenkins and plugins versions report

Environment

Paste the output here

What Operating System are you using (both controller, and any agents involved in the problem)?
Linux
Reproduction steps
1: Set System Variable NEXUS_URL in System
2: Add Link in Appearance with ${NEXUS} as value
Expected Results
Link works (upper left corner)
Actual Results
Link /$%7BNEXUS_URL%7D is called.
Anything else?
No response
Are you interested in contributing a fix?
No response

This is not script a environment. I don't really see a need for this feature. A system Property is usually set as startup parameter, so it will never change. But then you can also just use CasC and configure the plugin.

I do not intend to implement this feature


Add fix for tests failing in docker image

Fix for #36.
ref: https://github.com/docker-library/openjdk/issues/247

There is still a considerable amount of package downloading going on. Need to see if we can shorten that. I guess 2m59s isn't too bad


Introduce API Token Ephemeral Resource

This PR introduces our first Ephemeral Resource: apstra_api_token
Broad changes

I had to upgrade Terraform CLI on my workstation in order to render the docs. Terraform prior to 1.10.0 doesn't know about Ephemeral Resources.
The github.com/hashicorp/terraform-plugin-docs dependency also needed to be upgraded to generate docs for Ephemeral Resources.
The minimum version of go needed to be updated in go.mod, I think because of tfplugindocs.
The provider object, provider data, configure interfaces and documentation templates were extended to support ephemeral resources.

The new Ephemeral Resource:
apstra_api_token implements the following framework interfaces:

ephemeral.EphemeralResource
ephemeral.EphemeralResourceWithClose
ephemeral.EphemeralResourceWithConfigure
ephemeral.EphemeralResourceWithRenew

In Configure(), we extract the apstra.Client from provider data (no surprises here).
In Open(), we create a client based on the one passed in by the provider, log it in, extract the required token info, and set the Renew() time for shortly before the token expires.
In Renew(), we can't actually freshen the token. Renew() is a feature designed for "leased" credentials where the lease can be renewed without replacing the value. All we can do is raise warnings or errors. If the credential is not yet expired, we raise a warning and update the renew time. If it's expired, we raise an error.
In Close(), we call the logout API unless the user asked us not to or the token is already expired.
Odds and Ends
Bugfixes in github.com/hashicorp/terraform-plugin-docs cause several documentation pages to render differently even though the source data didn't change.

Closes #992


Topic fastfail command

Add 'fastfail' command to support early cancellation of CI-based jobs when SLAs are violated beyond an acceptable threshold.
NOTE: tests are still waiting for monkeypatch support for multiple requests, as gathering requisite SLA data required multiple API calls.

@guillaumebert Updated PR and resolved sonar issues


Introducing the RealSense D457 GMSL/FAKRA stereo camera

Hi everyone,
Intel have introduced a new member of the RealSense stereo camera family called the D457.  It is based around the D450 depth module and the new Vision Processor D4 V5.
https://www.intelrealsense.com/depth-camera-d457/
https://www.intel.com/content/www/us/en/newsroom/news/new-realsense-depth-camera-d457.html

The D457 is expected to be available in the fourth quarter of 2022 and its listing on the official RealSense Store can be found here:
https://store.intelrealsense.com/buy-intel-realsense-depth-camera-d457.html
To quote the store page:
"The Intel® RealSense™ Depth Camera D457 is our first GMSL/FAKRA high bandwidth stereo camera.  The D457 has an IP65 grade enclosure protecting it from dust ingress and projected water.  D457 has an on-board Maxim serializer chip.  A Maxim de-serializer is needed at host side to decode the streams".

The dedicated data sheet document for the D457 can be downloaded here:
https://dev.intelrealsense.com/docs/intel-realsense-d400-series-product-family-datasheet

Can i use only two lanes for D457 instead of three lanes?
Since only two lanes wired on our boards.
Thank you.

Hi @dennishuneou  Are you referring to the MIPI CSI-2 lanes, please?  If you are, the table below from the data sheet document for the D457 camera lists 2 lanes for the interface to the Vision Processor D4 and 1 lane for the interface to the RGB sensor.

when using GMSL2 for transmission,
Depth stream used one lane.
Left Image[y8] and IMU used one lane.
RGB used one lane.
Can i use only 2 lanes for 4 streams.

My colleagues confirmed that 2 lanes are being used now on D457.

Is this mandatory?
I’m working for D457 on our hardware platform.
HW-SYNC
SerDes Depth Trigger Path MFP7 > MFP8
sudo i2cset -f -y 2 0x48 0x02 0x82c5 w #MFP7
sudo i2cset -f -y 2 0x48 0x02 0x1fc6 w
sudo i2cset -f -y 2 0x40 0x02 0x84d6 w #MFP8
sudo i2cset -f -y 2 0x40 0x02 0x60d7 w #OUT_TYPE bit to 1
sudo i2cset -f -y 2 0x40 0x02 0x1fd8 w
SerDes RGB Trigger Path MFP9 > MFP0
sudo i2cset -f -y 2 0x48 0x02 0x82cb w #MFP9
sudo i2cset -f -y 2 0x48 0x02 0x1bcc w
sudo i2cset -f -y 2 0x40 0x02 0x84be w #MFP0
sudo i2cset -f -y 2 0x40 0x02 0x60bf w #OUT_TYPE bit to 1
sudo i2cset -f -y 2 0x40 0x02 0x1bc0 w
Best Regards,
Dennis Hu
Neousys Technology America Inc.
3384 Commercial Ave., Northbrook, IL 60062 | (D)<PHONE_NUMBER> | (P)<PHONE_NUMBER> X407
From: MartyG-RealSense @.>
Sent: Wednesday, March 15, 2023 12:55 PM
To: IntelRealSense/librealsense @.>
Cc: Dennis Hu @.>; Mention @.>
Subject: Re: [IntelRealSense/librealsense] Introducing the RealSense D457 GMSL/FAKRA stereo camera (Issue #10964)
My colleagues confirmed that 2 lanes are being used now on D457.
—
Reply to this email directly, view it on GitHubhttps://github.com/IntelRealSense/librealsense/issues/10964#issuecomment-1470496578, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AY7R4PPQBQOQ3GNIZKUG4A3W4H67DANCNFSM6AAAAAAQ4Y6TVM.
You are receiving this because you were mentioned.Message ID<EMAIL_ADDRESS>

Hi @dennishuneou  Could you provide further information about your question, please?  Are you asking if D457 having 2 lanes instead of 3 is mandatory?

Hi ,
I ported d4xx driver and dts into Xavier NX.
I can’t capture video when running realsense-viewer.
I read out registers of Max9295, I found that the pixclk is not locked.
So, I think that maybe we must send external trigger signal to camera.
The following content comes from Serdes_D457_1.0.0.A.sh
HW-SYNC
SerDes Depth Trigger Path MFP7 > MFP8
sudo i2cset -f -y 2 0x48 0x02 0x82c5 w #MFP7
sudo i2cset -f -y 2 0x48 0x02 0x1fc6 w
sudo i2cset -f -y 2 0x40 0x02 0x84d6 w #MFP8
sudo i2cset -f -y 2 0x40 0x02 0x60d7 w #OUT_TYPE bit to 1
sudo i2cset -f -y 2 0x40 0x02 0x1fd8 w
SerDes RGB Trigger Path MFP9 > MFP0
sudo i2cset -f -y 2 0x48 0x02 0x82cb w #MFP9
sudo i2cset -f -y 2 0x48 0x02 0x1bcc w
sudo i2cset -f -y 2 0x40 0x02 0x84be w #MFP0
sudo i2cset -f -y 2 0x40 0x02 0x60bf w #OUT_TYPE bit to 1
sudo i2cset -f -y 2 0x40 0x02 0x1bc0 w
Best Regards,
Dennis Hu
Neousys Technology America Inc.
3384 Commercial Ave., Northbrook, IL 60062 | (D)<PHONE_NUMBER> | (P)<PHONE_NUMBER> X407
From: MartyG-RealSense @.>
Sent: Monday, March 20, 2023 11:39 AM
To: IntelRealSense/librealsense @.>
Cc: Dennis Hu @.>; Mention @.>
Subject: Re: [IntelRealSense/librealsense] Introducing the RealSense D457 GMSL/FAKRA stereo camera (Issue #10964)
Hi @dennishuneouhttps://github.com/dennishuneou Could you provide further information about your question, please? Are you asking if D457 having 2 lanes instead of 3 is mandatory?
—
Reply to this email directly, view it on GitHubhttps://github.com/IntelRealSense/librealsense/issues/10964#issuecomment-1476575631, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AY7R4PNEAYYPICNEWGG5YGLW5CBYVANCNFSM6AAAAAAQ4Y6TVM.
You are receiving this because you were mentioned.Message ID<EMAIL_ADDRESS>

Camera firmware driver <IP_ADDRESS> and RealSense SDK version 2.53.1 are minimum requirements.  Can you confirm if you are using this firmware and SDK version please?
The MIPI reference driver is also designed for use with Intel's own de-serializer board at the link below.  Furthermore, the MIPI driver is designed for use with AGX Xavier specifically, whilst you are using Xavier NX.  I note though that you have ported the driver, which should be a solution for these issues.
https://store.intelrealsense.com/buy-intel-realsense-des457.html

I bought camera week ago.
The firmware version is <IP_ADDRESS>.
Realsense SDK is 2.50.0. installed from vcpkg.
Best Regards,
Dennis Hu
Neousys Technology America Inc.
3384 Commercial Ave., Northbrook, IL 60062 | (D)<PHONE_NUMBER> | (P)<PHONE_NUMBER> X407
From: MartyG-RealSense @.>
Sent: Monday, March 20, 2023 11:55 AM
To: IntelRealSense/librealsense @.>
Cc: Dennis Hu @.>; Mention @.>
Subject: Re: [IntelRealSense/librealsense] Introducing the RealSense D457 GMSL/FAKRA stereo camera (Issue #10964)
Camera firmware driver <IP_ADDRESS> and RealSense SDK version 2.53.1 are minimum requirements. Can you confirm if you are using this firmware and SDK version please?
The MIPI reference driver is also designed for use with Intel's own de-serializer board at the link below. Furthermore, the MIPI driver is designed for use with AGX Xavier specifically, whilst you are using Xavier NX. I note though that you have ported the driver, which should be a solution for these issues.
https://store.intelrealsense.com/buy-intel-realsense-des457.html
—
Reply to this email directly, view it on GitHubhttps://github.com/IntelRealSense/librealsense/issues/10964#issuecomment-1476599659, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AY7R4PP2IU7XD3RVYRDZEE3W5CDXNANCNFSM6AAAAAAQ4Y6TVM.
You are receiving this because you were mentioned.Message ID<EMAIL_ADDRESS>

SDK 2.50.0 does not have MIPI support as it had not been implemented yet in that SDK version.  SDK 2.53.1 which introduces MIPI support should be used, and firmware should be updated to <IP_ADDRESS>.
If MIPI is not an absolute requirement for your project then there is also the option to move a switch under the camera's removable casing cap from 'MIPI' position to 'USB' position so that it is detected and performs as a D455 USB camera, as described at https://github.com/IntelRealSense/librealsense/issues/11010#issuecomment-1433488437


Add finnyhere's file: created a branch, created a file and made a commit, and opened a pull request

created a branch, created a file and made a commit, and opened a pull request


does not set FanEntityFeature.TURN_OFF

HA core version
2024.8.3
Current integration version
v0.5.7
Last known working integration version
?
Device type and model
Air Conditioner 00000Q1C (44204)
Working mobile app
MSmarHome
The description of problem
After installing this fork
`Logger: homeassistant.components.fan
Quelle: components/fan/init.py:295
Integration: Lüfter (Dokumentation, Probleme)
Erstmals aufgetreten: 11:04:34 (12 Vorkommnisse)
Zuletzt protokolliert: 11:08:38
Entity midea_ac_lan.18691697955959_fresh_air (<class 'custom_components.midea_ac_lan.fan.MideaACFreshAirFan'>) does not set FanEntityFeature.TURN_OFF but implements the turn_off method. Please create a bug report at https://github.com/wuwentao/midea_ac_lan/issues
Entity midea_ac_lan.18691697955959_fresh_air (<class 'custom_components.midea_ac_lan.fan.MideaACFreshAirFan'>) does not set FanEntityFeature.TURN_ON but implements the turn_on method. Please create a bug report at https://github.com/wuwentao/midea_ac_lan/issues
Entity midea_ac_lan.18691697955958_fresh_air (<class 'custom_components.midea_ac_lan.fan.MideaACFreshAirFan'>) does not set FanEntityFeature.TURN_OFF but implements the turn_off method. Please create a bug report at https://github.com/wuwentao/midea_ac_lan/issues
Entity midea_ac_lan.18691697955958_fresh_air (<class 'custom_components.midea_ac_lan.fan.MideaACFreshAirFan'>) does not set FanEntityFeature.TURN_ON but implements the turn_on method. Please create a bug report at https://github.com/wuwentao/midea_ac_lan/issues`
The logs
No response

thank you very much for your bug report,  it should be the same issue as #287  and has  been fixed by #285 .
please doube check with next release version.
so I will close current issue.
once new release published, please have a try with it(we still not publish it, please wait for some days, sorry)
if issue still exist with next version, you can reopen current issue or directly add new log in current issue.


grid_points improvements

For certain values, grid_points will not get close to the value of 1.
For example, 50 grid points on L=6 will result with a max of 0.796875

Also a wishlist, it would nice to enforce a certain point (like I want a grid but make sure 0.5 is there)

Yeah I think the grid_points functionality should be massively fleshed out
To add to the wishlist we should also be able to sample randomly from the grid. For instance we could overload rand so that
Random.rand(s::IndexMap) randomly chooses a point on the d-dimensional grid defined by IndexMap


[Bug] Spy connector doesn't work with endpoint port chosen by OS

Description
Spy subscription doesn't connect when MDC publication with dynamic control mode was created with control endpoint port set to 0 in order for OS to choose the port.
Steps to reproduce

Create publication aeron:udp?control=localhost:0|control-mode=dynamic|ssc=true with streamId=0.
Retrieve publication localAddr via localSocketAddresses
Create subscription aeron-spy:aeron:udp?control=<localAddr>|control-mode=dynamic with streamId=0
Try to publish and receive some messages

Expected result
Messages are transmitted successfully.
Result
No image becomes available for subscription.
Code snippet
https://gist.github.com/InversionSpaces/e0b8cbd3c3fcb5fb905c4b6985aac14d
Note
The exact same code works if either:

Static port is set instead of 0
Prefix aeron-spy: is removed from subscription

I can confirm that this doesn't work at present.  I will look into this in more detail, but I think there is a simpler approach to get the desired behaviour.
Create the publication with a tag:
final long pubTag = aeron.nextCorrelationId();

final String pubUri = new ChannelUriStringBuilder("aeron:udp?control=localhost:0|control-mode=dynamic|ssc=true")
    .tags(pubTag, null)
    .build();

Then create the spy subscription with the tag
final String spyUri = new ChannelUriStringBuilder()
    .prefix(ChannelUri.SPY_QUALIFIER)
    .media("udp")
    .tags(pubTag, null)
    .build();

This works and it also means that the code doesn't need to wait until the port is bound to set up the spy.
--
One question, when using a system assigned port for the control address, how are your remote subscriptions going to determine which port to use?

I've done a deeper dive in the code and I'm going to close this issue.  It is effectively working as it should.  Trying to make this scenario work in the fashion would be flaky at best.  It illustrate why it won't work lets look at the resolved URIs for the publication and the spy:
publication: aeron:udp?control=localhost:0|control-mode=dynamic|ssc=true
spy: aeron:udp?control=localhost:32456|control-mode=dynamic|ssc=true  // assuming the bound port is 32456

They don't actually match.  They happen to correlate to the same port, but this association is easily broken if the publication is closed and opened again as the port will be different.  Wildcard ports do create some tricky issues around matching.  Therefore in the documentation we recommend using tags.  Admittedly the documentation refers to using subscriptions, the concept holds for control addresses with publications and spies.

@mikeb01
I don't get your point about "They don't actually match" at all. If they don't match in this scenario, then the same applies to all URIs in documentation section you mentioned, but to my mind such workflow is clearly stated as possible. Also, if they do not match, then why the same approach works if subscription is not a spy?
About "this association is easily broken if the publication is closed and opened again as the port will be different" - it is understandable and even desirable behavior. To not lose this publication tags could be used. And in my workflow it is actually the case, but I omitted it here.
You suggest to use tags to resolve the issue. I couldn't find if tags work across different machines, but I guess they don't, do they?

Here is my use case in brief. I have some discovery and coordination service that helps my components to exchange all information they need for establishing connections. One component creates publication with wildcard port and publish assigned port so others could fetch it. Components do not know in advance if they are on the same machine, but if it is the case, creating spy subscription would be great optimization.
Now I see that my problem could be resolved by using non spy subscriptions if a component is on separate machine and tag is it is on the same machine.

We have concept of matching which applies to the correlation of resources that are created within the same driver.  The best way to explain this is from the perspective of a subscription, but it applies to publishers & spies as well.  If we create two subscriptions:
Subscription subA = aeron.addSubscription("aeron:udp?endpoint=localhost:9090", 1001);
Subscription subB = aeron.addSubscription("aeron:udp?endpoint=localhost:9090", 1002);

The first subscription will create a receiver bound to port 9090, but when we create subB we can't create a receiver on the same port as we can't bind to the same port twice.  Therefore the driver will match subB with subA because they share the same endpoint. Then subB will use the same receiver and Aeron will multiplex the two streams (1001 and 1002) over the same port.  If the two subscriptions have the same stream id, then they will also share the image buffer memory and just retain separate position values.  The concept of matching on endpoint** has be an important internal feature since the inception of Aeron.
** It is actually more detailed than that, but the simplification suits for now
Later on we needed to add support for wildcard ports, but unfortunately the use of wildcards breaks matching somewhat.  Lets consider creating two subscriptions with wildcard ports:
Subscription subA = aeron.addSubscription("aeron:udp?endpoint=localhost:0", 1001);
Subscription subB = aeron.addSubscription("aeron:udp?endpoint=localhost:0", 1002);

If we considered these two endpoint a match then we would only ever be able to bind to a single OS assigned port at one time.  Therefore we have set it up so that you can't match endpoints that use wildcards.  In the scenario above these will create subscriptions on two different OS assigned ports.  However, there may be occasions where we want to have the two subscriptions share the same OS assigned port, therefore we reused our tags feature to allow users to reference a subscription or publication that is created earlier.
I had considered making matching work based on the resolved OS assigned port, but that creates other complications, e.g. the port used can change over time and you could end up with transient matches that you don't expect if the ports happened to match.  Using tags creates a stronger logical association.
So to the MDC publication/spy case that you are looking at.  The reason it works for a normal subscription is that a normal subscription listens on a port.  There is no actual matching in this case.  A spy subscription does not listen on a port, instead it is using the ability to match a publication and then attach itself to the term buffers used by the publication and read those directly (this is the optimisation).  Because a wildcard port is used in the control address of the publication it is not possible to construct a spy URI that will match with that publication.  Therefore again we recommend the use of tags is it creates a strong logical link between the publication and the spy.  There is potentially an argument that spies should always use tags, but we added tags after we added spies.

You suggest to use tags to resolve the issue. I couldn't find if tags work across different machines, but I guess they don't, do they?

They don't.  Tags (as well as spies) only work for resources on the same driver.


create requirements python file

Create a new line separated list of python requirements so that you can do a pip install -r ${FILE_NAME}

Closed with issue 16c9666d826a05ffd36c7bbb6b66c105c68039ac


Add URL Highlighting

This PR adds URL highlighting to give better feedback to the user about
which text strings are recognized as an URL.
This includes changing the cursor to indicate that it is possible to
click URLs and underlining the URLs to show which cells are part of the
URL.
This fixes #1618.
Currently this is only an initial draft, there's still some things that need to be done:

[X] Change cursor when hovering over URLs
[x] Underline URLs
[x] Fix style/performance issues

Everything should be good to go now assuming that CI finishes.


Cocoapods use_frameworks! not building

Hi, being new to Cocoapods, I'm trying to mix my J2OBJC project with some Swift and am requiring to use the use_frameworks! property in my Podfile.
The problem is that while all my other pods are building and being turned into a framework, none of my shared translated code is being turned into a framework.
Does anyone have any idea why this is doing that?

I think that use_frameworks works only with Swift pod. Your shared code is in an Objective-C pod.

It seems to work on other ObjC pods e.g. https://github.com/jdg/MBProgressHUD

Cleaning up untouched bugs - please re-open with more details if this is still an issue.

I seem to have the same problem : every other pod got packed as a framework but my shared code doesn't.
I end the compilation with a link error :
ld: library not found for -lPods-TARGETNAME
clang: error: linker command failed with exit code 1 (use -v to see invocation)

I don't know if that j2objc is the cause but it's  definitely the only pod that doesn't generate a framework
By the way I use XCode 7.

I finally found a way to build (and link), it was an issue with cocoapods which added the Pods-TARGETNAME.a and Pods-TARGETNAME.framework to the Link binary with libraries (in my target Build Phases).
I also found the way to generate the framework if you want it. I just added this to the j2objc podspec :
  spec.platforms = {
    "ios" => "8.0"
  }

It didn't fix my issue since it was something else but maybe you can find it useful.

@hwchong - please have a look at the comments from @maxbritto.
@maxbritto - thanks for looking in to this. I don't understand Cocoapods enough to know what's the best answer. In the case of the translated code, it shouldn't have any platform dependency at all. So just the widest possible compatibility is preferred.
I was wondering if I should just use this suggestion embedded in the Podfile:
# Uncomment this line to define a global platform for your project
# platform :ios, '6.0'

@brunobowden To be honest with you I'm just starting to use cocoapods myself so I probably don't understand it better. I'm not sure this would be useful too, it seem to work well without it. I just wanted to understand why would this pod got generated differently from all the others in my podfile.

@maxbritto - can you try "ios" => "6.0" to see if that also work? iOS 6 should allow the widest possible compatibility, so I'd prefer to do that rather than iOS 8.0. Please see if you can notice any side effects from that.

@maxbritto - REPEAT - we need to find this out for the 0.5 release. Can you try "ios" => "6.0" to see if that also work? iOS 6 should allow the widest possible compatibility. I'd prefer to do that rather than iOS 8.0. Please see if you can notice any side effects from that.

I've started to work on this but I'm stuck with issues when trying to use a local version of j2objc-gradle plugin. I followed the Contributing.md guide but I must have missed something.
I've been able to build the jar and on my project, when using buildscript instead of plugins a have a linker error :
:rainbowapi:linkDebugTestJ2objcExecutable
ld: library not found for -lmockito

Did I miss something or are there any required steps that are not on the contributing guide ?

Which version of j2objc and Xcode are you using?

j2objc <IP_ADDRESS> and XCode 7.0

@maxbritto, our apologies but the plugin doesn't work on Xcode 7.0, which I can see being a blocker for you. We need to get Xcode 7.0 working and then ask you to test this again.

No problem, I'll keep this on stand by until you let me know.

(@maxbritto  - btw, please consider using j2objc <IP_ADDRESS>.1 (regardless of this plugin) instead of <IP_ADDRESS> - the j2objc team released the extra patch due to a build error in the original <IP_ADDRESS>)

Thanks for the tip @advayDev1 ! Actually I did have issues with guava with the <IP_ADDRESS> build (don't remember how I fixed those though). I've updated it now.

yes, guava was not built correctly in <IP_ADDRESS>

@maxbritto - can you try this issue again. It should now be working fine with Xcode 7. I'd like to clarify if this is an easy fix as we need to push out 0.5 to get feedback.
The new podspecs specify the deployment_targets which should suffice instead of the platform entry:
Pod::Spec.new do |spec|",
  ...
  spec.ios.deployment_target = '8.3'
  spec.osx.deployment_target = '10.8'
  spec.watchos.deployment_target = '2.0'
end

@brunobowden : I am not sure this is the best way to do it as it will only work with projects that have at least a deployment target equal to the one you specified. As an example, in my iOS project I have a deployment target to 8.0 and I can't install the pod with the spec you gave :
[!] Unable to satisfy the following requirements:

- `j2objc-rainbowapi-debug (from `/Users/mbritto/Documents/Dev2A/Rainbow/branches/mobile/android-ios-cocoapods/rainbowapi/build`)` required by `Podfile`
- `j2objc-rainbowapi-debug (from `/Users/mbritto/Documents/Dev2A/Rainbow/branches/mobile/android-ios-cocoapods/rainbowapi/build`)` required by `Podfile`

Specs satisfying the `j2objc-rainbowapi-debug (from `/Users/mbritto/Documents/Dev2A/Rainbow/branches/mobile/android-ios-cocoapods/rainbowapi/build`)` dependency were found, but they required a higher minimum deployment target.

Specs satisfying the `j2objc-rainbowapi-debug (from `/Users/mbritto/Documents/Dev2A/Rainbow/branches/mobile/android-ios-cocoapods/rainbowapi/build`)` dependency were found, but they required a higher minimum deployment target.

@maxbritto - this will be good test to have. Try setting the minIosVersion in the j2objcConfig to 8.0 as well. Does it make sense to have that as the default? That seems to make sense to me as it's not as if the generated library are using advanced features of iOS.
j2objcConfig {
    ...
    String minIosVersion = '8.0'
}

@brunobowden : even after adding minIosVersion to 8.0 as you said, it still generates the podspec with spec.ios.deployment_target = '8.3' so cocoapods refuses to include j2objc in my project. Since the generated library doesn't use advanced features it doesn't seem useful to make it require something as high as iOS 8.3 (or even iOS 8 for that matter). Is it really needed that our j2objc library be generated as a framework ? It works well without it

Punting to 0.6 per call.


Remove CS0649 warnings.

Added default values to [Inject] and [SerializeField] attributed fields to remove CS0649 warnings which flood ~40 warnings the Unity console. These warnings may only appear on latest c# 7+ builds.

Yes please! My projects are packed with warnings after upgrading to Unity 2018.3.0f1.