Implementation of the load balancing.

Release notes

[rn:skip]
What does this PR do?
Introduces a Load Balancing mechanism that distributes the loads among the configured hosts. The algo behind is a combination of least/round-robin with a failure cool off. Assuming we have a following configuration:
output {
  logstash {
    hosts => ["<IP_ADDRESS>:9801", "<IP_ADDRESS>:9802", "<IP_ADDRESS>:9803"]
    ...
  }
}

With three successful send requests, each host receives single request. If <IP_ADDRESS> has an ongoing request, the plugin send the upcoming request to either <IP_ADDRESS> or <IP_ADDRESS> depending on their last request time and concurrency.
For any failure cases, the host will be treated with a 60 seconds cool off period.
Why is it important/What is the impact to the user?
Checklist

[x] My code follows the style guidelines of this project
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have made corresponding changes to the documentation
[x] I have made corresponding change to the default configuration files (and/or docker env variables)
[x] I have added tests that prove my fix is effective or that my feature works

Author's Checklist

[x] What if all hosts are unreachable - continues retry is a desirable option for now
[x] Router pick up behaviour
[x] retry_non_idempotent intentionally disabled (http-output sets it to true) not to repeat on client/manticore level request but plugin will retry
[x] Check if we can quickly support normalizer API for user/username use case, currently exist ones require user to be deprecated
-- deprecated user in this plugin
[x] final test with multiple hosts
-- so far 3 hosts used, setup 5/6-hosts and kill/spin-up and test overall HA

How to test this PR locally

pull the changes and build a gem: gem build logstash-integration-logstash.gemspec, creates logstash-integration-logstash-1.0.0-java.gem
install the plugin ./bin/logstash-plugin install logstash-integration-logstash-1.0.0-java.gem
run Logstash input and output plugins with desired configs.

With Logstash 7.latest

Update logstash-input-http plugin and install logstash-integration plugin

➜  logstash-7.17.14 ./bin/logstash-plugin update logstash-input-http
Using bundled JDK: /logstash-7.17.14/jdk.app/Contents/Home
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
Updating logstash-input-http
Bundler attempted to update logstash-mixin-ecs_compatibility_support but its version stayed the same
Updated logstash-input-http 3.4.5 to 3.7.3

➜  logstash-7.17.14 ./bin/logstash-plugin install logstash-integration-logstash-1.0.0-java.gem
Using bundled JDK: /logstash-7.17.14/jdk.app/Contents/Home
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
Validating logstash-integration-logstash-1.0.0-java.gem
Installing logstash-integration-logstash
Installation successful

Related issues

Closes #5

Use cases
Screenshots
Logs

cool off period (60s) logs

[2023-10-17T20:03:22,064][ERROR][logstash.outputs.logstash][main][70d5867d468dc79aca460e342f525040af120ae2a4e46a145a891fc39a649503] Could not send data to host {:host=>"https://<IP_ADDRESS>:9900/", :message=>"Connect to <IP_ADDRESS>:9900 [/<IP_ADDRESS>] failed: Connection refused", :class=>Manticore::SocketException, :will_retry=>true}
[2023-10-17T20:04:23,011][ERROR][logstash.outputs.logstash][main][70d5867d468dc79aca460e342f525040af120ae2a4e46a145a891fc39a649503] Could not send data to host {:host=>"https://<IP_ADDRESS>:9900/", :message=>"Connect to <IP_ADDRESS>:9900 [/<IP_ADDRESS>] failed: Connection refused", :class=>Manticore::SocketException, :will_retry=>true}
[2023-10-17T20:05:24,022][ERROR][logstash.outputs.logstash][main][70d5867d468dc79aca460e342f525040af120ae2a4e46a145a891fc39a649503] Could not send data to host {:host=>"https://<IP_ADDRESS>:9900/", :message=>"Connect to <IP_ADDRESS>:9900 [/<IP_ADDRESS>] failed: Connection refused", :class=>Manticore::SocketException, :will_retry=>true}
[2023-10-17T20:06:25,003][ERROR][logstash.outputs.logstash][main][70d5867d468dc79aca460e342f525040af120ae2a4e46a145a891fc39a649503] Could not send data to host {:host=>"https://<IP_ADDRESS>:9900/", :message=>"Connect to <IP_ADDRESS>:9900 [/<IP_ADDRESS>] failed: Connection refused", :class=>Manticore::SocketException, :will_retry=>true}
[2023-10-17T20:07:26,003][ERROR][logstash.outputs.logstash][main][70d5867d468dc79aca460e342f525040af120ae2a4e46a145a891fc39a649503] Could not send data to host {:host=>"https://<IP_ADDRESS>:9900/", :message=>"Connect to <IP_ADDRESS>:9900 [/<IP_ADDRESS>] failed: Connection refused", :class=>Manticore::SocketException, :will_retry=>true}
[2023-10-17T20:08:27,007][ERROR][logstash.outputs.logstash][main][70d5867d468dc79aca460e342f525040af120ae2a4e46a145a891fc39a649503] Could not send data to host {:host=>"https://<IP_ADDRESS>:9900/", :message=>"Connect to <IP_ADDRESS>:9900 [/<IP_ADDRESS>] failed: Connection refused", :class=>Manticore::SocketException, :will_retry=>true}
[2023-10-17T20:09:28,022][ERROR][logstash.outputs.logstash][main][70d5867d468dc79aca460e342f525040af120ae2a4e46a145a891fc39a649503] Could not send data to host {:host=>"https://<IP_ADDRESS>:9900/", :message=>"Connect to <IP_ADDRESS>:9900 [/<IP_ADDRESS>] failed: Connection refused", :class=>Manticore::SocketException, :will_retry=>true}
[2023-10-17T20:10:29,007][ERROR][logstash.outputs.logstash][main][70d5867d468dc79aca460e342f525040af120ae2a4e46a145a891fc39a649503] Could not send data to host {:host=>"https://<IP_ADDRESS>:9900/", :message=>"Connect to <IP_ADDRESS>:9900 [/<IP_ADDRESS>] failed: Connection refused", :class=>Manticore::SocketException, :will_retry=>true}
[2023-10-17T20:11:30,004][ERROR][logstash.outputs.logstash][main][70d5867d468dc79aca460e342f525040af120ae2a4e46a145a891fc39a649503] Could not send data to host {:host=>"https://<IP_ADDRESS>:9900/", :message=>"Connect to <IP_ADDRESS>:9900 [/<IP_ADDRESS>] failed: Connection refused", :class=>Manticore::SocketException, :will_retry=>true}

Batch abortion after shut down request

[2023-10-17T20:14:17,076][INFO ][logstash.outputs.logstash][main][70d5867d468dc79aca460e342f525040af120ae2a4e46a145a891fc39a649503] Aborting the batch due to shutdown request.
[2023-10-17T20:14:17,082][ERROR][logstash.outputs.logstash][main][70d5867d468dc79aca460e342f525040af120ae2a4e46a145a891fc39a649503] Error occurred while sending events {:class=>"Java::OrgLogstashExecution::AbortedBatchException", :message=>"", :backtrace=>["java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)", "java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)", "java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)", "java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)", "java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)", "org.jruby.javasupport.JavaConstructor.newInstanceDirect(JavaConstructor.java:175)", "org.jruby.java.invokers.ConstructorInvoker.call(ConstructorInvoker.java:72)", "org.jruby.java.invokers.ConstructorInvoker.call(ConstructorInvoker.java:156)", "org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:485)", "org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:210)", "org.jruby.java.proxies.ConcreteJavaProxy$InitializeMethod.call(ConcreteJavaProxy.java:88)", "org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:485)", "org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:210)", "org.jruby.RubyClass.newInstance(RubyClass.java:897)", "org.jruby.RubyClass$INVOKER$i$newInstance.call(RubyClass$INVOKER$i$newInstance.gen)", "org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroOrNBlock.call(JavaMethod.java:333)", "org.jruby.java.proxies.ConcreteJavaProxy$NewMethod.call(ConcreteJavaProxy.java:182)", "org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:474)", "org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:195)", "org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:350)", "org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:66)", "org.jruby.internal.runtime.methods.MixedModeIRMethod.INTERPRET_METHOD(MixedModeIRMethod.java:128)", "org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:115)", "org.jruby.ir.targets.indy.InvokeSite.invoke(InvokeSite.java:281)", "Users.mashhur.Dev.elastic.ls_minus_plugins.logstash_minus_integration_minus_logstash.lib.logstash.outputs.logstash.RUBY$method$send_events$0(/Users/mashhur/Dev/elastic/ls-plugins/logstash-integration-logstash/lib/logstash/outputs/logstash.rb:203)", "Users.mashhur.Dev.elastic.ls_minus_plugins.logstash_minus_integration_minus_logstash.lib.logstash.outputs.logstash.RUBY$method$multi_receive$0(/Users/mashhur/Dev/elastic/ls-plugins/logstash-integration-logstash/lib/logstash/outputs/logstash.rb:110)", "org.jruby.internal.runtime.methods.CompiledIRMethod.call(CompiledIRMethod.java:165)", "org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:185)", "org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:220)", "org.logstash.config.ir.compiler.OutputStrategyExt$AbstractOutputStrategyExt.invokeOutput(OutputStrategyExt.java:153)", "org.logstash.config.ir.compiler.OutputStrategyExt$LegacyOutputStrategyExt.output(OutputStrategyExt.java:219)", "org.logstash.config.ir.compiler.OutputStrategyExt$AbstractOutputStrategyExt.multiReceive(OutputStrategyExt.java:143)", "org.logstash.config.ir.compiler.OutputDelegatorExt.doOutput(OutputDelegatorExt.java:111)", "org.logstash.config.ir.compiler.AbstractOutputDelegatorExt.lambda$multiReceive$0(AbstractOutputDelegatorExt.java:121)", "co.elastic.logstash.api.TimerMetric.lambda$time$0(TimerMetric.java:35)", "org.logstash.instrument.metrics.timer.ConcurrentLiveTimerMetric.time(ConcurrentLiveTimerMetric.java:47)", "co.elastic.logstash.api.TimerMetric.time(TimerMetric.java:34)", "org.logstash.config.ir.compiler.AbstractOutputDelegatorExt.multiReceive(AbstractOutputDelegatorExt.java:121)", "org.logstash.generated.CompiledDataset1.compute(Unknown Source)", "org.logstash.config.ir.CompiledPipeline$CompiledUnorderedExecution.compute(CompiledPipeline.java:351)", "org.logstash.config.ir.CompiledPipeline$CompiledUnorderedExecution.compute(CompiledPipeline.java:341)", "org.logstash.execution.ObservedExecution.lambda$compute$0(ObservedExecution.java:17)", "org.logstash.execution.WorkerObserver.lambda$observeExecutionComputation$0(WorkerObserver.java:39)", "org.logstash.instrument.metrics.timer.ConcurrentLiveTimerMetric.time(ConcurrentLiveTimerMetric.java:47)", "org.logstash.execution.WorkerObserver.lambda$executeWithTimers$1(WorkerObserver.java:50)", "org.logstash.instrument.metrics.timer.ConcurrentLiveTimerMetric.time(ConcurrentLiveTimerMetric.java:47)", "org.logstash.execution.WorkerObserver.executeWithTimers(WorkerObserver.java:50)", "org.logstash.execution.WorkerObserver.observeExecutionComputation(WorkerObserver.java:38)", "org.logstash.execution.ObservedExecution.compute(ObservedExecution.java:17)", "org.logstash.execution.WorkerLoop.abortableCompute(WorkerLoop.java:113)", "org.logstash.execution.WorkerLoop.run(WorkerLoop.java:86)", "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)", "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", "java.base/java.lang.reflect.Method.invoke(Method.java:568)", "org.jruby.javasupport.JavaMethod.invokeDirectWithExceptionHandling(JavaMethod.java:329)", "org.jruby.javasupport.JavaMethod.invokeDirect(JavaMethod.java:193)", "org.jruby.java.invokers.InstanceMethodInvoker.call(InstanceMethodInvoker.java:32)", "org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:193)", "org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:350)", "org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:66)", "org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:116)", "org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:136)", "org.jruby.runtime.IRBlockBody.call(IRBlockBody.java:66)", "org.jruby.runtime.IRBlockBody.call(IRBlockBody.java:58)", "org.jruby.runtime.Block.call(Block.java:143)", "org.jruby.RubyProc.call(RubyProc.java:352)", "org.jruby.internal.runtime.RubyRunnable.run(RubyRunnable.java:110)", "java.base/java.lang.Thread.run(Thread.java:833)"]}

