Custom k8s scheduler support for Karpenter e.g., Apache YuniKorn, Volcano

Tell us about your request

Add Karpenter support to work with custom schedulers (e.g., Apache Yunikorn,  Volcano)

As per my understanding, Karpenter works only with the default scheduler to schedule the pods. However, It's prevalent among the Data on Kubernetes community to use custom schedulers like Apache YuniKorn or Volcano for running Spark jobs on Amazon EKS.

With the requested feature, Karpenter is effectively used as Autoscaler for spinning up new nodes while YuniKorn and Volcano handle scheduling decisions.

Please correct me and provide some context if this feature is already supported.
Tell us about the problem you're trying to solve. What are you trying to do, and why is it hard?
Using Apache YuniKorn/Volcano is becoming a basic requirement for running batch workloads(e.g., Spark) on Kubernetes.  These schedulers are more application aware unlike default scheduler and provides number of other useful features(e.g., resource queues, sorting the jobs) for running multi-tenant data workloads on Kubernetes(Amazon EKS).
At this moment we could only use cluster autoscaler with these custom schedulers but it would be beneficial to add Karpenter support to leverage performance optimised by Karpenter over Cluster Autoscaler.
Are you currently working around this issue?
No, We are using Cluster Autoscaler as an alternative option to work with custom schedulers.
Additional Context
No response
Attachments
No response
Community Note

Please vote on this issue by adding a 👍 reaction to the original issue to help the community and maintainers prioritize this request
Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request
If you are interested in working on this issue or have submitted a pull request, please leave a comment

Hey @vara-bonthu ,
Thanks for the feature request.  This feature is not supported currently and is not yet on our roadmap.  It sounds like this would be a pretty significant amount of effort given Karpenter would have to adhere to the scheduling decisions of multiple custom schedulers.
While I have not personally tested a custom scheduler with Karpenter, it should be able to at least launch nodes even if a custom scheduler is in use (Karpenter simply watches for pending pods and then spawns nodes accordingly).  Though as you mentioned, Karpenter is built to adhere to the scheduling decisions of kube-scheduler.  So it's certainly possible you would run across some cases where Karpenter makes incorrect decisions when a custom scheduler is in the mix.
If you have a configuration you could share, it would be fun to do some testing with custom schedulers to see how Karpenter responds.

Hey @dewjam,
Thanks for the information. We did try to use Yunikorn along with Karpenter and came across this issue post. I think it did work in terms of launching instance if there are job pods Pending. However, as for scheduler like Yunikorn a Pending job could mean it is being queued and will not be actually scheduled, but Karpenter still launches a instance for the Pending job because it thinks a Pending pod needs resources ... It would be good to have a way to support custom schedulers, although I certainly understand it is difficult to support ad-hoc schedulers. Wondering is it possible to add some kind of plugin API for community to support custom schedulers :)

I'd love to learn how customer schedulers make different decisions than the kube scheduler. Technically, we're agnostic of the kube scheduler, but we support the pod spec fields that impact scheduling. Do custom schedulers respect all of those fields?
Could you provide a concrete example workflow of what decisions you'd like to see karpenter make when working alongside a custom scheduler?

I've tested Karpenter with Volcano successfully. There was one issue (PR to fix in https://github.com/volcano-sh/volcano/pull/2602) that was causing Volcano to use an unconventional Reason that prevented Karpenter from triggering scale-up, but once this PR lands things should be working again.

@ellistarn
I think the initial issue that i encountered could be due to the older version of Apache YuniKorn 0.12.1 where i installed YuniKorn as a secondary k8s scheduler. Also, I didn't enable the admission controller. This error could be caused by multiple schedulers running at the sametime. Here is the log from old tests. However the good news is that it works with latest version. Please see for more details below.
YuniKorn Scheduler Error Summary
ERROR  external/scheduler_cache.go:203 pod updated on a different node than previously added to
ERROR  external/scheduler_cache.go:204 scheduler cache is corrupted and can badly affect scheduling decisions

YuniKorn Scheduler full log
2022-01-31T17:12:08.558Z	INFO	cache/context.go:552	app added	{"appID": "spark-79df83d15b6843b7bb1cac31e7135e9c"}
2022-01-31T17:12:08.559Z	INFO	cache/context.go:612	task added	{"appID": "spark-79df83d15b6843b7bb1cac31e7135e9c", "taskID": "9d00be6e-8c41-4c35-a089-5b6932e339ac", "taskState": "New"}
2022-01-31T17:12:09.253Z	INFO	cache/application.go:436	handle app submission	{"app": "applicationID: spark-79df83d15b6843b7bb1cac31e7135e9c, queue: root.spark, partition: default, totalNumOfTasks: 1, currentState: Submitted", "clusterID": "mycluster"}
2022-01-31T17:12:09.254Z	INFO	placement/tag_rule.go:114	Tag rule application placed	{"application": "spark-79df83d15b6843b7bb1cac31e7135e9c", "queue": "root.spark-k8s-data-team-a"}
2022-01-31T17:12:09.254Z	INFO	objects/queue.go:150	dynamic queue added to scheduler	{"queueName": "root.spark-k8s-data-team-a"}
2022-01-31T17:12:09.254Z	INFO	scheduler/context.go:495	Added application to partition	{"applicationID": "spark-79df83d15b6843b7bb1cac31e7135e9c", "partitionName": "[mycluster]default", "requested queue": "root.spark", "placed queue": "root.spark-k8s-data-team-a"}
2022-01-31T17:12:09.254Z	INFO	callback/scheduler_callback.go:108	Accepting app	{"appID": "spark-79df83d15b6843b7bb1cac31e7135e9c"}
2022-01-31T17:12:10.254Z	INFO	cache/application.go:531	Skip the reservation stage	{"appID": "spark-79df83d15b6843b7bb1cac31e7135e9c"}
2022-01-31T17:12:11.256Z	INFO	objects/application_state.go:128	Application state transition	{"appID": "spark-79df83d15b6843b7bb1cac31e7135e9c", "source": "New", "destination": "Accepted", "event": "runApplication"}
2022-01-31T17:12:11.256Z	INFO	objects/application.go:531	Ask added successfully to application	{"appID": "spark-79df83d15b6843b7bb1cac31e7135e9c", "ask": "9d00be6e-8c41-4c35-a089-5b6932e339ac", "placeholder": false, "pendingDelta": "map[memory:12885 vcore:4000]"}
2022-01-31T17:12:15.360Z	INFO	cache/nodes.go:112	adding node to context	{"nodeName": "ip-10-1-10-119.eu-west-1.compute.internal", "nodeLabels": "{\"karpenter.sh/capacity-type\":\"spot\",\"karpenter.sh/provisioner-name\":\"default\",\"node.kubernetes.io/instance-type\":\"m5.4xlarge\",\"topology.kubernetes.io/zone\":\"eu-west-1a\"}", "schedulable": true}
2022-01-31T17:12:15.361Z	INFO	cache/node.go:148	node recovering	{"nodeID": "ip-10-1-10-119.eu-west-1.compute.internal", "schedulable": true}
2022-01-31T17:12:15.361Z	INFO	scheduler/partition.go:548	adding node to partition	{"partition": "[mycluster]default", "nodeID": "ip-10-1-10-119.eu-west-1.compute.internal"}
2022-01-31T17:12:15.362Z	INFO	scheduler/partition.go:613	Updated available resources from added node	{"partitionName": "[mycluster]default", "nodeID": "ip-10-1-10-119.eu-west-1.compute.internal", "partitionResource": "map[attachable-volumes-aws-ebs:50 ephemeral-storage:142784976248 hugepages-1Gi:0 hugepages-2Mi:0 memory:86159 pods:321 vcore:21850]"}
2022-01-31T17:12:15.363Z	INFO	scheduler/context.go:592	successfully added node	{"nodeID": "ip-10-1-10-119.eu-west-1.compute.internal", "partition": "[mycluster]default"}
2022-01-31T17:12:15.375Z	ERROR	external/scheduler_cache.go:203	pod updated on a different node than previously added to	{"pod": "9d00be6e-8c41-4c35-a089-5b6932e339ac"}
github.com/apache/incubator-yunikorn-k8shim/pkg/cache/external.(*SchedulerCache).UpdatePod
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/pkg/cache/external/scheduler_cache.go:203
github.com/apache/incubator-yunikorn-k8shim/pkg/cache.(*Context).updatePodInCache
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/pkg/cache/context.go:253
k8s.io/client-go/tools/cache.ResourceEventHandlerFuncs.OnUpdate
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/client-go/tools/cache/controller.go:238
k8s.io/client-go/tools/cache.FilteringResourceEventHandler.OnUpdate
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/client-go/tools/cache/controller.go:273
k8s.io/client-go/tools/cache.(*processorListener).run.func1
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/client-go/tools/cache/shared_informer.go:775
k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
k8s.io/apimachinery/pkg/util/wait.BackoffUntil
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
k8s.io/apimachinery/pkg/util/wait.JitterUntil
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
k8s.io/apimachinery/pkg/util/wait.Until
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
k8s.io/client-go/tools/cache.(*processorListener).run
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/client-go/tools/cache/shared_informer.go:771
k8s.io/apimachinery/pkg/util/wait.(*Group).Start.func1
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:73
2022-01-31T17:12:15.376Z	ERROR	external/scheduler_cache.go:204	scheduler cache is corrupted and can badly affect scheduling decisions
github.com/apache/incubator-yunikorn-k8shim/pkg/cache/external.(*SchedulerCache).UpdatePod
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/pkg/cache/external/scheduler_cache.go:204
github.com/apache/incubator-yunikorn-k8shim/pkg/cache.(*Context).updatePodInCache
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/pkg/cache/context.go:253
k8s.io/client-go/tools/cache.ResourceEventHandlerFuncs.OnUpdate
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/client-go/tools/cache/controller.go:238
k8s.io/client-go/tools/cache.FilteringResourceEventHandler.OnUpdate
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/client-go/tools/cache/controller.go:273
k8s.io/client-go/tools/cache.(*processorListener).run.func1
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/client-go/tools/cache/shared_informer.go:775
k8s.io/apimachinery/pkg/util/wait.BackoffUntil.func1
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:155
k8s.io/apimachinery/pkg/util/wait.BackoffUntil
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:156
k8s.io/apimachinery/pkg/util/wait.JitterUntil
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:133
k8s.io/apimachinery/pkg/util/wait.Until
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:90
k8s.io/client-go/tools/cache.(*processorListener).run
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/client-go/tools/cache/shared_informer.go:771
k8s.io/apimachinery/pkg/util/wait.(*Group).Start.func1
	/Users/cyu/go/src/github.com/apache/incubator-yunikorn-k8shim/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:73
