time: Timer reset broken under heavy use since go1.16 timer optimizations added

What version of Go are you using (go version)?
Tracked the specific issue to commit b4b014465216790e01aa66f9120d03230e4aff46 via git bisect

$ go version
go version devel go1.17-d568e6e075 Tue Jul 20 19:54:36 2021 +0000 linux/amd64

Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (go env)?
go env Output
$ go env
andrewvc@LAPTOP-80O11FM2 ~/p/b/heartbeat (fix-timer-failure)> go env
warning: GOPATH set to GOROOT (/home/andrewvc/projects/go) has no effect
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/andrewvc/.cache/go-build"
GOENV="/home/andrewvc/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/andrewvc/projects/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/andrewvc/projects/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/home/andrewvc/projects/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/home/andrewvc/projects/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/home/andrewvc/projects/beats/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build674387485=/tmp/go-build -gno-record-gcc-switches"

What did you do?
Longstanding unit tests (~1.5 years old) started sporadically failing against go 1.16.x
Our program (Heartbeat) rapidly stops and resets a single timer based on user submitted jobs, effectively testing the golang timer. Further investigation revealed that timer.Reset was no longer resetting the timer consistently. Every 10-40k iterations or so it would have no effect, resulting in a non-triggering timer, and in our case, a deadlocked program.
We tracked the specific issue to a change introduced in golang commit b4b014465216790e01aa66f9120d03230e4aff46 via git bisect
The failure can be reproduced by running from the special branch below, which contains an enhanced test suite for Heartbeat using a watchdog timer to catch the failed timer.
# Examples use a zip download to prevent a full repo clone
curl -L https://github.com/andrewvc/beats/archive/refs/heads/broken-timer.zip -o broken-timer.zip
unzip -q broken-timer.zip
cd beats-broken-timer/heartbeat
go test -timeout 30s -run '^TestStress$' github.com/elastic/beats/v7/heartbeat/scheduler/timerqueue

We are now avoiding Reset in favor of NewTimer in a workaround PR https://github.com/elastic/beats/pull/27006 . You can validate this by deleting the Reset call here and replacing it with the NewTimer call here
Digging into the golang source code I discovered that I could fix the issue by commenting out the optimization on this line inside adjusttimers . It seems that the accounting of that variable may have an issue somewhere. The code is quite tricky, heavily concurrent, etc, and could use the eye of someone familiar with it.
What did you expect to see?
I expected the timer to fire consistently when reset.
What did you see instead?
Nothing, after enhancing the test suite for heartbeat to dump traces it was apparent that the program was in an idle state, with no timer scheduled, and no other code blocked.

Thanks for the good test case and analysis.

@gopherbot Please open backport to 1.16.
This bug also exists in 1.16.  It can cause programs that use Timer.Reset to fail to run a timer when it is ready.


Remove creationTimestamp from template

The field shouldn't be in the template, it is set when the
DeploymentConfig is created.

[test] @bparees PTAL