multiple cases

# Timeout case:
  [2023-10-27T06:50:13,546][ERROR][logstash.outputs.logstash][main][39b61ae44dd3e37f9e0b23e7d75c1412fdd09cd48425f7e4eb6d93097e49b6f0] Could not send data to host {:host=>"http://<IP_ADDRESS>:9800/", :message=>"Connect to <IP_ADDRESS>:9800 [/<IP_ADDRESS>] failed: Connect timed out", :class=>Manticore::ConnectTimeout, :retry=>true}

# Connection refused:
  [2023-10-27T06:50:13,575][ERROR][logstash.outputs.logstash][main][39b61ae44dd3e37f9e0b23e7d75c1412fdd09cd48425f7e4eb6d93097e49b6f0] Could not send data to host {:host=>"http://<IP_ADDRESS>:9900/", :message=>"Connect to <IP_ADDRESS>:9900 [/<IP_ADDRESS>] failed: Connection refused", :class=>Manticore::SocketException, :retry=>true}

# Failed to respond
  [2023-10-27T10:59:11,298][ERROR][logstash.outputs.logstash][main][7308f959c1075d92c92726cd9ff27546672c3cafcaa91116b2bfeefd00f217c1] Could not send data to host {:host=>"http://<IP_ADDRESS>:9800/", :message=>"<IP_ADDRESS>:9800 failed to respond", :class=>Manticore::ClientProtocolException, :retry=>true}

In general, this looks like it is on track. I have left some reviews in-line, with the following themes:

we should avoid incurring repeat cost at runtime (while processing batches of events) where we can incur the cost a single time (such as during loading the class's definition or instantiating the plugin)

Makes sense. Similarly, in Java, we compile the pattern Pattern pattern = Pattern.compile(REGEX); to avoid extra process at run time. Honestly, didn't know in ruby or couldn't find any such details in ruby docs (checked apidock.com/ruby)

we shouldn't remove any specs. The behaviour specified in prior releases needs to hold true with this refactor, and we cannot prove that to be true if we go removing all of the credential/ssl specs.

Agreed! http-mixin is a layer with possible SSL configs and a manipulator should define the behaviour (server? client?). I have put back SSL related unit test cases.

I've mentioned it before, but the intention of the "large sequence" tests needs to be upheld across changes

Ah, my mind was busy with solving timeout issue and forgot to apply batch size. Updated with reasonable batch size (17) and increased event size (200), CI is happy 🟢 so far.

I also believe I may have spotted a couple bugs, and would like specs that prove me wrong :)

When run on an older logstash that doesn't have batch aborts, this will log an abort-in-progress but then continue retrying

I did multiple tests (of current change, without break in the shutdown request) and went through logics of worker threads and shutdown watcher, specifically 7.17.14 version, it seems to me worker threads get terminated when they receive shutdown request and shutdown watcher finishes its tasks once workers stop. Sharing some debug logs if I missed anything:
[2023-10-31T13:29:35,593][WARN ][org.logstash.execution.ShutdownWatcherExt] {"inflight_count"=>312, "stalling_threads_info"=>{"other"=>[{"thread_id"=>39, "name"=>"[main]>worker0", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>40, "name"=>"[main]>worker1", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>41, "name"=>"[main]>worker2", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>42, "name"=>"[main]>worker3", "current_call"=>"[...]/vendor/bundle/jruby/2.5.0/gems/manticore-0.8.0-java/lib/manticore/response.rb:49:in `call'"}, {"thread_id"=>43, "name"=>"[main]>worker4", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>44, "name"=>"[main]>worker5", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>45, "name"=>"[main]>worker6", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>46, "name"=>"[main]>worker7", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>47, "name"=>"[main]>worker8", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>48, "name"=>"[main]>worker9", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}]}}
[2023-10-31T13:29:35,595][ERROR][org.logstash.execution.ShutdownWatcherExt] The shutdown process appears to be stalled due to busy or blocked plugins. Check the logs for more information.
#... manticore request logs.
[2023-10-31T13:29:40,867][WARN ][org.logstash.execution.ShutdownWatcherExt] {"inflight_count"=>312, "stalling_threads_info"=>{"other"=>[{"thread_id"=>39, "name"=>"[main]>worker0", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>40, "name"=>"[main]>worker1", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>41, "name"=>"[main]>worker2", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>42, "name"=>"[main]>worker3", "current_call"=>"[...]/vendor/bundle/jruby/2.5.0/gems/manticore-0.8.0-java/lib/manticore/response.rb:49:in `call'"}, {"thread_id"=>43, "name"=>"[main]>worker4", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>44, "name"=>"[main]>worker5", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>45, "name"=>"[main]>worker6", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>46, "name"=>"[main]>worker7", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>47, "name"=>"[main]>worker8", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>48, "name"=>"[main]>worker9", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}]}}
[2023-10-31T13:29:46,147][WARN ][org.logstash.execution.ShutdownWatcherExt] {"inflight_count"=>312, "stalling_threads_info"=>{"other"=>[{"thread_id"=>39, "name"=>"[main]>worker0", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>40, "name"=>"[main]>worker1", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>41, "name"=>"[main]>worker2", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>42, "name"=>"[main]>worker3", "current_call"=>"[...]/vendor/bundle/jruby/2.5.0/gems/manticore-0.8.0-java/lib/manticore/response.rb:49:in `call'"}, {"thread_id"=>43, "name"=>"[main]>worker4", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>44, "name"=>"[main]>worker5", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>45, "name"=>"[main]>worker6", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>46, "name"=>"[main]>worker7", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>47, "name"=>"[main]>worker8", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}, {"thread_id"=>48, "name"=>"[main]>worker9", "current_call"=>"[...]/logstash-core/lib/logstash/java_pipeline.rb:300:in `block in multi_receive'"}]}}
# ... manticore request logs...
[2023-10-31T13:29:50,846][DEBUG][logstash.javapipeline    ][main] Shutdown waiting for worker thread {:pipeline_id=>"main", :thread=>"#<LogStash::WorkerLoopThread:0x5ad3cd1c dead>"}
[2023-10-31T13:29:50,849][DEBUG][logstash.javapipeline    ][main] Shutdown waiting for worker thread {:pipeline_id=>"main", :thread=>"#<LogStash::WorkerLoopThread:0xc1e8691 dead>"}
[2023-10-31T13:29:50,849][DEBUG][logstash.javapipeline    ][main] Shutdown waiting for worker thread {:pipeline_id=>"main", :thread=>"#<LogStash::WorkerLoopThread:0x44fd18ba dead>"}
[2023-10-31T13:29:50,849][DEBUG][logstash.javapipeline    ][main] Shutdown waiting for worker thread {:pipeline_id=>"main", :thread=>"#<LogStash::WorkerLoopThread:0x2b189fc2 dead>"}
[2023-10-31T13:29:50,849][DEBUG][logstash.javapipeline    ][main] Shutdown waiting for worker thread {:pipeline_id=>"main", :thread=>"#<LogStash::WorkerLoopThread:0x13eecde1 dead>"}
[2023-10-31T13:29:50,849][DEBUG][logstash.javapipeline    ][main] Shutdown waiting for worker thread {:pipeline_id=>"main", :thread=>"#<LogStash::WorkerLoopThread:0x7aa2f641 run>"}
[2023-10-31T13:29:50,875][DEBUG][logstash.javapipeline    ][main] Shutdown waiting for worker thread {:pipeline_id=>"main", :thread=>"#<LogStash::WorkerLoopThread:0x71015c9b dead>"}
[2023-10-31T13:29:50,876][DEBUG][logstash.javapipeline    ][main] Shutdown waiting for worker thread {:pipeline_id=>"main", :thread=>"#<LogStash::WorkerLoopThread:0x55f3a869 dead>"}
[2023-10-31T13:29:50,877][DEBUG][logstash.javapipeline    ][main] Shutdown waiting for worker thread {:pipeline_id=>"main", :thread=>"#<LogStash::WorkerLoopThread:0x1265f856 dead>"}
[2023-10-31T13:29:50,882][DEBUG][logstash.outputs.logstash][main] Closing {:plugin=>"LogStash::Outputs::Logstash"}
[2023-10-31T13:29:50,888][DEBUG][logstash.outputs.logstash][main] Closing `logstash` output plugin.
[2023-10-31T13:29:50,894][DEBUG][logstash.outputs.logstash][main] `logstash` output plugin has been closed.
[2023-10-31T13:29:50,895][DEBUG][logstash.pluginmetadata  ][main] Removing metadata for plugin 4ec0ab4fa12f5ed9367ef5d5e81cd2577f8561f252ee94030eb4482d7f51ccc5
[2023-10-31T13:29:50,897][DEBUG][logstash.javapipeline    ][main] Pipeline has been shutdown {:pipeline_id=>"main", :thread=>"#<Thread:0x6820e4d4 run>"}
[2023-10-31T13:29:50,898][INFO ][logstash.javapipeline    ][main] Pipeline terminated {"pipeline.id"=>"main"}
[2023-10-31T13:29:51,433][INFO ][logstash.pipelinesregistry] Removed pipeline from registry successfully {:pipeline_id=>:main}
[2023-10-31T13:29:51,443][DEBUG][logstash.instrument.periodicpoller.os] Stopping
[2023-10-31T13:29:51,453][DEBUG][logstash.instrument.periodicpoller.jvm] Stopping
[2023-10-31T13:29:51,453][DEBUG][logstash.instrument.periodicpoller.persistentqueue] Stopping
[2023-10-31T13:29:51,453][DEBUG][logstash.instrument.periodicpoller.deadletterqueue] Stopping
[2023-10-31T13:29:51,493][DEBUG][logstash.agent           ] API WebServer has stopped running
[2023-10-31T13:29:51,494][INFO ][logstash.runner          ] Logstash shut down.

We allow the output to be configured with zero hosts, which is a state where the pipeline could never successfully route events

Hm, can I get your config? I do believe we added a safeguard in the validator mixin, hosts to be an array and at least contains one value