2022-01-31T17:12:38.125Z	INFO	configs/configwatcher.go:143	config watcher timed out

However In my recent tests with the following setup, I can confirm that Karpenter is working well with Apache YuniKorn scheduler.
Apache YuniKorn Version: 1.1.0 deployed as default scheduler. This overrides the k8s default scheduler
Karpenter Version: v0.20.0
EMR on EKS Spark jobs are working as expected with Apache YuniKorn Gang scheduling along with Karpenter autoscaling.
If you are interested to know how to setup Karpenter with Apache YuniKorn (with Gang Scheduling) then you can refer to Data on EKS docs (https://github.com/awslabs/data-on-eks/tree/main/analytics/terraform/emr-eks-karpenter).
EMR on EKS Spark job with 1 Driver and 20 Executors with Apache YuniKorn Scheduling logs
Karpenter logs
2022-12-22T17:50:54.846Z	DEBUG	controller.aws	deleted launch template	{"commit": "f60dacd"}
2022-12-22T17:51:25.330Z	INFO	controller.provisioner	found provisionable pod(s)	{"commit": "f60dacd", "pods": 21}
2022-12-22T17:51:25.331Z	INFO	controller.provisioner	computed new node(s) to fit pod(s)	{"commit": "f60dacd", "nodes": 2, "pods": 21}
2022-12-22T17:51:25.331Z	INFO	controller.provisioner	launching node with 6 pods requesting {"cpu":"7355m","memory":"92280Mi","pods":"9"} from types r5d.4xlarge, r5d.8xlarge	{"commit": "f60dacd", "provisioner": "spark-memory-optimized"}
2022-12-22T17:51:25.351Z	INFO	controller.provisioner	launching node with 15 pods requesting {"cpu":"18155m","memory":"230520Mi","pods":"18"} from types r5d.8xlarge	{"commit": "f60dacd", "provisioner": "spark-memory-optimized"}
2022-12-22T17:51:25.773Z	DEBUG	controller.provisioner.cloudprovider	created launch template	{"commit": "f60dacd", "provisioner": "spark-memory-optimized", "launch-template-name": "Karpenter-emr-eks-karpenter-2497088801825500229", "launch-template-id": "lt-030a5b323b302d61a"}
2022-12-22T17:51:27.766Z	INFO	controller.provisioner.cloudprovider	launched new instance	{"commit": "f60dacd", "provisioner": "spark-memory-optimized", "launched-instance": "i-0ef04f248f444ec79", "hostname": "ip-10-1-126-194.us-west-2.compute.internal", "type": "r5d.4xlarge", "zone": "us-west-2b", "capacity-type": "spot"}
2022-12-22T17:51:29.941Z	INFO	controller.provisioner.cloudprovider	launched new instance	{"commit": "f60dacd", "provisioner": "spark-memory-optimized", "launched-instance": "i-0d948a89719abfacf", "hostname": "ip-10-1-67-206.us-west-2.compute.internal", "type": "r5d.8xlarge", "zone": "us-west-2b", "capacity-type": "spot"}
2022-12-22T17:59:04.511Z	INFO	controller.node	added TTL to empty node	{"commit": "f60dacd", "node": "ip-10-1-67-206.us-west-2.compute.internal"}

Apache YuniKorn placement pods triggered the nodes required to run the Spark Job by the Karpenter.

Happy to close this issue.

I've tested Karpenter with Volcano successfully. There was one issue (PR to fix in https://github.com/volcano-sh/volcano/pull/2602) that was causing Volcano to use an unconventional Reason that prevented Karpenter from triggering scale-up, but once this PR lands things should be working again.

@tgaddair Do you mind sharing your experience using Volcano with cluster autoscalers? We are building a platform supporting multi tenant jobs and planning to use Volcano for gang-scheduling, however there is very limited amount of info on best practices of scaling clusters while supporting gang-scheduling, even in Volcano docs. What made you chose Karpenter over cluster-autoscaler? If you have been successfully running Volcano + Karpenter setup, what is your experience? This topic can be a separate post somewhere, this would be pretty valuable.

@tgaddair please share your Volcano + Karpenter when you get a chance. It would be very valuable for others exploring the two and save many a lot of effort.


count words

snip, see below

and with string templates,
DATA: lv_string  TYPE string,
      lt_words   TYPE STANDARD TABLE OF string,
      lt_letters TYPE STANDARD TABLE OF string,
      lv_word    TYPE string.

lv_string = `ABАP  is excellent `.

SPLIT lv_string AT | | INTO TABLE lt_words.
DELETE lt_words WHERE table_line IS INITIAL.

WRITE: / |Number of words: { lines( lt_words ) }|.

LOOP AT lt_words INTO lv_word.

  WRITE: / |Number of unique characters in the word: { lv_word } -|.

  CLEAR lt_letters.
  WHILE NOT lv_word IS INITIAL.
    APPEND lv_word(1) TO lt_letters.
    lv_word = lv_word+1.
  ENDWHILE.

  SORT lt_letters.
  DELETE ADJACENT DUPLICATES FROM lt_letters.

  WRITE |{ lines( lt_letters ) }|.

ENDLOOP.

CLASS zcl_words DEFINITION.

  PUBLIC SECTION.
    TYPES: BEGIN OF ty_header,
           field TYPE string,
           value TYPE string,
         END OF ty_header.

    TYPE ty_headers TYPE STANDARD TABLE OF ty_header WITH DEFAULT KEY.

    TYPES: BEGIN OF ty_http,
           headers TYPE ty_headers,
           body    TYPE string,
         END OF ty_http.

    METHODS
    run
      IMPORTING
        iv_method      TYPE string
        iv_path        TYPE string
        iv_query       TYPE string
        is_request     TYPE ty_http
      RETURNING
        rs_response    TYPE ty_http
      RAISING
        cx_static_check.

ENDCLASS.

CLASS zcl_words IMPLEMENTATION.

  METHOD run.

    DATA: lv_string  TYPE string,
      lt_words   TYPE STANDARD TABLE OF string,
      lt_letters TYPE STANDARD TABLE OF string,
      lv_word    TYPE string.

    lv_string = `ABАP  is excellent `.

    SPLIT lv_string AT | | INTO TABLE lt_words.
    DELETE lt_words WHERE table_line = ''.

    WRITE: / |Number of words: { lines( lt_words ) }|.

    LOOP AT lt_words INTO lv_word.

      WRITE: / |Number of unique characters in the word: { lv_word } -|.

      CLEAR lt_letters.
      WHILE lv_word <> ''.
        APPEND lv_word(1) TO lt_letters.
        lv_word = lv_word+1.
      ENDWHILE.

      SORT lt_letters.
      DELETE ADJACENT DUPLICATES FROM lt_letters.

      WRITE |{ lines( lt_letters ) }|.

    ENDLOOP.

  ENDMETHOD.

ENDCLASS.

TYPES: BEGIN OF ty_header,
       field TYPE string,
       value TYPE string,
     END OF ty_header.
TYPE ty_headers TYPE STANDARD TABLE OF ty_header WITH DEFAULT KEY.
TYPES: BEGIN OF ty_http,
       headers TYPE ty_headers,
       body    TYPE string,
     END OF ty_http.

CLASS zcl_words DEFINITION.

  PUBLIC SECTION.
    METHODS
    run
      IMPORTING
        iv_method      TYPE string
        iv_path        TYPE string
        iv_query       TYPE string
        is_request     TYPE ty_http
      RETURNING
        rs_response    TYPE ty_http
      RAISING
        cx_static_check.

ENDCLASS.

CLASS zcl_words IMPLEMENTATION.

  METHOD run.

    DATA: lv_string  TYPE string,
      lt_words   TYPE STANDARD TABLE OF string,
      lt_letters TYPE STANDARD TABLE OF string,
      lv_word    TYPE string.

    lv_string = `ABАP  is excellent `.

    SPLIT lv_string AT | | INTO TABLE lt_words.
    DELETE lt_words WHERE table_line = ''.

    WRITE: / |Number of words: { lines( lt_words ) }|.

    LOOP AT lt_words INTO lv_word.

      WRITE: / |Number of unique characters in the word: { lv_word } -|.

      CLEAR lt_letters.
      WHILE lv_word <> ''.
        APPEND lv_word(1) TO lt_letters.
        lv_word = lv_word+1.
      ENDWHILE.

      SORT lt_letters.
      DELETE ADJACENT DUPLICATES FROM lt_letters.

      WRITE |{ lines( lt_letters ) }|.

    ENDLOOP.

  ENDMETHOD.

ENDCLASS.

DATA foo TYPE REF TO zcl_words.
CREATE OBJECT foo.
foo->run( ).


Replace link following test with muffet

This makes https://github.com/buildkite/docs/pull/1546 work.
Muffet is much faster. The builds used to take ~14-16 min. They are now around 2.5 min. (If the docker images are cached)
However, because rails is so slow to start up, I had to make the muffet container wait for a bit before running. Docker-Compose does not have a good way to say that a container should depend on the “readiness” of another container before it starts. So I simulated that with a loop polling the endpoint until it responds 2xx. Unfortunately, just polling the / route is not sufficient, as other routes seem to take a while to become “warm” (see some failed builds on this branch). So I chose a route that failed frequently and used it as the test to see if the server is “ready”.
Closes https://github.com/buildkite/docs/pull/1546

:tada:


Add School Requst

School URL: https://selc.edu.au

@selcaustralia Pull request merged. Thank you!


fix: Windows build

Trying to build jiti on Windows fails, it is using rm -rf dist... replace it with rimraf.

We might instead use pnpm's shell emulator

We might instead use pnpm's shell emulator

It is not working, I'm missing something? We can remove cross-env enabling shell-emulator.

included shell emulator and removed cross-env dependency


isomorphic-fetch replacing node-fetch

I have been facing an issue with loading data from the API. Similar to this issue: https://github.com/nickb1080/nba/issues/41
My workaround was to include this library with my front end project. The node-fetch dependency is for the client side and would throw an error when I try to bundle it with webpack. Since isomorphic-fetch was already included in the package.json, I replaced node-fetch and used isomorphic fetch instead.

I'd rather not use isomorphic-fetch as it pollutes the global namespace. I'm not super familiar with webpack but I would assume it provides a way to exclude certain packages? Browserify supports this. I think it would be better to exclude node-fetch entirely from the bundle, because it will never get called at runtime.

given CORS restrictions, I'm removing browser support for this library.


Set Icon for Helper app

[x] I have read the contribution documentation for this project.
[x] I agree to follow the code of conduct that this project follows, as appropriate.
[x] I have searched the issue tracker for an issue that matches the one I want to file, without success.

Please describe your issue:
On MacOS, If you trigger a User Notification from a renderer process (e.g. via a Native Addon), the notification is given a placeholder icon, because the owning .app (the Helper) lacks an icon.

If you specify an Icon, that Icon should also be used for the Helper Apps, or there should be an option to specify the Helper app icon separately.

I do not If it well help But I found That If  in CMD is same as in Package.json "name": "myapp" it will set as electron icon even If With UPPERCASE change Ex: MYAPP
And after many tries I found that when I change  The myapp Icon is set in EXE file.


Upgrade to underscore 1.8.3

Since the packager doesn't allow multiple versions of libraries (see #1646) and underscore is quite a useful library that others will use it makes sense to have the latest version as the dependency I think.

There's a new version of the packager algorithm in one of the latest commits (https://github.com/frantic/react-native/commit/2d4055e513fea0cb36873447d67e64229a187aad) that should more closely match the node_modules algorithm. It hasn't been merged yet due to the tests' not passing but once merged it may solve this issue of not being able to use your own copy of underscore.
That being said it would be nice if RN used npm's semver caret in package.json so that you could use the latest compatible version of underscore by just running npm install... I put up #1736 to address that.

@almost, the latest changed finally merged in, can you check if it works now? In any case we might want to consider upgrading underscore, I'll let @amasad make a call here

Yep, it now appears to be fixed in master. Thanks!

Awesome.


Streaming responses with HTTP.rb

Hi! I faced an interesting problem with HTTP.rb and Webmock.
I'm using HTTP.rb for streaming files from S3 through the Sinatra application. And want to test it with RSpec. Files for test reasons are located at localhost, so I allowed requests to localhost like this:
WebMock.disable_net_connect!(allow: 'storage:8080')

I want to stream each received chunk via Sinatra streaming API like this:
  get '/stream' do
    response = HTTP.get('https://postman-echo.com/stream/500')

    stream do |out|
      response.body.each do |chunk|
        out << chunk
      end
    end
  end

And, of course, I want to test it. But here I meet a problem:
Failures:

  1) Simple API /stream succesfully stream data
     Failure/Error: get '/stream'

     HTTP::StateError:
       body has already been consumed
     # /Users/nez/.rvm/gems/ruby-2.7.4/gems/http-5.1.1/lib/http/response/body.rb:67:in `stream!'
     # /Users/nez/.rvm/gems/ruby-2.7.4/gems/http-5.1.1/lib/http/response/body.rb:29:in `readpartial'
     # /Users/nez/.rvm/gems/ruby-2.7.4/gems/http-5.1.1/lib/http/response/body.rb:37:in `each'
     # ./app.rb:18:in `block (2 levels) in <class:SimpleAPI>'
     # /Users/nez/.rvm/gems/ruby-2.7.4/gems/sinatra-3.0.5/lib/sinatra/base.rb:509:in `block (2 levels) in stream'
     # /Users/nez/.rvm/gems/ruby-2.7.4/gems/sinatra-3.0.5/lib/sinatra/base.rb:702:in `with_params'
     # /Users/nez/.rvm/gems/ruby-2.7.4/gems/sinatra-3.0.5/lib/sinatra/base.rb:509:in `block in stream'
     # /Users/nez/.rvm/gems/ruby-2.7.4/gems/sinatra-3.0.5/lib/sinatra/base.rb:474:in `block in each'
     # /Users/nez/.rvm/gems/ruby-2.7.4/gems/sinatra-3.0.5/lib/sinatra/base.rb:453:in `defer'
     # /Users/nez/.rvm/gems/ruby-2.7.4/gems/sinatra-3.0.5/lib/sinatra/base.rb:472:in `each'
     # /Users/nez/.rvm/gems/ruby-2.7.4/gems/rack-<IP_ADDRESS>/lib/rack/response.rb:277:in `buffered_body!'
     # /Users/nez/.rvm/gems/ruby-2.7.4/gems/rack-<IP_ADDRESS>/lib/rack/mock.rb:191:in `initialize'
     # /Users/nez/.rvm/gems/ruby-2.7.4/gems/rack-test-2.0.2/lib/rack/test.rb:360:in `new'
     # /Users/nez/.rvm/gems/ruby-2.7.4/gems/rack-test-2.0.2/lib/rack/test.rb:360:in `process_request'
     # /Users/nez/.rvm/gems/ruby-2.7.4/gems/rack-test-2.0.2/lib/rack/test.rb:165:in `custom_request'
     # /Users/nez/.rvm/gems/ruby-2.7.4/gems/rack-test-2.0.2/lib/rack/test.rb:114:in `get'
     # ./spec/app_spec.rb:6:in `block (3 levels) in <top (required)>'
     # /Users/nez/.rvm/gems/ruby-2.7.4/gems/webmock-3.18.1/lib/webmock/rspec.rb:37:in `block (2 levels) in <top (required)>'