PR tester is broken right now (i'm working on it), but this looks safe.


Please clarify the extent of ineligibility when using servicing profiles

Could the following section be clarified in the text? Does this mean if a customer is using servicing profiles on a device, that device is ineligible for the Windows Autopatch service? Or does it mean that it will only be ineligible for M365 App updates, but will still be eligible for the service and will still get Windows Updates?
Microsoft 365 Apps servicing profiles
A service profile takes precedence over other management tools, such as Microsoft Endpoint Manager or the Office Deployment Tool. This means that the servicing profile will affect all devices that meet the above requirements regardless of existing management tools in your environment. So, if you're targeting a managed device with a servicing profile it will be ineligible for Microsoft 365 App update management.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: ec8a5572-1135-3c0b-06d1-b8e1f258c17a
Version Independent ID: ec8a5572-1135-3c0b-06d1-b8e1f258c17a
Content: Microsoft 365 Apps for enterprise - Windows Deployment
Content Source: windows/deployment/windows-autopatch/operate/windows-autopatch-microsoft-365-apps-enterprise.md
Product: w11
Technology: windows
GitHub Login: @tiaraquan
Microsoft Alias: tiaraquan

@cakin027
Thank you for your feedback. I'm working with the team to provide further clarity.

Hi @cakin027
We've updated the Servicing profiles section to address your feedback. The article has been updated:
https://docs.microsoft.com/en-us/windows/deployment/windows-autopatch/operate/windows-autopatch-microsoft-365-apps-enterprise#microsoft-365-apps-servicing-profiles


Publication notification comment fails intermittently

I suspect throttling or just performance hiccups on github's end. There's no retry logic in the multiple calls.
A run looks like this. Notice that is-number-like, redux-router and quick-hash work fine, but turbostatus and vigour-ua don't log after "Requesting from github".
Publishing is-number-like...
Tag<EMAIL_ADDRESS>as ["ts2.0","ts2.1","ts2.2","ts2.3","ts2.4","ts2.5","ts2.6","ts2.7","ts2.8","ts2.9","ts3.0","ts3.1","ts3.2","ts3.3","ts3.4","ts3.5","latest"]
Requesting from github: repos/DefinitelyTyped/DefinitelyTyped/commits?path=types%2fis-number-like
Found related commits; hash: b1ca3864162b5f3ea4625a75f7798368b4d269a4
Requesting from github: search/issues?q=is:pr%20is:merged%20b1ca3864162b5f3ea4625a75f7798368b4d269a4
Latest PR: 35629
Requesting from github: repos/DefinitelyTyped/DefinitelyTyped/pulls/35629
Current date is Wed May 22 2019 16:14:39 GMT+0000 (Coordinated Universal Time)
  Merge date is Wed May 22 2019 16:07:09 GMT+0000 (Coordinated Universal Time)
I just published [`<EMAIL_ADDRESS>to npm](https://www.npmjs.com/package/@types/is-number-like).
Posting to github at repos/DefinitelyTyped/DefinitelyTyped/issues/35629/comments: {"body":"I just published [`<EMAIL_ADDRESS>to npm](https://www.npmjs.com/package/@types/is-number-like)."}
From github: {"url":"https://api.github.com/repos/DefinitelyTyped/DefinitelyTyped/issues/comments/494871485","html_url":"https://github.com/DefinitelyTyped/DefinitelyTyped/pull/35629#issuecomment-494871485","issue
Done logging latency
Publishing quick-hash...
Tag<EMAIL_ADDRESS>as ["ts2.0","ts2.1","ts2.2","ts2.3","ts2.4","ts2.5","ts2.6","ts2.7","ts2.8","ts2.9","ts3.0","ts3.1","ts3.2","ts3.3","ts3.4","ts3.5","latest"]
Requesting from github: repos/DefinitelyTyped/DefinitelyTyped/commits?path=types%2fquick-hash
Found related commits; hash: b1ca3864162b5f3ea4625a75f7798368b4d269a4
Requesting from github: search/issues?q=is:pr%20is:merged%20b1ca3864162b5f3ea4625a75f7798368b4d269a4
Latest PR: 35629
Requesting from github: repos/DefinitelyTyped/DefinitelyTyped/pulls/35629
Current date is Wed May 22 2019 16:15:00 GMT+0000 (Coordinated Universal Time)
  Merge date is Wed May 22 2019 16:07:09 GMT+0000 (Coordinated Universal Time)
I just published [`<EMAIL_ADDRESS>to npm](https://www.npmjs.com/package/@types/quick-hash).
Posting to github at repos/DefinitelyTyped/DefinitelyTyped/issues/35629/comments: {"body":"I just published [`<EMAIL_ADDRESS>to npm](https://www.npmjs.com/package/@types/quick-hash)."}
From github: {"url":"https://api.github.com/repos/DefinitelyTyped/DefinitelyTyped/issues/comments/494871632","html_url":"https://github.com/DefinitelyTyped/DefinitelyTyped/pull/35629#issuecomment-494871632","issue
Done logging latency
Publishing redux-first-router...
Tag<EMAIL_ADDRESS>as ["ts2.4","ts2.5","ts2.6","ts2.7","ts2.8","ts2.9","ts3.0","ts3.1","ts3.2","ts3.3","ts3.4","ts3.5","latest"]
Requesting from github: repos/DefinitelyTyped/DefinitelyTyped/commits?path=types%2fredux-first-router
Found related commits; hash: 083ba71eab7e16270bcb124954370f08f84f8b33
Requesting from github: search/issues?q=is:pr%20is:merged%20083ba71eab7e16270bcb124954370f08f84f8b33
Latest PR: 35500
Requesting from github: repos/DefinitelyTyped/DefinitelyTyped/pulls/35500
Current date is Wed May 22 2019 16:15:25 GMT+0000 (Coordinated Universal Time)
  Merge date is Wed May 22 2019 16:11:27 GMT+0000 (Coordinated Universal Time)
I just published [`<EMAIL_ADDRESS>to npm](https://www.npmjs.com/package/@types/redux-first-router).
Posting to github at repos/DefinitelyTyped/DefinitelyTyped/issues/35500/comments: {"body":"I just published [`<EMAIL_ADDRESS>to npm](https://www.npmjs.com/package/@types/redux-first-router)."}
From github: {"url":"https://api.github.com/repos/DefinitelyTyped/DefinitelyTyped/issues/comments/494871788","html_url":"https://github.com/DefinitelyTyped/DefinitelyTyped/pull/35500#issuecomment-494871788","issue
Done logging latency
Publishing turbostatus...
Tag<EMAIL_ADDRESS>as ["ts2.0","ts2.1","ts2.2","ts2.3","ts2.4","ts2.5","ts2.6","ts2.7","ts2.8","ts2.9","ts3.0","ts3.1","ts3.2","ts3.3","ts3.4","ts3.5","latest"]
Requesting from github: repos/DefinitelyTyped/DefinitelyTyped/commits?path=types%2fturbostatus
Publishing vigour-ua...
Tag<EMAIL_ADDRESS>as ["ts2.2","ts2.3","ts2.4","ts2.5","ts2.6","ts2.7","ts2.8","ts2.9","ts3.0","ts3.1","ts3.2","ts3.3","ts3.4","ts3.5","latest"]
Requesting from github: repos/DefinitelyTyped/DefinitelyTyped/commits?path=types%2fvigour-ua
Checking for cache file at D:\home\site\wwwroot\bin\lib/../../cache/npmInfo.json...
Reading cache file...
Done!

Note that since dual-publishing to GH Packages, notifications have been slightly more reliable, which is more evidence for the throttling hypothesis.


move sharing code from cs3org/reva

Sorry about this huge PR.
This pull request moves the sharing code from https://github.com/cs3org/reva to this repo.
To do before merging:

[ ] Check if anything changed in reva in the meantime

[ ] If so, implement the changes here

[ ] Run the acceptance tests

 Here is an overview of what got changed by this pull request:

Clones added
============
- pkg/service/v0/shares/create.go  25
- pkg/service/v0/shares/get.go  11
- pkg/service/v0/shares/shares.go  4
- pkg/service/v0/shares/remove.go  8
- pkg/service/v0/shares/pending.go  10
- pkg/service/v0/shares/list.go  3
- pkg/service/v0/shares/update.go  13

See the complete overview on Codacy


Submitting heron topologies to different kubernetes namespaces

Was digging around trying to see if this was possible, but didnt see anything.
Questions:

I was wondering if its currently possible to run one heron-apiserver in some k8s namespace(e.g. heron) but then when i submit topologies, have 1 go into k8s namespace "some-heron-topology" and a different one go into "some-cooler-heron-topology". Does it just use whatever namespace the apiserver is in?
Where does the code live that decides what k8s namespace to submit the job into?

Thanks!

Hi there,

@nicknezis May have this answer.

A link to the kuberenetes scheduler code is here

Right now the namespace seems to be set through the API Server. I wonder if we can update KubernetesScheduler to allow using the submission time cluster or env for a k8s namespace.

ah okay, so without code change sounds like the only way to do what I want would be to run a different api server in each namespace that I want heron jobs to run in? I would definitely be interested in the ability to specify that at submission time as mentioned by @nicknezis.


Camera Zoom and Flash Event

how do you add a script or event for Camera Zoom or Flash? Im so use to psych i really need events for yoshi engine

function cameraZoom(camZoom:String, hudZoom:String) {
   FlxG.camera.zoom += Std.parseFloat(camZoom);
   camHUD.zoom += Std.parseFloat(hudZoom);
}

function flashCam(duration:String) {
   FlxG.camera.flash(0xFFFFFFFF, Std.parseFloat(duration));
}


bug fix: convert lat/lon (centerY/centerX) for EASE tiles to radians before use in ESMF

centerX and centerY for EASE grid were not used yet, so should be 0-diff-trivial

full nightly test completed successfully


[WFRP4e System] upload error

Hi!
It seems I cannot upload anything from my computer to the system whether it is tokens map or handouts.
It says:
Cannot read property etag of null
Could you help me with this problem?
Thanks!
JDFrom: GEANT#3552wfrp4e: 3.3.3wfrp4e-core: 1.2.0wfrp4e-rnhd: 1.3.0wfrp4e-starter-set: 1.3.0

This isn't really related to the system. See the troubleshooting channel in Foundry's Discord to maybe get help with this.


[cursor-info] Add a way to opt out of automatic request cancellation

The OncePerASTToken machinery lets us automatically cancel "stale"
requests after a new one comes in.  This avoid wasting time processing
requests that have been superceded, which is common for cursor-info, but
sometimes you really want to get results even later, so this commit adds
a way to opt out of the cancellation.
Incidentally, disable cancellation of name translation, which doesn't
really make sense and no one should be relying on that.
rdar://problem/31905379

@swift-ci please smoke test

LGTM


Updating readme file to use the latest version

Updating readme file to use the latest version, changing from 3.8.5 to 3.10.0

thanks @pbalduino


How to deploy a cluster version based on the source code installation

After successful compilation through the source code, how can I configure, I can deploy a cluster version

you can insert the cluster CN (port ip etc) into the table server_info which is in MetaDB. For example,
insert into server_info(inst_id, inst_type, ip, port, htap_port, mgr_port, mpp_port, status, region_id, azone_id, idc_id, cpu_core, mem_size) values ('polardbx-polardbx', 0, 'your ip', 7527, 7527, 7627, 7090, 1, '0', '0', '0', 1, 1);
insert into server_info(inst_id, inst_type, ip, port, htap_port, mgr_port, mpp_port, status, region_id, azone_id, idc_id, cpu_core, mem_size) values ('polardbx-polardbx', 0, 'your ip', 8527, 8527, 8627, 8090, 1, '0', '0', '0', 1, 1);

Could I us product SN instead


Corrupted result when joining tables contain list data types

I am trying to use Cylon to join 2 Arrow tables in a local context. Each Arrow table has some columns/fields of list data type. The join results in an ok status, but upon inspecting the result joined table, turns out the list type fields are getting corrupted while the fixed width fields are fine. You can find my code here. I am joining the files table_1.parquet and table_2.parquet. Here is the schema of table_1 and table_2.

@JayjeetAtGithub thanks for reaching out. Can you also attach the schema files here?

I've opened PR with a possible fix #616.
But there are some limitations AFAIU.

Distributed join is not supported for list types (cylon communication ops, ex: shuffle, gather, doesnt support list types ATM)
Using list types as keys (even for local join), is not supported (we need to add list type hashers, and comparators, to make this work)

here are the schema files
https://github.com/JayjeetAtGithub/nanoevents-joins/blob/master/table1_schema
https://github.com/JayjeetAtGithub/nanoevents-joins/blob/master/table2_schema

I've opened PR with a possible fix https://github.com/cylondata/cylon/pull/616.

Hi @nirandaperera , thanks a lot for the fix. The fix works great. For now I am interested in local joins only and my keys are fixed-width fields, so the fix should be good.

@JayjeetAtGithub great to hear that. Let me add a test case to this and then merge the fix


Scope keyword is not working

Either that the scope keyword is not working, or it's my brain that's not working.
I wanted to make the and logical operator to be prettified and not inside a string when I'm working in Python, so I put a "scope": "keyword.operator.logical.pretty" inside the substitutions key, I.E:
{   "ugly": "and",   "scope": "keyword.operator.logical.python",   "pretty": "∧",   "pre": "\\s|^",   "post": "\\s|$",   "style": {"color": "#F92672"} }
but, after putting the scope there, not only did the and logical operator doesn't get prettified, literally everything stops getting prettified.

Scope is not working for me too: "scope": "meta.math.block.latex"

I find that vscode Extension Host have an error when we use scope in config file, [error] TypeError: this._options.loadGrammar is not a function. I searched in this repo, find our these lines are commented out Registry function
// namespace N {
//   /**
//    * The registry that will hold all grammars.
//    */
//   export declare class Registry {
//     private readonly _locator;
//     private readonly _syncRegistry;
//     constructor(locator?: IGrammarLocator);
//     /**
//      * Load the grammar for `scopeName` and all referenced included grammars asynchronously.
//      */
//     loadGrammar(initialScopeName: string, callback: (err: any, grammar: IGrammar) => void): void;
//     /**
//      * Load the grammar at `path` synchronously.
//      */
//     loadGrammarFromPathSync(path: string): IGrammar;
//     /**
//      * Get the grammar for `scopeName`. The grammar must first be created via `loadGrammar` or `loadGrammarFromPathSync`.
//      */
//     grammarForScopeName(scopeName: string): IGrammar;
//   }
// }


Bug when adding weight to recipe and adding it to daily

Found a bug when setting the weight for a recipe in the serving weight part. After that food is added and set in grams, the calorie counter resets to the value of that item and disregards all other items from the list.

To reproduce the bug:

Add any random items to the list (from the known or already indexed list).
Create a recipe with a few ingredients.
Set the portion weight for the recipe.
Add the new custom recipe to the list with a weight set in grams.

one, good find!
Two, can you do a GIF instead - my brain for whatever reason is not handling text well

Should be fixed, let me know if it worked for you!


RemoteStoreClient closes the shared connection after each query

    The latest RemoteStoreClient now closes the connection after each query, this causes an issue if an agent is querying from the ontop endpoint repeatedly

Originally posted by @kokfoongcmcl in https://github.com/cambridge-cares/TheWorldAvatar/issues/388#issuecomment-1285512449
Besides the above issue, if the agent querying from blazegraph endpoint with multi-thread, there exists a situation where the conn.close() will affect other queries. An example is java.sql.SQLException: The Statement is closed exception below:
Traceback (most recent call last):
File "~/twa/TheWorldAvatar/JPS_BASE_LIB/python_derivation_agent/pyderivationagent/kg_operations/sparql_client.py", line 74, in performQuery
response = self.kg_client.execute(query)
File "~/anaconda3/envs/twa/lib/python3.8/site-packages/py4j/java_gateway.py", line 1304, in __call__
return_value = get_return_value(
File "~/anaconda3/envs/twa/lib/python3.8/site-packages/py4j/protocol.py", line 326, in get_return_value
raise Py4JJavaError(
py4j.protocol.Py4JJavaError: An error occurred while calling o9.execute.
: uk.ac.cam.cares.jps.base.exception.JPSRuntimeException: The Statement is closed
at uk.ac.cam.cares.jps.base.query.RemoteStoreClient.executeQuery(RemoteStoreClient.java:476)
at uk.ac.cam.cares.jps.base.query.RemoteStoreClient.execute(RemoteStoreClient.java:434)
at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
at py4j.Gateway.invoke(Gateway.java:282)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
at py4j.commands.CallCommand.execute(CallCommand.java:79)
at py4j.GatewayConnection.run(GatewayConnection.java:238)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.sql.SQLException: The Statement is closed
at org.apache.jena.jdbc.statements.JenaStatement.executeQuery(JenaStatement.java:556)
at uk.ac.cam.cares.jps.base.query.RemoteStoreClient.executeQuery(RemoteStoreClient.java:470)
... 11 more

The line where JenaStatement ran into exception:
https://github.com/apache/jena/blob/91c399148f4f94c19517a88eb8c85db83fdb1342/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/statements/JenaStatement.java#L556
The function that is actually called when calling conn.close() in RemoteStoreClient, which iterates over all existing statements and closes them:
https://github.com/apache/jena/blob/91c399148f4f94c19517a88eb8c85db83fdb1342/jena-jdbc/jena-jdbc-core/src/main/java/org/apache/jena/jdbc/connections/JenaConnection.java#L455

The conn.close() in RemoteStoreClient:
https://github.com/cambridge-cares/TheWorldAvatar/blob/fdc3ad9d21f86e06575ca1595e3c4cc649ebe58e/JPS_BASE_LIB/src/main/java/uk/ac/cam/cares/jps/base/query/RemoteStoreClient.java#L480

Closing the connection is a good thing, just that it can be handled better


To confirm the licence when installing the msi package

We have installed the latest release of Redis(Redis-x64-2.8.2400.msi), we need to understand the licencing for this.
When I install the msi package there is no file named: licence.txt generated in C:/Program files/Redis which is why I am a bit confused.
Is https://github.com/MSOpenTech/redis/blob/2.8/license.txt the licence for this msi package? If yes, the very first line is 'Copyright (c) 2006-2015, Salvatore Sanfilippo', will this be valid as it is already mid-2016?

Hi @SS1102
the last release of the 2.8 branch made by Salvatore Sanfilippo was in 2015, therefore it still stands. On the Windows side we don't change the Salvatore Sanfilippo license even if our lates 2.8.2400 release was made in 2016.
If you are looking for the license shown during the MSI setup, here it is:
Copyright © 2006-2015, Salvatore Sanfilippo
Modifications Copyright © Microsoft Open Technologies, Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of Redis nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

Hopefully that answer your question.


runserver_plus with --cert causes Connection reset by peer on all ports

I'm trying the latest django-extensions runserver_plus command, specifying --cert $HOME/django.crt in a Vagrant environment and doing curl http://localhost:8000 yields the following:
* Rebuilt URL to: http://localhost:8000/
* Hostname was NOT found in DNS cache
*   Trying ::1...
* connect to ::1 port 8000 failed: Connection refused
*   Trying <IP_ADDRESS>...
* Connected to localhost (<IP_ADDRESS>) port 8000 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.38.0
> Host: localhost:8000
> Accept: */*
>
* Recv failure: Connection reset by peer
* Closing connection 0
curl: (56) Recv failure: Connection reset by peer

This no longer happens for me. Maybe it was an issue on my end.

Thanks for getting back and closing the issue !


Work sample data

Originally created by Tom Smyth at 2018-01-20 16:59, migrated from redmine-#7869

Priority changed from 4 to 3

By Tom Smyth at 2018-04-01 21:10


Create function for computing general terms

Hey @turnip314, sorry it took me so long to check out the changes you have made (and also, sorry for not getting further yet). Very cool stuff, good work! 🚀
I've pushed a bunch of additional commits that improve the changes from your branch a bit; nothing serious, mainly concerning testing. If you'd like to cross-review my changes, I recommend just checking them commit-wise; I've tried to keep logically related changes together.
The only thing that might be worth discussing is the name for the function computing coefficients in general expansions; currently GeneralTermAsymptotics -- I feel like we could probably rename this to something that is a bit closer to what the function does. Definitely stuff for a follow-up PR though; just wanted to document my thought somewhere.
Given that the tests pass, I'll just merge this for now and continue working on your next set of changes.


[Synapse] - Many models now have public setters

All SDK Contribution checklist:
This checklist is used to make sure that common guidelines for a pull request are followed.

[ ] Please open PR in Draft mode if it is:

Work in progress or not intended to be merged.
Encountering multiple pipeline failures and working on fixes.

[ ] If an SDK is being regenerated based on a new swagger spec, a link to the pull request containing these swagger spec changes has been included above.
[ ] I have read the contribution guidelines.
[ ] The pull request does not introduce breaking changes.

General Guidelines and Best Practices

[ ] Title of the pull request is clear and informative.
[ ] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, see this page.

Testing Guidelines

[ ] Pull request includes test coverage for the included changes.

SDK Generation Guidelines

[ ] The generate.cmd file for the SDK has been updated with the version of AutoRest, as well as the commitid of your swagger spec or link to the swagger spec, used to generate the code. (Track 2 only)
[ ] The *.csproj and AssemblyInfo.cs files have been updated with the new version of the SDK. Please double check nuget.org current release version.

Additional management plane SDK specific contribution checklist:
Note: Only applies to Microsoft.Azure.Management.[RP] or Azure.ResourceManager.[RP]

[ ] Include updated management metadata.
[ ] Update AzureRP.props to add/remove version info to maintain up to date API versions.

Management plane SDK Troubleshooting

If this is very first SDK for a services and you are adding new service folders directly under /SDK, please add new service label and/or contact assigned reviewer.
If the check fails at the Verify Code Generation step, please ensure:

Do not modify any code in generated folders.
Do not selectively include/remove generated files in the PR.
Do use generate.ps1/cmd to generate this PR instead of calling autorest directly.
Please pay attention to the @microsoft.csharp version output after running generate.ps1. If it is lower than current released version (2.3.82), please run it again as it should pull down the latest version,

Old outstanding PR cleanup
Please note:
If PRs (including draft) has been out for more than 60 days and there are no responses from our query or followups, they will be closed to maintain a concise list for our reviewers.

Why are we doing this?

Hey @idear1203 - I wonder if you are fighting the generator in needed to make the models public (previously) and get/set (here).
We might need to modify the autorest.csharp to better support this.
Some details on why we need this would be useful.

@chamons we received feedback from SDK users, compared with the ADF SDK that they use before, there are some properties now don't have public setters. I believe this is also because these classes are generated to be internal. So for now I want to use customizations to solve the issue.


Replace smartobject content not working

Expected Behaviour
Replace content in smartobject after that i can see the resault on image uploaded to s3 presign url
Actual Behaviour
Cant see the result on presign url
Reproduce Scenario (including but not limited to)
Steps to Reproduce
step1:
request replace content:
curl --location --request POST 'https://image.adobe.io/pie/psdService/smartObject' \ --header 'Authorization: Bearer <REDACTED>' \ --header 'x-api-key: <REDACTED>' \ --header 'Content-Type: application/json' \ --data-raw '{     "inputs": [         {             "href": "https://assets.boostflow.com/phub/16000522145f5edbf62342e.psd",             "storage": "external"         }     ],     "options": {         "layers": [             {                 "name": "print",                 "input": {                     "href"<EMAIL_ADDRESS>                    "storage": "external"                 }             }         ]     },     "outputs": [         {             "storage": "external",             "href": "https://s3.amazonaws.com/assets-dev.boostflow.com/phub/adobe/1615225486437418dbe9.psd?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAUAOPEXUFUULWPPYA%2F20210308%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210308T174446Z&X-Amz-Expires=2160000&X-Amz-SignedHeaders=content-encoding%3Bcontent-type%3Bhost%3Bx-amz-acl&X-Amz-Signature=bf22590591feb5632a596b6e4243c5b3ce016a148012a05372e2a465ce6eda90",             "type": "vnd.adobe.photoshop"         }     ] }'
step2:
check status:
https://image.adobe.io/pie/psdService/status/9fcd6642-50e1-4eaf-aa32-6871eb5cbcc1
step3:
check result:
{     "jobId": "9fcd6642-50e1-4eaf-aa32-6871eb5cbcc1",     "outputs": [         {             "input": "https://assets.boostflow.com/phub/16000522145f5edbf62342e.psd",             "status": "succeeded",             "created": "2021-03-08T17:45:01.888Z",             "modified": "2021-03-08T17:45:04.098Z",             "_links": {                 "renditions": [                     {                         "href": "https://s3.amazonaws.com/assets-dev.boostflow.com/phub/adobe/1615225486437418dbe9.psd?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAUAOPEXUFUULWPPYA%2F20210308%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210308T174446Z&X-Amz-Expires=2160000&X-Amz-SignedHeaders=content-encoding%3Bcontent-type%3Bhost%3Bx-amz-acl&X-Amz-Signature=bf22590591feb5632a596b6e4243c5b3ce016a148012a05372e2a465ce6eda90",                         "storage": "external",                         "type": "vnd.adobe.photoshop"                     }                 ]             }         }     ],     "_links": {         "self": {             "href": "https://image.adobe.io/pie/psdService/status/9fcd6642-50e1-4eaf-aa32-6871eb5cbcc1"         }     } }
step 4:
access to presign url:
https://s3.amazonaws.com/assets-dev.boostflow.com/phub/adobe/1615225486437418dbe9.psd?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAUAOPEXUFUULWPPYA%2F20210308%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210308T174446Z&X-Amz-Expires=2160000&X-Amz-SignedHeaders=content-encoding%3Bcontent-type%3Bhost%3Bx-amz-acl&X-Amz-Signature=bf22590591feb5632a596b6e4243c5b3ce016a148012a05372e2a465ce6eda90
but nothing uploaded to this url.
Platform and Version

photoshop api - beta
presign acl: bucket-owner-full-control or public-read-write
presign expire: 600h

Sample Code that illustrates the problem
Logs taken while reproducing problem

hi @johnleetran  I checked AWS bucket but the file not existed. I use test my presign url to put image from client, it work fine.

are you still having issues or was this intermittent?  for reference, below is nodejs code to generate presigned url from aws that i know works
Presigned Get URL
var AWS = require('aws-sdk')
var bucket = '<MY_BUCKET_NAME>'
var object_key = '<PATH/TO/SOME/IMAGE.psd>'
var operation =  'getObject'
var region = '<AWS_REGION>'
AWS.config.update({"region": region});
let params = {Bucket: bucket, Key: object_key, Expires: 3600 * 24};
let s3 = new AWS.S3({apiVersion: '2006-03-01', signatureVersion: 'v4'});
s3.getSignedUrl(operation, params, function (err, url) {
	if(err){
		console.log(err)
	}else{
		console.log(url)
	}
});

Presigned PUT url
var AWS = require('aws-sdk')
var bucket = '<MY_BUCKET_NAME>'
var object_key = '<PATH/WHERE/YOU/WANT/OUTPUT.psd>'
var operation =  'putObject'
var region = '<AWS_REGION>'
AWS.config.update({"region": region});
let params = {Bucket: bucket, Key: object_key, Expires: 3600 * 24};
let s3 = new AWS.S3({apiVersion: '2006-03-01', signatureVersion: 'v4'});
s3.getSignedUrl(operation, params, function (err, url) {
	if(err){
		console.log(err)
	}else{
		console.log(url)
	}
});

Hi @johnleetran
I'm trying to use dropbox temporary_upload_link. But when i check the job it return "Unable to upload the outputs".
Detail:
job link: https://image.adobe.io/pie/psdService/status/764e3b79-592b-4683-8d7f-d94013e99d00
response:
    "jobId": "764e3b79-592b-4683-8d7f-d94013e99d00",
    "outputs": [
        {
            "input": "https://assets.boostflow.com/phub/1629190897611b7af1052db.psd",
            "status": "failed",
            "created": "2021-08-24T16:03:38.322Z",
            "modified": "2021-08-24T16:03:43.431Z",
            "errors": {
                "code": 400,
                "details": [
                    {
                        "name": "https://content.dropboxapi.com/apitul/1/pD5S5a6lm4vZfQ",
                        "reason": "Unable to upload the outputs"
                    }
                ],
                "title": "Bad Request",
                "type": "InputValidationError"
            }
        }
    ],
    "_links": {
        "self": {
            "href": "https://image.adobe.io/pie/psdService/status/764e3b79-592b-4683-8d7f-d94013e99d00"
        }
    }
}

url from dropbox to upload output:

can you help me check what is wrong for my request? thank you


Task2

please add comments here and I do the changes

Please remove public folder.

I think the .ignore should not be sending the public folder each time we commit right?


Fix codecov reporting

That badge in main leads to the following page:
https://app.codecov.io/gh/lazyledger/rsmt2d
Which lists the following as recent:

Also, no comments are posted from codecov to inform PR authors about coverage changes.

It actually doesn't look like the action is running, too:

Fixed finally with #38


Fix panic for faultInjection at high concurrency

Pull Request Test Coverage Report for Build 1464

0 of 0   changed or added relevant lines in 0 files are covered.
19 unchanged lines in 6 files lost coverage.
Overall coverage decreased (-0.2%) to 63.669%

Files with Coverage Reduction
New Missed Lines
%

core/lager/lager.go
1
76.71%

core/server/options.go
2
50.0%

core/handler/transport_handler.go
3
23.17%

core/registry/registrator.go
3
60.66%

core/router/cse/translate.go
5
33.8%

client/rest/rest_client.go
5
74.47%

Totals

Change from base Build 1463:
-0.2%

Covered Lines:
4935

Relevant Lines:
7751

💛  - Coveralls


[Staging] Updating stable for the 0.7 release

This is a staging pull request for updating the stable branch to correspond to the 0.7 release. This will be submitted when the 0.7 release is ready.

Closing due to a migration away from using the stable branch as our reference point.


packr: init at 2.1.0

Motivation for this change
New package, and a build dependency for the current version of the Circle CI command line package circleci-cli.
This requires some changes to buildGoModule, but I don't think what I have here is a very nice expression of that (help wanted).
I also could not make go mod download actually download all required modules.
Things done

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

[x] NixOS
[x] 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 nix-review --run "nix-review wip"
[x] 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.

packr was added by #63886


Bagel Update 8 (the one with circuit imprinters)

Changelog
-added circuit imprinters to science and engineering
-added zebra scarf to mime room
-added a 2nd pinpointer to the map in the vault
-added other HoS parade uniform so now there's pants and skirt version
-added a few more sources of gold to the map but most of it is still in the vault
-added several maint loot spawners to the map (thanks peptide)
-added a public bathroom across from youtool room so the map could have a mirror
-added sinks to bar so bartenders can give people nice refreshing glasses of woter
-skub

Engineering shouldn't start with a circuit imprinter, it kind of defeats the whole purpose of the change.

closing so i can reuppload with no circuit imprinter in engineering, also adding emergency lights


[docs] Update docs to clone Venice repo using ssh and add instructions on how to disable wildcard imports

Summary, imperative, start upper case, don't end with a period

I'm changing the instructions to clone the Venice repo using ssh instead of https, as https can cause authentication issues when trying to perform a hotfix.
I'm also adding instructions on how to disable wildcard imports as this is not a code style the team follows.
How was this PR tested?

N/A
Does this PR introduce any user-facing changes?

[X] No. You can skip the rest of this section.
[ ] Yes. Make sure to explain your proposed changes and call out the behavior change.


An error ocurred while starting the kernel

An error ocurred while starting the kernel
Traceback (most recent call last):
File "C:\Anaconda\lib\runpy.py", line 193, in run_module_as_main
"main", mod_spec)
File "C:\Anaconda\lib\runpy.py", line 85, in run_code
exec(code, run_globals)
File "C:\Anaconda\lib\site‑packages\spyder_kernels\console_main.py", line 11, in
start.main()
File "C:\Anaconda\lib\site‑packages\spyder_kernels\console\start.py", line 287, in main
import_spydercustomize()
File "C:\Anaconda\lib\site‑packages\spyder_kernels\console\start.py", line 39, in import_spydercustomize
import spydercustomize
File "C:\Anaconda\lib\site‑packages\spyder_kernels\customize\spydercustomize.py", line 27, in
from IPython.core.getipython import get_ipython
File "C:\Anaconda\lib\site‑packages\IPython_init.py", line 54, in
from .core.application import Application
File "C:\Anaconda\lib\site‑packages\IPython\core\application.py", line 23, in
from traitlets.config.application import Application, catch_config_error
File "C:\Anaconda\lib\site‑packages\traitlets\config_init_.py", line 6, in
from .application import *
File "C:\Anaconda\lib\site‑packages\traitlets\config\application.py", line 19, in
from traitlets.config.configurable import Configurable, SingletonConfigurable
File "C:\Anaconda\lib\site‑packages\traitlets\config\configurable.py", line 12, in
from .loader import Config, LazyConfigValue, _is_section_key
File "C:\Anaconda\lib\site‑packages\traitlets\config\loader.py", line 16, in
from ipython_genutils.path import filefind
File "C:\Anaconda\lib\site‑packages\ipython_genutils\path.py", line 13, in
import random
File "C:\Users\user\random.py", line 98
print ('Max)
^
SyntaxError: EOL while scanning string literal

@Prateekag02 The file "C:\Users\user\random.py" (mentioned at the bottom of your error message) has the same name as the standard Python library random. If you give that file another name, the error should go away.

Thank you soo much
It worked


Normative: rename to Iterator.range

API Before (in TypeScript):
var Number: {
    range(start: number, end: number, stepOrOptions: number | NumericRangeOptions<number>): IterableIterator<bigint>
}
var BigInt: {
    range(start: bigint, end: bigint | Infinity, stepOrOptions: bigint | NumericRangeOptions<bigint>): IterableIterator<bigint>
}

API now:
var Iterator: {
    range(start: number, end: number, stepOrOptions: number | NumericRangeOptions<number>): IterableIterator<number>
    range(start: bigint, end: bigint | Infinity, stepOrOptions: bigint | NumericRangeOptions<bigint>): IterableIterator<bigint>
}

Codecov Report

Merging #59 (b1932a4) into main (aa6d7d6) will increase coverage by 0.60%.
The diff coverage is 100.00%.

@@             Coverage Diff             @@
##             main       #59      +/-   ##
===========================================
+ Coverage   99.39%   100.00%   +0.60%
===========================================
  Files           1         1
  Lines         165       145      -20
  Branches       57        55       -2
===========================================
- Hits          164       145      -19
+ Misses          1         0       -1

Impacted Files
Coverage Δ

polyfill.js
100.00% <100.00%> (+0.60%)
:arrow_up:

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

Iterator.range(new Date('Jan 1 2020'), new Date(), { step: '1 day' })

H̶̢͈̺̲͗͒̈́̈̿͆̋̋͘͝͝ơ̵͓̼̈́̏͑͊̈́͋̈́͒̕͘ļ̶̯̫̭̣̞̙̖̝͎͋̓̄͂͛̐͐̕ŷ̷̨̡̰̘̝͍̻̬͖̰̫͉̣̻̔̀͊͌̃̔̎͛́͛́̑͜͠ ̶̲̫͎̮̍̀́̔s̷̨̨̨̞̘̪̫͇͙͈̫͇̟̣̲̊́̀ͅͅh̸̡̧͕̱͖͙͎̮̐͆̌́̀͌̽̆͛͛̑͛̅̔̕͝į̴̫͈͉̩̺̹̤̹͚̖͇̰̊̊͋͌͑̃̈́̿͆͘̕͝t̸̨̨̛͇̘̠̞̼̏̈́̏̆̀̑̒̔̔͋̽͋̅̀.̴̢̤̖̀̐͂͂̊̂͆͒̇̆͐.̸̼̼̼͍̜͙̗͗̂̓̃̌̍͒̅͛͛̃͐̕̕̕͜͠.̷̡̢͚͙͇̬̳̦̫̫̓́̀̎͜ͅͅ

It's OK to join number and bigint versions of this method but consider adding overloads for extra not similar types...

just leave the possibility. not going to do it in the current proposal

I'll merge this first, but this is not the final conclusion of renaming.
I'll ask the committee if they like the rename in the next presentation.


add zabbix & avalonia ui icons

Add New Icon(s)
Icon Details

Icon ID
Icon

zabbix

avaloniaui

Notes

Closes #269, Closes #271

Checklist

[x] Added icon(s) to the appropriate directory
[x] Updated documentation with the new icon(s)
[x] Verified the icon(s) display correctly
[x] If the icon has light and dark, verified the auto switch works correctly
[x] The Svg does not contain any sort of strokes

LGTM !
@vlpontes and @Dynesshely what do you think about it ?

I'm not familiar with zabbix, but for avalonia, I think it's good


Vertical ports or drawing connections from node edges

Really like the library!
It would be nice to have an option for inputs/outputs to be on the top/bottom of nodes instead as it appears the logic for drawing connections is hard coded with the assumption that ports are on the sides.
For example:

Similarly, removing a reliance on port elements entirely and instead being able to just draw connections from any of a nodes edges would be nice, though maybe that's too much an impractical change.
For example:

Hello! @Ataraxy
Thanks! 😉
Vertical it's possible  only modify the CSS.

Only add the css:
  .drawflow .drawflow-node {
    display: block;
  }

  .drawflow .drawflow-node .inputs, .drawflow .drawflow-node .outputs {
    display: flex;
    width: auto;
    display: flex;
    justify-content: center;
    align-items: center;
  }

  .drawflow .drawflow-node .input {
    top: -10px;
    left: 0px;
  }

  .drawflow .drawflow-node .output {
    top: 10px;
    right: 0px;
  }

The curvature of the connection vertically is not very good.
But maybe add a function to modify the curve. Commented on #12
Maybe everything could be done automatically.
editor.node_style = 'Horitzontal' Or 'Vertical';

The second example is more complicated.
I understand that all nodes would only have one input and one output.
Maybe the connection could be made "CTRL + Click".

I suppose the second example could mostly be achieved with CSS as well to a degree. As you pointed out it really comes down to a node technically having only one input and one output so instead of a circle one could just make the port a few pixels along the width (or height) of the edge that the outgoing connection is dragged from.
To do what the example does though would mean that an output or input could come from any side of a node which means it would require a "port container" on each side of it that could act as either port type and the output would merely be determined by whichever node the connection started from. So yeah it might be a bit of an impractica change / option.
As for the curves using something like https://github.com/anseki/leader-line to handle drawing connections would offer a lot of flexibility and customization for them but I could also understand not wanting an additional dependency.

Right now I was trying a method to overwrite the curve.

This example:
    editor.curvature = 0;
    editor.reroute_curvature_start_end = 0;
    editor.reroute_curvature = 0;

    editor.createCurvature = function(start_pos_x, start_pos_y, end_pos_x, end_pos_y, curvature_value) {
      var center_x = ((end_pos_x - start_pos_x)/2)+start_pos_x;
      return ' M ' + start_pos_x + ' ' + start_pos_y + ' L '+ center_x +' ' +  start_pos_y  + ' L ' + center_x + ' ' +  end_pos_y  + ' L ' + end_pos_x + ' ' + end_pos_y;
    }

Hello, it will be great to implement an arrow for the lines to indicate the flow direction. Thank you

Hello @jaspermyrp
For the arrow.
You can override the function createCurvature and add arrow.
For example:

Code:
editor.createCurvature = function(start_pos_x, start_pos_y, end_pos_x, end_pos_y, curvature_value, type) {
      var line_x = start_pos_x;
      var line_y = start_pos_y;
      var x = end_pos_x;
      var y = end_pos_y;
      var curvature = curvature_value;
      //type openclose open close other
      switch (type) {
        case 'open':
          if(start_pos_x >= end_pos_x) {
            var hx1 = line_x + Math.abs(x - line_x) * curvature;
            var hx2 = x - Math.abs(x - line_x) * (curvature*-1);
          } else {
            var hx1 = line_x + Math.abs(x - line_x) * curvature;
            var hx2 = x - Math.abs(x - line_x) * curvature;
          }
          return ' M '+ line_x +' '+ line_y +' C '+ hx1 +' '+ line_y +' '+ hx2 +' ' + y +' ' + x +'  ' + y;

          break
        case 'close':
          if(start_pos_x >= end_pos_x) {
            var hx1 = line_x + Math.abs(x - line_x) * (curvature*-1);
            var hx2 = x - Math.abs(x - line_x) * curvature;
          } else {
            var hx1 = line_x + Math.abs(x - line_x) * curvature;
            var hx2 = x - Math.abs(x - line_x) * curvature;
          }                                                                                //M0 75H10L5 80L0 75Z

          return ' M '+ line_x +' '+ line_y +' C '+ hx1 +' '+ line_y +' '+ hx2 +' ' + y +' ' + x +'  ' + y +' M '+ (x-11)  + ' ' + y + ' L'+(x-20)+' '+ (y-5)+'  L'+(x-20)+' '+ (y+5)+'Z';
          break;
        case 'other':
          if(start_pos_x >= end_pos_x) {
            var hx1 = line_x + Math.abs(x - line_x) * (curvature*-1);
            var hx2 = x - Math.abs(x - line_x) * (curvature*-1);
          } else {
            var hx1 = line_x + Math.abs(x - line_x) * curvature;
            var hx2 = x - Math.abs(x - line_x) * curvature;
          }
          return ' M '+ line_x +' '+ line_y +' C '+ hx1 +' '+ line_y +' '+ hx2 +' ' + y +' ' + x +'  ' + y;
          break;
        default:

          var hx1 = line_x + Math.abs(x - line_x) * curvature;
          var hx2 = x - Math.abs(x - line_x) * curvature;

          //return ' M '+ line_x +' '+ line_y +' C '+ hx1 +' '+ line_y +' '+ hx2 +' ' + y +' ' + x +'  ' + y;
          return ' M '+ line_x +' '+ line_y +' C '+ hx1 +' '+ line_y +' '+ hx2 +' ' + y +' ' + x +'  ' + y +' M '+ (x-11)  + ' ' + y + ' L'+(x-20)+' '+ (y-5)+'  L'+(x-20)+' '+ (y+5)+'Z';
      }

    }

Only added at function default:
 M '+ (x-11)  + ' ' + y + ' L'+(x-20)+' '+ (y-5)+'  L'+(x-20)+' '+ (y+5)+'Z';

Heya!
So I was wondering if you had any ideas on how I could do this. I would like to use labels as ports and draw connections from the center of  each of them (if horizontal).
For example:

Instead of:

I think my ideal scenario would be that I could define input/output elements within the html of a custom node or maybe a container for where they should be. This way we would probably have the most flexibility to do whatever we like.
Another possible (simpler) solution is being able to pass in labels for inputs/outputs during editor.addNode() which are added to the markup wrappers being used to create the inputs/outputs. Then we could just style the elements with CSS.

Hi @jerosoler ,
I tried to make vertical along with arrow at the end. First I used custom CSS for each node to take endpoint to top/bottom of node. Then I realize the line is calculate to center of node instead of direct to the endpoint, because I make an arrow and see it's disappeared.
.drawflow .parent-node .glue-etl .outputs {
  position: absolute;
  bottom: -10px;
  padding-left: 50%;
}
.drawflow .parent-node .s3-raw .inputs {
  position: absolute;
  top: -10px;
  padding-left: 50%;
}

I was able to put the endpoint to top/bottom of the nodes using custom CSS above, but the arrow is not appear because the line is draw under the node (as I draw 2 ugly red lines). How can I make a custom code or css without modify your base drawflow.js and drawflow.css file?

Hello @Ataraxy
Are you looking for this? #18
What comments to do something like this:
editor.addNode ('github', 0, 3, 150, 300, 'github', data, html);

For:
editor.addNode ('github', 0, ['Yes', 'No', 'Other'], 150, 300, 'github', data, html);

If it's about connections use # 18

Hi! @mrsherlock88
Add css for view connection end:
.drawflow svg {
    z-index: 3;
}

With the code:
  .drawflow .drawflow-node {
    display: block;
  }

  .drawflow .drawflow-node .inputs, .drawflow .drawflow-node .outputs {
    display: flex;
    width: auto;
    display: flex;
    justify-content: center;
    align-items: center;
  }

  .drawflow .drawflow-node .input {
    top: -10px;
    left: 0px;
  }

  .drawflow .drawflow-node .output {
    top: 10px;
    right: 0px;
  }

The arrow example code is only for horitzontal method.

Hi @jerosoler ,
I've tried the CSS before but maybe it conflict with my current CSS so I use my own custom CSS, also I want to explicit top/bottom endpoint for particular node, not for all.

Also, I upload my image when use you css and the real line. Note that the line comes from Glue ETL to S3 Raw.

@mrsherlock88
I will modify so that it goes to find the exact point and not the parent element.
This will make it easier to modify the positions points.

Hi, I wasn't referring to a label on the connection itself, but rather instead of a circular output or input, to instead use a label or text as the point of origin for the connection.
I've sorta got it working this way from a little CSS where each input and output is just a 5px high element that spans across the node like this:

The problem is that the labels in this case are within the node which means the point of origin for the connection is offset. (since it is always at the center of whatever the port element is). That's why I was wondering if instead there was approach to adding a label to use within the "port" instead.
I will keep messing around with it.

Hello @jaspermyrp
For the arrow.
You can override the function createCurvature and add arrow.
For example:

Code:
editor.createCurvature = function(start_pos_x, start_pos_y, end_pos_x, end_pos_y, curvature_value, type) {
      var line_x = start_pos_x;
      var line_y = start_pos_y;
      var x = end_pos_x;
      var y = end_pos_y;
      var curvature = curvature_value;
      //type openclose open close other
      switch (type) {
        case 'open':
          if(start_pos_x >= end_pos_x) {
            var hx1 = line_x + Math.abs(x - line_x) * curvature;
            var hx2 = x - Math.abs(x - line_x) * (curvature*-1);
          } else {
            var hx1 = line_x + Math.abs(x - line_x) * curvature;
            var hx2 = x - Math.abs(x - line_x) * curvature;
          }
          return ' M '+ line_x +' '+ line_y +' C '+ hx1 +' '+ line_y +' '+ hx2 +' ' + y +' ' + x +'  ' + y;

          break
        case 'close':
          if(start_pos_x >= end_pos_x) {
            var hx1 = line_x + Math.abs(x - line_x) * (curvature*-1);
            var hx2 = x - Math.abs(x - line_x) * curvature;
          } else {
            var hx1 = line_x + Math.abs(x - line_x) * curvature;
            var hx2 = x - Math.abs(x - line_x) * curvature;
          }                                                                                //M0 75H10L5 80L0 75Z

          return ' M '+ line_x +' '+ line_y +' C '+ hx1 +' '+ line_y +' '+ hx2 +' ' + y +' ' + x +'  ' + y +' M '+ (x-11)  + ' ' + y + ' L'+(x-20)+' '+ (y-5)+'  L'+(x-20)+' '+ (y+5)+'Z';
          break;
        case 'other':
          if(start_pos_x >= end_pos_x) {
            var hx1 = line_x + Math.abs(x - line_x) * (curvature*-1);
            var hx2 = x - Math.abs(x - line_x) * (curvature*-1);
          } else {
            var hx1 = line_x + Math.abs(x - line_x) * curvature;
            var hx2 = x - Math.abs(x - line_x) * curvature;
          }
          return ' M '+ line_x +' '+ line_y +' C '+ hx1 +' '+ line_y +' '+ hx2 +' ' + y +' ' + x +'  ' + y;
          break;
        default:

          var hx1 = line_x + Math.abs(x - line_x) * curvature;
          var hx2 = x - Math.abs(x - line_x) * curvature;

          //return ' M '+ line_x +' '+ line_y +' C '+ hx1 +' '+ line_y +' '+ hx2 +' ' + y +' ' + x +'  ' + y;
          return ' M '+ line_x +' '+ line_y +' C '+ hx1 +' '+ line_y +' '+ hx2 +' ' + y +' ' + x +'  ' + y +' M '+ (x-11)  + ' ' + y + ' L'+(x-20)+' '+ (y-5)+'  L'+(x-20)+' '+ (y+5)+'Z';
      }

    }

Only added at function default:
 M '+ (x-11)  + ' ' + y + ' L'+(x-20)+' '+ (y-5)+'  L'+(x-20)+' '+ (y+5)+'Z';

Thank you!

Hello @mrsherlock88
New update version 0.0.22 with fix search position points.
For example:
editor.addNode('github', 1, 3, 100, 50, 'romb', data, "<b>Hey</b>");

  .drawflow .parent-node .romb {
    transform: rotate(45deg);
    width: 50px;
    height: 50px;
  }
  .drawflow .parent-node .romb .drawflow_content_node {
    transform: rotate(-45deg);
  }
  .drawflow .parent-node .romb .input_1 {
    transform: rotate(-45deg);
    position: relative;
    top: 40px;
    right: 25px;
  }

  .drawflow .parent-node .romb .output_1 {
    transform: rotate(-45deg);
    position: relative;
    top: -5px;
    right: 75px;
  }

  .drawflow .parent-node .romb .output_2 {
    transform: rotate(-45deg);
    position: relative;
    top: -35px;
    right: 0px;
  }

  .drawflow .parent-node .romb .output_3 {
    transform: rotate(-45deg);
    position: relative;
    top: 10px;
    right: 0px;
  }

Or points out of node:

I have pending review your PR

@jerosoler nice to hear that, in my PR, I also fix the direction of line or curve points (in openclose line) base on the position of point with node.

If the point is on the top, the direction must be up,
If the point is on bottom, the direction must be down.
....

So when I add arrow in the end of line using marker-end, it should appear normally.

hi @jerosoler the arrow is not filled..and does not look good..how can i fill it with solid color?

also the arrow does not stay with the connector line if i move the node so much up or down...the arrow remains in the same place but the connector line gets moved...so they becomes seperated....

Hello @MehbubRashid
The example is only a lines.
Adding more lines for example:
M '+ (x-11)  + ' ' + y + ' L'+(x-20)+' '+ (y-5)+'  L'+(x-20)+' '+ (y+5)+' Z' +' M '+ (x-11)  + ' ' + y + ' L'+(x-20)+' '+ (y-3)+'  L'+(x-20)+' '+ (y+3)+' Z' +' M '+ (x-11)  + ' ' + y + ' L'+(x-20)+' '+ (y-1)+'  L'+(x-20)+' '+ (y+1)+' Z'

Complete line:
return ' M '+ line_x +' '+ line_y +' C '+ hx1 +' '+ line_y +' '+ hx2 +' ' + y +' ' + x +'  ' + y +' M '+ (x-11)  + ' ' + y + ' L'+(x-20)+' '+ (y-5)+'  L'+(x-20)+' '+ (y+5)+' Z' +' M '+ (x-11)  + ' ' + y + ' L'+(x-20)+' '+ (y-3)+'  L'+(x-20)+' '+ (y+3)+' Z' +' M '+ (x-11)  + ' ' + y + ' L'+(x-20)+' '+ (y-1)+'  L'+(x-20)+' '+ (y+1)+' Z';

For comment: https://github.com/jerosoler/Drawflow/issues/20#issuecomment-685410323
The values of the numbers "11", "20" and "5" would have to be calculated.

@jerosoler it works..but i was taking about this...the arrow does not stay with the line...how to fix this?

hi @jerosoler , instead of overwriting the curvature function, i have overwritten the inputs css and made the round inputs into triangle using css...it works perfectly..
but when there is no connection, the triangle still remains there

so i want a way to remove this...in simple, i want the inputs to be visible only if the input has a connection.otherwise not.it would be great if you would add a class called "connected" to the input class upon creating a connection...when the connection is removed, the class will also get removed..it will help users to style their inputs and outputs more nicely.can you add this?

@jerosoler is there any way that dots behave input and output both simultaneously?
we used your library and it's pretty good but now we need that feature that dot can behave as an input and output both.

Hello @NishargShah
It can not.
But a fix could be made.
Try modifying the addConnection function

@jerosoler Thanks for the really quick answer, can you please tell me how can I achieve it, I don't know really

@NishargShah
I see that you have to touch more things. Many...
Wouldn't it help to put a bullet output on top of an input via css?

@jerosoler Thanks it's a great idea, let me work on it, thanks again...

@jerosoler that's a great idea but if I overlap input into output I can't draw a line or if I overlap output into input I can't attach that line in dot, any suggestion?

@NishargShah use event click for change z-index (input/output).
Qucik example
  editor.on("click", function(event) {
    if(event.target.classList[0] == "output") {
      for (const element of document.querySelectorAll(".inputs")) {
        element.style.zIndex = 3
      }
    } else {
      for (const element of document.querySelectorAll(".inputs")) {
        element.style.zIndex = 2;
      }
      for (const element of document.querySelectorAll(".outputs")) {
        element.style.zIndex = 2;
      }
    }
  });

@jerosoler click listener not working, I checked other listeners and it works fine

@jerosoler yes it's working but it behaves like a toggle thing, not smooth because if I drag a line from the dot after that if I clicked again on that dot it will behave as input because of a z-index, there is any other way?

@jerosoler Thanks for the help, I completed with below code
useEffect(() => {
    document.addEventListener('mouseup', event => {
      if(event.target.classList[0] !== "output") {
        for (const element of document.querySelectorAll(".inputs")) {
          element.style.zIndex = 2;
        }
        for (const element of document.querySelectorAll(".outputs")) {
          element.style.zIndex = 2;
        }
      }
    });

    editor.current.on("connectionCreated", () => {
      for (const element of document.querySelectorAll(".inputs")) {
        element.style.zIndex = 2;
      }
      for (const element of document.querySelectorAll(".outputs")) {
        element.style.zIndex = 2;
      }
    })

    editor.current.on("click", event => {
      if(event.target.classList[0] === "output") {
        for (const element of document.querySelectorAll(".inputs")) {
          element.style.zIndex = 3
        }
      }
    });
  }, []);

I leave here an arrangement so that the lines are better displayed in vertical format. In case someone can help you.
Fix for vertical lines:
    /* Fix vertical lines */
    editor.createCurvature = function(start_pos_x, start_pos_y, end_pos_x, end_pos_y, curvature_value, type) {
        var line_x = start_pos_x;
        var line_y = start_pos_y;
        var x = end_pos_x;
        var y = end_pos_y;
        var curvature = curvature_value;
        //type openclose open close other

        switch (type) {
        case 'open':
            if(start_pos_y >= end_pos_y) {
            var hy1 = line_y + Math.abs(y - line_y) * curvature;
            var hy2 = y - Math.abs(y - line_y) * (curvature*-1);
            } else {
            var hy1 = line_y + Math.abs(y - line_y) * curvature;
            var hy2 = y - Math.abs(y - line_y) * curvature;
            }
            return ' M '+ line_x +' '+ line_y +' C '+ line_x +' '+ hy1 +' '+ x +' ' + hy2 +' ' + x +'  ' + y;

            break
        case 'close':
            if(start_pos_y >= end_pos_y) {
            var hy1 = line_y + Math.abs(y - line_y) * (curvature*-1);
            var hy2 = y - Math.abs(y - line_y) * curvature;
            } else {
            var hy1 = line_y + Math.abs(y - line_y) * curvature;
            var hy2 = y - Math.abs(y - line_y) * curvature;
            }
            return ' M '+ line_x +' '+ line_y +' C '+ line_x +' '+ hy1 +' '+ x +' ' + hy2 +' ' + x +'  ' + y;
            break;
        case 'other':
            if(start_pos_y >= end_pos_y) {
            var hy1 = line_y + Math.abs(y - line_y) * (curvature*-1);
            var hy2 = y - Math.abs(y - line_y) * (curvature*-1);
            } else {
            var hy1 = line_y + Math.abs(y - line_y) * curvature;
            var hy2 = y - Math.abs(y - line_y) * curvature;
            }
            return ' M '+ line_x +' '+ line_y +' C '+ line_x +' '+ hy1 +' '+ x +' ' + hy2 +' ' + x +'  ' + y;
            break;
        default:
            var hy1 = line_y + Math.abs(y - line_y) * curvature;
            var hy2 = y - Math.abs(y - line_y) * curvature;

            return ' M '+ line_x +' '+ line_y +' C '+ line_x +' '+ hy1 +' '+ x +' ' + hy2 +' ' + x +'  ' + y;

        }

    }

    /* End Fix vertical lines */

Did anyone figure out how  (assuming we only have two outputs) to have one output on the right and one on the bottom? I've played around with CSS for the past few hours but I'm not good enough to crack this one. Any suggestions? Is it even possible given a variable node size?

Hello @dearsina
Can you send an image of how you want it?

@jerosoler

Sorry for the asinine quality, I stepped away from my desk for the day, but ya nothing too complex, just a output bit in the middle if possible.

@dearsina
use position relatie in output_2  and similar to input.
.output_2 {
    position: relative;
    top: 110px;
    right: 105px;
}

View similar example: https://github.com/jerosoler/Drawflow/issues/20#issuecomment-679976512

Thanks for the prompt reply. There are unfortunately some issues.

The CSS only works if the height of the node is fixed. Look at the red box in the photo, the output marker is "floating" because the node is not very tall.
The connecting lines are not aligned at all. Not sure why. See the yellow box in the photo.
I've included the CSS I'm using. I don't think it's as straightforward as using top/right unfortunately! I tried for hours to make something work!

Hello @dearsina
View example:

Node with styleClass "test"
Style display block node extrac of https://jerosoler.github.io/drawflow-theme-generator/
.drawflow .drawflow-node {
  display: block;
  background: white;
  color: black;
  border: 1px  solid black;
  border-radius: 4px;
  width: auto;
  padding-top: 10px;
  padding-bottom: 10px;

}

.drawflow .drawflow-node .outputs {
  float: right;
}

.drawflow-node.test .input_1 {
  position: absolute;
  left: -12px;
  top: calc(50% - 12px);
}

.drawflow-node.test .input_2 {
  position: absolute;
  left: 45%;
  top: calc(0% - 10px);
}

.drawflow-node.test .output_1 {
  position: absolute;
  left: calc(100% - 12px);
  top: calc(50% - 12px);
}

.drawflow-node.test .output_2 {
  position: absolute;
  left: 45%;
  top: calc(100% - 10px);
}

@jerosoler I don't know what kind of voodoo CSS magic you just performed, but that works splendidly. Thank you very much! Perhaps it should be incorporated into the library so that others can also use it?

Hello @jerosoler ,
I tried your solution in here
 editor.curvature = 0;
    editor.reroute_curvature_start_end = 0;
    editor.reroute_curvature = 0;

    editor.createCurvature = function(start_pos_x, start_pos_y, end_pos_x, end_pos_y, curvature_value) {
      var center_x = ((end_pos_x - start_pos_x)/2)+start_pos_x;
      return ' M ' + start_pos_x + ' ' + start_pos_y + ' L '+ center_x +' ' +  start_pos_y  + ' L ' + center_x + ' ' +  end_pos_y  + ' L ' + end_pos_x + ' ' + end_pos_y;
    }

It looks very good for my application, however there is one problem
It it quite hard to identify the lines if same output contains multiple line since they will overlapping

Could you give me some advice how to make it looks like having a reroute point below/above the input/output?
So the line will easier for identifying, like this:

Thank you so much for your awesome help!

Thank you @jerosoler It works!!

Hello @jaspermyrp
For the arrow.
You can override the function createCurvature and add arrow.
For example:

Code:
editor.createCurvature = function(start_pos_x, start_pos_y, end_pos_x, end_pos_y, curvature_value, type) {
      var line_x = start_pos_x;
      var line_y = start_pos_y;
      var x = end_pos_x;
      var y = end_pos_y;
      var curvature = curvature_value;
      //type openclose open close other
      switch (type) {
        case 'open':
          if(start_pos_x >= end_pos_x) {
            var hx1 = line_x + Math.abs(x - line_x) * curvature;
            var hx2 = x - Math.abs(x - line_x) * (curvature*-1);
          } else {
            var hx1 = line_x + Math.abs(x - line_x) * curvature;
            var hx2 = x - Math.abs(x - line_x) * curvature;
          }
          return ' M '+ line_x +' '+ line_y +' C '+ hx1 +' '+ line_y +' '+ hx2 +' ' + y +' ' + x +'  ' + y;

          break
        case 'close':
          if(start_pos_x >= end_pos_x) {
            var hx1 = line_x + Math.abs(x - line_x) * (curvature*-1);
            var hx2 = x - Math.abs(x - line_x) * curvature;
          } else {
            var hx1 = line_x + Math.abs(x - line_x) * curvature;
            var hx2 = x - Math.abs(x - line_x) * curvature;
          }                                                                                //M0 75H10L5 80L0 75Z

          return ' M '+ line_x +' '+ line_y +' C '+ hx1 +' '+ line_y +' '+ hx2 +' ' + y +' ' + x +'  ' + y +' M '+ (x-11)  + ' ' + y + ' L'+(x-20)+' '+ (y-5)+'  L'+(x-20)+' '+ (y+5)+'Z';
          break;
        case 'other':
          if(start_pos_x >= end_pos_x) {
            var hx1 = line_x + Math.abs(x - line_x) * (curvature*-1);
            var hx2 = x - Math.abs(x - line_x) * (curvature*-1);
          } else {
            var hx1 = line_x + Math.abs(x - line_x) * curvature;
            var hx2 = x - Math.abs(x - line_x) * curvature;
          }
          return ' M '+ line_x +' '+ line_y +' C '+ hx1 +' '+ line_y +' '+ hx2 +' ' + y +' ' + x +'  ' + y;
          break;
        default:

          var hx1 = line_x + Math.abs(x - line_x) * curvature;
          var hx2 = x - Math.abs(x - line_x) * curvature;

          //return ' M '+ line_x +' '+ line_y +' C '+ hx1 +' '+ line_y +' '+ hx2 +' ' + y +' ' + x +'  ' + y;
          return ' M '+ line_x +' '+ line_y +' C '+ hx1 +' '+ line_y +' '+ hx2 +' ' + y +' ' + x +'  ' + y +' M '+ (x-11)  + ' ' + y + ' L'+(x-20)+' '+ (y-5)+'  L'+(x-20)+' '+ (y+5)+'Z';
      }

    }

Only added at function default:
 M '+ (x-11)  + ' ' + y + ' L'+(x-20)+' '+ (y-5)+'  L'+(x-20)+' '+ (y+5)+'Z';

is there any way give direction of arrow for connection starting  from input circle to output circle??

@jerosoler is there any way that dots behave input and output both simultaneously?
we used your library and it's pretty good but now we need that feature that dot can behave as an input and output both.

@NishargShah , if you have achieved this. for ip/op bubbles. Please help me I want to do similar thing with this library. Can you share css or whatever code changes you made ?

Here is the the code
https://github.com/jerosoler/Drawflow/issues/20#issuecomment-746144773

Hi
I've modified connection style like this
and I want the line has round corner

But I have no idea to do this with modifying svg,
could you please show me a sample?
Thank you!

Hello @nodegin
The example you are using is for horitzontal mode.
You cannot create a redirect point without it being a point.
But if you modify the line below you can, it would suit you better:
       var center_x = ((end_pos_x - start_pos_x)/2)+start_pos_x;
      return ' M ' + start_pos_x + ' ' + start_pos_y + ' L '+ center_x +' ' +  start_pos_y  + ' L ' + center_x + ' ' +  end_pos_y  + ' L ' + end_pos_x + ' ' + end_pos_y;

It does not have to be complicated to modify this line:
Basically it is the information of a svg path: https://www.w3schools.com/graphics/svg_path.asp
Moveto and Lineto.
Find the center_y.
I would only have to change the first and second "lineto".
I do it from memory but it would have to be something like this:
       var center_y = ((end_pos_y - start_pos_y)/2)+start_pos_y;
      return ' M ' + start_pos_x + ' ' + start_pos_y + ' L '+ start_pos_x +' ' +  center_y  + ' L ' + end_pos_x + ' ' +  center_y  + ' L ' + end_pos_x + ' ' + end_pos_y;

Jero

Sorry to dig up an old post but I wanted to accomplish a vertical layout like in the first image from the OP. The CSS changes got me most of the way there but the curvature at the vertical connection wasn't working for me, not even when using code from the other referenced issue. Here's what I used for the curvature. Hope it helps someone.
editor.createCurvature = function(start_pos_x, start_pos_y, end_pos_x, end_pos_y, curvature_value, type) {
    var ydiff = end_pos_y - start_pos_y;
    var xdiff = end_pos_x - start_pos_x;
    var hx1 = start_pos_x + xdiff*curvature_value;
    var hx2 = end_pos_x - xdiff*curvature_value;
    var hy1 = start_pos_y + ydiff*curvature_value;
    var hy2 = end_pos_y - ydiff*curvature_value;

    //type openclose open close other
    switch (type) {
        case 'open':
            return ' M'+start_pos_x+','+start_pos_y+' C'+start_pos_x+','+hy1+' '+hx2+','+end_pos_y+' '+end_pos_x+','+end_pos_y;
            break;
        case 'other':
            return ' M'+start_pos_x+','+start_pos_y+' C'+hx1+','+start_pos_y+' '+hx2+','+end_pos_y+' '+end_pos_x+','+end_pos_y;
            break;
        case 'close':
            return ' M'+start_pos_x+','+start_pos_y+' C'+hx1+','+start_pos_y+' '+end_pos_x+','+hy2+' '+end_pos_x+','+end_pos_y;
            break;
        default:
            return ' M'+start_pos_x+','+start_pos_y+' C'+start_pos_x+','+hy1+' '+end_pos_x+','+hy2+' '+end_pos_x+','+end_pos_y;
    }
}

Sorry to dig up an old post but I wanted to accomplish a vertical layout like the first image from the OP. The CSS got me most of the way there, but the curvature at the connection points wasn't working for me, not even when using the other issue that was referenced. Here's the code I used for the curvature. I hope it helps someone.
editor.createCurvature = function(start_pos_x, start_pos_y, end_pos_x, end_pos_y, curvature_value, type) {
    var ydiff = end_pos_y - start_pos_y;
    var xdiff = end_pos_x - start_pos_x;
    var hx1 = start_pos_x + xdiff*curvature_value;
    var hx2 = end_pos_x - xdiff*curvature_value;
    var hy1 = start_pos_y + ydiff*curvature_value;
    var hy2 = end_pos_y - ydiff*curvature_value;
    //type openclose open close other
    switch (type) {
        case 'open':
            return ' M'+start_pos_x+','+start_pos_y+' C'+start_pos_x+','+hy1+' '+hx2+','+end_pos_y+' '+end_pos_x+','+end_pos_y;
            break;
        case 'other':
            return ' M'+start_pos_x+','+start_pos_y+' C'+hx1+','+start_pos_y+' '+hx2+','+end_pos_y+' '+end_pos_x+','+end_pos_y;
            break;
        case 'close':
            return ' M'+start_pos_x+','+start_pos_y+' C'+hx1+','+start_pos_y+' '+end_pos_x+','+hy2+' '+end_pos_x+','+end_pos_y;
            break;
        default:
            return ' M'+start_pos_x+','+start_pos_y+' C'+start_pos_x+','+hy1+' '+end_pos_x+','+hy2+' '+end_pos_x+','+end_pos_y;
    }
}

Sorry to dig up an old post but I wanted to accomplish a vertical layout like the first image from the OP. The CSS got me most of the way there, but the curvature at the connection points wasn't working for me, not even when using the other issue that was referenced. Here's the code I used for the curvature. I hope it helps someone.
editor.createCurvature = function(start_pos_x, start_pos_y, end_pos_x, end_pos_y, curvature_value, type) {
    var ydiff = end_pos_y - start_pos_y;
    var xdiff = end_pos_x - start_pos_x;
    var hx1 = start_pos_x + xdiff*curvature_value;
    var hx2 = end_pos_x - xdiff*curvature_value;
    var hy1 = start_pos_y + ydiff*curvature_value;
    var hy2 = end_pos_y - ydiff*curvature_value;
    //type openclose open close other
    switch (type) {
        case 'open':

editor.createCurvature = function (start_x, start_y, end_x, end_y, curvature_value, type) {       var center_y = ((end_y - start_y) / 2) + start_y;       var round_radius = 10;       if (Math.abs(start_x - end_x) < round_radius || Math.abs(start_y - end_y) < round_radius) {         return M ${start_x} ${start_y}
L ${start_x} ${center_y}
L ${end_x} ${center_y}
L ${end_x} ${end_y};       } else {         var isRight = end_x > start_x;         return M ${start_x} ${start_y}
L ${start_x} ${center_y - round_radius}
A ${round_radius} ${round_radius} 0 0 ${isRight ? 0 : 1} ${isRight ? start_x + round_radius : start_x - round_radius} ${center_y}
L ${isRight ? end_x - round_radius : end_x + round_radius} ${center_y}
A ${round_radius} ${round_radius} 0 0 ${isRight ? 1 : 0} ${end_x} ${center_y + round_radius}
L ${end_x} ${end_y};       }     }

Hi Jero, i saw some similar problem but its not working for me, could you help me to find the problem.

i want like this and tried this code
var center_y = ((end_pos_y - start_pos_y)/2)+start_pos_y;
return ' M ' + start_pos_x + ' ' + start_pos_y + ' L '+ start_pos_x +' ' +  center_y  + ' L ' + end_pos_x + ' ' +  center_y  + ' L ' + end_pos_x + ' ' + end_pos_y;
but it still shows like in this pic.

Hello,
You should have two lines.
A when the start_pos_y > end_pos_y i the opposite.

can you show me the example as in a code?

@ArG97
 editor.createCurvature = function(start_pos_x, start_pos_y, end_pos_x, end_pos_y, curvature_value) {
      if(end_pos_y > start_pos_y) {

        var center_y = ((end_pos_y - start_pos_y)/2)+start_pos_y;
        return ' M ' + start_pos_x + ' ' + start_pos_y + ' L '+ start_pos_x +' ' +  center_y  + ' L ' + end_pos_x + ' ' +  center_y  + ' L ' + end_pos_x + ' ' + end_pos_y;

      } else {

        // New curvature
        return ' M ...';
      }
    }

editor.createCurvature = function(start_pos_x, start_pos_y, end_pos_x, end_pos_y, curvature_value, type) {
var line_x = start_pos_x;
var line_y = start_pos_y;
var x = end_pos_x;
var y = end_pos_y;
var curvature = curvature_value;
//type openclose open close other
switch (type) {
                default:
                    var hx1 = line_x + Math.abs(x - line_x) * curvature;
                    var hx2 = x - Math.abs(x - line_x) * curvature;
                    let xx = ' M '+ line_x +' '+ line_y +' C '+ hx1 +' '+ line_y +' '+ (hx2) +' ' + y +' ' + (x-20) +'  ' + y +' M '+ (x-11)  + ' ' + y + ' L'+(x-20)+' '+ (y-5)+'  L'+(x-20)+' '+ (y+5)+'Z';
                    return xx;
            }

        }

 Better arrow

@jerosoler
i tried but its still not working, im sorry. Is that any other way?

Thank you @jerosoler It works!!

@nodegin hey man... I've been struggling for the line exactly like yours, do you have any hints how to achieve it ?

Hi there! Thanks for the library!
I used all hints above, but have one question.
I have a node with an input at the top and an output at the bottom. Also some outputs at the right side.
Can you tell me please, is there some condition to make another appearance of the outputs at the right side, because for now they have lines as for the output at the bottom?

@Crinoidea
We will need a value in the create Curvature function to be able to do it. An "direction" value of the ouput.

Crinoidea can you share your code, please?

Hi, I have tried use your code above to set input/output code at the top/bottom edges. Once I have only output is ok but when I have input/output had issue as on the picture below

here's my code:
.drawflow .drawflow-node .inputs, .drawflow .drawflow-node .outputs {
display: flex;
width: auto;
justify-content: center;
align-items: center;
}
.drawflow .drawflow-node .output {
width: 10px;
height: 10px;
background: rgb(255, 255, 255);
border-radius: 50%;
color: #8E8E91;
border: 2px solid #8E8E91;
cursor: crosshair;
z-index: 1;
top: 10px;
right: 0px;
}
.drawflow .drawflow-node .input {
width: 10px;
height: 10px;
background: #8E8E91;
border-radius: 50%;
color: #8E8E91;
border: 2px solid #8E8E91;
cursor: crosshair;
z-index: 1;
top: -10px;
left: 0px;
}
.drawflow .drawflow-node {
background-color: rgb(255, 255, 255);
border-color: #8E8E91;
border-radius: 10px;
border-style: solid;
border-width: 2px;
height: 54px;
width: 280px;
display: block;
}


Q For Token(Authorization)

HI,
i had try u program is very good.
but i have a question. how can i set not authorized.
ex: i use a url authorization( rtsp://admin:admin@<IP_ADDRESS>:554 )   or   not authorized rtsp(like:  rtsp://<IP_ADDRESS>:554/1.sdp )
thx.

Hi,
Can't understand your question. Do you mean that you want to connect without login and password ? If yes why not to use rtsp://<IP_ADDRESS>:554/1.sdp as url ?

Could you check VLC player please ? Does it work well in that case ?

yes，same url，i check for vlc and emgucv is ok。
（for my code，may be have any question？）

Could you give me access to your camera I will check for bug

i just try same code. all is ok, i don't know why.
may be my rtsp server problem?
thx.


Consider alternatives to 60-character word limit for links

People who are trying to share links in the chat keep getting stuck on our 60-character word limit that minimizes chat disruption.

I believe this is still a bug. I don't believe it caused major problems in 2021.


[BUG] prsgui fails to start

Describe the bug
when executing prsgui.py, it fails to start and displays this error message:
Prompts loaded
Traceback (most recent call last):
  File "VisualDiffusion/prsgui.py", line 608, in <module>
    set_variables()
  File "VisualDiffusion/prsgui.py", line 105, in set_variables
    n_samples = json_set['n_samples']
KeyError: 'n_samples'

To Reproduce
Steps to reproduce the behavior:

Install progrockstable
Install VisualDiffusion
enter python VisualDiffusion/prsgui.py
See error

Expected behavior
The GUI should open
Desktop (please complete the following information):

OS: Arch Linux (Kernel: 5.19.5)
GPU and VRAM: 3090 24GB
CUDA Version: 11.7

This is a product of ripping out the grid and collage stuff. I'll get right on it.

Fixed in /pull/13.
Please let me know if you run into any further issues.

I did a quick test and everything works fine, will do more extensive tests tomorrow and finally test stable-diffusion ^^
Thanks for the quick fix


Rest pattern should not trigger TupleIndexErrror

https://github.com/dudykr/stc/blob/2ab93ad46cd2683539300bde8f30c7bf89ac1e15/crates/stc_ts_type_checker/tests/conformance/es6/destructuring/declarationsAndAssignments.ts#L180
The line above should not error because LHS is a rest pattern.

But currently stc fails with an error, because of the code below
https://github.com/dudykr/stc/blob/e59631e58fb04578142befb6e5dbc7ef1d52f9db/crates/stc_ts_file_analyzer/src/analyzer/scope/vars.rs#L250-L263
This is quite similar to https://github.com/dudykr/stc/issues/182, though.

Hi @kdy1, I'd love to work on this issue. Do you have any additional advice? Thanks.

@AlexMunoz Basically, the problem is that we are returning errors from
             .with_context(|| {
                 format!(
                     "tried to get the type of {}th element from iterator to declare vars with an array pattern",
                     idx
                 )
             })?

using ? token. Instead of returning an error, we should recover from the error, based on the variant.
Error#actual() gives you the actually error value without context, so you can match on it.

Hey @kdy1 I think the PR https://github.com/dudykr/stc/pull/202  is also covering this case.

Oh maybe. My bad, sorry


snap packaging is self-reporting the wrong version string

I started playing with the "snappy" packaging yesterday (and I have to say it's pretty cool.. I had no idea how it worked before, the namespace-based isolation is pretty slick). But I noticed that wormhole --version reports the wrong thing:
warner@snaptest2:~$ sudo snap install wormhole
...
warner@snaptest2:~$ wormhole --version
magic-wormhole 0.10.2+0.g13ff246.dirty

magic-wormhole uses Versioneer to manage the version string, which makes the setup.py run git describe to figure out what's in the source tree, and processes that to determine the version string. When setup.py is asked to make a build artifact (like setup.py sdist or setup.py wheel), it embeds this generated string into one of the source files (src/wormhole/_version.py) so all non-git-checkout source trees derived from that artifact will get the right version.
I'm guessing the snap build process is modifying one of the non-ignored source files, and then setup.py is invoked, so it thinks the tree is dirty, and creates a version string with that +0.g13ff246.dirty suffix.
One way to fix this might be to have the snap build process start by making an sdist or a wheel (python setup.py sdist), and then install from that. The filename will be somewhat unpredictable, but maybe something like pip install dist/magic-wormhole* would work, assuming it's run in a clean checkout with no other .tar.gz files in dist/ already. Or maybe there's a way to tell setup.py sdist to write the output to a specific filename.
Or, if we could figure out what's being modified, maybe there's a way to make it stop.
@elopio , what do you think? I've only just started looking at the snapcraft documentation, so I'm not sure what's the best way to address this one.

Hello @warner! I'm so happy that you are liking it.
There could be a bug in snapcraft, because the snapcraft.yaml file is not being copied from the repo to the parts/magic-wormhole/build directory, where pip install is called. I will be back at work on tuesday, and I'll bring this up to discuss with my teammates.
In the meantime, what do you think of my temporary hack in #236? :)

It sounds reasonable.. although I don't have a good way to test it right now, and I don't think we have any CI set up yet to automatically build .snap packages upon each commit (I'll file a separate bug to discuss that). I'll land this and then later we can figure out whether it actually worked or not :)


Call tree and Backtrace tree option

@apangin
I have implemented call tree and backtrace tree output format.  I still need to do some code cleanup but wanted to get a review on functionality. Can you please try the options "-o calltree" and "--reverse -o calltree" and let me know any thing more useful. Any early feedback is really helpful.
Output is as follows:
Calltree:

Backtrace tree:

Wow, that's impressive!
I was thinking about a different approach to tree view: exporting the profile to VisualVM and/or Java Mission Control format, since these tools being a part of JDK already have decent UI for browsing call trees. In fact, I'm already working on this.
But since you've already implemented the feature, and the changes are not very big, I think we may give it a chance. Do you think HTML tree generator would be useful if we had the support for above tools?

The html view can be integrated into any web view. For example we have integrated svg into a html panel of our UI.  The idea is to have call tree and back trace in the UI itself. Since we are targeting this for  production profiling, html view can be accessible from remote.
I will create a clean PR for the change. I have done color codings to identify areas of the code similar to flame graph.
You are right, Visual VM and MC can also be used to manually analyze the content.

After playing with call trees for a while I have the following comments:

The name of a method is a part of a <a> link with handpoint cursor, but it does not expand/collapse subtrees. This is OK, but in this case I suppose it should have normal text cursor and allow selecting the text.
Colors are too light for the white background. The palette should be not random as in flame graphs. I guess just having one css class for each method type would be enough.
An option to expand the whole subtree at once will be helpful.

As to the source code, I noticed that Profiler::dumpTree is almost the same as Profiler::dumpFlameGraph. There is definitely a place for some cleanup.
BTW, thank you very much for your interest and contributions to async-profiler.

I have fixed comments 1, 2 and 3.
Also did code cleanup to optimize. To get the ability of generating both calltree and backtrace, I have provided two options and not depending on reverse option.
new output:

Added time spent in self:

@apangin  Based on my team feedback I have added %self and frame depth in the view.
Please let me know if you have any other input for this PR.

With search feature:

@apangin  I have added frame search feature in UI.

Impressive changes! I'll take a deeper look a bit later.

As to ++ button - I was actually thinking about a different way to expand subtrees.
Probably there is no need to expand the whole tree at once, but rather a given subtree.
E.g. when clicking on + while holding Ctrl (or may be Alt or Shift) - the subtree will expand starting from the current node.
Alternatively you may choose to automatically expand subtree until the first node with 2 or more children - like VisualVM and JMC do.

One more tiny UI improvement would be to decrease indent on each tree level, otherwise deep stack will go too far to the right.

@apangin  I have submitted changes as per review comments. I have removed backtrace option now. As long as I can generate it with a stop command.

@apangin  I have done changes for _reverse from cout and calltree to tree.

@apangin  sure, can you please check the latest changes?
I have done both 1 and 2.

Exactly what I meant. Thanks!

It has finally gone into master. Thank you for the contribution!

You are welcome and thank you for quick action on this.


Way to use tornado's static file handler?

Hi and thanks for sphinx-autobuild,
I have issues retrieving large-ish JS files through tornado that's used behind the scenes by livereload.
My documentation requires mathjax, which files are downloaded and served locally through sphinx-autobuild. When the documentation tries to retrieve MathMenu.js (which is 32.8 kb), I get the following error:
[E 181214 08:51:53 web:1670] Uncaught exception GET /_static/mathjax/extensions/MathMenu.js?V=2.7.5 (<IP_ADDRESS>)
    HTTPServerRequest(protocol='http', host='<IP_ADDRESS>:8008', method='GET', uri='/_static/mathjax/extensions/MathMenu.js?V=2.7.5', version='HTTP/1.1', remote_ip='<IP_ADDRESS>')
    Traceback (most recent call last):
      File "/home/thomas/.buildout/eggs/tornado-5.1.1-py3.5-linux-x86_64.egg/tornado/web.py", line 1592, in _execute
        result = yield result
      File "/home/thomas/.buildout/eggs/tornado-5.1.1-py3.5-linux-x86_64.egg/tornado/gen.py", line 1133, in run
        value = future.result()
      File "/usr/lib/python3.5/asyncio/futures.py", line 274, in result
        raise self._exception
      File "/home/thomas/.buildout/eggs/tornado-5.1.1-py3.5-linux-x86_64.egg/tornado/gen.py", line 326, in wrapper
        yielded = next(result)
      File "/home/thomas/.buildout/eggs/tornado-5.1.1-py3.5-linux-x86_64.egg/tornado/web.py", line 2528, in get
        yield self.flush()
      File "/home/thomas/.buildout/eggs/tornado-5.1.1-py3.5-linux-x86_64.egg/tornado/web.py", line 994, in flush
        start_line, self._headers, chunk, callback=callback)
      File "/home/thomas/.buildout/eggs/tornado-5.1.1-py3.5-linux-x86_64.egg/tornado/http1connection.py", line 412, in write_headers
        data += self._format_chunk(chunk)
      File "/home/thomas/.buildout/eggs/tornado-5.1.1-py3.5-linux-x86_64.egg/tornado/http1connection.py", line 424, in _format_chunk
        "Tried to write more data than Content-Length")
    tornado.httputil.HTTPOutputError: Tried to write more data than Content-Length

I'm opening this issue here because as far as I understand tornado can use a static files handler to deal with this kind of problem, and I think it would be good if we could tell the tornado server that it should use that handler for anything in the sphinx static folder.
I haven't looked too much at how livereload and tornado work how we could achieve it so opening the discussion here. From what I saw some modifications to livereload may be needed to access this functionality - you may know that better than I do!

I don't! Maybe @GaretJax does.

Tornado should be more than capable of handling files of 30kB of size. It looks like a different issue caused by a mismatch between the computed file size and the actual data in the file. If I have to guess, maybe an encoding issue around this location: https://github.com/tornadoweb/tornado/blob/master/tornado/web.py#L2598
What version of tornado and Python is this happening on (if it is still happening, 2 years later)? Has probably been fixed upstream, and would anyway not be an issue with sphinx-autobuild.

I'm unable to reproduce the issue you're reporting.

Hi and thanks for looking into it,
It looks like only Mathjax.js gets loaded and to trigger requests for other files you need to add a mathjax formula to your index.rst, such as:
:math:`x + 2`

Got it!
[E 200827 13:05:11 web:1788] Uncaught exception GET /_static/mathjax/config/TeX-AMS-MML_HTMLorMML.js?V=2.7.7 (<IP_ADDRESS>)
    HTTPServerRequest(protocol='http', host='<IP_ADDRESS>:8000', method='GET', uri='/_static/mathjax/config/TeX-AMS-MML_HTMLorMML.js?V=2.7.7', version='HTTP/1.1', remote_ip='<IP_ADDRESS>')
    Traceback (most recent call last):
      File "/Users/pradyunsg/Projects/sphinx-autobuild/.nox/docs-live/lib/python3.8/site-packages/tornado/web.py", line 1703, in _execute
        result = await result
      File "/Users/pradyunsg/Projects/sphinx-autobuild/.nox/docs-live/lib/python3.8/site-packages/tornado/web.py", line 2653, in get
        await self.flush()
      File "/Users/pradyunsg/Projects/sphinx-autobuild/.nox/docs-live/lib/python3.8/site-packages/tornado/web.py", line 1101, in flush
        return self.request.connection.write(chunk)
      File "/Users/pradyunsg/Projects/sphinx-autobuild/.nox/docs-live/lib/python3.8/site-packages/tornado/http1connection.py", line 497, in write
        self._pending_write = self.stream.write(self._format_chunk(chunk))
      File "/Users/pradyunsg/Projects/sphinx-autobuild/.nox/docs-live/lib/python3.8/site-packages/tornado/http1connection.py", line 473, in _format_chunk
        raise httputil.HTTPOutputError(
    tornado.httputil.HTTPOutputError: Tried to write more data than Content-Length
[E 200827 13:05:11 web:1198] Cannot send error response after headers written

Download and extract https://github.com/mathjax/MathJax/archive/2.7.7.zip in _static/mathjax + use this conf.py:
extensions = ["sphinx.ext.mathjax"]
project = "sphinx-autobuild"
html_static_path = ["_static"]
mathjax_path = "mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"

Commenting out mathjax_path makes things work.

https://github.com/mkdocs/mkdocs/issues/1351 -- mkdocs hits the same issue.
https://github.com/tornadoweb/tornado/issues/2743 seems related.
https://github.com/lepture/python-livereload/issues/174 -- pretty sure this is an issue with vanilla python-livereload.

[E 200827 13:33:37 handlers:192] Could not open static file '/Users/pradyunsg/Projects/sphinx-autobuild/build/docs/_static/mathjax/extensions/MathMenu.js'

Huh. This and MathZoom.js both fail like this.

It's not the file size that's the issue here.
MathZoom.js contains the string "". This triggers LiveScriptInjector.transform_first_chunk in python-livereload, which modifies the header but the chunk isn't supposed to be modified. This breaks an assumption in a different part of the codebase, resulting in this failure.
This is 100% a bug in livereload, one that is not going to be easy to monkeypatch either. >.<

This is 100% a bug in livereload, one that is not going to be easy to monkeypatch either. >.<

Okay, I lied. See #91.

Thanks a lot, that works provided that PosixPath is replaced by PurePosixPath so that it can run on Windows too.
It looks like there is a bit of recent activity on python-livereload, maybe submitting a PR other there rather than monkey-patching could fix it for good for other livereload users?

Thanks a lot, that works provided that PosixPath is replaced by PurePosixPath so that it can run on Windows too.

Pretty sure it'll work, but that's a good catch!

It looks like there is a bit of recent activity on python-livereload, maybe submitting a PR other there rather than monkey-patching could fix it for good for other livereload users?

I'd like to -- I'm juggling a lot of OSS projects though, so this is gonna sit on the back burner for now.

Pretty sure it'll work, but that's a good catch!

Addressed in c372700c628b706bc330c9f0e3062ef5f15c23c0


Create Hello.md

Thanks for your work, I have some questions to ask for. Would u please send me your collected datasets?

This is my email address<EMAIL_ADDRESS>, Thank u very much.


[0.9.6] Windows - assertion error

When using the C++ library, I get the already reported assertion error:
Assertion failed: (_data.size() - _offset) % sizeof(T) == 0u,
\carla\LibCarla\cmake..\source\carla/sensor/data/Array.h, line 137
I tried doing the same thing as https://github.com/carla-simulator/carla/issues/1778, but i still get the assertion error (although i build the client and server with the newest master - which means the "fix" should already be there).
I only try to do client.GetWorld() and the assertion error occurs.
After some rounds of debugging, I found out the following:
In LibCarla/source/carla/sensor/data/RawEpisodeState.h, we have:
explicit RawEpisodeState(RawData data)
     : Super(std::move(data)) {
    Super::SetOffset(Serializer::header_offset);
}

The call of the constructor of the base class will trigger the following code in LibCarla/source/carla/sensor/data/Array.h:
explicit Array(size_t offset, RawData data)
    : SensorData(data),
    _data(std::move(data)) {
    SetOffset(offset);
}

explicit Array(RawData data)
     : Array(0u, std::move(data)) {}

void SetOffset(size_t offset) {
    _offset = offset;
    DEBUG_ASSERT(_data.size() >= _offset);
    DEBUG_ASSERT((_data.size() - _offset) % sizeof(T) == 0u);
    DEBUG_ASSERT(begin() <= end());
}

So first, the second constructor is called which calls the first one with an offset of 0. The first constructor calls SetOffset and this will break because the offset is wrong.
So, when i changed LibCarla/source/carla/sensor/data/RawEpisodeState.h to look like:
explicit RawEpisodeState(RawData data)
      : Super(Serializer::header_offset, std::move(data)) {
}

it worked as expected on my machine.
Is this the correct solution for the problem?

Dear Vaan5 ,
Thank you very much for this post.
I had yesterday the same issue and your proposed fix works for me :)
I already seen the issue similar with LidarMeasurment.h :
explicit LidarMeasurement(RawData data)
  : Super(std::move(data)) {
  Super::SetOffset(Serializer::GetHeaderOffset(Super::GetRawData()));
}

I'm not an expert in c++ so can you maybe propose how to fix this here ?
Thanks again!!


CC/MF/BP-specific review language

-refactor annotation review text templates to each GO domain

added specific keywords to review summary, is this what you had in mind?


Don't require space after "(" or "[" to close pair

This makes the brace completion behave more like in Visual Studio (can only speak of VS 2013). It won't auto-close to [||] after [ |, for example.

Thanks a lot!


Wrong indentation ion readme

🐛 Bug Report
-Infix to Postfix Conversiion -the indentation is wrong with no point form.
This is present under stacks in C++.
Have you read the Contributing Guidelines on Pull Requests?
Yes

/assign


Clone and open a repository using 'code' command

I need to clone different repositories in my daily work. Currently I do the following steps:

cd /tmp
git clone REPOSITORY_URL
code REPOSITORY_NAME

I wish I could clone and open a repository using code cli itself. e.g code https://github.com/facebook/react
That would be like press . in Github which opens https://github.dev (vscode web version).

This feature request is now a candidate for our backlog. The community has 60 days to upvote the issue. If it receives 20 upvotes we will move it to our backlog. If not, we will close it. To learn more about how we handle feature requests, please see our documentation.
Happy Coding!

:slightly_smiling_face: This feature request received a sufficient number of community upvotes and we moved it to our backlog. To learn more about how we handle feature requests, please see our documentation.
Happy Coding!


python311Packages.pydiscovergy: 2.0.3 -> 2.0.4

Diff: https://github.com/jpbede/pydiscovergy/compare/refs/tags/2.0.3...2.0.4
Changelog: https://github.com/jpbede/pydiscovergy/releases/tag/2.0.4
Description of changes

Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
23.11 Release Notes (or backporting 23.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

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

5 packages built:

home-assistant-component-tests.discovergy
python310Packages.pydiscovergy
python310Packages.pydiscovergy.dist
python311Packages.pydiscovergy
python311Packages.pydiscovergy.dist


Update Hello everyone.

The second pull requests for Test project.

To test the conflict of different pull requests, this pull request was established. To merge this request, we need to solve the conflict first.