Separately, I think we may need to introduce some level of backoff in the retries, as things like certificate errors are retried instantly and will absolutely hammer downstreams (especially in the single-host setup). Some pseudo-code for that in the retry loop would be:
  next_backoff = 0.1
  max_backoff = 30

  loop do
    next_action = transmit(body, compressed_body)
    break unless next_action == :retry

    sleep(next_backoff)
    next_backoff = [next_backoff*2, max_backoff].min

    # ... pipeline shutdown check
  end

We discussed this behavior before and unless all hosts are unreachable, we should avoid back off I think. I don't know so far what would be a best practice, possible approaches:

sleep if all hosts are in a cool off state;
LB doesn't resolve the host if all hosts are in a cool off state, retry keeps looping;

I proposed a 100ms initial backoff in the retry loop that doubles until it reaches 30s because of a variety of reasons; let me see if I can enumerate them.
First, we are starting with a baseline of a single downstream host, as supported by the HTTP Output plugin we currently wrap, which sleeps for floor(1/2) + rand(0..1)/2 ~= 0.5s after the first attempt, roughly doubling until reaching floor(60/2) + rand(0..60)/2 ~= 45s between retries.
As implemented this plugin can be configured with multiple hosts, in which case a second attempt is more likely to succeed because it is routed to another host, but it also can be configured with a single host, or with many hosts that are all unable to process additional events.
The proposed 100ms initial backoff, doubling until 30s, is both less aggressive than our baseline and safer than eliminating backoff altogether.
When an output is configured with multiple downstream hosts, the first request to a down or unavailable downstream host will cause only a 100ms pause on that one worker before a retry, and because the router ensures that recently-errored downstreams are deprioritised from being leased during their cool-off period, our next request (and other requests from other workers) will be less likely to be leased the same downstream host. If any of the downstreams are receiving events, we will quickly recover and the router will avoid leasing the other downstream hosts until the cool-off period completes.
The doubling (until reasonable maximum) ensures that when 100% of the downstream hosts (including the case of a single downstream host being configured) are unable to receive data, we slow down until we are able to make headway.

I understand that this is an expansion of scope from what was originally discussed, but think it is a fair trade-off, and avoids stripping away the safety of backoffs we had "for free" when wrapping the HTTP output plugin.
I am okay with merging this PR without addressing backoffs, but I would NOT want to release a version of this plugin without some form of backoff support.

From voice chat: we should use Stud#stoppable_sleep in the backoff mechanism to avoid blocking when a pipeline shutdown has been requested:
  next_backoff = 0.1
  max_backoff = 30

  loop do
    next_action = transmit(body, compressed_body)
    break unless next_action == :retry

    Stud.stoppable_sleep(next_backoff) { pipeline_shutdown_requested? }
    next_backoff = [next_backoff*2, max_backoff].min

    # ... pipeline shutdown check
  end

We should add_runtime_dependency 'stud' in our gemspec.

One final catch: you added Elastic-license headers, but this is an Apache-licensed project. Once those are snipped we should be good to go.

Ah, food catch, thank you, removed.


Detect changes to /android/app/build.gradle so release signatures work without "flutter clean"

As per #29975, it's not documented in Preparing an Android app for release, that you must "flutter clean" to include the release signature (as required by google play).
I'd prefer flutter build detect the change in ./android/app/build.gradle and update accordingly, which would reduce confusion and save adding an extra step to the docs.
Thanks.

You do not need to flutter clean when uploading an APK. Changes to build.gradle will be picked up by gradle


12 hour for the pico w as well

Thanks for fixing the pico 12 hour time, I’m using the pico w code de which I should have mentioned. Could you add it to that one as well? Thanks!

Just added it.