Finished in 2.14 seconds (files took 1.44 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/app_spec.rb:5 # Simple API /stream successfully stream data

I looked at the source code, and probably found an issue.
body.to_s is it a shortcut to read whole body and I think it broke HTTP.rb streaming feature.
So, I want to find the best way to solve this long-term problem. Maybe someone can give me the right direction or any advice?
PS: I set a minimal application to show that case: https://github.com/aka-nez/sinatra-streaming-webmock-error
The related issue at HTTP.rb repo: httprb/http/issues/212

The fix is now released in WebMock version 3.23.0


Add an example of a clearable text field

Current examples and documentation don't support the usage .clear() method. We should extend them to include it as it's quite a common use-case.

Closing this since @michalina-majewska's PR has been merged


fix: make eltype of Traced/Concrete Arrays to be respective RNumbers

Lux tests will fail for now. Needs https://github.com/LuxDL/Lux.jl/pull/1140

what about https://github.com/EnzymeAD/Reactant.jl/pull/425#issuecomment-2561327281? isn't this way gonna be problematic too?
the case that comes to my mind is Yao. if the following example works, then it's fine from my side (actually, maybe i should add a test for this? i think i forgot to add them)
using YaoBlocks

f(x) = mat(Rx(x))
x = ConcreteRNumber(0.0)
@jit f(x)

what about #425 (comment)? isn't this way gonna be problematic too?
the case that comes to my mind is Yao. if the following example works, then it's fine from my side (actually, maybe i should add a test for this? i think i forgot to add them)
using YaoBlocks

f(x) = mat(Rx(x))
x = ConcreteRNumber(0.0)
@jit f(x)

EDIT: added #431 to test that this PR doesn't break integration with YaoBlocks

julia> @code_hlo f(x)
module {
  func.func @main(%arg0: tensor<f64>) -> tensor<2x2xcomplex<f64>> {
    %c = stablehlo.constant dense<1> : tensor<i64>
    %c_0 = stablehlo.constant dense<0> : tensor<i64>
    %cst = stablehlo.constant dense<(0.000000e+00,-1.000000e+00)> : tensor<complex<f64>>
    %cst_1 = stablehlo.constant dense<2.000000e+00> : tensor<f64>
    %cst_2 = stablehlo.constant dense<(0.000000e+00,0.000000e+00)> : tensor<2x2xcomplex<f64>>
    %0 = stablehlo.divide %arg0, %cst_1 : tensor<f64>
    %1 = stablehlo.cosine %0 : tensor<f64>
    %2 = stablehlo.sine %0 : tensor<f64>
    %3 = stablehlo.convert %2 : (tensor<f64>) -> tensor<complex<f64>>
    %4 = stablehlo.multiply %cst, %3 : tensor<complex<f64>>
    %5 = stablehlo.convert %1 : (tensor<f64>) -> tensor<complex<f64>>
    %6 = stablehlo.reshape %5 : (tensor<complex<f64>>) -> tensor<1x1xcomplex<f64>>
    %7 = stablehlo.dynamic_update_slice %cst_2, %6, %c_0, %c_0 : (tensor<2x2xcomplex<f64>>, tensor<1x1xcomplex<f64>>, tensor<i64>, tensor<i64>) -> tensor<2x2xcomplex<f64>>
    %8 = stablehlo.dynamic_update_slice %7, %6, %c, %c : (tensor<2x2xcomplex<f64>>, tensor<1x1xcomplex<f64>>, tensor<i64>, tensor<i64>) -> tensor<2x2xcomplex<f64>>
    %9 = stablehlo.reshape %4 : (tensor<complex<f64>>) -> tensor<1x1xcomplex<f64>>
    %10 = stablehlo.dynamic_update_slice %8, %9, %c_0, %c : (tensor<2x2xcomplex<f64>>, tensor<1x1xcomplex<f64>>, tensor<i64>, tensor<i64>) -> tensor<2x2xcomplex<f64>>
    %11 = stablehlo.dynamic_update_slice %10, %9, %c, %c_0 : (tensor<2x2xcomplex<f64>>, tensor<1x1xcomplex<f64>>, tensor<i64>, tensor<i64>) -> tensor<2x2xcomplex<f64>>
    %12 = stablehlo.transpose %11, dims = [1, 0] : (tensor<2x2xcomplex<f64>>) -> tensor<2x2xcomplex<f64>>
    return %12 : tensor<2x2xcomplex<f64>>
  }
}

julia> @jit f(x)
2024-12-28 19:42:57.105196: I external/xla/xla/service/llvm_ir/llvm_command_line_options.cc:50] XLA (re)initializing LLVM with options fingerprint:<PHONE_NUMBER>302348808
2×2 ConcreteRArray{ComplexF64, 2}:
 1.0+0.0im  0.0+0.0im
 0.0+0.0im  1.0+0.0im

Great, then all in!

@avik-pal, since @mofeing's test case seems to pass (and also strictly this is an improvement to cases where the assumption is made in julia programs in that typeof(getindex(A, idx)) == eltype(A) is now actually satisfied by tracedrarrays), this is fine to merge when ready imo


Implementing setup and installation

This is a place to discuss / brainstorm how the setup script and installation of astrocats and catalogs should work in the future.
One of the first priorities should be making a test-catalog more easily runnable, and clearly show important/helpful results: see e.g. https://github.com/astrocatalogs/astrocats/issues/74#issuecomment-242333989

We need to work on minimizing the install time for Astrocats as much as possible, which probably requires purging some of the large datafiles from the history back when the main repo was storing them. It would probably be best to attempt the purge on a fork just to make sure we aren't deleting anything important.

Installation should be possible via pip, which would remove a barrier for people who just want to dip their feet in without diving too deep into developer land. With a pip install the first point is moot, the full git history of the repo is not installed along with the package.

Some sort of demo server would be nice to have, where people can create a sample web application from the catalog so they can get a sense of what the catalog looks like when it is deployed.


Fix #6917: startTs & endTs filters providing paginated data

Describe your changes :

I worked on the ..... because ...

Type of change :

[x] Improvement

Frontend Preview (Screenshots) :
For frontend related change, please link screenshots of your changes preview! Optional for backend related changes.

Checklist:

[x] I have read the CONTRIBUTING document.
[ ] I have commented on my code, particularly in hard-to-understand areas.
[ ] I have added tests that prove my fix is effective or that my feature works.
[x] All new and existing tests passed.

Reviewers

@TeddyCr not sure if you are using these apis for python, can you take a look

Added UI side of changes, It's working fine with updated API support! Thanks @harshach

@TeddyCr not sure if you are using these apis for python, can you take a look

Looking at it

@harshach this endpoint /testCase/{testCaseFqn}/testCaseResultis throwing a 500. You can check it if you spin up the server and run the below command
curl --location --request GET 'http://localhost:8585/api/v1/testCase/sample_data.ecommerce_db.shopify.dim_address.last_name.column_values_to_match_regex/testCaseResult'

@TeddyCr startTs and endTs is a required field now. If you are not passing we will run into an error. I am adding validations to throw a better error

@TeddyCr startTs and endTs is a required field now. If you are not passing we will run into an error. I am adding validations to throw a better error

@harshach could we also mark it as required in swagger?


[feature request] extracting frames (by timestamp) and creating video out of frames (with input / output framerate)

I could also use video from bitmap frames functionality. Anyone have insight for the best way to go about this?

If you have OpenGL experience, you can set a TimeInterpolator that is currently invoked at each frame with the frame timestamp as argument. When it is invoked you can use glReadPixels() to get an array of image data and then a Bitmap.

(Preface: it's been a long time since my last issues review. I am sorry about the delay and I know you have moved on by now. Still, I'm going to answer where I can)
The thumbnailer class should help with extracting the image frames and resolve the first half of the problem. About frame-to-video mechanism, I consider that out of scope for now, sorry.


Lunarfusion/css 122 badge migration to core tokens

Description
BREAKING CHANGE: This migrates the Badge component to core tokens.

Jira issue CSS-122 https://jira.corp.adobe.com/browse/CSS-122
Note that icon spacing impacts the alignment of the badge

How and where has this been tested?

Chrome 103 for macOS
Firefox 102 for macOS
Safari 15.5 for macOS
How this was tested: comparing local build of http://localhost:3000/docs/badge.html with XD redline components batch 2 and with https://spectrum.adobe.com/page/badge/

Screenshots

To-do list

[ ] If my change impacts other components, I have tested to make sure they don't break.
[x] If my change impacts documentation, I have updated the documentation accordingly.
[x] I have read the CONTRIBUTING document.
[ ] I have tested these changes in Windows High Contrast mode.

[ ] This pull request is ready to merge.

VRT test is: https://spectrum-visual-regression.ci.corp.adobe.com/view/Spectrum CSS/job/css-vrt-test/28/

Note that a new commit https://github.com/adobe/spectrum-css/commit/750c4f4fd3382166a2cc1812044d42106b17c3b7 resolves the issue of consistent vertical alignment of badge components. Badges will now center vertically so that badges with and without icons will align with each other.

VRT test is 	https://spectrum-visual-regression.ci.corp.adobe.com/view/Spectrum CSS/job/css-vrt-test/33/artifact/backstop_data/html_report/index.html
2022-08-10 -- 1494  - badge.zip


Allow creating vault clusters and the elb in different subnets

In the root module, it is setup so that the ELB module and the Cluster module use the same Subnet tags for looking up which subnets they can exist in:
https://github.com/hashicorp/terraform-aws-vault/blob/master/main.tf#L223-L226
Is it possible to make it so that the vault clusters exist in private subnets, while the ELB is in a public subnet with access to talk to the cluster subnets?

The root folder is an example of how to use the modules in this repo. That example is designed to make it easy to learn/experiment (and therefore makes simplifying assumptions, such as what subnets to use), but it is not meant to be used directly for production. If you wish to use this code for production, please use the modules in the modules folder directly instead!


addpost: after uploading I see a login button and the upload failed

cannot replicate or is already fixed


Is it possible to pass the native MS UI Automation commands in WinAppDriver?

greetings.
is it possible to pass the MS UI Automation commands via WinAppDriver?
something similar on how are are doing that in web with: driver.executescript(JS command)
but in our case we want to pass MS UI automation commands in order to find a control or call of one of the controls patterns etc.
TIA