From: Steph1116 @.>
Sent: Thursday, January 12, 2023 9:15 PM
To: jake1164/Pico-RGB-Matrix-Clock @.>
Cc: Subscribed @.***>
Subject: [jake1164/Pico-RGB-Matrix-Clock] 12 hour for the pico w as well (Issue #1)
Thanks for fixing the pico 12 hour time, I’m using the pico w code de which I should have mentioned. Could you add it to that one as well? Thanks!
—
Reply to this email directly, view it on GitHubhttps://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fjake1164%2FPico-RGB-Matrix-Clock%2Fissues%2F1&data=05|01||016eb71b1c584ecfd2b308daf50c0522|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|638091729212122486|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|3000|||&sdata=b4Gsv24EpuBi8SFM7mVIiKN39CWLs5qQEfZZcarTABE%3D&reserved=0, or unsubscribehttps://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAAN7MK6PGW2H2MXQFR67YJ3WSC3DPANCNFSM6AAAAAATZ432NQ&data=05|01||016eb71b1c584ecfd2b308daf50c0522|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|638091729212122486|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|3000|||&sdata=0HmhUy90sg6indqyBYXou6%2FelWOMmGnp5Tl9Bof3ohE%3D&reserved=0.
You are receiving this because you are subscribed to this thread.Message ID: @.***>

Thank you!!!
I hate to ask. The waveshare team has released an update to their demo. The code from their site originally had my clock display upside down, your code does the same. This doesn't cause a whole lot of issues but my whole unit has to sit on a surface rather than being able to be hung from the mount holes. Is there a way to implement their updated code, along with the newly added 12 hour code to the pico w?

Also I noticed having the code run that after awhile my screen says "code done running" this was just the unit unplugged from my pc just powered by the 5v wall plug.

Yes I noticed the demo code was upside down and was just not sure if it was something with my unit or not.  I will have to look at the updated code, thanks for the heads up.

From: Steph1116 @.>
Sent: Thursday, January 12, 2023 9:52 PM
To: jake1164/Pico-RGB-Matrix-Clock @.>
Cc: Jason Jackson @.>; Comment @.>
Subject: Re: [jake1164/Pico-RGB-Matrix-Clock] 12 hour for the pico w as well (Issue #1)
Thank you!!!
I hate to ask. The waveshare team has released an update to their demo. The code from their site originally had my clock display upside down, your code does the same. This doesn't cause a whole lot of issues but my whole unit has to sit on a surface rather than being able to be hung from the mount holes. Is there a way to implement their updated code, along with the newly added 12 hour code to the pico w?
—
Reply to this email directly, view it on GitHubhttps://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fjake1164%2FPico-RGB-Matrix-Clock%2Fissues%2F1%23issuecomment-1381248466&data=05|01||c2f694ef6fc744ed24cf08daf51143f7|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|638091751743984344|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|3000|||&sdata=3mDKRsmK7aV4jhpP%2F%2B%2FlQufK5z6f9mt46%2B%2BJzXSVVKg%3D&reserved=0, or unsubscribehttps://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAAN7MKYNPWCR4PXMU5Q23GLWSC7QJANCNFSM6AAAAAATZ432NQ&data=05|01||c2f694ef6fc744ed24cf08daf51143f7|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|638091751743984344|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|3000|||&sdata=COrqIzG1mupuM5JR6ZuyxcARcVUj4%2FxdQBtuEo22FM4%3D&reserved=0.
You are receiving this because you commented.Message ID: @.***>

I noticed that as well and was going to look into it and see if it was a circuit python issue or something with the code. I will hopefully have an update this weekend.

From: Steph1116 @.>
Sent: Thursday, January 12, 2023 9:55 PM
To: jake1164/Pico-RGB-Matrix-Clock @.>
Cc: Jason Jackson @.>; Comment @.>
Subject: Re: [jake1164/Pico-RGB-Matrix-Clock] 12 hour for the pico w as well (Issue #1)
Also I noticed having the code run that after awhile my screen says "code done running" this was just the unit unplugged from my pc just powered by the 5v wall plug.
—
Reply to this email directly, view it on GitHubhttps://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fjake1164%2FPico-RGB-Matrix-Clock%2Fissues%2F1%23issuecomment-1381249798&data=05|01||47afda5c9cfb4a84860108daf511a964|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|638091753444633186|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|3000|||&sdata=CxC8hCknbTZx78zuDc%2BL3WdEJTBnFpuPEF%2F%2Fgfe%2B2mQ%3D&reserved=0, or unsubscribehttps://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAAN7MK4XW6GYIOWNZTAEKDLWSC725ANCNFSM6AAAAAATZ432NQ&data=05|01||47afda5c9cfb4a84860108daf511a964|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|638091753444789409|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|3000|||&sdata=WZ1gtL7ytJuC0%2BIlbrXRWMVJJc5ARUzoPsQ8U1hlVwA%3D&reserved=0.
You are receiving this because you commented.Message ID: @.***>

While cant say for sure but I am not seeing the code has finished running issue since updating. (fingers crossed)

I'm not sure exactly how long after I plugged the unit in and using as I would for a display clock, but I did wake up to the white text saying code done running. Just wanted to update you. Absolutely no rush for me as I haven't fully implemented this as a clock into my home. I'm still using the pico w to learn code and try out a few things. My end goal is obtaining a second pico w and then installing the original into this clock and mount it on the wall to display.
Thanks again!

I would do a fresh pull and copy all the files over again.

Downloaded your latest updated code and it's been holding strong for the last 12 hours. It's also in the correct orientation. Much appreciate the updates and looking forward to any additions you do in the future, including the possibility of the weather. I'll update you if it doesn't last overnight. Thanks again

Hi, I'd thought you'd like to know that I've been running your code now since my last message to you and it has been running flawlessly. Thanks so much again for all the fixes, I've spent so much money and time just trying to get a clock, this is truly perfect!

Great to hear!  I am excited to make this offer a little more than a clock soon!

From: Steph1116 @.>
Sent: Monday, January 16, 2023 5:56 PM
To: jake1164/Pico-RGB-Matrix-Clock @.>
Cc: Jason Jackson @.>; State change @.>
Subject: Re: [jake1164/Pico-RGB-Matrix-Clock] 12 hour for the pico w as well (Issue #1)
Hi, I'd thought you'd like to know that I've been running your code now since my last message to you and it has been running flawlessly. Thanks so much again for all the fixes, I've spent so much money and time just trying to get a clock, this is truly perfect!
—
Reply to this email directly, view it on GitHubhttps://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fjake1164%2FPico-RGB-Matrix-Clock%2Fissues%2F1%23issuecomment-1384643487&data=05|01||c47e761f3e02404050b808daf814e03d|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|638095065795431897|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|3000|||&sdata=sJ%2FAvka7Pqf3rm%2FBm8ZaCJJL2lzmrZA3bdbeoKXIi5I%3D&reserved=0, or unsubscribehttps://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAAN7MK7QV2VXMUIBZJ3DAP3WSXGZBANCNFSM6AAAAAATZ432NQ&data=05|01||c47e761f3e02404050b808daf814e03d|84df9e7fe9f640afb435aaaaaaaaaaaa|1|0|638095065795431897|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D|3000|||&sdata=E9%2FSdm9lDNgp2XzoRv4%2Bc%2Bn%2BFGM6Vu30UeUHjPR%2FxeE%3D&reserved=0.
You are receiving this because you modified the open/close state.Message ID: @.***>

hi, everything is running smoothly. I bought a new pico W and im looking to use it with my 64x64 rgb panel, but i cant find any clock code for it. As a learning tool for me, any way to take this code and have it work on the 64x64?

If your talking just plugging the waveshare backed into a bigger panel then I guess in theory to test it just add a new line4, set the x & y to something on the lower half, add a line4.text="something", append the line to the Group and it should work in theory

I just have the pico w and the 64x64 panel with the 16 wires it came with. I don't have any other hardware. So I'm going to assume it's just simpler to write a whole new code. Not to worry my friend, I highly appreciate the reply and the code you provided here to get the clock up and running. Take care!


Index error

I am getting an index error
Traceback (most recent call last):
File "WinboxExploit.py", line 66, in
b[19] = d[38]
IndexError: bytearray index out of range
Please help.

What version of RouterOS is the router running?
Is the WinBox port exposed to where you connecting from?

Version 6.35 and yes the port 8921 is open

Well it sounds like the router isn't replying correctly.
The WinBox service isn't address whitelisted, right? (just thought I had tested that...)

When i press connect on winbox,it just says logging in....
That means it is connecting i guess

@wildwest1809 it's connecting if you get "Invalid username or password". Do you?

@Chupaka no i dont get “invalid username or password”.So i dont think its connecting.But the port 8921 seems to open when checked on nmap.

there could be multiple reasons for this. Active firewall, IP white-listing on the Router etc. I fail to see it as a problem with this PoC


[BE] correct coupon validation in admin

Coverage decreased (-0.06%) to 89.969% when pulling b12b2c72ddfdf6bd2977dd6e772673343c9d173d on feature/validation into 4bf1c1d34b3f58e511cecb01a440708cce0324d6 on feature/coupons.

Coverage increased (+0.09%) to 90.123% when pulling 9bd016ec08fb1166b2a78682d5153b46c2809dec on feature/validation into 4bf1c1d34b3f58e511cecb01a440708cce0324d6 on feature/coupons.

Coverage remained the same at 89.954% when pulling bc1e3314a33a64d11dbef9bfa4e91df867a68648 on feature/validation into 97b28394857e0182b549f46a88bff04399d2b9a4 on feature/coupons.

Right, good one. Did you check it on stripe to create couponts with this
setting required?

Unfortunately currency needs "blank=True, null=True", because if amount_off is not specified on Stripe, currency can be null. I will revert to have the validation in the admin form back.

Coverage increased (+0.09%) to 90.046% when pulling 0d5aea6da19609671961b8f5aaaaa472306e92be on feature/validation into 97b28394857e0182b549f46a88bff04399d2b9a4 on feature/coupons.

Great that you set nulls and blank, however  default there wil be very annoying and misleading for the user. I am removing it.

Coverage increased (+0.4%) to 90.332% when pulling e6853aa0cb7aa57c0bc7ee8c67c00b5a15522de5 on feature/validation into 97b28394857e0182b549f46a88bff04399d2b9a4 on feature/coupons.


NullPointerException crashes

Description of the problem:
NullPointerException: Attempt to invoke virtual method 'void com.journeyapps.barcodescanner.camera.CameraInstance.setSurface(com.journeyapps.barcodescanner.camera.CameraSurface)' on a null object reference
Module "com.journeyapps.barcodescanner.CameraPreview", line 461, in onLayout
Module "com.journeyapps.barcodescanner.CameraPreview$2", line 171, in surfaceChanged
Module "com.journeyapps.barcodescanner.CameraPreview", line 53, in access$100
Module "com.journeyapps.barcodescanner.CameraPreview", line 436, in startPreviewIfReady
Module "com.journeyapps.barcodescanner.CameraPreview", line 649, in startCameraPreview
...
(50 additional frame(s) were not displayed)
NullPointerException: Attempt to invoke virtual method 'void com.journeyapps.barcodescanner.camera.CameraInstance.setSurface(com.journeyapps.barcodescanner.camera.CameraSurface)' on a null object reference
Module "com.journeyapps.barcodescanner.CameraPreview$3", line 179, in handleMessage
Module "com.journeyapps.barcodescanner.CameraPreview", line 53, in access$300
Module "com.journeyapps.barcodescanner.CameraPreview", line 387, in previewSized
Module "com.journeyapps.barcodescanner.CameraPreview", line 436, in startPreviewIfReady
Module "com.journeyapps.barcodescanner.CameraPreview", line 649, in startCameraPreview
...
(6 additional frame(s) were not displayed)
Which library version are you using? E.g. 3.2.0.
3.1.0
Which phone/tablet are you using, and which Android version does it run? (e.g. Samsung Galaxy S5,
Android 5.0)
Does the same happen on other devices or an emulator?
Can you reproduce the issue in the sample project included with the library? If not, can you
provide your own sample project or sample code that produces this error?
In the case of an error do you have a stack trace or adb logs?
Same as above

Closing old issues - please open a new issue if you still run into this with the latest version.


Add redis container and setup in moodle as the main cache to fix #41

I added Redis support for Moodle within the container to enhance caching capabilities and overall performance. Redis, being a well-regarded in-memory data structure store, can significantly accelerate Moodle's operations by serving as a reliable caching solution.
The official Moodle documentation provides comprehensive insights on configuring Redis as a cache store. You can refer to this link for more details: Redis Cache Store.
Incorporating Redis support could be a game-changer for many users who are looking to optimize their Moodle instances. This enhancement will likely contribute to a better user experience and more efficient resource utilization.

Good news!


MAINT: multiple backports for 1.2.x

Fused backports for gh-9486, gh-9494, gh-9512, gh-9507, and gh-9526.
Some minor manual resolution of cherry-pick conflicts was needed for gh-9507, followed by condensation to single commit for the above.

Backport PR all-green -- in it goes.


How to drag an element, but with two fingers?

I have a "div" element, and I want to know how to drag this, but with two fingers.
This because inside the "div" element I want to add an image slider, but with one finger's gesture.
It is possible?
Many Thanks in advance.

This is a version 1 issue drag was removed in v2 closing


Installing Nuitka from master can't find fuse library "(libfuse.so.x from fuse2, not fuse3)"

Describe the bug
FATAL: Error, the fuse library (libfuse.so.x from fuse2, *not* fuse3) must be installed for onefile creation to work on Linux.
Steps To Reproduce
Steps to reproduce the behavior:

Install Nuitka from master (commit: 50178beea3b05144d557cc69a285670a7ca972f8)
nuitka3 --onefile --linux-onefile-icon=[path] --follow-imports [file].py

Expected behavior
I thought I'd get a binary out of this.
Metadata
Please run nix-shell -p nix-info --run "nix-info -m" and paste the result.
[user@system:~]$ nix-shell -p nix-info --run "nix-info -m"
 - system: `"x86_64-linux"`
 - host os: `Linux 5.13.4, NixOS, 21.11 (Porcupine)`
 - multi-user?: `yes`
 - sandbox: `no`
 - version: `nix-env (Nix) 2.5.0pre20211206_d1aaa7e`
 - channels(shadowrylander): `"master"`
 - nixpkgs: `/nix/var/nix/profiles/per-user/root/channels/nixos`

This most likely needs a patch.

Has there been any update on this? I am running the into the same issue, and the binary can't be run on a Linux system


Add 95% confidence intervals for adjusted sequence ratio

For the crude sequence ratio's confidence intervals can be calculated however we also need confidence intervals for the adjusted sequence ratio. Other studies do report CI's so we need to calculate and include them too. Examples below
https://www.sciencedirect.com/science/article/pii/S1525861021006010
https://link.springer.com/article/10.1007/s40264-018-0638-2
And here it is for bootstrapping in original code: https://github.com/tystan/seqsym/blob/main/R/boot_ci.R we need to update it using: https://pubmed.ncbi.nlm.nih.gov/36448210/

think it works now, closing it as a result. At the end I did lower_ci_csr dividing by nsr and vice versa for upper_ci_csr.


Add docker dev prod workflow guide

#1094  👈
main

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @carolineechen and the rest of your teammates on  Graphite


[BUG] tuiTextfieldCleaner does not work with InputCopy

🐞 Bug report
Description
When tuiTextfieldCleaner is enabled, it's not visible at InputCopy , see the API.
Reproduction
Check the API docs playground: https://taiga-ui.dev/components/input-copy/API?tuiMode=null&tuiTextfieldCleaner=true
Expected behavior
When  tuiTextfieldCleaner is enabled, the "clear" (X) button should be visible and displayed on the right of the input box near the "copy" button.
Versions

<EMAIL_ADDRESS>

Perhaps, this is connected with #720


[BUG] Escaping of "/" in json pointers

Describe the bug
In my pipeline.yaml i am hoping to extract the value "foo" however in the field the key there are "/" slashes and it should be treated as one key. As seen below.
{ "kubernetes": { "labels": { "app.kubernetes.io/component": "foo" } } }
Data Prepper uses "/" for json pointers. So it would look like so:
'/kubernetes/labels/app.kubernetes.io/component'
However this does not capture the value thus it is skipped. I think it is because the "/" in component needs to be escaped. How do you escape values in Data Prepper?
To Reproduce

Publish an event like the one structured above.
Attempt to parse out the event value "foo" and store it into another field.

Expected behavior
I was expecting to be able to escape the "/" with a "/" or of the escape patterns specified in the documentation. However this did not work.
Environment (please complete the following information):

OS: MacOSX

Additional context
AWS Managed OpenSearch Ingestion Service

I was able to get this to work by escaping with ~1 as the /. However, we have a validation blocking ~ in the key. I will make a change to allow this character since it is a json pointer standard
processor:
    - copy_values:
        entries:
          - from_key: "/kubernetes/labels/app.kubernetes.io~1component"
            to_key: "copied_field"


silly doubt

will it support Angular 2?
if possible could u pls post example in Typescript along with remote json via jquery ajax?
Thanks alot

There should not be any conflict between JsRender and Angular 2.
I don't work with Angular myself, nor with Typescript. You should be able to use the many JavaScript examples. If you need to convert to Typescript, you'll need to that yourself.
I have not yet created typescript type definitions for JsRender (https://github.com/BorisMoore/jsrender/issues/211) but this may help: https://www.nuget.org/packages/jsrender.TypeScript.DefinitelyTyped/0.1.6

Closing.


Added "Use Kotlin" option for setup tool

Supporting the new languages was primarily implemented through using a new Language enum containing the language-specific Gradle-related strings for the two supported languages (Java and Kotlin). Could be extended in the future to include other languages like Scala or Clojure.
I also edited the project build.gradle templates to be agnostic as to what language plugin they use.
This is feature that I personally felt I wanted to have, as tweaking new projects to compile Kotlin properly took a lot of time.

How are you handling kotlin and gwt?

KOTLIN ("kotlin", "ext.kotlinVersion = '1.0.0'",

Please..  latest version is 1.1.2

How are you handling kotlin and gwt incompatibility?

As of right now it is ignored and a GWT build is created that can never run due to using Kotlin. Ideally the option should warn like other non-GWT compatible options do.

Please.. latest version is 1.1.2

True. My reasoning with using 1.0.0 was to leave version choice to the user, meaning the value doesn't have to be updated with each new version of Kotlin. But if you'd prefer that the value be 1.1.2 (1.1.2-5?), then sure, I will change that!
Any other thoughts, criticisms, etc?

It would be better to disable the html project completely when generating with kotlin, and give warnings when selecting kotlin (or any other jvm language in future)

I find the Eclipse plugin bundles 1.1.1, and so does Netbeans. IDEA is usually up to date. So then 1.1.1 for the current version?
I will try to hook Kotlin to the same warning shown when selecting other GWT incompatible options, and prevent generation of GWT projects when a non-Java language is selected.


python310Packages.fontawesomefree: 6.4.2 -> 6.5.1

Automatic update generated by nixpkgs-update tools. This update was made based on information from passthru.updateScript.
meta.description for python310Packages.fontawesomefree is: Icon library and toolkit
meta.homepage for python310Packages.fontawesomefree is: https://github.com/FortAwesome/Font-Awesome
Updates performed

Ran passthru.UpdateScript

To inspect upstream changes
Impact

Checks done (click to expand)

built on NixOS
The tests defined in passthru.tests, if any, passed
found 6.5.1 with grep in /nix/store/rzm3gjjyglkkicq44pfpbm1w16rhafm3-python3.10-fontawesomefree-6.5.1
found 6.5.1 in filename of file in /nix/store/rzm3gjjyglkkicq44pfpbm1w16rhafm3-python3.10-fontawesomefree-6.5.1

Rebuild report (if merged into master) (click to expand)

2 total rebuild path(s)

2 package rebuild(s)

First fifty rebuilds by attrpath
python310Packages.fontawesomefree
python311Packages.fontawesomefree

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/rzm3gjjyglkkicq44pfpbm1w16rhafm3-python3.10-fontawesomefree-6.5.1 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A python310Packages.fontawesomefree https://github.com/r-ryantm/nixpkgs/archive/5b9f691ffe6cc373f581dbdaac4b0a1a074c09b9.tar.gz

Or:
nix build github:r-ryantm/nixpkgs/5b9f691ffe6cc373f581dbdaac4b0a1a074c09b9#python310Packages.fontawesomefree

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/rzm3gjjyglkkicq44pfpbm1w16rhafm3-python3.10-fontawesomefree-6.5.1
ls -la /nix/store/rzm3gjjyglkkicq44pfpbm1w16rhafm3-python3.10-fontawesomefree-6.5.1/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

2 packages built:

python310Packages.fontawesomefree
python311Packages.fontawesomefree

Maintainer pings
cc @NetaliDev for testing.

Result of nixpkgs-review pr 271602 run on x86_64-linux 1

4 packages built:

python310Packages.fontawesomefree
python310Packages.fontawesomefree.dist
python311Packages.fontawesomefree
python311Packages.fontawesomefree.dist


[WIP] Deathcube support

Features

Deathcube libraries get loaded, and can be used (testing using Chrome console)

TODO

[ ] Wait for member and new keyword support from js-slang
[ ] Fix any issues with resetting workspace / link sharing

Pull Request Test Coverage Report for Build 492

2 of 2 (100.0%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.02%) to 24.633%

Totals

Change from base Build 483:
0.02%

Covered Lines:
770

Relevant Lines:
2640

💛  - Coveralls


rapidsai package cannot be installed as per prefix-dev channel instructions

Checks

[x] I have checked that this issue has not already been reported.

[x] I have confirmed this bug exists on the latest version of pixi, using pixi --version.

Reproducible example
pixi init
nano pixi.toml  # Manually add "rapidsai" to channels list in addition to default "conda-forge".
pixi add cuml==24.10.0

This generates the error message:
  × failed to solve the conda requirements of 'default' 'linux-64'
  ╰─▶ Cannot solve the request because of: The following packages are incompatible
      └─ cuml >=24.10.0 cannot be installed because there are no viable options:
         └─ cuml 24.10.0 | 24.10.0 | 24.10.0 | 24.10.0 | 24.10.0 | 24.10.0 would require
            └─ raft-dask 24.10.*, which cannot be installed because there are no viable options:
               └─ raft-dask 24.10.0 | 24.10.0 | 24.10.0 | 24.10.0 | 24.10.0 | 24.10.0 would require
                  └─ rmm 24.10.*, which cannot be installed because there are no viable options:
                     └─ rmm 24.10.0 | 24.10.0 | 24.10.0 | 24.10.0 | 24.10.0 | 24.10.0 is excluded because due to strict channel priority not using this option from: 'https://conda.anaconda.org/rapidsai/'

Issue description
I am working on a project where I need to use the cuML library from the rapidsai channel.  According to the prefix.dev channel info on installing rapidsai::cuml, the most recent version is 24.10.0 and works with python 3.11 and greater.  NOTE:  I am working with Ubuntu 22.04 over WSL2 on Windows 11 with the latest pixi --version  # Shows 0.34.0.
If I try installing from a fresh pixi init, adding rapidsai to the channels, and then running pixi add cuml, it installs python 3.7 and some ancient version of cuml, which is curious but also not helpful.
I tried a lot of other things to get pixi to install this (treating it as a pip install and following the pip install instructions, trying out different versions, etc).  This whole package seems to be bricked in this channel after 0.6, but the prefix.dev documentation shows this as an installable package version for linux-64 platform, but neither it nor dozens of versions older than it is actually installable with pixi.
Expected behavior
It should install the version described in the prefix.dev channel description.

Hi @naondo88,
This has to do with the channel priority logic. You can turn this off by running with channel-priority = "disabled" to avoid pixi ignoring the dependencies if they come from a different channel then the one with the highest priority.
This worked for me:
[project]
channels = ["conda-forge", "rapidsai"]
channel-priority = "disabled"
name = "test-cuml"
platforms = ["linux-64"]

[dependencies]
cuml = "==24.10.0"

It better to stripout the dependencies and define which channel you want to get them from e.g.:
[project]
channels = ["conda-forge", "rapidsai"]
name = "test-cuml"
platforms = ["linux-64"]

[dependencies]
cuml = {version = "==24.10.0", channel = "rapidsai" }
cudf = {version = "==24.10.01", channel = "rapidsai" }
# ... etc.

But that takes some manual labor

Hi @naondo88,
This has to do with the channel priority logic. You can turn this off by running with channel-priority = "disabled" to avoid pixi ignoring the dependencies if they come from a different channel then the one with the highest priority.

Thanks, I finally got this working, but it had to have this form for me to get it to work:
[project]
channels = [
  "conda-forge",
  "nvidia",  # Not sure if this was needed, I forget to check without it, so I will include it.
  "rapidsai",
]
channel-priority = "disabled"
platforms = ["linux-64"]

[dependencies]
cuml = { version = "==24.10.0", channel = "rapidsai" }

So basically both of them.  I've been writing (prior to trying pixi) my environment.yaml files with <channel-name>::<package-name> = ..., so this is only a slight modification of that syntax.
Thanks for your help!


add context dict to python client for get-metric-histories

this will supply context dictionary to the FML GetMetricHistories endpoint

Geoff says no


Create some sort of queue for deferred actions on zones.

There is a race condition in MUSIC-SIDECAR where we require the sidecar to have a zone config for the sidecar identity name and we want to make a change to that zone (publish a TLSA to start with). But loading zones take non-zero time, so the zone object isn't ready when we load the sidecar config.
 Creating some sort of callback function would be nicer ("do this when that zone becomes available"), but is rather complex change.
Another alternative: create a queue of deferred actions and run that queue periodically. This may be the least ugly option...
It could perhaps be implemented most easily as a new type of request to the ZoneUpdater() that doesn't contain any ZoneData object, but only the name of a zone (and the action). On receipt the ZoneUpdater() checks if the zone exists and if it doesn't the request is just stored in a queue for re-checking later.

Done


Submit package to packagist

There is a composer.json file now, but the package isn't available on packagist so adding a 'repository' object to the root composer.json is required.
May want to consider reorganizing the code into PSR-4 format as well.

Yes, it would be great. However meanwhile just edit your composer.json file so it includes the "repositories" section pointing to this git repo and then add "binaryage/firelogger" to your "require" section. Full details are described here: https://getcomposer.org/doc/05-repositories.md#vcs.
Example section of file follows:
    "repositories": [
        {
            "url": "https://github.com/binaryage/firelogger.php.git",
            "type": "git"
        }
    ],
    "require": {
        "php": ">=5.4",
        "laravel/framework": "4.2.*",
        "october/system": "~1.0",
        "october/backend": "~1.0",
        "october/cms": "~1.0",
        "october/rain": "~1.0",
        "binaryage/firelogger": "*"
    },


FTPRemoteProvider complains about ftps:// url even when ftp:// is specified

Snakemake version

Bug appears starting in version 6.4.0 and exists in 6.4.1, 6.5.0, and 6.5.1
Describe the bug
Attempting to download a file using the FTPRemoteProvider results in an error.
Logs
SyntaxError:
encrypt_data_channel=False cannot be used with a ftps:// url
  File "/home/lparsons/Documents/projects/MitoRiboSeq/code/mito_readphasing_metagene.snakefile", line 16, in <module>
  File "/home/lparsons/Documents/projects/MitoRiboSeq/code/rules/genome.smk", line 15, in <module>
  File "/home/lparsons/miniconda3/envs/MitoRiboSeq/lib/python3.8/site-packages/snakemake/remote/FTP.py", line 70, in remote

Minimal example
from snakemake.remote.FTP import RemoteProvider as FTPRemoteProvider
FTP = FTPRemoteProvider()

rule all:
    input:
        "genome/Homo_sapiens.GRCh38.dna_sm.primary_assembly.fa.gz"

rule get_fasta_ftp:
    input:
        FTP.remote("ftp://ftp.ensembl.org/pub/release-100/fasta/homo_sapiens/dna/Homo_sapiens.GRCh38.dna_sm.primary_assembly.fa.gz", keep_local=True)
    output:
        "genome/Homo_sapiens.GRCh38.dna_sm.primary_assembly.fa.gz"
    shell:
        "mv {input:q} {output:q}"

Additional context

@jmeppley this seems to be related to one of your commits (30877ff10). Could you have a look?

Yes. That's definitely from my PR. I can't tell if it's entirely my fault, or if I just did a bad job fixing a previous bug. Either way, I think it's a simple fix.
I have a fix here that seems to work.
I'll submit a PR as soon as I have the test set up.

@johanneskoester It looks like it passed all the checks and can be merged

Fixed by PR #1068!


there appears to be a newline issue with the currrent release

there appears to be a bug with the newline property?
Module build failed: TypeError: Cannot read property 'newLine' of undefined
typescript\lib\typescript.js:9426:20)
typescript.js:62475:26)

TypeScript Version:  2.1.1 / nightly (2.2.0-dev.201xxxxx)
Code
// A *self-contained* demonstration of the problem follows...

Expected behavior:
Actual behavior:

Can you share a self-contained repro? also a version number?

ERROR in ./src/main.ts
Module build failed: TypeError: Cannot read property 'newLine' of undefined
at Object.getNewLineCharacter (C:\aaa-angular2\angular2cli\foo\node_modules\typescript\lib\typescript.js:8062:20)
it appears to be in version 2.0.0/2.2.1

can you share your  ./src/main.ts and/or your tsconfig.json?

c:\test>tsc --v
Version 2.2.1

c:\test>type a.ts
var x = 0;

c:\test>tsc a.ts --newLine lf

c:\test>type a.js
var x = 0;

c:\test>tsc a.ts --newLine crlf

c:\test>type a.js
var x = 0;

this has been fixed with the lastest version of typescript installed in node_modules

Thanks


Camera doesn't follow headset accurately

Built the demos using cmake and tested them on Quest 2 with link and airlink in 90hz and 120hz.
Tried also with virtual desktop and steamvr but it's even worst. The image is stuttering like crazy when moving my head but only in the hmd view.
I don't believe it is an issue on my end as I do pcvr using those everyday and everything works perfectly.

Hi! Sorry to hear it's not working well with the quest and my delay to get back to you.
I only have a oculus rift myself. But I might be able to debug with a friend who has a quest 2.
In the meantime, could you try moving the rlOpenXRUpdateCamera() call to directly after rlOpenXRBegin()? the rlOpenXRBegin call is also responsible for waiting until the next frame (it's own VSync sort of) and updating the time which will be used by the rlOpenXRUpdateCamera call.

Hi! Sorry to hear it's not working well with the quest and my delay to get back to you.
I only have a oculus rift myself. But I might be able to debug with a friend who has a quest 2.
In the meantime, could you try moving the rlOpenXRUpdateCamera() call to directly after rlOpenXRBegin()? the rlOpenXRBegin call is also responsible for waiting until the next frame (it's own VSync sort of) and updating the time which will be used by the rlOpenXRUpdateCamera call.

Sorry for the late reply, I just tried it and it seems to be working, thanks!

I've moved the xrWaitFrame() call from rlOpenXRBegin() to rlOpenXRUpdate(). According to the OpenXR documentation this makes sense to do. And fixes your issue in the process!


Many important data are missing

Hi,
since tonmon.xyz is the official tool to monitor the status of the TON network, there is a lot of missing data compared to other major projects. In particular, there is a lack of detailed information about the number of accounts, the current and maximum number of transactions, the circulating and total supply, the number of validators/nominators and their stakes, inflation, TVL, etc.

I totally agree

Please see this.


update the SP links to the new correct locations and add ref tracking

Hey all. Marketing is asking me to update various links we have out in the wild with some basic tracking. Please let me know if you have any questions at all.

Please revert any whitespace changes because those are need by the
templating language. Otherwise I'll take care of it tomorrow.
On Sat, Jul 14, 2018, 00:10 Justin Johnson<EMAIL_ADDRESS>wrote:

Hey all. Marketing is asking me to update various links we have out in the
wild with some basic tracking. Please let me know if you have any questions
at all.
You can view, comment on, or merge this pull request online at:
https://github.com/MaxCDN/bootstrapcdn/pull/1195
Commit Summary

update the SP links to the new correct locations and add ref tracking

File Changes

M views/_partials/footer.pug
https://github.com/MaxCDN/bootstrapcdn/pull/1195/files#diff-0 (18)
M views/_partials/jumbotron.pug
https://github.com/MaxCDN/bootstrapcdn/pull/1195/files#diff-1 (10)
M views/about.pug
https://github.com/MaxCDN/bootstrapcdn/pull/1195/files#diff-2 (8)

Patch Links:

https://github.com/MaxCDN/bootstrapcdn/pull/1195.patch
https://github.com/MaxCDN/bootstrapcdn/pull/1195.diff

—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/MaxCDN/bootstrapcdn/pull/1195, or mute the thread
https://github.com/notifications/unsubscribe-auth/AAVVtTnXCAldeAZSgXVhu5F6mzDh50xYks5uGQzfgaJpZM4VPg6J
.


Allow to restrict tox envs in test runs via PR description

[CI:TOXENVS] base,minimal

LGTM. I'd just do the determination of affected tests by looking at the list of modified files but this works as well.

I don't see this working as expected. It is unlikely that external users will know what tests to run. Plus, you need to remember to edit the PR text before submitting it.
It should be the other way around perhaps. Run a few tests by default always, and an "admin" comments something to enable the rest of the tests to run.
Another issue is that tests all envs are required, if you run a subset only, the PR gets "blocked" by default.

I don't see this working as expected. It is unlikely that external users will know what tests to run.

We get zero external contributors. The majority of the PRs are by the BCI or the QA team who will know what to run.

Plus, you need to remember to edit the PR text before submitting it.

That's why there's a template.

It should be the other way around perhaps. Run a few tests by default always, and an "admin" comments something to enable the rest of the tests to run.

I did that in #461 and Dirk objected. Plus this solution is much simpler.

Another issue is that all env tests are required, if you run a subset only, the PR gets "blocked" by default.

Yes, but an admin can override that. Also, we can relax the required CI jobs.

Alexandre Vicenzi @.***> writes:

@alexandrevicenzi commented on this pull request.

@@ -0,0 +1,8 @@
+<!--
+Thanks for sending a pull request!

+In case you are changing only tests for a specific environment and don't need to
+run all test environments, add the following line to your PR description on a
+separate line! [CI:TOXENVS] foo,bar
+
I noticed that in some of my PRs, GitHub interface grabs the last commit message and it would possibly hide this template.
Will this template show all the time? or can GitHub hide it in some scenarios?

Github can hide it sometimes, iirc if you create a PR explicitly from a
branch and only have one commit there.

@dirkmueller @alexandrevicenzi Any opinions how to move forward here?

@dirkmueller @alexandrevicenzi Any opinions how to move forward here?

see my earlier message already at https://github.com/SUSE/BCI-tests/pull/464#issuecomment-2084952391


Make sure we throw a NetworkException on timeouts.

Q
A

Bug fix?
yes

New feature?
no

BC breaks?
no

Deprecations?
no

Related tickets
fixes #14

Documentation

License
MIT

Thank you for the review.


addressDictionary not available in the result in the locateFromCoordinates method using google

Hi, one weird thing I saw in the latest version of the library, was that in the place model that brings the findFromCoordinates() response, it was not bringing the original json when using the Google service, only the data already processed, this is a problem in case you need the place_id, looking at the code you see that the addressDictionary field is only initialized when using the apple service, but not in the other two services.

Now identifier of the place is parsed in identifier property when available.
You can still access to the raw JSON parsed from thirdy party services via rawData property of the single Place instance.


query with condition comparing with zero got incorrect results

Hi, pinot team, when I ran a query with condition value > 0 but got results with value = 0
Is this an issue or should I make some special configuration to avoid this?
The query is:
select clock, value from application_metrics where metric = 'successCount' and statistic='duration' and value > 0 limit 10

clock is a time column with TIMESTAMP type and value is a metric column with DOUBLE type, the others are dimension columns. The pinot version is 0.11.0-SNAPSHOT and built form source with last commit hash 561e471a86278e0e486cd9e602f8499fc8f8517c
I also ran this query with the broker query api, and also got the wrong results.
Screenshots from the pinot UI and rest api tool are attached.

Thanks for reporting the issue. Can you please also share the table config for this table?

I can take a look at this. @huang1st please share the table config, or just what indexes you have on the value field, and whether it has a dictionary or not.

Sorry for the late reply. The table config is attached.  application_metrics_tableconfig.txt
The star tree index is enabled for most of the columns.
And according to my observation, the issue only occurs in some specific filter conditions, I believe it only happens when the values of the value column are very scattered, such as 0, 107047240, 88962459.
Thank you very much!

Sorry for the late reply. The table config is attached. application_metrics_tableconfig.txt
The star tree index is enabled for most of the columns.
And according to my observation, the issue only occurs in some specific filter conditions, I believe it only happens when the values of the value column are very scattered, such as 0, 107047240, 88962459.
Thank you very much!

Thanks, can you also provide the output when you prefix your query with “explain plan for” please?

@richardstartin  the query plan is below:

Operator
Operator_Id
Parent_Id

BROKER_REDUCE(limit:10)
1
0

COMBINE_SELECT

2

PLAN_START(numSegmentsForThisPlan:1395)
-1
-1

SELECT(selectList:clock, value)
3
2

TRANSFORM_PASSTHROUGH(clock, value)
4
3

PROJECT(value, clock)
5
4

DOC_ID_SET
6
5

FILTER_AND
7
6

FILTER_FULL_SCAN(operator:EQ,predicate:metric = 'successCount')
8
7

FILTER_FULL_SCAN(operator:EQ,predicate:statistic = 'duration')
9
7

ILTER_FULL_SCAN(operator:RANGE,predicate:value > '0.0')
10
7

Is metric a metric column or a text column?
            "name": "metric",
            "encodingType": "RAW",
            "indexType": "TEXT",
            "indexTypes": [
                "TEXT"
            ]```

Is metric a metric column or a text column?
            "name": "metric",
            "encodingType": "RAW",
            "indexType": "TEXT",
            "indexTypes": [
                "TEXT"
            ]```

It is a dimension column and the type is string. I have attached the schema, you can have a look.
application_metrics_schema.txt

@huang1st Sorry I lost track of this issue. Did you find the cause of the issue?
Is the value column always whole number in the input data? What is the rough cardinality (unique values) of the column?
Most likely the issue is caused by #8722, but I don't see why it doesn't work. If you can reproduce it, can you try reverting this commit and see if the issue is fixed?

@Jackie-Jiang thank you for the reply.
Sorry I was busy with a project of my company these days and didn't have a chance to find the root cause.
I have upgraded the pinot to 0.11.0 release version and this issue still exists.
The value column is always number and the cardinality is quite large.
I will try your method later and see if the issue still occurs.

@Jackie-Jiang, sorry for the late reply.
After upgrading the version to 0.11.0 release, this issue can't be reproduced again. I think it has been fixed in the release version.


IE compatibility and AngularJS prep

Adding IE compatibility meta tag
Removing the Hello World stuff
Added a js folder and app.js file with a base module "netherWarhead" for future AngularJS work
Some formatting from HTMLPrettify

:shipit: shipit!


Cannot be converted to type error when trying to use global filter with interface

I tried to setup a global filter to implement soft delete filtering accross all my entity types in the progress of migrating a project to NET Core.
Used versions:
Microsoft.EntityFrameworkCore 1.0.1
Z.EntityFramework.Plus.EFCore 1.4.9
The entity inheritance tree looks like this:
Interface: IEntityBase -> Abstract class: EntityBase -> Entity classes: Address, Offers...
When I try to initialize a global filter:
QueryFilterManager.Filter<IEntityBase>("IsActive", pe => pe.Where(e => e.State == null)); QueryFilterManager.InitilizeGlobalFilter(ctx);
I get the following error:
`System.ArgumentException was unhandled
HResult=-2147024809
Message=Object of type 'Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable'1[Tst.IEntityBase]' cannot be converted to type 'Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable'1[Test.Entities.Address]'.
Source=System.Private.CoreLib
StackTrace:
at System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast)
at System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr)
at System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig)
at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, Object[] index)
at Z.EntityFramework.Plus.QueryFilterSet.UpdateInternalQuery(DbContext context, Object query)
at Z.EntityFramework.Plus.QueryFilterQueryable'1.UpdateInternalQuery()
at Z.EntityFramework.Plus.QueryFilterContext.EnableFilter(BaseQueryFilter filter, Type[] types)
at Z.EntityFramework.Plus.QueryFilterManager.InitilizeGlobalFilter(DbContext context)

Hello @sw-ch ,
Unfortunately, this is a documented limitation for EF Core: EF+ Query Filter - Limitations
This issue is due because EF Core cannot handle simple casting: https://github.com/aspnet/EntityFramework/issues/3736
I will take one hour or two today to see if I can use a workaround since the fix has been reported to milestone 7.00 -> 1.00 -> 1.01 -> 1.1.0-preview1 -> 1.2.0 by the EF Team.

Hi Jonathan
Thanks for your quick reply. Sorry for bothering, should have seen that in the documentation.
Regards
Stephan

Hello Stephan ,
Don't be sorry for that. It's always good to have a reminder from time to time to check if Cast method has been fixed or not.
A 'ForceCast' option has been added which may or not help you with this issue.
QueryFilterManager.ForceCast = true;

When enabled, Inherited class will now work and you will not longer get this error. However, some LINQ method will not longer work with Filtered query:

Aggregate
Max
Min
Sum

Let me know if that can partially fix your situation for now.
Best Regards,
Jonathan

Hi Jonathan
Thanks for the new version. Currently, I should be able to work around the limitations. It also seems to work with single table-per-hierarchy inheritance entities. I will need some time to figure out how much ground I can cover without hitting another wall...
Should I close the issue for now or do you want to keep it open as a reminder?
Regards
Stephan

Hello @sw-ch ,
Let close it, that will make it easier to track other issues.
Best Regards,
Jonathan


BUG: Navbar not fixed at the top

Is there an existing issue for this?

[X] I have searched the existing issues

What happened?
Description:
Currently, the navbar is not fixed at the top of the page. This creates inconvenience as users have to scroll to the top whenever they wish to switch to another page.
Expected Behavior:
The navbar should be fixed at the top of the page, ensuring easy navigation regardless of the user's scroll position.
Steps to Reproduce:
Scroll down the page.
Attempt to switch to another page.
Notice that you have to scroll back to the top to access the navbar.
This issue affects user experience and navigation efficiency, especially on longer pages. Ensuring a fixed navbar would greatly enhance usability.
Proposed Solution:
Implement a fixed navbar that remains visible at the top of the page even when scrolling down.
Record

[X] I agree to follow this project's Code of Conduct
[X] I'm a GSSOC'24 contributor
[X] I want to work on this issue

This issue has already raised #7 work on that.


Apply some ruff C4,UP,W fixes

% pipx run ruff --select=C,UP,W --statistics .
6	C408 	[*] Unnecessary `dict` call (rewrite as a literal)
3	UP005	[*] `assertEquals` is deprecated, use `assertEqual`
2	UP004	[*] Class `Request` inherits from `object`
2	UP008	[*] Use `super()` instead of `super(__class__, self)`
2	UP030	[*] Use implicit references for positional format fields
1	W291 	[*] Trailing whitespace
1	UP009	[*] UTF-8 encoding declaration is unnecessary
1	UP010	[*] Unnecessary `__future__` import `unicode_literals` for target Python version

% pipx run ruff --select=C,UP,W --fix .
Found 18 errors (18 fixed, 0 remaining).

% pipx run ruff rule C408
unnecessary-collection-call (C408)
Derived from the flake8-comprehensions linter.
Autofix is always available.
What it does
Checks for unnecessary dict, list or tuple calls that can be
rewritten as empty literals.
Why is this bad?
It's unnecessary to call e.g., dict() as opposed to using an empty
literal ({}). The former is slower because the name dict must be
looked up in the global scope in case it has been rebound.
Examples
dict()
dict(a=1, b=2)
list()
tuple()

Use instead:
{}
{"a": 1, "b": 2}
[]
()

Thanks!


SEEKING MAINTAINER FOR V2.X

Currently there are (33) open issues and (4) open pull requests.
I've been very busy with other open-source projects, and some major open source projects to come.
If anyone is interested in maintaining 2.x please message me here and I can add you as a collaborator.
I am planning a major rewrite for 3.x which uses Promises and has a much better API + simpler.

closing, v3.x released


MF-1317

What does this do?
It checks if user has defined a pattern for passwords with an environment var (envpassregex)
If this environment var is set, passwords should match with it
If this is not set, for backward compatibility a default regex will be used
This default regex only checks that password length be greater than or equal to 8 chars
Which issue(s) does this PR fix/relate to?
Resolves #1317
List any changes that modify/break current functionality
It doesn't break any functionality and it is completely backward compatible
Have you included tests for your changes?
Did you document any new/modified functionality?
Notes

@kasraabdollahi There was a PR already open to resolve this issue: https://github.com/mainflux/mainflux/pull/1355
Apart from this, any commit must be signed to pass the DCO. Also a title would be welcome.
I propose you to follow and help @blokovi in his PR and to close this one.


can't add some widgets

Can't add some widgets, like music widget or the notes widget, and the battery widget isn't showing my cellphone battery stats and have this message everytime I try to add the calendar widget

OS: windows 11

I love this project ! and I see a great future in this ! keep this up !

Hey, the music widget could be under another widget so maybe check that. Else look under %LocalAppdata%/Galaxy-Widgets in the widgetstates.json if show for the music widget is to be true. I'm gonna look into the calendar widget when im at home. For the Battery widget you have to follow the tutorial, if you did and it didnt work then check the IP and Port. Oh and let the widget app run till the phone lost 1% in battery so it it'll send the battery percentage to the app.


RuntimeError: Expected object of type torch.cuda.FloatTensor but found type torch.FloatTensor for argument #2 'other'

File "/opt/conda/lib/python3.6/site-packages/dropblock/dropblock.py", line 140, in forward
out = x * block_mask[:, None, :, :, :]

Encountered when using DropBlock3D.

Fixed by commit 8a6c7e8.

Fixed by commit d755a02.


Plugin update on crates.io

Hi there Motalleb.
I'm writing a script that depends on this plugin and my installation method is through cargo. I can't distribute a binary to my users for reasons. In crates.io the latest version of the plugin is for nushell version 0.94. I don't know how cargo stuff works, so if you can push an update to crates.io I'd appreciate it :)

Hi, It must be updated now and ill fix the auto-publish action for future

Thanks!


[Event Request] Codeunit 1104 - Cost Account Allocation - CalcLineShare

Could you please create an Integration event in Codeunit 1104 Cost Account Allocation, in function CalcLineShare?
[External] CalcLineShare(VAR CostAllocationTarget : Record "Cost Allocation Target")
// >>>>>
IsHandled := FALSE;
OnBeforeCalcLineShare(CostAllocationTarget,IsHandled);
IF IsHandled THEN
  EXIT;
// <<<<<
WITH CostAllocationTarget DO BEGIN
  ....
END;

Event signature:
LOCAL [IntegrationEvent] OnBeforeCalcLineShare(VAR CostAllocationTarget : Record "Cost Allocation Target";VAR IsHandled : Boolean)

Thank you!

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. We will update this issue with information about availability.

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. We will update this issue with information about availability.


Enforce usage of relative reference sequences (HEAD^ vs HEAD~) in rampup levels using git hooks

In the rampup levels, we use relative refs, but we don't enforce their usage, so we should do that if we can. If someone wants to look into this, we might be able to use git hooks to check for these.

I don't think we can do this unless we implement our own shell https://github.com/benthayer/git-gud/issues/169, so I'm closing


Swap Mastodon user_name and user_display; other minor fixes

Hopefully some uncontroversial fixes for you!

When I tried installing this script, it complained that python-dateutil didn't exist, so I added it to requirements.txt
I created a .gitignore and included the output directory so that any generated HTML doesn't clog up git.
Inlined the user's avatar. The variable was created, just not used - looks like that was accidentally missed
I found an example of a post that had a card, but no image, such that card_data['image'] was set to None. This was a problem for the rest of that block, because it was attempting to turn None into an inline-able image
Swapped the user_display and user_name. I'd already swapped them for my fork of this project to produce the image below. Originally it would have said that the post was by danielthepope in the first line, and @Dan Pope underneath.

LGTM! Thanks.


Develop Onboarding Plan for a new Site

As a pilot site onboarding to the SimpleReport app I want to know what I need to do to get onboarded so that I can be prepared and follow the required steps.
Acceptance Criteria

[x] What data is needed by Arizona to onboard a site?

[x] What data is needed from our app to onboard a site?

[x] How does a pilot site get authenticated user accounts?

[x] Develop onboarding materials for a new pilot site to help them through the process

I think this is pretty good? At least we're on V2, starting v3 of it


Not an issue: Typo

Hi,
kindly replace from "docker compose" command  to "docker-compose"

The decision to use docker compose (v2) instead of docker-compose (v1) was intentional. Compose v1 stopped receiving support and has been removed from Docker releases starting after June 2023.
For more information, check out this blog post from Docker:
https://www.docker.com/blog/new-docker-compose-v2-and-v1-deprecation/


update: add a new getter to the TransferTransaction class

Description:
A new getter was added to the TransferTransaction class.
Fixes #2190
Checklist

[x] Documented (Code comments, README, etc.)
[x] Tested (unit, integration, etc.)

Codecov Report
Attention: Patch coverage is 71.42857% with 18 lines in your changes are missing coverage. Please review.

Project coverage is 76.22%. Comparing base (e4a80a1) to head (bdbd18e).
 Consider uploading reports for the commit d537f33 to get more accurate results

Files
Patch %
Lines

src/RequestType.js
55.55%
8 Missing :warning:

src/Status.js
77.77%
8 Missing :warning:

src/account/TransferTransaction.js
71.42%
2 Missing :warning:

Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #2214      +/-   ##
===========================================
- Coverage    84.48%   76.22%   -8.27%
===========================================
  Files          305      227      -78
  Lines        76259    56910   -19349
===========================================
- Hits         64430    43379   -21051
- Misses       11829    13531    +1702

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


[fastlane][runner] Executing deprecated action message improvements

Checklist

[x] I've run bundle exec rspec from the root directory to see all new and existing tests pass
[x] I've followed the fastlane code style and run bundle exec rubocop -a to ensure the code style is valid
[x] I've read the Contribution Guidelines
[x] I've updated the documentation if necessary.

Motivation and Context

Notice that, Runner class was using old-style put with the .deprecated method.

Description

Now, using Fastlane's UI.deprecated which do the same thing with much better results 😉 (i.e consistency, unit-testing)

Testing Steps

No functionality changed, Updated the unit tests!

I think we want to keep the puts here 😇  UI.deprecated adds a timestamp onto each line which makes it a little bit harder to read where puts with the .deprecated has no timestamp and just colors it blue.

Okay, thank you! I agree! Closing this PR now! :)


test(ci): Create a dedicated job for the AVM unit tests

Resolves #5366

Benchmark results
Metrics with a significant change:

note_trial_decrypting_time_in_ms (8): 14.3 (-85%)
note_trial_decrypting_time_in_ms (32): 73.7 (+140%)

Detailed results
All benchmarks are run on txs on the Benchmarking contract on the repository. Each tx consists of a batch call  to create_note and increment_balance, which guarantees that each tx has a private call, a nested private call, a public call, and a nested public call, as well as an emitted private note, an unencrypted log, and public storage read and write.
This benchmark source data is available in JSON format on S3 here.
Values are compared against data from master at commit fec10081 and shown if the difference exceeds 1%.
L2 block published to L1
Each column represents the number of txs on an L2 block published to L1.

Metric
8 txs
32 txs
64 txs

l1_rollup_calldata_size_in_bytes
5,668
18,852
36,420

l1_rollup_calldata_gas
66,376
239,268
469,368

l1_rollup_execution_gas
681,069
951,505
1,311,894

l2_block_processing_time_in_ms
1,209 (-5%)
4,489 (-5%)
8,956 (-4%)

note_successful_decrypting_time_in_ms
211 (+10%)
558 (+9%)
1,009 (+6%)

note_trial_decrypting_time_in_ms
:warning: 14.3 (-85%)
:warning: 73.7 (+140%)
134 (+64%)

l2_block_building_time_in_ms
17,801 (+1%)
67,461
133,949 (+1%)

l2_block_rollup_simulation_time_in_ms
8,038 (+1%)
28,661 (+1%)
56,298 (+1%)

l2_block_public_tx_process_time_in_ms
9,743
38,745
77,555 (+1%)

L2 chain processing
Each column represents the number of blocks on the L2 chain where each block has 16 txs.

Metric
5 blocks
10 blocks

node_history_sync_time_in_ms
13,164 (-7%)
27,962 (+1%)

note_history_successful_decrypting_time_in_ms
1,278 (+5%)
2,477 (+1%)

note_history_trial_decrypting_time_in_ms
104 (+71%)
174 (+12%)

node_database_size_in_bytes
18,669,648
35,090,512

pxe_database_size_in_bytes
29,859
59,414

Circuits stats
Stats on running time and I/O sizes collected for every circuit run across all benchmarks.

Circuit
circuit_simulation_time_in_ms
circuit_input_size_in_bytes
circuit_output_size_in_bytes

private-kernel-init
287 (+3%)
44,366
28,245

private-kernel-ordering
219 (+2%)
52,869
14,327

base-parity
1,807
128
311

base-rollup
714
165,788
925

root-parity
1,604 (+3%)
1,244
311

root-rollup
51.6
4,487
725

private-kernel-inner
663 (+3%)
73,772
28,245

public-kernel-app-logic
432 (+2%)
35,260
28,215

public-kernel-tail
174 (+1%)
40,926
28,215

merge-rollup
8.32
2,696
925

Tree insertion stats
The duration to insert a fixed batch of leaves into each tree type.

Metric
1 leaves
16 leaves
64 leaves
128 leaves
512 leaves
1024 leaves
2048 leaves
4096 leaves
32 leaves

batch_insert_into_append_only_tree_16_depth_ms
10.0
16.0 (+1%)
N/A
N/A
N/A
N/A
N/A
N/A
N/A

batch_insert_into_append_only_tree_16_depth_hash_count
16.8
31.6
N/A
N/A
N/A
N/A
N/A
N/A
N/A

batch_insert_into_append_only_tree_16_depth_hash_ms
0.585
0.496 (+1%)
N/A
N/A
N/A
N/A
N/A
N/A
N/A

batch_insert_into_append_only_tree_32_depth_ms
N/A
N/A
45.8
72.5
230
448
868
1,718
N/A

batch_insert_into_append_only_tree_32_depth_hash_count
N/A
N/A
96.0
159
543
1,055
2,079
4,127
N/A

batch_insert_into_append_only_tree_32_depth_hash_ms
N/A
N/A
0.470
0.448
0.419
0.419
0.412
0.412
N/A

batch_insert_into_indexed_tree_20_depth_ms
N/A
N/A
53.8
106
335
661
1,303
2,601
N/A

batch_insert_into_indexed_tree_20_depth_hash_count
N/A
N/A
104
207
691
1,363
2,707
5,395
N/A

batch_insert_into_indexed_tree_20_depth_hash_ms
N/A
N/A
0.478
0.478
0.455
0.455
0.453
0.453
N/A

batch_insert_into_indexed_tree_40_depth_ms
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
61.1

batch_insert_into_indexed_tree_40_depth_hash_count
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
109

batch_insert_into_indexed_tree_40_depth_hash_ms
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
0.534

Miscellaneous
Transaction sizes based on how many contract classes are registered in the tx.

Metric
0 registered classes

tx_size_in_bytes
22,013

Transaction processing duration by data writes.

Metric
0 new note hashes
1 new note hashes

tx_pxe_processing_time_ms
3,240
1,786 (+2%)

Metric
0 public data writes
1 public data writes

tx_sequencer_processing_time_ms
14.0 (+8%)
1,217 (+2%)


chore: Fix typos

Hi, sorry for the small PR. I came across these typos while reading the reference docs and figured I should fix them. Thanks

Thanks for the PR!


added HOD model to the hod.py script

Added HOD model classes,  and function to populate galaxies

Some additional comments and suggestions @yamada-yuka0322:

Please document every function and class objects. Provide descriptive explanations of what they do. Provide a clear list and explanations of the input and outputs of the functions. You are writing this for others to use. Everything has to be clear.
You are currently assuming that the halo catalog will be read from a file. The reading of the halo catalog will be done in another module (halo). So you should assume that a "halo" class object will be passed as input.


Add Bayesian Optimisation to AB testing example

To complete our first OED example, I've added a GP-based Bayesian optimizer based on http://pyro.ai/examples/bo.html . This uses Thompson sampling to acquire new data in batches.
Summary of changes:

ab_test.py - optimizing the APE using GPBayesOptimizer
gp_bayes_opt.py - new code implementing the BO example with Thompson sampling: probably need to move this somewhere else or can we merge it with existing BO code?
gpr.py - added a method to lazily create a multivariate sample from a Gaussian process posterior

@ae-foster to get CI tests to run, you'll need to merge dev into your branch and then push.

@eb8680 have the CI passing now :)


updated google play services android dependencies to latest version

Updated google play services to latest version and refactored code to use : GoogleApiClient.IConnectionCallbacks and  GoogleApiClient.IOnConnectionFailedListener instead of : IGoogleApiClientConnectionCallbacks, IGoogleApiClientOnConnectionFailedListener

Thanks for merging!


update README

All objectives for milestone 1.0.0 seem to be completed.

Look good to me, thank you so much!!! :)


Descriptive Error when upload fails

It would be nice for the users if an upload fails due to the size of the image, that they are told the image was too large and we only accept blah blah blah sized images.
Right now it just says oops something went wrong.

Are you sure debug mode is off on your forum ?
When debug mode is on, all validation exceptions show as an error with ValidationException debug name. With debug mode disabled, those exceptions are shown as user-friendly texts.

Pretty sure its off because I get a user friendly text pop up that says oops something went wrong. I will post a screenshot later when I get back to my laptop

Okay I did a few tests. If your image is above Flagrow Upload config but within php.ini allowed size you get this:

But if you exceed php.ini allowed size you get this

I suppose you're subject to option 2 above ?
If there's a PHP exception, we should be able to catch it and return a more friendly message. Maybe @luceos will be able to identify where to do this check more quickly than I.
Thanks for report, that's definitely something we should fix.

Awesome, in the meantime, I need to edit my php.ini file. Do you know where I can find that on a nginx ubuntu server?

@mikejones3 /etc/php/fpm/php.ini but that might defer. You can create a phpinfo file on your website to see which php.ini fpm uses.


Zero-Values Elements in LTspice Parser

Spice parser will generate NaN matrices when e.g. zero-inductance inductors are included.  They should be eliminated when parsing, instead.

Fixed in next version.  Still won't accommodate zero-valued ron due to the implementation of switching with variable resistance.


XMLHttpRequest.DONE is not defined

Hello,
Currently the default XMLHttpRequest class (https://github.com/facebook/react-native/blob/master/Libraries/Network/XMLHttpRequestBase.js) don't provide access to the following variables.
UNSENT, OPENED, HEADERS_RECEIVED, LOADING, DONE.
We have it as object level properties, but not accessible at class level.
In standard web browser environment, we can access XMLHttpRequest.DONE , and many JS libraries out there uses it.  It would be great if we ReactNative can also support XMLHttpRequest.DONE (and other properties).
Regards
Sreejumon
http://sreesharp.com

Thanks for the report. Can you send a PR?

Hey @satya164  Please review the PR https://github.com/facebook/react-native/pull/5895


Floating point routine especially for NIFs

See https://github.com/darach/jch-erl/blob/master/c_src/jch.c
See https://github.com/darach/jch-erl/issues/1

This issue is no longer making a relevant case on exs64. Closed.


fix: account set up logic fix

Fix for logic of account set up.
Bug:
If you have account in config file, it would have been overwritten by command line arg. And if there's no command line arg for account it would have been overwritten by login_customer_id in google-ads.yaml.
Fix:
Added condition to overwrite account only if it wasn't set up in config file.

If you have account in config file, it would have been overwritten by command line arg.

this is intended - cli args have priority over config, that's normal

And if there's no command line arg for account it would have been overwritten by login_customer_id in google-ads.yaml.

that's a bug, if there's an account id in a config file then it shouldn't be overwritten by login_customer_id

this is intended - cli args have priority over config, that's normal
that's a bug, if there's an account id in a config file then it shouldn't be overwritten by login_customer_id

Moved conditional a bit to work as intended. And need squashing commits :)

thank you for your fix.
I've pushed it from our side (due to an internal workflow)


bin/start 启动失败

是否没有配置nacos？把配置文件里nacos的enable改为false再试试。

可以看下日志，确定是否启动成功，是否有错误

This issue has not been active for 1 month, so we decided to close it. If you have any questions, please reopen a new issue.


Add viewer reference in standalone

This PR adds a reference to the newly instantiated viewer so it can be controlled from the outside
(and also from outside the iframe).

Thanks! You missed the second place a viewer is created in the standalone viewer, though, so I added that in 6ba611cd75a1469ba1f48ea1dd0c18796b4b5b65.


Release resources in case of exception thrown in tearDown method

If an exception is thrown in tearDown() method of JbpmJUnitBaseTestCase, the data source is not closed properly. This influences other tests run in the same batch and they fail with the following exception:
Caused by: java.lang.IllegalStateException: A resource with uniqueName 'jdbc/jbpm-ds' has already been registered. Cannot register XAResourceProducer 'a PoolingDataSource containing an XAPool of resource jdbc/jbpm-ds with 5 connection(s) (5 still available)'.
So I've put cleaning methods to try block and resources are released in its finally block. This is just a simple fix. If you think anything else needs to be fixed regarding this issue, just let me know and I'll push another commit.

same here: I am in the middle of something but will merge that in once done, so assigning to myself

merged into master, thanks @livthomas


Wiki: Postgres initdb command

Expected behavior:
Per the suggestion given by Linux shell, the new preferred command for postgres initdb is:
sudo postgresql-setup initdb
This generates the following message from the shell:
Initializing database ... OK
Actual behavior:
The wiki currently instructs users to use the command:
sudo service postgresql initdb
This generates the following response from the shell:
Hint: the preferred way to do this is now "postgresql-setup initdb" Initializing database ... OK
Steps to reproduce:
Follow the wiki instructions on setting up Postgres
Fix: Edit wiki to reflect the recommendation by the shell

Thanks, @lancerutkin. Fixed.


Qt: Fix problem when cancel unlock

If you select "unlock for minting only" item in setting menu and cancel it, the item is checked.
This PR fix it.

I tested on regtest.
Before:

After:

Menu item "Unlock Wallet for Minting Only" has been unchecked after Unlock Wallet Dialog was cancelled.
Looks good! 👍


Add code formatting and syntax checking for JS

Right now this will format everything and list errors if code isn't best practice. Style being used is Google.
To format code and produce errors on coding style:
npm run lint

Standardise the LF/CR
Tabbing fix
Code block formatting

Should probably add formatters for Markdown and html, but going to wait on that one.

Should probably add formatters for Markdown and html, but going to wait on that one.


The game's graphic does not scale up or down when resizing windows

The game's graphic does not scale up or down when resizing windows

A really dirty fix is like the following in client side. However, the control of moving the dot still has bug after resizing.
window.addEventListener('resize', function() {
    screenWidth = window.innerWidth;
    screenHeight = window.innerHeight;
    player.screenWidth = c.width = screenWidth;
    player.screenHeight = c.height = screenHeight;
}, true);

However, the