Hi @sheffman there's currently no support for this.  Is there a specific UIA command you're interested in calling directly?

Hi @yodurr Thanks for the reply. Generally speaking - ability to directly call UIA Patterns (InvokePAttern/ScrollPattern/ValuePattern etc.) would be really useful for us. That will provide the unified mechanism to interact with custom controls

Hi, I've been following this project and would like to give my 2 cents here.
I believe that the @sheffman suggestion would be very beneficial to include, if not necessary, when dealing with applications that may not conform to an expected standard.
So far I have automated 3 different WinForms/WPF applications and for each one of them, I had to dig down into UIAutomationClient.dll to directly manipulate the UIA patterns in a pretty raw way.
This has all been in an effort to manipulate custom elements or elements that may not behave in an expected manner.
For example, getting the currently selected option text out of a "ComboBox" may be available in the 'Selection' pattern or it might be seen as the Value of the LegacyIAccessible pattern or even the current Name of the element. Factors like this have made it difficult for us to find a "one size fits all" approach to even any one single desktop app. Typically, we relied on the TestStack: White project for windows app automation, but the customization of some apps have forced us to look into manipulating the UIA patterns very directly. Attached is an example of a class we've been using to do so.


add tensorflow

Hi Ian, thanks for the wonderful work on the SAGE paper and the accompanying library! I noticed that there was not yet a tensorflow implementation inmodel_conversion() and therefore added it in this PR. I modified the airbnb notebook (in airbnb_tf) to show the workflow. I also added model.eval() to the pytorch conversion as I believe it should make it slightly faster. Let me know what you think of these changes, and whether some additional work is required!

Hi Andres, sorry for the slow response! Thanks for contributing to the package, this is a great idea and a needed addition to the package! And the model.eval() call for PyTorch models was also a good call, I should have thought of that.


add use-axios-client, wrap in AppLayout, add LayoutBand

we need to hold off on merging this in this repo, and it needs to get ported over to fs-webdev/cra-template repo


//test/integration:network_extension_discovery_integration_test very flaky in x86 coverage runs

https://dev.azure.com/cncf/envoy/_build/results?buildId=155759&view=logs&j=7ac801b8-35bb-53d2-c9fd-a41048273b74&t=b99949df-346a-5c78-08ba-e1c7b6168d5f&l=2903
I've had this one turn up a bunch of times (maybe not the same case every time, but the same test target):
[ RUN      ] IpVersionsClientType/NetworkExtensionDiscoveryIntegrationTest.BasicWithoutWarmingConfigFail/1
test/integration/network_extension_discovery_integration_test.cc:256: Failure
Value of: fake_upstream_connection->waitForData(data_.size() - bytes_drained, &received_data)
  Actual: false (Timed out waiting for data. Got '', waiting for 8 bytes.)
Expected: true
Stack trace:
  0xca37d0: (unknown)
  0xcb7073: (unknown)
  0x7f702913931d: testing::internal::HandleSehExceptionsInMethodIfSupported<>()
  0x7f702912009e: testing::internal::HandleExceptionsInMethodIfSupported<>()
  0x7f702910799d: testing::Test::Run()
  0x7f702910848e: testing::TestInfo::Run()
... Google Test internal frames ...

[external/com_google_absl/absl/flags/internal/flag.cc : 115] RAW: Restore saved value of envoy_reloadable_features_runtime_initialized to: false
[  FAILED  ] IpVersionsClientType/NetworkExtensionDiscoveryIntegrationTest.BasicWithoutWarmingConfigFail/1, where GetParam() = (4-byte object <00-00 00-00>, 4-byte object <01-00 00-00>) (30290 ms)

Dup of #30873


Make possible to have different amount of split view windows per workspace

An avid user of the split view appearance, I was wondering if, for instance a feature where the following could be set by the user:
Workspace A has 4 columns
Workspace B has 3 columns
Workspace C has 2 columns
etc. rather than only having the option to have the same amount of columns across all workspaces in split view.

@all-contributors please add @guillermin012 for ideas


bug: Loading spinner on Safari

What version of daisyUI are you using?
4.4.4
Which browsers are you seeing the problem on?
Safari, Safari iOS
Reproduction URL
there is no ...
Describe your issue
Just notice on builded version this issue happens (yarn build).

Simple refresh freezes (cmd+R)
Hard refresh works (option+cmd+R)
Then, a simple refresh again make it freezes.

But not happens with dev version with yarn dev.
Am I missing something?
https://github.com/saadeghi/daisyui/assets/118955/a497469d-1642-4445-8016-2839c83d82a5

I can reproduce it on daisyUI site.

Simple refresh: spinner stops
Then I did hard refresh (option+cmd+R) then it works again.

https://github.com/saadeghi/daisyui/assets/118955/3e0eb417-bf1e-4805-857d-a67740e53f72

Interesting…
That's definitely a Safari bug. I tried to see if changing the order of CSS rules (mask-image and -webkit-mask-image) would make it work but the bug still happened. The problem is the CSS animation inside the SVG. It is expected to work and we can't extract that animation out of the SVG because daisyUI can't manually put a SVG inside the HTML and animate it. The SVG has to be inside the CSS mask and the animation has to be inside the SVG.
I will research more to find a way for it.
As a temporary workaround and to prevent this bug to break Mary, looks like adding the loading class names after render prevents the bug?

@saadeghi Yes I tried it. But, bug remains even if I inject class on client side.
<span class="<inject 'loading' here after render>  loading-spinner loading-xs">

what if you inject both loading and loading-spinner?

@saadeghi  Same issue. Here is a snippet

Simple refresh: bug
Hard refresh: works
Simple refresh again: bug

<button onclick="document.getElementById('spin').classList.add('loading', 'loading-spinner')">run</button>

The same issue!
Mac Pro M1, Safari Version 16.5.2, DaisyUI 4.4.2

@saadeghi
Can we consider this is definitely a Safari bug without any workarounds for now ?

It is a Safari bug. I hope it gets fixed in the next Safari update 🤞
A workaround would be using SVG <animate> tag for animations instead of CSS animation but it's not easy to replicate the exact same CSS animation with that 🫣

I can confirm that this is still a problem today. The spinner:

Does not animate at all in Safari (both desktop and on iOS), and just the first bit of the loading icon is rendered. What is weird is that the animations works as expected in the docs page at https://daisyui.com/components/loading/ . Does anyone know why this is happening?

A simple workaround is:
.loading-spinner {
  mask-image: url("/images/spinner.svg");
}

Where the image is: https://github.com/n3r4zzurr0/svg-spinners/blob/main/svg-css/ring-resize.svg
I'm not sure if the SVG does something different, or if the url instead of inline fixes it. Either way it works.

@scosman In my case unfortunately I can't use this workaround.

Over a year later maybe worth a library level patch? Safari team doesn't seem to think this is a priority.
@saadeghi ?

@scosman Yes! For daisyUI 5 loading animations will be using svg animations instead of inline CSS animation inside a encoded svg, which fixes the issue. I will add a patch soon to fix it in daisyUI 4 as well


🚀 [TechDocs] Enhance PlantUML support in the techdocs container to include external puml or pu files

🔖 Feature description
We wanted to add plantuml diagrams in our repo documentation using techdocs where plantUML is one of the widely used tool for software documentation.
When we started our integration with techdocs, could not found enough supporting documentation in existing guides of backstage for how to refer plantuml diagrams using techdocs-cli.
Thus we investigated on our side and provided those support and felt this enhancement can be contributed and will be useful to the community. This will help others to quickly integrate backstage techdocs features and will save time thereby give nice user readability experience by integrating diagrams from anywhere in the repo.
🎤 Context
PlantUMl is one of the widely used tool for software documentation. And with backstage powerful feature of techdocs, which promotes doc like code approach, its easy to have even diagrams rendered on the fly in the documentation. So with this enhancement, users can easily add embedded and referenced plantuml diagrams using techdocs-cli in techdocs.
This will help in

Easy Diagram rendering in techdocs which gives good readability experience.
Saving time as with  good documentation and examples, end user don't have to invest time in research and use the
examples directly.
Organized doc repo, where one can have separate repo for all plantuml diagram files.
Increased User Experience with texts and diagrams.

✌ Possible Implementation
We have done these changes and would like to contribute and appreciate if you could accept that and found useful.
👀 Have you spent some time to check if this feature request has been raised before?

[X] I checked and didn't find similar issue

🏢 Have you read the Code of Conduct?

[X] I have read the Code of Conduct

Are you willing to submit PR?
Yes I am willing to submit a PR!

Hi @lavanya-sainik-ericsson, this would be greatly appreciated! Anything to make it easer to use TechDocs is a win in my opinion. I do have a few questions just to understand what you would like to contribute: is this just documentation, like a tutorial or is it also code changes?
For documentation this would be a good place to add a guide on using PlantUML with TechDocs: https://github.com/backstage/backstage/blob/master/docs/features/techdocs/how-to-guides.md
For code, if it's just changes to the TechDocs container that's actually in its own repo here: https://github.com/backstage/techdocs-container/blob/main/Dockerfile
Excited to see this get put in place! 🚀

Thanks awanlin for your response. I would like to contribute at both documentation and code. First I will be sharing a PR for Code in TechDocs container and then Guide so that it can refer the updated Docker file. I will link the PR here for reference. Hope that's ok or let me know if any suggestions.

That sounds great @lavanya-sainik-ericsson, feel free to ping me on the PRs as I can help review. 👍

Hey awanlin,
As discussed yesterday, I have done changes for both code and documentation. Please have a look and let me know if I need to make any more corrections and if these changes are acceptable.

Hey @lavanya-sainik-ericsson! Given your PRs have been merged, I'm going to close this issue for now. Please feel free to re-open if you think there are any other gaps we can address in the scope of this issue.


Feat/1206383876844632 precompile xcm related

Add batch/xtokens/xcm-utils tests
Refine the functions

The PR[https://github.com/peaqnetwork/peaq-bc-test/pull/41] contains this implementation and has already merged. Therefore, we can close this MR

Figure out that I'm wrong, we haven't merged it...


[question] www.meteorkitchen.com/login with github-account

I used to login into www.meteorkitchen.com with github account. That option seems to removed.
How can I access my projects in www.meteorkitchen.com now?
br. jvp

@jvp I can transfer your old projects to your new user account. Please create one and give me your username. (I can do it ~5 hours after now, wjen I reach my computer).

Created account with username jvp.
Thanks.

Any progress on this yet?

@jvp sorry, somehow I forgot... I'll do it just now (in few minutes)

@jvp done. Please try and let me know.

ty


Tests for successful HTTP responses

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Reinitialize scrollbar on dynamically delete content

the slim scroll working fine when I am dynamically adding content. I mean the scrollbar keep getting smaller giving me the space for more scrolling to reveal more content. But It doesn't adjust when I remove content. Till it reach the minimum height then disappear. if is there any event should I emit when content change ??

hi @abdelrhman92. I see event is missing in the readme. you should send recalculate event, something like:
const ev = new SlimScrollEvent({ type: 'recalculate' });

please let me know if it works.

Nah, It's not working

@jkuri
public scrollEvents: EventEmitter<SlimScrollEvent>;

  ngOnInit() {
    this.scrollEvents = new EventEmitter<SlimScrollEvent>();
  }

 const ev = new SlimScrollEvent({ type: 'recalculate' });

    this.scrollEvents.emit(ev);

Please confirm this is the correct way to recalculate the scrollbar, because its not working, but strangely enough if i resize the window the scrollbar is recalculated. Could you look into it pelase.
Thank you

try wrapping into setTimeout or run change detection manually,
const ev = new SlimScrollEvent({ type: 'recalculate' });
setTimeout(() => this.scrollEvents.emit(ev));

@jkuri unfortunately its not working... not matter what the time out is none, 0 or 10sec..
i see that event is created but looks like the emitted event does nothing

did you bind scrollEvents in your template?
<div slimScroll [scrollEvents]="scrollEvents"></div>

@jkuri
now i have and got another error but that is easly fixed,
public scrollEvents: EventEmitter<ISlimScrollEvent>;
 this.scrollEvents = new EventEmitter<ISlimScrollEvent>();
should be this insted of  EventEmitter<SlimScrollEvent> ,
otherwise you get this error
error TS2322: Type 'EventEmitter<SlimScrollEvent>' is not assignable to type 'EventEmitter<ISlimScrollEvent>'.   Types of property 'observers' are incompatible.     Type 'Observer<SlimScrollEvent>[]' is not assignable to type 'Observer<ISlimScrollEvent>[]'.       Type 'Observer<SlimScrollEvent>' is not assignable to type 'Observer<ISlimScrollEvent>'.         Type 'ISlimScrollEvent' is not assignable to type 'SlimScrollEvent'.
i can confirm now that the recalculate event is working properly, thx for the help

no problem, glad you got it working.


List regex flavor options in README

What families of regular expressions is Ag compatible with? i.e. POSIX, POSIX Extended, Vim, Perl...
This isn't immediately clear...there's no definitive answer online, the man page says nothing on the subject. If stated in the README and it would save new users lots of time and confusion.
The only answer I've found is on stack overflow and comes from a non-definitive source. That answer states says Ag uses PCRE,
http://stackoverflow.com/questions/22190334/ag-silver-searcher-what-are-the-rules-for-patterns
but that's clearly not always the case, as I can use POSIX character classes from my terminal like so
ag [[:digit:]] src/*.js

From looking at the code...
Ag uses the pcre(3) library with the PCRE_MULTILINE option enabled.  Regex features are listed here:
man 3 pcrepattern

A man page update is available in this commit .

Great work! I hope to see that get merged.

Did a PR get submitted or merged for this?

No.  Geoff is pretty busy.  I'm letting my commits accumulate.  I'm sure it will be sorted when he has some free time.


feat: release new ip-allow command

Releases #152

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


[stable/pgadmin] update api versions

Update Ingress and Deployment apiVersions for Kubernetes 1.16 support
Signed-off-by: Rowan Ruseler<EMAIL_ADDRESS>Resolves issue: https://github.com/helm/charts/issues/20714

/ok-to-test
/lgtm


WIP Update all examples to fresh forks.

In preparation for releasing 1.0 (#37) and updating all examples (#52), I forked all the bl.ocks.org-based examples and updated the links here, so that 1.0 can be released and the README will not need to change after that point. After releasing 1.0, I plan to go through and upgrade all the examples to use it.
Also, replaced broken https://bl.ocks.org/mbostock/5593150 with https://beta.observablehq.com/@mbostock/d3-vector-tiles , as suggested by @Fil  in #37.
After releasing 1.0, looking forward to try Observable's Suggestion feature for upgrading that one!

Remaining task here: make sure all thumbnails are working.

Good catch! I moved that example over to the D3 organization on Observable and added a redirect from the broken block.
https://observablehq.com/@d3/vector-tiles

I have been working on new examples and documentation here:
https://observablehq.com/collection/@d3/d3-tile
I’m still using the 0.0.3 API because the tx and ty introduced by 0.0.4 feel pretty awkward. All of the examples I could find rely on a stringify function that is applied as a transform to the container element, which often isn’t what I want.
function stringify(scale, translate) {
  var k = scale / 256, r = scale % 1 ? Number : Math.round;
  return "translate(" + r(translate[0] * scale) + "," + r(translate[1] * scale) + ") scale(" + k + ")";
}

And furthermore that stringify function assumes as tile size of 256 (I think), so it won’t work with other tile sizes.
I’d like to think over the API design before we release 1.0.

Closing this PR as the examples and documentation will live on Observable. Let me know if you’d like an invite to the D3 team there to help out.


Write out graph definition when storing weights for restoration from graph definition and Tensorboard visualization

For debugging as well as for book keeping purposes, it would be useful to write out the complete graph definition every time weights are saved.
We can store out the graph definition using tf.train.write_graph() as a ".pbtxt" file, (pickle it) and store it in gridfs:
https://www.tensorflow.org/versions/master/api_docs/python/tf/train/write_graph
This description can be then loaded into Tensorboard or used to rebuild the model without having to keep the actual script around / to make sure the correct script is being used to restart training.

I like this, it might also be good to save a .png of the structure too just for visualization purposes

See also #28


add release notes for 3.3

Description
A greater understanding of what is being released in ChefDK 3.3.
Issues Resolved
No existing, numbered issues, but does attempt resolve the amorphous problem of communicating change.
Check List

~New functionality includes tests~ Is markdown testable?
~All tests pass~ See above.
[x] RELEASE_NOTES.md has been updated (that's what this PR is all about!)
[x] All commits have been signed-off for the Developer Certificate of Origin. See https://github.com/chef/chef/blob/master/CONTRIBUTING.md#developer-certification-of-origin-dco

We need to specifically call out the ChefSpec update. It comes with an entirely new way to create tests and we probably want people to know about that.


Crash when "defaults" not specified in config

If the user doesn't have a "defaults" dict in config.yaml, the defaults field on the Config object is None because this method returns None implicitly: https://github.com/ghickman/tvrenamr/blob/master/tvrenamr/config.py#L96
Then, later, when a config value is looked up, defaults is assumed to exist: https://github.com/ghickman/tvrenamr/blob/master/tvrenamr/config.py#L27
This raises a "TypeError: 'NoneType' object is not subscriptable" error, which is not handled. You probably want this somewhere in there:
if not self.defaults:
     return False

I've released to the PyPI too =)


Data.String.Unsafe no longer exports  ≟

In the imports list for the Lambda chapter it has:
open import Data.String.Unsafe using (_≟_)

In the newer version of the standard library it looks like this is exported by Data.String instead.

We're working on moving to a newer version of the standard library, see #330


Added possibility to find retired association.

This is not ok. It changes the contract of the entire framework. There must be a different solution

This functionality is now available by setting the query_arg with_deleted to True. Example:
rq.set_query_arg("with_deleted", True)


add method to change order of sorting

It would be nice to have a way to switch sorting in the gallery from chronological to alphabetical. I have been relying on alphabetical sorting until now for playing through all the games, but even outside of that it would be nice to have more than one way to sort them.

I agree with this.


Add #[derive(Document)] to TEdgeConfigDto and replace FilePath with camino::Utf8PathBuf

Proposed changes
This is the first batch of changes for #1812. It adds documentation to the TEdgeConfigDto struct via doku. It also replaces FilePath with camino::Utf8Path for a few reasons:

The internals of TEdgeConfigDto will become more visible as part of later changes
I don't think we can ever end up processing non UTF-8 paths as config files, environment variables, JSON from Cumulocity etc. all require valid unicode as input
The code frequently assumes paths are UTF-8 anyway, either calling .to_str() or storing them as Strings when we need to display them (e.g. writing to mosquitto configuration)

From that, I believe camino is a good fit for our use case. I've not propagated the changes beyond a few crates, but I think I've covered the major interactions with tedge_config.
Types of changes

[ ] Bugfix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[x] Improvement (general improvements like code refactoring that doesn't explicitly fix a bug or add any new functionality)
[ ] Documentation Update (if none of the other choices apply)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

Paste Link to the issue
#1812
Checklist

[x] I have read the CONTRIBUTING doc
[x] I have signed the CLA (in all commits with git commit -s)
[x] I ran cargo fmt as mentioned in CODING_GUIDELINES
[x] I used cargo clippy as mentioned in CODING_GUIDELINES
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] I have added necessary documentation (if appropriate)

Some minor comments.
The output is not consistent regarding the separator between doc and example: some entries are missing a dot, others a space, some both:
$ tedge config list --doc
device.type                    The default device type. Example: thin-edge.io
http.address                   Http client address, which is used by the File Transfer ServiceExample: <IP_ADDRESS>, <IP_ADDRESS>
mqtt.client.host               Mqtt broker address, which is used by the mqtt clients to publish or subscribe.Example: <IP_ADDRESS>
...

At the moment, that is still using the existing implementation, although I plan to start working on changing that next.


Annual Exception

Hi,
how to treat a annual exception? E.g. John.Doe changes 5 paid off days into cash money with his boss. This happens rarely but might happen. Would be great if the Option "Allowance adjustment per User" would reflect a adjustment by anno not general.
If I put him -5 today. He would have -5 again next year.
cheers :).

Hi @PatrickFist, good idea.
And needs to be consider this year. I will think about it.

Allowance adjustments now are on individual year basis, that is if employee X got adjustment of +3 days it is applied only to current year.
Done as part of #209


move privacy notice to dartlang.org

Move the wiki here:  https://github.com/dart-lang/dart-pad/wiki/Privacy-Policy to somewhere on dartlang.org.  Rename it to "privacy notice", and consider rewriting the section on source code retention (those are no longer retained beyond the HTTP log rotation times AFAICT).

The page is up on dartlang.org: https://www.dartlang.org/tools/dartpad/privacy


captured image does not save location data?

When we capture image from using this library it does not save location details. same time when we capture image from the camera app it saves image with location details.
i checked location services are enabled for the app.

Hi @hadwanihardik
I tried for a few hours, but did not find a way to write metadata with PHPhotoLibrary :(

Fixed.


Remove updateMode() in model

The changing mode commands should not need to interact with the Model component if it is not necessary. This reduces coupling.

To update diagrams in DG to reflect this change as well.


Switch from cryptonite library to crypton and fix cbits

The cryptonite library is deprecated and has been replaced by crypton which is a drop in replacement.

cbits: Squash a Wstringop-overread error (This needs very careful review).

Darwin 8.10.7 is missing llvm 🤦


Non-RGB LEDs support for Logitech mice

This adds support for the non-RGB LEDs feature in HID++2.0 mice.
Should fix #325
Feedback and advice on general structure welcome!

Thanks, this would be indeed a great addition.
However, when I try to run your branch locally with the G900 or the G502, I have a segfault at https://github.com/SonicFrog/libratbag/blob/wip/g302-fix/src/driver-hidpp20.c#L317
It looks like led_info is NULL, so I think there might be an issue in how the various devices are enumerating the features.

Still working on that one. The weird thing is that the G502 I have only has non-RGB LEDs and crashes inside the read_lead_1300 function.

The SEGFAULT should be fixed now, though there may some less obvious bugs still left.

Few comments on the PR:

there is no good way to test this currently as ratbag-command and ratbagd/ratbagctl are not updated
which means I have some unsupported -1 on the G900 that makes the info command of ratbagctl crash on the G900
the G502 always seem to say that the modes are off even though the led is light up
trying to set up something on the g502 returns an error saying that setting the LED is not supported here (did you add a new capability?)
when starting ratbagd, the g502 lights off and on again... while for the G900 we just read the state in the profile, so I wonder why you are forced to use software controlled LED...

Regarding the code itself, there are a few formatting issues here and there. We can pinpoint those shortly before merging once it is fully functional.
If the assumption that you exported new capabilities is correct, then this is not something you should do (I think). The LED interface should stay the same whether or not you are using RGB LED. We should however add a new capability/function to query the numbers of bits we can set for the color.
And regarding the split of the patches, add non-RGB led reading  and add non-RGB led updating should come together in the same patch, and I think the last one should also be squashed with the previous too.
Basically, when you split code to have a smaller commit, you always need to ask 2 questions:

is my code not actually adding dead code?
can my code be bisected?

For the first one, you should make sure that any function is actually called and be reachable (from  a rough look, it seem the led reading and led updating commits are not raising a warning by gcc but nothing sets the capability, so basically there is no way to test this code until the last one)
For the second advice, you should always make sure the code is bisectable. Here, a git bisect will say that the faulty commit will be the last one when this one doesn't do much.
So it is fine to have big commits if there is no other way around it.

https://github.com/libratbag/libratbag/pull/360 has the start of LED color depth support

I guess there are a few points that were not totally clear, when I say non-RGB LEDs this actually means monochrome LEDs. There is no way at all to control the LED color through feature 0x1300. The LED just gives you a bitfield which indicates what effects it supports (breathing, blinking, etc...).
Also LEDs advertised through 0x1300 do not always support the full range of effects available, currently this is handled by returning a -ENOTSUP when trying to apply an effect to a LED that does not support it.
I've not added a new ratbag capability, I've only added one to the hidpp20_driver_data structure in order to be able to select the correct method to update the led, either 0x1300 or 0x8070. Though your problem might related to the above.
As for the on and off problem at startup, this is because the code sets the software control property at startup causing the LED control to go from FW to SW and a little flicker. I'll fix this by only turning on software control when writing a LED.
And finally, thanks for the git advices ;)

this is handled by returning a -ENOTSUP when trying to apply an effect to a LED that does not support it.

That's stuff that needs to go into the .device file then so we don't rely on guesswork by the user.

The data I get from my G502 spectrum or a G402 does not seem to fit the hidpp20_led_sw_ctrl_led_info structure.

 And zero nvconfig caps, although, on the G502 spectrum, functions 6 and 7 can control if the DPI LEDs stay on (LED 0 only). It would fit better with a 8 bit type.

Good catch! I'll fix this right away.

Finally managed to fix the issue with the G900. It appears it has both RGB and non-RGB LEDs. For now, I've made the two features mutually exclusive with a priority on RGB LEDs. Though, it seems to me like this would be worth a more in-depth discussion about how to handle the mice (mouse?) that have both.

I did not say it explicitly but the G502 spectrum is a RGB mouse too (that's the difference with the G502 core). I actually expect most mouse with 0x8070 to have 0x1300 too. But it is not used for LED effects, so you can ignore it. The useful setting is the "DPI LEDs stay on" one, but I don't know how that would fit in libratbag.

The useful setting is the "DPI LEDs stay on" one, but I don't know how that would fit in libratbag.

we ignore it. libratbag is a generic interface and every device has some wonky settings here and there that may be exposed by the hardware (but no other mouse). it's usually not worth the effort of making this accessible so we just ignore it. I think that's the best case here too.

After some extensive tests, it works fine with:

G300s
G302
G502
G603
G703
G900
G903

If anyone has one I haven't tested that would be great!

After some extensive tests, it works fine with:
G300s

Does the G300s use the hid++2.0 driver? I thought that it used the same as the G300?

On Sep 26, 2017 15:11, "Ogier Bouvier"<EMAIL_ADDRESS>wrote:
After some extensive tests, it works fine with:

G300s
G302
G502
G603
G703
G900
G903

If anyone has one I haven't tested that would be great!
Nice. Sorry if I do not me this right now. I am at a conference until the
rest of the week and can't really work on libratbag. If anyone else wants
to do the review, feel free to pick it up.

Does the G300s use the hid++2.0 driver? I thought that it used the same as the G300?

It doesn't, but I checked every mice I had on hand.

Should be good now!


persepolis: init at 3.1.0

Motivation for this change
It is one the best gui download manager in linux world. :)
Things done

[ ] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Assured whether relevant documentation is up to date
[x] Fits CONTRIBUTING.md.

@LinArcX I built your branch and ran it. I opened and closed the help dialog (via the window managers close button) which caused the application to crash. Same thing for preferences. Did that happen for you as well?

@aanderse No. After last change I test it locally. It's work like a charm now.
Also I've downloaded some musics with it to test its functionality. It's OK.

Nice. Also I've tested it in i3. Without any problems.
So what is next step? :)


switch to importlib from imp for python 3.x

Issue #, if available:
Fix #1285
Description of changes:

Switch to importlib from imp for python 3.x

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

@adamchainz how does this look?

In general looking correct, presume your tests cover it


Auto Migration Failed between version 0.8.5 and 0.8.17

Using sqlite engine in our version of gogs, 32 bit linux build.
For a certain repository we have about 180 issue records, pre-migrate.  After migration to 0.8.17, the same repo only shows about 140 issues.  It looks like the last 2 weeks of new issues did not translate over correctly.  The migration logs shows "Updating issue count" for the first 140 issues.
btw, we migrated to 0.8.5 from a much older 0.6? version without any problems about 2 weeks ago.  Our guess is that only issues created using 0.8.5 had problems surviving the migration to 0.8.17.
We had to roll back to 0.8.5 because we can't lose those issues.  Any help is appreciated.

maybe related to this one #2269?

Thanks your report!
If 0.8.5 works correctly, then there is no migration between 0.8.5 and 0.8.17.

"Updating issue count" for the first 140 issues.

If this is the case, are you sure database has 180 records instead of old counter was wrong?

SQL to query count: SELECT COUNT(*) FROM issue WHERE repo_id={repo_id}

Thanks for the response guys.  You comments made me realize I had inadvertantly copied in the wrong database to 0.8.17, and thats why I lost the issues, NOT because of migration software.
Very sorry for wasting your time.

:trollface:


How to get disk space back after massive bulk delete operation?

I have a db with 0 keys (all keys were deleted previously), but it still takes 1.4Gb of disk space.
I scan for the first and last elements on startup and it takes about 1 minute to execute this:
if iter.First() {
	q.head = q.dbKeyToID(iter.Key()) - 1
} else {
	q.head = 0
}

if iter.Last() {
	q.tail = q.dbKeyToID(iter.Key())
} else {
	q.tail = 0
}

return iter.Error()

and in the end both q.head and q.tail are equal 0.
Seems like it scans though all of 1.4Gb tombstones and finds nothing.
Should I manually compact them or there is a better way to deal with old deleted keys?

The deletion marker probably still dangling in the memdb, if you stop writing then size threshold won't be reached, so it will not get flushed, hence auto compaction won't kick-in. If this the case then manual compaction is the only way to force compaction.

I'm implementing a leveldb-based queue with headID and tailID. Writes are append-only with auto-increment keys. All deletes are also sequential. Once value read and used - it's get deleted. So in this type of workload old .ldb files are never get deleted even if I continue writing. I have 13,000 of ldb files (15GB) and most of keys are already deleted.
In this situation, what is the best strategy to manually compact the database?
I can count totalBytesDeleted from DB and trigger CompactRange(0, q.head - 1) after each 10Mb get deleted. Is that viable solution?

Here is the sample I wrote to reproduce the issue: https://gist.github.com/bogdanovich/d5aeb34b523dc9cb8fb1
Old deleted keys are never get removed from the disk and disk usage is growing infinitely.

@bogdanovich Thanks for the sample code. This turns out to be a bug.

Unfortunately this won't reclaim space of the old DB, you still need to manually compact them once, after that you're good to go.

Thanks for the quick fix.


I have a question, when I use v1.0-mini dataset to train with single GPU dev, which config shoud I use?

I have tried this config:projects/configs/bevformer/bevformer_base.py. using single GPU A100.
but i got the result very low:
pts_bbox_NuScenes/mAP: 0.1162

V1.0-mini is too small to make the model converge.

if I use V1.0 full dataset with single GPU  A100 , how long can the model converge.

hello! do you know how long the model converge?


Vote - Displays Available TLOS?

The vote page https://explorer.telos.net/vote shows 'Your Available TLOS'  -  This is not a relevant piece of information for this page. Maybe this should show the users Voteable TLOS  (ie amount of TLOS that is staked and therefor ready to use for voting)

Closing this as resolved, number displayed ('YOUR AVAILABLE VOTING TLOS') is pulled from account voter_info.staked (not total TLOS)


Hikvision cam suggested settings

Hi,
Thanks for the great plugin!
I'm trying to configure it for my 4 hikvision 2CD-2XXX IP cams. I run HomeBridge in a docker image on my X86 NAS (Qnap TS-453 with atom CPU). The snapshots work great with no issue, however I noticed a few issues with live video streaming:

It plays fine for a few seconds (up to 10) and then freezes
Some times it says the error connecting to the camera, and also noticed the error somebody else is viewing the stream (I'm the only one using it via homebridge)

I have tried several things:

Try to set the stream as close to the output and possible. So low profile H264 VGA 256/192Kbps 10FPS and on the camera, and the plugin transcode to VGA 132kbps with 10FPS, tried both CBR/VBR but the same result
Try to specify tpc protocol for rstp and different pack size, doesn't help either
It is not related to CPU, when transcoding the NAS barely use CPU more than 50% (and docker is allowed to access all CPU power). Network can also be excluded as all cams are cat6 cable wired.

Anything else I should try? What would be the optimal setting for VGA resolution which requires minimal work for FFMpeg? Thank you in advance!

Hi, thank you for the reply!
All cameras are configured the same, below is the configuration for one of them:
           {                "name":"Entrance Camera",                "videoConfig":{                   "source":"-rtsp_transport tcp -re -i rtsp://user:XXXXXXXX@<IP_ADDRESS>:554/Streaming/Channels/102/",                   "stillImageSource":"-i http://user:XXXXXXXX@http://<IP_ADDRESS>/Streaming/Channels/1/picture",                   "maxStreams":2,                   "maxWidth":640,                   "maxHeight":360,                   "maxFPS":10             }
The substream of the camera is configured like the following:

Resolution: VGA 640X480, but the actual stream is 640X360 (verified in VLC)
FPS: 10
Bitrate: CBR 192Kbps
Encoding: H264 with low profile, normal quality

Network issue is excluded, cameras are wired with cat6e cable, play rtsp stream works perfectly in VLC at least for minutes.
Bottleneck of CPU/memory can also be excluded, during transcode CPU usage barely hit 50%, and there is no resource limit for the docker container. I also tried 480X270 resolution but same problem.

I also have have Hikvision camera, I use omx, but quality is bad, and video late.
If you want I can send configuration. @maisun

@erokoder Can you show your configuration here?

@mientki
I success to adjust. Quality is not bad, but video is still too late.
Configuration:
{ "name":"Entrance Camera", "videoConfig":{ "source":"-rtsp_transport tcp -re -i rtsp://user:XXXXXXXX@<IP_ADDRESS>:554/Streaming/Channels/102/", "stillImageSource":"-i http://user:XXXXXXXX@http://<IP_ADDRESS>/Streaming/Channels/1/picture", "maxStreams":2, "maxWidth":640, "maxHeight":360, "maxFPS":10 }
I add -rtsp_transport tcp and soloved problem with picture.

You are great! Now the umami also works :-) I added "-rtsp_transport tcp".
To improve the video quality, please set:
Stream 1:
/Streaming/Channels/101/
The resolution of 1280x720px:
"maxWidth": 1280,
"maxHeight": 720
and bitrate:
"maxBitrate": 512,

Did somebody get audio from Hikvision cameras ? Try to make videodoorbell from Hiwatch DS-i114 camera.

My Hikvision Cameras dont have audio support. But I have Hikvision Intercom DS-KV8X02-IM
https://www.hikvision.com/en/Products/Video-Intercom/Villa-Door-Station/DS-KV8X02-IM
and I only can see video, I cant configure audio and snapshot picture. Any help about this?

@erokoder do you have settings for main stream and sub stream channels? if does - you can easily get still image pictures from that camera. for that you must set codec for substream channel to jpeg.

@Partizan7676

stream type - choose sub "stream" and as i remember in video encoding type you will see jpeg or mjpeg

I only saw STD_H264

Try to change other options too. Video&audio choose only video, try others - may be it helps. I advice you from my experience with their cam i114

I try change all option, but I cant find jpg or jpeg :/

Try to ask hikvision about firmware which is support mjpeg on sub stream

Can't edit post from iPad ((( also you can take picture from main stream
http://admin:passwd@ip-cam/ISAPI/Streaming/channels/101/picture?snapShotImageType=JPEG

I was configuring it for my Hikvision DS-7308HQHI-SH TurboHD DVR, and through some troubleshooting I got it working. Wanted to share, so here it is:
{
    "name": "The Camera",
    "videoConfig": {
        "source": "-rtsp_transport tcp -re -i rtsp://someuser:123456789012@<IP_ADDRESS>:9999/Streaming/Channels/101/",
        "maxStreams": 2,
        "maxWidth": 1920,
        "maxHeight": 1080,
        "maxFPS": 30,
        "maxBitrate": 8192
    }
}

Just a word of notice:

The password for the authenticated user must not be more than 12 characters and have any weird symbols. It took me a few hours to figure that out because the max allowed was 16 characters, and I maxed out the field.
Please don't use the admin user, and assign only live view and playback permissions for the user.
Might not be good for slow connections, but I have LTE here so the speed is decent.