Faulty tcp_pbc structure management / ENOBUF errors (IDFGH-3305)

Environment

Development Kit:      [none]
Kit version [v4]
Module or chip used:  [ESP32-WROOM-32]
IDF version v4.2-dev-560-g5f771fb7b
Build System:         [idf.py]
Compiler version xtensa-esp32-elf-gcc (crosstool-NG esp-2019r2) 8.2.0
Operating System:     [Windows]
(Windows only) environment type: [ESP Command Prompt].
Using an IDE?: [eclipse]
Power Supply:         [USB]

Problem Description
The ESP32 module runs in APSTA mode and acts like a bridge for passing small packets (max 100 bytes, usually around 25 bytes) received from any connected to all others. There is a listener that receives the packets and then queues them; the queue is processed periodically and packets are sent to all other known IP addresses. All is done through TCP connections.
There is a server socket (classic bind-listen-accept sequence) that runs perfectly.
The issue is for the send. the problem is that when the sockets are closed, the associated tcp_pcb struct is not freed, but rather goes into "timewait" state, and is cleaned afterwards.
After a certain number of packets are sent (wans't able to determine precisely the context, but generally after the max number of tcp_pcb slots is reached), the call to tcp_alloc tries to call tcp_kill_timewait and 'kills' the oldest tcp_pcb structure.
Which seems fine, but when a large number of packets is sent, the test-kill-alloc sequences for two tasks may overlap and produce incorrect behavior.
Here's a possible timeline that works
task 1 : test ---- kill ---- alloc
task 2 : ---------------------------test ---- kill ---- alloc

And another that doesn't; the task2 finds the free slot from the first task, takes it and does not free its own, making the first task to fail.
task 1 : test ---- kill ----------------------- alloc XXX FAILS !
task 2 : --------------------test ---- alloc

I'm not entirely sure that tis is 100% accurate. It's what I've beed able to determine from logs, but right now it looks like the only logical explanation.
What I'm sure of is that i get a call to netconn_alloc and one for netconn_free for sockets created by accept() but not for those created with socket() and I start getting ENOBUF errors. Also, it seems that for sockets created by accept(), the netconn_free call does not come from closesocket().
The code for the transmit sequence is also pretty basic and classic (only relevant parts are shown).
void queueTransmitTCPFrame(void* _pElement) {
	struct sockaddr_in dest_addr;
	// ...
	int sock = socket(addr_family, SOCK_STREAM, ip_protocol);
	if (sock < 0) 	{
		// error handling
	}
	else 	{
		// setsockopt(g_server_sock, SOL_SOCKET, TCP_NODELAY, &_flag, sizeof(_flag));
		// setsockopt(g_server_sock, SOL_SOCKET, SO_CONTIMEO, &tv, sizeof(tv));

		err = connect(sock, (struct sockaddr*) &dest_addr, sizeof(dest_addr));
		if (err != 0) {
			// error handling
		}
		else {
			int sent = send(sock, ...);
			if (sent != packetSize) {
				// error handling
			}
		}

		shutdown(sock, 2);
		closesocket(sock);
	}
}

Expected Behavior
The tcp_pcb structure to be freed on closesocket or any other solution that does not put the tcp_pcb structure in wait state and 'killed' afterwards.
Actual Behavior
As described above
How to reproduce
I don't have enough modules to create a test scenario besides the ones that I use for development, but if there are any things to try, I will gladly try and send the results back,

@sharkx Thanks for the detailed bug report and letting us know about this. We will look into. @liuzfesp

Here is some more info. I have printf'ed calls to netconn_alloc, netconn_free, tcp_alloc, tcp_free as well as in my code with the last line per group being the result of a call to tcp_pcb_num_cal
Here's the first log; I tried to arrange the sequences in columns on a per-task basis
netconn_alloc(0x3ffbb088)
tcp_alloc(0x3ffceb2c)
[001] outgoing socket=49

							tcp_alloc(0x3ffc9688)
							netconn_alloc(0x3ffbb5dc)
							[002] incoming socket=50
							[002] shutdown(50, 2)
							[002] closesocket(50)
							 netconn_free(0x3ffbb5dc)
							[002] incoming socket 50 closed
							[002] time_wait:0, total:3

							tcp_alloc(0x3ffc979c)
							netconn_alloc(0x3ffcea3c)
							[003] incoming socket=50
							[003] shutdown(50, 2)
							[003] closesocket(50)
							 netconn_free(0x3ffcea3c)
							[003] incoming socket 50 closed
							[003] time_wait:1, total:4

							tcp_alloc(0x3ffceca4)
							netconn_alloc(0x3ffbb5c4)
							[004] incoming socket=50
							[004] shutdown(50, 2)
							[004] closesocket(50)
							 netconn_free(0x3ffbb5c4)
							[004] incoming socket 50 closed
							[004] time_wait:2, total:5

							tcp_alloc(0x3ffcf1e0)
							netconn_alloc(0x3ffbb5c4)
							[005] incoming socket=50
							[005] shutdown(50, 2)
							[005] closesocket(50)
							 netconn_free(0x3ffbb5c4)
							[005] incoming socket 50 closed
							[005] time_wait:3, total:6
							 tcp_free(0x3ffcf1e0)

							tcp_alloc(0x3ffcee5c)
							netconn_alloc(0x3ffbb5c4)
							[006] incoming socket=50
							[006] shutdown(50, 2)
							[006] closesocket(50)
							 netconn_free(0x3ffbb5c4)
							[006] incoming socket 50 closed
							 tcp_free(0x3ffcee5c)
							[006] time_wait:3, total:5

							tcp_alloc(0x3ffcee5c)
							netconn_alloc(0x3ffbb5c4)
							[007] incoming socket=50
							[007] shutdown(50, 2)
							[007] closesocket(50)
							 netconn_free(0x3ffbb5c4)
							 tcp_free(0x3ffcee5c)
							[007] incoming socket 50 closed
							[007] time_wait:3, total:5

[001] shutdown(49, 2)
[001] closesocket(49)
 netconn_free(0x3ffbb088)
[001] Outgoing socket 49 closed
[001] time_wait:3, total:5

For some reason, some sequences have a tcp_free call, some don't; when there is no such call, the time_wait number increases to a point when it reaches the max number allowed.

And another one, where there are more overlapping tasks; a bit harder to follow, but the situation is the same ... some sequences don't have a tcp_free call and the time_wait number of blocks increases.
I'm attaching it as file; use a  size of 4 to get the proper indent.
log.txt

hi @sharkx
In the tcp_alloc(u8_t prio) function,
It can be modified in this way to solve this problem
tcp_alloc(u8_t prio)
{
struct tcp_pcb *pcb;
#if ESP_LWIP
tcp_pcb_num_t tcp_pcb_num;
#endif
LWIP_ASSERT_CORE_LOCKED();
#if ESP_LWIP
tcp_pcb_num_cal(&tcp_pcb_num);
while (tcp_pcb_num.total >= MEMP_NUM_TCP_PCB) { //  Where to modify
if (tcp_pcb_num.time_wait > 0){
tcp_kill_timewait();
} else if (tcp_pcb_num.last_ack > 0){
tcp_kill_state(LAST_ACK);
} else if (tcp_pcb_num.closing > 0){
tcp_kill_state(CLOSING);
} else if (tcp_pcb_num.fin_wait2 > 0){
tcp_kill_state(FIN_WAIT_2);
} else if (tcp_pcb_num.fin_wait1 > 0){
tcp_kill_state(FIN_WAIT_1);
} else {
tcp_kill_prio(prio);
}
}

Hello,
Thanks for the reply, but I'm not sure it solves the problem.
Changing the if for a while does not do much good... quite the opposite, I think.
When tcp_pcb_num.total < MEMP_NUM_TCP_PCB it will not execute, just like the if.
When tcp_pcb_num.total >= MEMP_NUM_TCP_PCB it will execute in an endless loop, because you don't change the tcp_pcb_num.total after killing the oldest block. Even if you would, it will only kill until you get MEMP_NUM_TCP_PCB - 1 items left, which does not fix the sync issue, because two tasks compete for the same last available block.
Can you please explain in which situations a block ens up in the time_wait state ?
Best regards,

while (tcp_pcb_num.total >= MEMP_NUM_TCP_PCB)
{
    if (tcp_pcb_num.time_wait > 0){
        tcp_kill_timewait();
    } else if (tcp_pcb_num.last_ack > 0){
        tcp_kill_state(LAST_ACK);
    } else if (tcp_pcb_num.closing > 0){
        tcp_kill_state(CLOSING);
    } else if (tcp_pcb_num.fin_wait2 > 0){
        tcp_kill_state(FIN_WAIT_2);
    } else if (tcp_pcb_num.fin_wait1 > 0){
        tcp_kill_state(FIN_WAIT_1);
    } else {
        tcp_kill_prio(prio);
    }
   tcp_pcb_num_cal(&tcp_pcb_num);
}

hi @sharkx
I'm sorry to add one line less code to the scheme submitted last time.
When TCP is disconnected, the control block will have time wait status

Hello,
Thanks for the update; I have tried, more or less, the same approach.
So, if TCP is disconnected, there's no problem in 'killing' all connections
in this state, right ?
Regards,
Stefan.
On Mon, May 18, 2020 at 10:40 AM freakyxue<EMAIL_ADDRESS>wrote:

hi @sharkx https://github.com/sharkx
I'm sorry to add one line less code to the scheme submitted last time.
When TCP is disconnected, the control block will have time wait status
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/espressif/esp-idf/issues/5291#issuecomment-630003488,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ACQXK2HHKMK7K33M5VNTQALRSDQ77ANCNFSM4NA3CBHA
.

yes,In 'time wait' state, there is no problem in deleting the TCP control block

Thanks.
To remove all time_wait blocks, iI have used this (not the most efficient
code, but had less changes from original; one pass through the list should
have done it) :
static uint8_t tcp_kill_timewait_inner(void)
{
struct tcp_pcb *pcb, *inactive;
u32_t inactivity;
inactivity = 0;
inactive = NULL;
/* Go through the list of TIME_WAIT pcbs and get the oldest pcb. */
for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {
if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) {
inactivity = tcp_ticks - pcb->tmr;
inactive = pcb;
}
}
if (inactive != NULL) {
LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_timewait: killing oldest TIME-WAIT
PCB %p (%"S32_F")\n",
(void *)inactive, inactivity));
tcp_abort(inactive);
return true;
}
return false;
}
static void tcp_kill_timewait(void)
{
while(tcp_kill_timewait_inner()) {
}
}
On Mon, May 18, 2020 at 10:55 AM freakyxue<EMAIL_ADDRESS>wrote:

yes,In 'time wait' state, there is no problem in deleting the TCP control
block
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/espressif/esp-idf/issues/5291#issuecomment-630010626,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ACQXK2FC7PRJZCNVKLP5FSLRSDSV3ANCNFSM4NA3CBHA
.

@sharkx
If there are still problems in the test of this scheme, please continue to put forward

Hello,
Thanks. So far it seems ok, at least for the connection block management.
But now, since the connections work, I get a lot of ENOTCONN, ECONNRESET or
ECONNABORTED ...
Best regards,
On Tue, May 19, 2020 at 12:23 PM freakyxue<EMAIL_ADDRESS>wrote:

@sharkx https://github.com/sharkx
If there are still problems in the test of this scheme, please continue to
put forward
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/espressif/esp-idf/issues/5291#issuecomment-630700191,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ACQXK2H2LYPK5JLM5MWCIMLRSJFYHANCNFSM4NA3CBHA
.

Hello,
After more testing, I'm not entirely sure the call to tcp_alloc is
thread-safe (or task-safe); I have added some sync code (a simple
semaphoe created by xSemaphoreCreateBinary) to the function, and it seems
to behave better; I'm still investigating this.
I'm not sure if this is the place for this question, but I tried on the
forums without success, and it's related to my problem.
I think one of the main causes for the socket problems I have is this : I
use the ESPs as APs in a mesh-like network, but not using the ESP APIs; I
have developed my own, before the time of ESP-IDF.
For instance there is an AP node that has 10 stations connected to it; when
some node tries to send a broadcast packet to the network, that AP node
will try to relay the packet to all 10 stations.
Suppose one of the nodes has a problem and the call to connect takes too
long.
Here comes the dilemma...
If send sequentially, packets that come after the blocking one take too
long to send and the network get stalled.
If sent using tasks/threads, sockets get locked and exhausted, as they come
in limited supply.
I think it could really help to be able to trim down the socket connection
time, but I can't seem to find a way to do this.
I would really appreciate if you could point me to the right direction; as
a side note, I'm totally comfortable with altering locally lwip code and
test, but I'm not sure where to look.
Thanks in avance
Best regards.
On Tue, May 19, 2020 at 12:30 PM stefanu<EMAIL_ADDRESS>wrote:

Hello,
Thanks. So far it seems ok, at least for the connection block management.
But now, since the connections work, I get a lot of ENOTCONN, ECONNRESET
or ECONNABORTED ...
Best regards,
On Tue, May 19, 2020 at 12:23 PM freakyxue<EMAIL_ADDRESS>wrote:

@sharkx https://github.com/sharkx
If there are still problems in the test of this scheme, please continue
to put forward
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/espressif/esp-idf/issues/5291#issuecomment-630700191,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ACQXK2H2LYPK5JLM5MWCIMLRSJFYHANCNFSM4NA3CBHA
.

hi @ sharkx
while (tcp_pcb_num.total >= MEMP_NUM_TCP_PCB) // Where to modify
{
if (tcp_pcb_num.time_wait > 0){
tcp_kill_timewait();
} else if (tcp_pcb_num.last_ack > 0){
tcp_kill_state(LAST_ACK);
} else if (tcp_pcb_num.closing > 0){
tcp_kill_state(CLOSING);
} else if (tcp_pcb_num.fin_wait2 > 0){
tcp_kill_state(FIN_WAIT_2);
} else if (tcp_pcb_num.fin_wait1 > 0){
tcp_kill_state(FIN_WAIT_1);
} else {
tcp_kill_prio(prio);
}
tcp_pcb_num_cal(&tcp_pcb_num);  // Where to modify
}
Have you ever tested this solution? Because someone had the same problem as you before and solved it with this solution.

Hello,
Not exactly like this, because it does not solve the problem of concurrent
access when two or more threads compete for the last TCP_PCB.
But, since you can kill ALL time_wait blocks, my version
of tcp_kill_timewait deletes all of them, not just the oldest. And it
seems to do the job.
This together with a counting semaphore that does not allow threads to try
and send data if another N socket-connect-send-close sequences are in
progress.
Here's my test version for  tcp_kill_timewait
static uint8_t tcp_kill_timewait_inner(void)
{
struct tcp_pcb *pcb, *inactive;
u32_t inactivity;
inactivity = 0;
inactive = NULL;
/* Go through the list of TIME_WAIT pcbs and get the oldest pcb. */
for (pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {
if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) {
inactivity = tcp_ticks - pcb->tmr;
inactive = pcb;
}
}
if (inactive != NULL) {
LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_timewait: killing oldest TIME-WAIT
PCB %p (%"S32_F")\n",
(void *)inactive, inactivity));
tcp_abort(inactive);
return true;
}
return false;
}
static void tcp_kill_timewait(void)
{
while(tcp_kill_timewait_inner()) {
}
}
Best regards,
Stefan.
On Fri, May 22, 2020 at 5:52 AM freakyxue<EMAIL_ADDRESS>wrote:

hi @ sharkx
while (tcp_pcb_num.total >= MEMP_NUM_TCP_PCB) // Where to modify
{
if (tcp_pcb_num.time_wait > 0){
tcp_kill_timewait();
} else if (tcp_pcb_num.last_ack > 0){
tcp_kill_state(LAST_ACK);
} else if (tcp_pcb_num.closing > 0){
tcp_kill_state(CLOSING);
} else if (tcp_pcb_num.fin_wait2 > 0){
tcp_kill_state(FIN_WAIT_2);
} else if (tcp_pcb_num.fin_wait1 > 0){
tcp_kill_state(FIN_WAIT_1);
} else {
tcp_kill_prio(prio);
}
tcp_pcb_num_cal(&tcp_pcb_num); // Where to modify
}
Have you ever tested this solution? Because someone had the same problem
as you before and solved it with this solution.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/espressif/esp-idf/issues/5291#issuecomment-632449510,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ACQXK2E4WAVTT3AI4FMIKFLRSXSHZANCNFSM4NA3CBHA
.

hi  @ sharkx
Can you do a test with your code?
Open this macro:#define TCP_DEBUG            LWIP_DBG_ON /In  lwip/port/esp32/includ/lwipopts.h
Test with this code:
while (tcp_pcb_num.total >= MEMP_NUM_TCP_PCB) // Where to modify
{
if (tcp_pcb_num.time_wait > 0){
tcp_kill_timewait();
} else if (tcp_pcb_num.last_ack > 0){
tcp_kill_state(LAST_ACK);
} else if (tcp_pcb_num.closing > 0){
tcp_kill_state(CLOSING);
} else if (tcp_pcb_num.fin_wait2 > 0){
tcp_kill_state(FIN_WAIT_2);
} else if (tcp_pcb_num.fin_wait1 > 0){
tcp_kill_state(FIN_WAIT_1);
} else {
tcp_kill_prio(prio);
}
tcp_pcb_num_cal(&tcp_pcb_num); // Where to modify
}
I want to see if this log is printed:tcp_alloc: no available tcp pcb.
thanks!

@sharkx Thanks for reporting, would you please help share if any update for this issue? Thanks.

Thanks for reporting, will close due to short of feedback, feel free to reopen.


Crash when quitting from two full-screen windows on Mac

This is with Atom 1.3.0 on MacOS 10.11.2.
To reproduce:

open a few files from a folder; it will create one Atom window
open a few other files from another folder; it will create another Atom window
make both windows full screen
close all files in one of the windows; here you will note an issue already, that is that that window remains open; I would expect it to close itself, leaving the other window open only
quit by doing CMD-Q, and Atom will crash

This is almost assuredly a duplicate of https://github.com/atom/atom/issues/9584. Please install the latest Beta version and see if you can reproduce the issue.

Issue #10000 🎉

@lee-dohm #9584 is likely linked but different, my crash happens when trying to quit (CMD-Q), not  when closing the window (CMD-SHIFT-W), I would not get for granted that solving one solves the other. @amytruong why do you say it needs reproduction? The instructions are insufficient?

For guidance on labels, please see the CONTRIBUTING document. I've never been able to reliably reproduce any of these crashes.
Did you try reproducing the issue on the latest beta?

Have the same issue. Can't reproduce it on 1.4.0-beta1.

I'm closing this as a duplicate of #9584 since @DarthSim reported that 1.4.0-beta1 fixed his crashes.
@giacecco if 1.4.0 doesn't fix it for you please comment here and we'll re-open this.


Video Muting: Fix resource state updates

Context

We got a user report about issues with resource updates when muting a video. The "Remove audio" button was simply not going away, yet the new file was uploading successfully.
Summary

The reason for this bug:
While the isMuting/isMuted flags were properly set during start and progress, they got reset again at the end of the upload process? additionalData.is_muted was set to true when uploading the file to WordPress, yet the REST API response contained is_muted: false because the meta value was not properly updated
This PR ensures that the flags are kept and that the "Remove audio" button is correctly disappearing after muting.
Relevant Technical Choices

See individual commits for details
Updates updateExistingElements to actually update the current state and only update the resource properties that are needed, so no data is potentially lost
Adding some todos for followup tickets.
Code simplification

To-do

N/A
User-facing changes

https://user-images.githubusercontent.com/841956/136575412-938a7afa-826d-471b-adba-3e6687e57bae.mov
Testing Instructions

[ ] This is a non-user-facing change and requires no QA

This PR can be tested by following these steps:

Add a new video with sound to the page
Click on "Remove audio"
See that new video is uploading
After upload finishes, see that "Remove audio" button is removed

Also:

Verify that video trimming and video optimization via the design panel still works.

Reviews
Does this PR have a security-related impact?

No
Does this PR change what data or activity we track or use?

No
Does this PR have a legal-related impact?

No
Checklist

[x] This PR addresses an existing issue and I have linked this PR to it in ZenHub
[x] I have tested this code to the best of my abilities
[x] I have verified accessibility to the best of my abilities (docs)
[x] I have verified i18n and l10n (translation, right-to-left layout) to the best of my abilities
[x] This code is covered by automated tests (unit, integration, and/or e2e) to verify it works as intended (docs)
[x] I have added documentation where necessary
[x] I have added a matching Type: XYZ label to the PR

Fixes #9335

because the meta value was not properly updated

Can you explain what fixes the issues explainly. A lot of this PR, seems to be change the field name.


Added wormhole bridge to EXTERNAL_LINKS

Per jeffery's request, added WormHole bridge link to popover menu.

Looks good!


Divide the python module in several .o

This would help to reduce the compilation time.

I thought you wrote that trying this direction was leading to increase compilation time (which is indeed reasonable). Am I wrong?

Solved by #286.


Remove vendored jQuery from kit

What
Remove the copy of jquery.js from app/assets/javascripts/ and any references to it. Update the changelog to include reference to this breaking change.
Why
We've decided to remove jQuery from the default kit installation, see #482.
Who needs to work on this
Developer
Who needs to review this
Developer, Content designer
Done when

[ ] There is no jQuery in the prototype kit
[ ] The changelog records the removal of jQuery

Technically speaking I think we need to merge the changes to step by step in #1379 before we can do this...


studylistResult search() filters on Date Exclusive ranges rather than Inclusive

(I'm connected to an orthanc database with DIMSE, in case that changes how search filtering works.)
Packages\Ohif-study-list\client\components\studylist\studylistResult has a bug where the search filters exclusively based on the range indices, rather than inclusively.
This is particularly noticeable if you try to view a study you took that day.
The fix seems easy:
[...].isBefore -> [...].isSameOrBefore
[...].isAfter  -> [...].isSameOrAfter

I'll look at opening a pull request, but wanted to make sure it was documented first.

That is a really annoying bug. We would definitely take a PR to fix it!

In Version 2:

It looks like the dates you select cannot be the same date, but the range does appear to be inclusive.
As this is specific to version 1 and is a bit stale, I'm going to close it for now. I'm more than happy to look at any incoming PRs that resolve this issue for version 1 if they're made in the next couple of months.


29085 Hangmon, Vietnam

29085 Hangmon, Vietnam
The NOW Database<EMAIL_ADDRESS>Sun 16/01/2022 17:59
Subject: 29085 Hangmon, Vietnam
Name: Jan van der Made
Email<EMAIL_ADDRESS>Tel:
Fax:
Fast reply reguested: No
Message:
I am
surpized to see Hangmon still as Late Miocene with Chleuastochoerus.Evidently this does not take into account the publication given below. As for the Suidae, there there is certainly not Chluastochoerus, but Hyotheirum cf. youngi and and Suoidea indet. Prieto, J., P.O. Antoine, J. van der Made, G. Métais, Laq The Phuc, Quý Truong Quan, S. Schneider, Dang Ngoc Tran, Davit Vasilyan, Luong The Viet, M. Böhme, 2018. Biochronological and paleobiogeographical significance of the earliest Miocene mammal fauna from Northern Vietnam. Palaeobiodiversity and Palaeoenvironments, 98/2: 287-313. DOI 10.1007/s12549-017-0295-y


[GUI] Mounting reset and mounting position doesn't have any feedback if they're done correct

Right now it's impossible to know if you scrwed up mounting reset until you get into VRChat and see that everything is wrong.
We need to add a 3D character model on mounting screen and maybe somewhere else so that user could try their body movements without the need to switch to VR and then figure out what's wrong with them.

Different solutions are acceptable to this, but right now it's impossible to understand if you did something wrong, which is possible to do.

I think this can be closed with skeleton preview now?


Each official driver should have docs about its isolation semantics

See the discussion in https://github.com/cyclejs/cyclejs/issues/369 towards the end.

I guess we'll need a convention for naming isolation levels.
Right now we have just the two, correct? Total isolation, where the source and sink are totally isolated (DOM) and sibling, where parents of an isolated child have access to the child's sinks but the any siblings are isolated from each other.
Any input on names? Sibling and Total? Are there any plans for other types?

child and orphan =)

We're talking sibling-sibling and parent-child isolation. DOM driver has both, and HTTP has only sibling-sibling isolation.

This is finally done! :D

:fireworks:


Try Fixing Ruby 2.4.0 Errors

Should be ok.

Hi there! Could you explain this PR at all? I see you've changed some of the MD5 tests, but I can't quite work out how they relate to Ruby 2.4.


'expose' gives unnamed ports a name of "default"

Following on from a discussion yesterday #11296, when creating services using 'expose' it gives unnamed ports a name of "default".  There was a concern that this is a misfeature so issue raised here to track it.
The command used in this scenario was
kubectl expose rc myservice --create-external-load-balancer=true --port=80 --target-port=9090

/cc @thockin @bgrant0607 @lavalamp

Yeah, I'd vote for it to be "". We can also improve our service proxy code to be more forgiving.

I agree we should not give it a name and that we can make the master proxy
try harder.
On Thu, Jul 16, 2015 at 10:42 AM, Daniel Smith<EMAIL_ADDRESS>wrote:

Yeah, I'd vote for it to be "". We can also improve our service proxy code
to be more forgiving.
—
Reply to this email directly or view it on GitHub
https://github.com/GoogleCloudPlatform/kubernetes/issues/11377#issuecomment-122031949
.

I agree, though changing this would be a breaking change. We added versioning to generators for this reason. The right fix would be to create a "service/v2" generator with the new behavior and make it the default version, while retaining the v1 behavior.

@nikhiljindal or @jlowdermilk: does either of you have time to do this today? If you're working on more critical 1.0 issues, we can let this slide.
We should at least document current behavior, if nothing else, however.

I can take this.

I don't really see it as a breaking change, at least not a very bad one -
any pods that exist will be fine.
But if we make the master proxy try to find the first port definition, we
can paper over this and call it done, for now.  Deprecate that, add a flag
that defaults to true, deprecate the flag and in a year change it to false?
On Thu, Jul 16, 2015 at 11:34 AM, Nikhil Jindal<EMAIL_ADDRESS>wrote:

I can take this.
—
Reply to this email directly or view it on GitHub
https://github.com/GoogleCloudPlatform/kubernetes/issues/11377#issuecomment-122043155
.

Am updating kubectl expose to leave service ports unnamed in https://github.com/GoogleCloudPlatform/kubernetes/pull/11397
@thockin Didnt get you. Are you suggesting that we change master proxy to use the first port definition for now, but deprecate that later?

OTOH, the kubectl change was pretty easy.

I was saying we should do both.
On Thu, Jul 16, 2015 at 3:06 PM, Brian Grant<EMAIL_ADDRESS>wrote:

OTOH, the kubectl change was pretty easy.
—
Reply to this email directly or view it on GitHub
https://github.com/GoogleCloudPlatform/kubernetes/issues/11377#issuecomment-122117676
.

I'm not sure it's worth it to rush this into 1.0.

We should add this to the known issues bug.

The kubectl change is ready to go


Fixing a NoneType is not callable error

If a QuerySelectionField object has a query attribute that is considered by Python to be False (e.g., an empty sequence or mapping object), and the query_factory attribute is None, an error occurs (NoneType is not callable error). To fix this, this change checks specifically for None on both the query and query_factory attributes and defaults to an empty list if both are None. This gives the user a little more control on when to execute the query_factory callable. With the previous code, the user would have to return a list with something in it if they did not want the query_factory to be called, now they can return an empty list if the field should be empty and a None if they want the query_factory to be called when the query is empty.

Closing because wtforms.ext.sqlalchemy is no longer part of wtforms


predefined format date-time does not support leap seconds?

What version of Ajv are you using? Does the issue happen if you use the latest version?
checked lib/compile/formats.js from master branch
It would appear that date-time regexp validator is not according to the specification.
a--- checked lib/compile/formats.js ---
// date-time: http://tools.ietf.org/html/rfc3339#section-5.6
'date-time': /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s][0-2]\d:[0-5]\d:[0-5]\d(?:.\d+)?(?:z|[+-]\d\d:\d\d)$/i,
a---
However in https://tools.ietf.org/html/rfc3339#section-5.6 it is mentioned that
a---snip---
time-hour       = 2DIGIT  ; 00-23
time-minute     = 2DIGIT  ; 00-59
time-second     = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap second
; rules
a---snip---
So should the regexp rule perhaps be altered from
[0-2]\d:[0-5]\d:[0-5]\d
to
[0-2]\d:[0-5]\d:[0-6]\d

Indeed. Better make it (?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60) with some comment why + the function time has to be fixed as well (in case you do PR).

in 6.0.0-beta.0


refactored to use promise-spawner for cleaner code

got it to work so that it pipes output from the child process back to
parent so we see status of meteor build and now deployment

A couple of pending issues:

Now deployment is incorrect, it ends up just serving the tar files. Can be fixed later
webpack crashes when it sees the #!/usr/bin/env node. After building, i had to manually add it to the index.js file. Need to look into this further

Added slightly better logging to distinguish meteor-now output from child-process output


Bug: Render doesn't simulate time correctly

In Aviary.py, I think the following line:
self._sim_elapsed += self.update_period * self.updates_per_step

should be changed to:
self._sim_elapsed += self.update_period

or the rendering will not be in sync with the simulation time and RTF won't be calculated correctly.

IIRC, update_period is the update time between each physics step, while updates_per_step is the number of physics updates per control update. We update the RTF every control step, so we update the sim_elapsed every update_period * updates_per_step. If this is wrong, could you describe it in more detail for why it's wrong?

update_period is calculated as so:
self.update_period = 1.0 / np.min(all_control_hz)

which is not the physics step but rather the simulation step time.

Fixed in https://github.com/jjshoots/PyFlyt/commit/3406dbe651e2141ea62b9052b826a27f76fe1cab


Unexpected Error when deploy server disconnects

Protostar version

Name
Version

Protostar
0.3.2

Cairo-lang
0.9.1

Git
2.37.2

Current Behavior
After waiting for acceptance too long an exception is raised.
Unexpected Protostar error. Report it here:
https://github.com/software-mansion/protostar/issues

Traceback (most recent call last):
  File "binary_entrypoint.py", line 85, in <module>
  File "binary_entrypoint.py", line 19, in init
  File "protostar/start.py", line 23, in main
  File "protostar/start.py", line 56, in run_protostar
  File "protostar/start.py", line 51, in run_protostar
  File "asyncio/runners.py", line 43, in run
  File "asyncio/base_events.py", line 587, in run_until_complete
  File "protostar/protostar_cli.py", line 60, in run
  File "protostar/protostar_cli.py", line 94, in _run_command_from_args
  File "protostar/cli/cli_app.py", line 28, in run
  File "protostar/commands/deploy/deploy_command.py", line 125, in run
  File "protostar/starknet_gateway/gateway_facade.py", line 125, in deploy
  File "starknet_py/net/client.py", line 151, in wait_for_tx
  File "starknet_py/net/gateway_client.py", line 212, in get_transaction_receipt
  File "starknet_py/net/http_client.py", line 69, in call
  File "starknet_py/net/http_client.py", line 41, in request
  File "starknet_py/net/http_client.py", line 54, in _make_request
  File "aiohttp/client.py", line 1138, in __aenter__
  File "aiohttp/client.py", line 559, in _request
  File "aiohttp/client_reqrep.py", line 898, in start
  File "aiohttp/streams.py", line 616, in read
aiohttp.client_exceptions.ServerDisconnectedError: Server disconnected
[17671] Failed to execute script 'binary_entrypoint' due to unhandled exception!

Expected Behavior
It should probably be wrapped in a ProtostarException.
It will still interfere with complex migration scripts that have to wait. (!!!)
Perhaps some other method of waiting is needed?
Steps to Reproduce

protostar deploy <path> --network alpha-goerli --wait-for-acceptance (unreliable)

Getting the same error after calling
protostar deploy [path-to-contract] --salt [salt] --gateway-url http://<IP_ADDRESS>:5050 --chain-id<PHONE_NUMBER>1968334

with starknet-devnet running via
sudo docker run -p <IP_ADDRESS>:5050:5050 shardlabs/starknet-devnet --seed [seed]

Probably not relevant anymore


What is the preferred way to handle views, based on async data

What is the preferred way to handle views, based on async data? I have a method which returns an promise which gets resolved with the queried data.
// CalendarController.js
* index(request, response) {
    let promise = this.calendarService.loadEvents(access_token);
    promise.then(function(response){
    // how to push data to the view here?
    });
}

Do you get any error when you do this ?
* index(request, response) {
   const calendarResponse = yield this.calendarService.loadEvents(access_token)
   const view = response.view(calendarResponse)
   response.send(view)
}

Yes, i got: You may only yield a function, promise, generator, array, or object, but the following object was passed: "undefined" using this code:
  * index(request, response) {
    const tokens = yield Database.from('admin').first('access_token');
    const calendarResponse = yield this.calendarService.loadEvents(tokens.access_token);
    const view = response.view(calendarResponse);
    response.send(view);
  }
``

You cannot return from a callback, since it is async. Earlier you were doing something like promise.then, how were getting promise then ?

Damn, you're right. I copied and tested the wrong code, i switched the branch. Sorry!
Here we go:
  * index(request, response) {
    const tokens = yield Database.from('admin').first('access_token');
    const calendarResponse = yield this.calendarService.loadEvents(tokens.access_token);
    const view = response.view(calendarResponse);
    response.send(view);
  }

loadEvents(tokens) {
    let parsed_tokens = JSON.parse(tokens);
    let auth = this.oauth2Client;
    var calendar = google.calendar('v3');
    auth.credentials = parsed_tokens;

    return new Promise(function (resolve, reject) {
      calendar.events.list({
        auth: auth,
        calendarId: 'primary',
        timeMin: (new Date()).toISOString(),
        maxResults: 10,
        singleEvents: true,
        orderBy: 'startTime'
      }, function (err, response) {
        if (err) {
          console.log('The API returned an error: ' + err);
          reject(err);
          return;
        }
        resolve(response.items);
      });
    });
  }

Errors are gone, view renders with {}.

Please, note my update

That does the trick!
* index(request, response) {
    const tokens = yield Database.from('admin').first('access_token');
    const calendarResponse = yield this.calendarService.loadEvents(tokens.access_token);
    console.log(calendarResponse);

    const view = yield response.view('index.html', {
      calendarData: calendarResponse
    });
    response.ok(view);
  }


Introducing a Plugin API

Following up on our previous discussion here, this PR introduces a core mechanism for adding and registering plugins. This foundational work sets the stage for developing more advanced and powerful plugin APIs in the future(like https://github.com/pointfreeco/swift-snapshot-testing/pull/906).
Plugin API for swift-snapshot-testing
This PR introduces a Plugin API architecture that enables greater flexibility and extensibility, it addresses the need for shared functionality across different snapshot strategies.
Why a Plugin API?
The feedback from @mbrandonw and @stephencelis highlights two main concerns:

Breaking changes: The proposed changes would be breaking, requiring a major version bump to 2.0.
Modularity: There's a desire to minimize changes to existing strategies and focus on a plugin-izable future for a potential 2.0 release.

This PR directly aligns with those concerns by introducing a modular, forward-looking Plugin API that would allow users to extend snapshot functionality in a non-invasive way. This architecture is designed to be compatible with future versions, helping the library move toward a more flexible and scalable ecosystem without requiring breaking changes in each strategy.
Key Benefits of the Plugin API

No Breaking Changes: This implementation is backwards-compatible, ensuring that existing users are unaffected. It introduces an optional, extensible plugin system that users can opt into, avoiding disruptions for those who don't need it.

Modularity: Plugins allow new functionality to be added without changing the core snapshot strategies. This decoupling keeps the core library simple, while allowing third-party developers to introduce and share new functionality through plugins.

Extensibility: The Plugin API provides a formal structure for shared behaviours across different strategies (e.g., image formats, file storage) without needing to duplicate or modify each strategy. This approach encourages a vibrant ecosystem where developers can contribute plugins for specific use cases.

Future-Proof: Introducing the Plugin API now lays the groundwork for future versions of swift-snapshot-testing, aligning with the long-term vision for a more plugin-izable system (as mentioned by @stephencelis). The architecture is designed to evolve and adapt, providing flexibility for whatever comes next in 2.0.

Technical Overview

SnapshotTestingPlugin: Defines the behavior that plugins must implement.
PluginRegistry: A singleton that manages dynamic plugin discovery and registration, utilizing the Objective-C runtime to automatically register plugins conforming to the SnapshotTestingPlugin protocol.
Objective-C Runtime Integration: Allows automatic discovery of plugins that conform to specific protocols, ensuring extensibility without manual intervention.

Next Steps
Although the core team is considering a more modular approach for 2.0, this PR serves as an incremental step in that direction. Rather than requiring a full 2.0 release immediately, the Plugin API can be introduced now as an optional feature that sets the stage for future developments.
Conclusion
I hope this Plugin API proposal is a step forward in making swift-snapshot-testing more flexible, extensible, and future-ready without disrupting current users. I'd love to work with the team to refine this proposal, and I’m open to any suggestions for improving or adapting the architecture to better align with your vision.
Plugins

Image Serialization Plugin: This is the first plugin that utilizes the new Plugin API.

Another potential plugin could be one that changes where snapshots are saved. This could include options such as local storage (the default), FTP, SFTP, S3, Dropbox, Google Drive, and more. Implementing such a plugin would enable easy integration of various storage solutions for snapshots. (🤔 should I build this next? prototype implementation not finished)

These examples demonstrate the utility of this API.

Since the automatic registration require Objective-C runtime there is an alternative registerPlugin that works on platform that don't have obj-c runtime.

The code here exist inside #906 anyways so let's close this.


Slippage can result in negative balances

As discussed in #1432, the current implementation of so.avg_slippage_pct needs to change.
Consider a scenario trading NANO with 0.01000000 BTC. Buy order gets placed at 0.00127950 BTC for size of 7.81 NANO. This computes as 0.009992895 BTC. Slippage of 0.045% turns that into
0.01003786 BTC, which is more than I have, resulting in a negative balance.
I was tossing some ideas around with @krystophv to see what might be a better implementation. Whatever the implementation is largely is defined by what we all agree on as how slippage really affects us.

If it's about price movement, then in the engine, maybe adjust the incoming price by slippage, and feed it back into the system. @krystophv will need to elaborate on this because it was his idea and I don't understand it fully
If it's about latency, then maybe apply slippage to trade.time so that an order might not be able to react to a trade that comes too soon after an order is placed, making it more realistic.
If it's about other same-price orders being filled before yours, then maybe we apply the slippage % to the incoming trade's size, so that whereas today an order for size=20 would be filled by a trade of size=20, maybe slippage changes that to size=18 so now your order has remaining_size=2 and needs another trade to come to finish it.

Thoughts?

For the record, this only affects sim mode.


Different Builder behaviour between 0.6.6 and 0.7

Hi,
awesome library, but I have a small issue: In 0.7 is an issue on the AbstractCellBuilder where the sequence of methods actually matters:
TextCell.builder()
.paddingLeft( 0.2 )
.settings( cellSettings( 0.1 ) ) // for borderwidth
.build();
actually does nothing to set the border width. The moment I set any kind of attribute before the settings, an empty settings object is initialised and does not get overwritten later. I have not checked, but I believe this behaviour to have shown only in 0.7, since our old code worked fine before. In any case, this behaviour is in my opinion heavily misleading...
best regards,
Kai

Thanks for reporting, Kai.
Can you check whether this has also shown in 0.6.6?
There were definitely some changes in the settings (hence also the minor version change from 6 to 7), mostly to allow setting the border styles and widths separately if I am not mistaken.
The question is what you want to achieve?
Calling settings(...) directly shouldn't be necessary, everything can be done with the single options like borderWidth(...)or paddingLeft(...) etc.
Best
Stefan

Did you finally change your code to not calling .settings(...) directly or did the problem not persist?
Anyway: I am planning to remove access to .settings(...) for one of the next releases. It was never supposed to be exposed in the first place but it rather slipped through by not paying enough attention when using Lombok ... 😄


categorise plugin errors as regular/irregular, automatically report irregular

This introduces the idea of "regular" and "red flag" plugin exceptions. As discussed, the latter trigger a Sentry report. For now, there's just two "red flag" errors:

could not start ss-local.exe
could not modify the routing table

Both are Windows-specific. The first may be overkill, depending on how we decide to deal with virus checker-type software; I hope the second gives us a better idea of what kind of routing tables are out there.
The way I've implemented this, a Sentry report will now also be triggered for any other unexpected exceptions on connect/disconnect. I believe this is how Sentry is intended to be used :-)
I tackled this by diving into the code from app.ts#connectServer down and couldn't resist a few other bits and bobs along the way:

connectServer and disconnectServer should not return anything, since they're (top-level methods, essentially) event handlers
improve electron-promise-ipc typing
clarify purpose of OutlinePluginError, comment which bits must be kept in sync
factor out getServerAndCardByServerId into getServerByServerId and getCardByServerId, add typings
when running in Electron on Linux/Mac, use FakeOutlineConnection
some general improvements to FakeOutlineConnection
move the "convert number to Error" code into errors.ts (making it a kind of static constructor)

@fortuna PTAL, I added a TODO to rename OutlinePluginError.


added hamburger navbar

closes #12

Codecov Report

:exclamation: No coverage uploaded for pull request base (development@55ef1d1). Click here to learn what that means.
The diff coverage is n/a.

@@              Coverage Diff              @@
##             development     #13   +/-   ##
=============================================
  Coverage               ?   0.90%
=============================================
  Files                  ?      22
  Lines                  ?     774
  Branches               ?       0
=============================================
  Hits                   ?       7
  Misses                 ?     767
  Partials               ?       0

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 55ef1d1...500e012. Read the comment docs.


[fix][client] Fix logging problem in pulsar client

Modifications

Fix wrong order of the parameters in the error message when unsubscribe failed.
Log Could not get connection while getLastMessageId -- Will try again in {} ms  before it's task actually scheduled.

Verifying this change

[x] Make sure that the change passes the CI checks.

This change is a trivial rework / code cleanup without any test coverage.
Does this pull request potentially affect one of the following parts:

If the box was checked, please highlight the changes

[ ] Dependencies (add or upgrade a dependency)
[ ] The public API
[ ] The schema
[ ] The default values of configurations
[ ] The threading model
[ ] The binary protocol
[ ] The REST endpoints
[ ] The admin CLI options
[ ] The metrics
[ ] Anything that affects deployment

Documentation

[ ] doc
[ ] doc-required
[x] doc-not-needed
[ ] doc-complete

Matching PR in forked repository
PR in forked repository: https://github.com/Shawyeok/pulsar/pull/10

Codecov Report

Merging #21094 (c225712) into master (dab5b2f) will increase coverage by 0.10%.
Report is 6 commits behind head on master.
The diff coverage is 66.66%.

@@             Coverage Diff              @@
##             master   #21094      +/-   ##
============================================
+ Coverage     73.03%   73.13%   +0.10%
- Complexity    32363    32384      +21
============================================
  Files          1887     1887
  Lines        139860   139860
  Branches      15384    15384
============================================
+ Hits         102140   102291     +151
+ Misses        29634    29467     -167
- Partials       8086     8102      +16

Flag
Coverage Δ

inttests
24.22% <0.00%> (?)

systests
25.05% <0.00%> (-0.06%)
:arrow_down:

unittests
72.42% <66.66%> (+0.01%)
:arrow_up:

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

Files Changed
Coverage Δ

...va/org/apache/pulsar/client/impl/ConsumerImpl.java
76.47% <66.66%> (-0.07%)
:arrow_down:

... and 81 files with indirect coverage changes


Githubaction phpstan

phpstan needs Prestashop files to run.
This action uses docker, so it's long.
Maybe it's possible to just unzip a Prestashop release as an alternative.

The versions of Prestashop to use need to be reviewed also.

#80 does the job.


Raml08 schema ref

fixes #37 and #38

@glodieu any issues with this? if no, then i'll merge into master tomorrow


Plugin/simple template engine (#1643)

Create template.js

add plugincode

Create standard.spec.js

write test

Create test.pdf

Update karma.conf.js

add template.js

Update main.js

Update standard.spec.js

Update saucelabs.karma.conf.js

forgot this sucker...

@arasabbasi whats the status of this PR? Will this plugin make it to master?

@arasabbasi whats the status of this PR? Will this plugin make it to master?

Looks quite nice. However, this can easily be implemented in user code, which is why I would not merge it for the next release.


Update vpp version

Description
We need to update VPP to the latest possible version. It must match the version used by Calico-vpp.
(look at https://github.com/projectcalico/vpp-dataplane/commit/d8288e154cfb7d757e039d3a707d67ac4a0c5e49)

Related to https://github.com/networkservicemesh/cmd-forwarder-vpp/issues/283

Prepared a couple of wireguard VPP patches:
https://gerrit.fd.io/r/c/vpp/+/38000
https://gerrit.fd.io/r/c/vpp/+/38001

Govpp update:
https://github.com/edwarnicke/govpp/pull/64

Updated


Try to make travis testing against py35

Test merge to make travis informed of py3.5
Following the #205 bug

Coverage decreased (-0.1%) to 98.937% when pulling 35962fee2c37847369d2fd669441781ac3b59b34 on Fale:py35 into 0f25947d2d3a8f42a6e264774e9d7c58dd50e220 on ansible:master.

Coverage decreased (-0.1%) to 98.937% when pulling 27786d522b72a5faca138b4f54d03dd68f1ff903 on Fale:py35 into 0f25947d2d3a8f42a6e264774e9d7c58dd50e220 on ansible:master.

Coverage decreased (-0.1%) to 98.937% when pulling 95c4350ec8d59ba9ec0b0b31f88a25db0fc7429e on Fale:py35 into 0f25947d2d3a8f42a6e264774e9d7c58dd50e220 on ansible:master.

I think this PR is now ready to be merged (to be read as: I'm not trying any more, since I believe that the goal has been reached)

Nice! I see the same test failure in python3.5 as what I saw in my own experimentation. My understanding is a little iffy about what it's doing with flake8. Is it running it along with every python interpreter? Maybe we can get the python2.6 tests running if we selectively avoided importing flake8 in the python2.6 environment?
@jlaska the tox.ini file is undergoing an overhaul here, and I would like to get your eyes and @jangsutsr's on it as well.

Coverage increased (+0.002%) to 99.04% when pulling a6f642b08479b2cb5045c84fe27d19ee76787649 on Fale:py35 into 0f25947d2d3a8f42a6e264774e9d7c58dd50e220 on ansible:master.

Coverage decreased (-0.1%) to 98.939% when pulling 8ffa325edb8046652a94fbf11d97a6ced552f580 on Fale:py35 into 0f25947d2d3a8f42a6e264774e9d7c58dd50e220 on ansible:master.

Coverage increased (+0.002%) to 99.04% when pulling 22bfb19e80921e0d62f81e02edf7d721f733b865 on Fale:py35 into 0f25947d2d3a8f42a6e264774e9d7c58dd50e220 on ansible:master.

Nice! I see the same test failure in python3.5 as what I saw in my own experimentation.

Yep :)

My understanding is a little iffy about what it's doing with flake8. Is it running it along with every python interpreter?

Exactly, this because flake8 may find different things on different version. IE: https://github.com/ansible/tower-cli/pull/207/files#diff-f18495dd8eef8f8a3fc1c1828f84eedfL51 was passing on py2.7 but failing all higher versions.

Maybe we can get the python2.6 tests running if we selectively avoided importing flake8 in the python2.6 environment?

Done :) (sorry for the way too many iterations doing so :()

Tested locally, for instance, sudo tox . -e py34 is working fine. Everything looks good to me.

Any progress on this?

@Fale We've approved this PR and will make it the first step towards Python 3.5/2.6 compatibility upgrade. Thx for your contribution!

thanks :)


No way to add and remove headers

In some dashboard situations, @alexandremeunier would like to add and remove headers easily.
Right now we only have setExtraHeaders and it manipulates an array. So you can't do:
client.setExtraHeader('...', '...');
client.unsetExtraHeader('...');
// or client.setExtraHeader('name', null); // this just adds currently

It should manipulate a map
It should have an unset

Can we make a patch in V3 for this? Thanks (that would be your first client release @Haroenv :D)
In V4 we don't have to think about this first, we will add it in some other way. (to be discussed)

I often see in map related API that you also have a 3rd method to check if a value is set. Also I would be interested to get the actual value of a key, and this method could fit the previous API.
You said you want to use a map. Does this mean that you'd like to use the native map implementation or does it even matter? First impression is that it's an implementation detail.
However if we were to use an actual Map object, we could expose it directly as it has an already known (as in documented as a web standard API). Not sure that's the best for us, but this is a possibility :)
Since we are only handling http headers, it should be noted that the keys and the values are string

Using a Map might seem like a good idea, mostly because It's already polyfilled in the dashboard, and we're moving to a "Bring you own Polyfill" situation in V4, but I'm not convinced that this would be "allowed", since technically we support IE8 in the JS client.
For reference, the support for Map is IE11/Edge, Chrome 38/51, Safari 7/10, Firefox 13/42  (there are several parts to the spec)
cc @alexandremeunier

We should move to a Map if it provides real benefits then yes. But the current mobile support is poor no?

I dunno about the implementation details right now, for V3 we need only a simple object.

Well the benefit is an API that we don't have to invent. The cons is obviously that it is less nice in terms of doc. I would probably not go for that either (also the fact that you must bring a polyfill is not great)
However, I still think we need an accessor for values of the headers. WDYT?

Eh, it's implemented with a regular object now in a few minutes, I think this discussion isn't needed @bobylito :)

However, I still think we need an accessor for values of the headers. WDYT?

There's now a getExtraHeader, but yes it was needed indeed

closed in https://github.com/algolia/algoliasearch-client-javascript/commit/0271935f48f04cb7575a6568d863c59e0f723800


[TIR] Fix Tensorization IR-Comparator for Annotations

This PR fixes the way of comparison in which the tensorization IR-comparator deals with annotations.
Prior to this PR, the comparator requires the annotation values from LHS and RHS to be exactly the same, which is, in fact, never possible. And this PR removes this comparison requirement (with a regression unit test).
bool TensorizeComparator::CompareAnnotation(const std::pair<String, ObjectRef>& lhs,
                                            const std::pair<String, ObjectRef>& rhs) {
  if (lhs.first != rhs.first) return false;
  if (!lhs.second.same_as(rhs.second)) return false;  // <== The values would never be the same.
                                                      //     Thus this line should be removed.
  return VisitExpr(Downcast<PrimExpr>(lhs.second), Downcast<PrimExpr>(rhs.second));
}

cc @spectrometerHBH @vinx13

Thanks! This is merged!


Number of funding per project inconsistency

Diagram says that project has 0..* funding
In JSON schema there as array without limitation, so 0..* as well
But table in README states 0..1

I think this is the same as #42, which has a PR: #41.


Using INTER_LINEAR instead of INTER_NEAREST

Hello,
In the rotate function in utility.py, I recommend using INTER_LINEAR instead of INTER_NEAREST, as linear interpolation provides better image quality. Although the nearest neighbor method is faster, preserving image quality is essential for this deskewing library, especially since it is intended for documents that will undergo OCR processing.
output_image = cv2.warpAffine(
src=image,
M=M,
dsize=(w, h),
flags=cv2.INTER_NEAREST,
borderMode=border_mode,
borderValue=None if border_mode == cv2.BORDER_REPLICATE else border_value,
)

@aymen20002005 Thank you so much for your feedback!
I would greatly appreciate if you could make a Pull Request to move the flag flags=cv2.INTER_NEAREST, to the parameter of the rotate function. The default value could be what you suggested.
Thank you so much <3

Thank you, @phamquiluan!
I have submitted the pull request.

Thank you for the PR @aymen20002005, I have a comment, please have a check https://github.com/phamquiluan/jdeskew/pull/24#discussion_r1838981259


using an unsupported field selector should return an error

the current field selector registration accepts any field selector keys, even unsupported ones:
https://github.com/kubernetes-incubator/service-catalog/blob/d9d0ea84029e4b9f18ba3a8a0c1baee72bbd714f/pkg/apis/servicecatalog/v1alpha1/conversion.go#L24-L34
that should return an error for any unsupported field selector key

cc @spadgett

This is a candidate for 0.1.1


Remove reference to /* That’s all, stop editing! Happy publishing. */ line

The multisite setup instructions say to add the multisite config above the /* That’s all, stop editing! Happy publishing. */ line in the config/application.php file.
However, this file does not have that line. This should be updated to use a different marker (like above the Config::apply() line or above the $env_config ... line.
This would need to be added to the filter that already exists to change the network setup page.

The existing filter only applies to the configuration code, not the full text of this screen. No filter currently exists for the rest of the content on the page. Created https://github.com/pantheon-systems/pantheon-mu-plugin/issues/55 to fix this in the mu-plugin first.


Fix cell rewriting some more.

Don't ask.
(Actually you can ask, hope the comments are enough.)

by now it begs the question whats wrong with just using a metaclass, they would avoid all the rewriting and ensure subclasses will always be handled correctly

Just arrived home, flake8 fails, good night. :)

Welcome home!
cough In my defense, the code works, it's a pyflakes bug. cough

Could you add the test case from #269 to test_dark_magic too please?

by now it begs the question whats wrong with just using a metaclass, they would avoid all the rewriting and ensure subclasses will always be handled correctly

Maybe, but it also adds a bunch of unknown unknowns. :|  It’s hard to know what obscure edge cases we break by that.

I'll add the test when I get some time, it's no problem.

I see you've already added it 💋


RemovedInDjango20Warning: from django.core.urlresolvers import resolve

Django==1.10.3
django-debug-toolbar==1.6
I'm getting following RemovedInDjango20Warning warning:
.../venv/local/lib/python2.7/site-packages/debug_toolbar/panels/request.py:3:
RemovedInDjango20Warning:
Importing from django.core.urlresolvers is deprecated in favor of django.urls.
from django.core.urlresolvers import resolve

(stacktrace has been wraped for presentation)
The change was added way back Django in Jan 2016 here.

Thanks for the report! This issue is already fixed in the master branch and will be part of the next release. (https://github.com/jazzband/django-debug-toolbar/commit/d974015467e01a659ab83dd4ffb8ae3cfb3c55ee)
Jan 2016 is not that long ago seeing that we're still supporting Django 1.8, released in spring 2015.


GribApi in Azure functions

Hi there,
I'm finally getting around to moving my workflows (currently using wgrib2.exe) over to GribApi.  The 1.0 beta is doing a great job chewing through the Canadian Meteorological Center's grib files.
I'm also migrating my workflows into Azure Functions to reduce the load on my server when publishing new forecasts.  And that's where I'm running into problems.
I'm setting the Environment variable to point at the GribApi root
Environment.SetEnvironmentVariable("GRIB_API_DIR_ROOT", @"D:\home\data\Functions\packages\nuget\grib.api\1.0.0-beta", EnvironmentVariableTarget.Process);
But the second I call
using (GribFile file = new GribFile(TemporaryGribLocation)){...
I get the following exception.  I've checked the location where the dll is being looked for and it is there.  One thing that I'm investigating is that I think Azure Functions are on 64bit, so it's strange the x86 dll is being called on...
System.TypeInitializationException: The type initializer for 'Grib.Api.GribFile' threw an exception. ---> System.Exception: Can't load DLL D:\home\data\Functions\packages\nuget\grib.api\1.0.0-beta\Grib.Api\lib\win\x86\Grib.Api.Native.dll ---> System.ComponentModel.Win32Exception: The specified module could not be found
   --- End of inner exception stack trace ---
   at Grib.Api.Interop.Util.Win32.LoadWin32Library(String libPath) in c:\Users\eric\GribApi.NET\src\GribApi.NET\Grib.Api\Interop\Util\Win32.cs:line 36
   at Grib.Api.GribEnvironmentLoadHelper.BootStrapLibrary() in c:\Users\eric\GribApi.NET\src\GribApi.NET\Grib.Api\GribEnvironmentLoadHelper.cs:line 13
   at Grib.Api.GribEnvironment.Init() in c:\Users\eric\GribApi.NET\src\GribApi.NET\Grib.Api\GribEnvironment.cs:line 64
   at Grib.Api.GribFile..cctor() in c:\Users\eric\GribApi.NET\src\GribApi.NET\Grib.Api\GribFile.cs:line 45

Any ideas/help would be great
Thanks!

What I would do is add a ton of logging and look for the file. Does it work without SetEnvVar? Also, log the bitness to be sure.

Okay, after some debugging I think I found the issue.  I'm using 1.0.0-beta, and Grib.Api.Native.dll depends on the following

Kernel32.dll

MSVCP140D.dll

VCOMP140D.Dll

VCRUNTIME140D.dll

ucrtbased.dll
Besides Kernel32.dll, the others are not available on the server.  Sadly  you can add and register dlls either.

I'm noticing that version 0.7.1, Grib.Api.Native.dll relies on

KERNEL32.dll

MSVCP120.dll

MSVCR120.dll

VCOMP120.dll

these are available and registered on the server, but I require the 1.0.0-beta to work with the Canadian Meteorological Centeres grib files (blurg).  I'm not sure if the dependencies changed or the compile options changed with 1.0.0.  Any help would be great!

This is a duplicate of #64.
In short the Grib.Api.Native.dll in 1.0.0-beta is build against debug dlls from Microsoft Visual C++ Redistributable 2015.

Yup that's it. Thanks for the pointer

@moab360 were you ever able to get this working in an azure function?  I'm using the 1.0.0-beta4 and get
System.DllNotFoundException: 'Unable to load DLL 'Grib.Api.Native.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)'
When attempting to load the native dll.
Its specifically on this line in Grib.Api.Interop.Util.GribApiNative.cs:
		[DllImport("Grib.Api.Native.dll")] 		internal static extern void SetDefaultDefinitionsPath([MarshalAs(UnmanagedType.LPStr)]string path);
Just jumping in to see if I can determine if a dependency is missing or some other config is off.  Was there any other special steps you took to get this running in an Azure function?  Have you tried the beta4?
Thanks!

Well, turns out copying the Grib.Api.Native.dll to the functions bin folder worked.

I've had a similar experience for a project of this structure:
MyConsoleApp --> MyLibrary --> GribApi.Net
The bin folder of MyLibrary contains the Grib.Api dlls.
The dependency on MyLibrary does not causes Grib.Api dlls to be copied to the bin folder of MyConsoleApp.

Hi, I managed to use Grib.Api with a WebJobs app (Functions rely on WebJobs behind the scene).
In order to do this, you need to copy the full Grib.Api folder to Azure and reference this folder in your code.


Update failed

if a would like to do "apply update" (code-server has an update: 3.1.0) I received the message "Update failed".
Where can I find logs to understand the problem?
how could I avoid this error?

This is probably the bug in 3.0.2 where it would report the update failed even though it actually succeeded. Could you run code-server --version to verify the current version it's running?

I got the same issue when running through docker:
coder@6356ebe4a4d3:~$ code-server --version
3.0.2 e480f6527e11344a7c69b7cd024bce9379cea7f0

Hi, thank you for the quick answer.
the commande "code-server --version"  doesn't work =>
gregoryweb@deb1:~$ code-server --version
-bash: code-server : commande introuvable
But with systemctl status code-server =>
gregoryweb@deb1:~$ systemctl status code-server
● code-server.service - code-server
Loaded: loaded (/lib/systemd/system/code-server.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-04-10 22:13:28 CEST; 15h ago
Main PID: 18649 (node)
Tasks: 30 (limit: 4915)
CGroup: /system.slice/code-server.service
├─18649 /var/www/code-server/code-server-3.0.2-linux-x86_64/node /var/www/code-server/code-server-3.0.2-linux-x86_64/out/node/entry.js --auth password
├─18659 /var/www/code-server/code-server-3.0.2-linux-x86_64/node /var/www/code-server/code-server-3.0.2-linux-x86_64/out/node/entry.js --auth password
└─18670 /var/www/code-server/code-server-3.0.2-linux-x86_64/node /var/www/code-server/code-server-3.0.2-linux-x86_64/lib/vscode/out/vs/server/fork
I follow this tutorial to install code-server: https://www.digitalocean.com/community/tutorials/how-to-set-up-the-code-server-cloud-ide-platform-on-ubuntu-18-04-quickstart
here is my code-server.service file
[Unit]
Description=code-server
After=nginx.service
[Service]
Type=simple
Environment=PASSWORD=gregoryvk
ExecStart=/var/www/code-server/code-server-3.0.2-linux-x86_64/code-server --auth password
Restart=always
User=gregoryweb
[Install]
WantedBy=multi-user.target
------end
Some informations maybe useful:

I use code-server trough HTTP (not yet trough HTTPS...)
I had a lot of problems to install Extensions because of folder permission problems...

Thank you for your help

same issue when running through docker:
3.0.2 e480f65

Same issue with DigitalOceans one click deployment.

Interesting, so far I haven't been able to replicate. Here's what I've done (I'm running in a Docker container):

Download then run 3.0.2:

$ curl -fsSL https://github.com/cdr/code-server/releases/download/3.0.2/code-server-3.0.2-linux-x86_64.tar.gz | tar -xz
$ ./code-server-3.0.2-linux-x86_64/code-server --host <IP_ADDRESS>
info  code-server 3.0.2 e480f6527e11344a7c69b7cd024bce9379cea7f0
info  HTTP server listening on http://<IP_ADDRESS>:8080
info    - Using custom password for authentication
info    - Not serving HTTPS
info  Automatic updates are enabled
info  SSH server listening on localhost:38193

Go to localhost:8080
Press "Apply Update"
Got "Update failed" (the bug I mentioned)
Go back to shell and check output

info  Relaunching: 3.0.2 -> 3.1.0
info  code-server 3.1.0 5aded14b87e017d32d080b686515f6a26be455f1
info  HTTP server listening on http://<IP_ADDRESS>:8080
info    - Using custom password for authentication
info    - Not serving HTTPS
info  Automatic updates are enabled
info  SSH server listening on localhost:34997
info    - To disable use `--disable-ssh`

Kill code-server and double-check the version

C-c
$ ./code-server-3.0.2-linux-x86_64/code-server --version
3.1.0 5aded14b87e017d32d080b686515f6a26be455f1

As an aside, keep in mind 3.0.2 will delete the old directory so be careful if you have your own files in there. Starting from 3.1.0 code-server will move the directory instead of deleting it.

Ok for me.
Thank you.

same problem for me running  one-click code-server on digital ocean.  I will try the fix above.


TypeError: undefined is not an object (evaluating 'this.emitter.emit')

Using react-quill 2.0.0.
React 17.0.2
I've been noticing the following errors in sentry.io:
TypeError: undefined is not an object (evaluating 'this.emitter.emit')
The user was on an IPHONE, 16.5.1
Is anyone select seeing this?

having same issue


Add devcontainer

Quick git tip: to clean-up your commit history on this branch (you effectively have only one commit) -- run: git rebase master.


bump kubevirt and cdi version

need to bump the kubevirt and CDI version to the current latest version

bump kubevirt to v0.35.0
bump CDI to v1.26.1

link to PR https://github.com/rancher/harvester/pull/269

Validated


COMP: fix link error building Universal Binary on Intel Mac

Without this, building Universal Binary on an Intel Mac (but not on an ARM Mac) gives link errors for undefined symbols like _itk_png_do_expand_palette_rgb8_neon and a few others.
Introspecting the CPU type of the build machine is fundamentally incompatible with the idea of Universal Binaries.

@thewtex @dzenanz @imikejackson

I created a ticket for upstream libpng too: https://github.com/glennrp/libpng/issues/372


Use OpenAI to suggest cool trip names (paid feature)

based on location, artists, and track names

now make this into a request to OpenAI

completed with commit https://github.com/taver-ca/Taver_Hackathon/commit/ca67447fa710124580771b966c9c4aa0e6adb585


[RFC] Switch connection context manager to self

Per #234, it would be more convenient if the connection context manager
would return self instead of self.cursor(). Similarly, using a cursor
with the context manager should close the cursor.
Deleted the test, as closing a connection via the context manager will
now mean the entire test suite connection will be shutdown.

@xmnlab and @TomAugspurger -
We have an internal request from @mikehinchey to switch the behavior of the connection and cursor context managers, which this PR implements. I tried to locate the appropriate DBI spec or PEP to see what the convention was, but it doesn't appear there is one.
Having the context manager this way appears to work, both in our test suite and using pd.read_sql("select...", con) but I'm concerned that I might be missing some context. Specifically, @xmnlab I'd love your opinion on whether this affects Ibis and @TomAugspurger I'd love your opinion since I think you originally implemented the context managers.

Seems reasonable. For reference, sqlite3 returns a Connection object
In [10]: conn = sqlite3.connect(":memory:")

In [11]: with conn as foo:
    ...:     print(foo is conn)
    ...:
    ...:
True

Preliminary handful of tests with Ibis seems that it isn't an issue either

Last call @xmnlab ...let me know if you think there will be any issues, otherwise I'll merge this PR tomorrow


Feature request: xet sync command

Similar to the aws s3 sync command, I'd like to be able to sync local or remote paths/URLs into a xet repo. Specifically, it would be nice to be able to have:
xet sync <from> <to>

Where either <to> or <from> can be either of:

A local filesystem file or folder path (if folder, assumed to be recursive sync)
A URL (including a xet:// URL, or anything else that supports fsspec)

Tracked internally with https://github.com/xetdata/xethub/issues/3484.


Changed default value of MAX_COMBO_PRICE

Since the maximum daily reward for combos is currently 5_000_000, I think a reasonable default value should earn at least 50% of the expense. Previously it was 10_000_000 which is too expensive!

It might be better to set MAX_COMBO_PRICE: int = 5000000 to avoid loss of gain. What do you think?


Update info on XSEDE

Since XSEDE isn't funded anymore, update course to reflect that.
https://www.xsede.org/
https://web.archive.org/web/20220820060934/https://www.xsede.org/

will need to update images...


Version 10.0.190401.789 Not Supported

I've tried many solutions, including this one https://github.com/stascorp/rdpwrap/issues/999#issuecomment-586757085 but nothing seems to work.

Have you solved it?

I've tried many solutions, including this one https://github.com/stascorp/rdpwrap/issues/999#issuecomment-586757085 but nothing seems to work.

windows version 19042.928 win10 20H2
RDPWARP Version 10.0.190401.789
now work！！！！！
try this link download rdpwarp.ini https://github.com/sebaxakerhtc/rdpwrap.ini/blob/master/rdpwrap.ini

The auto update script retrieved through the above link indeed works to enable RDP connection on 10.0.19042.928 (shown by winver).
rdpwrap.ini downloaded by the script says however "10.0.19041.964-...". Nonetheless this works.

Updated my INI file for this.

Updated my INI file for this.

Yep!  It's work for me, thx

I've tried many solutions, including this one https://github.com/stascorp/rdpwrap/issues/999#issuecomment-586757085 but nothing seems to work.

windows version 19042.928 win10 20H2
RDPWARP Version 10.0.190401.789
now work！！！！！
try this link download rdpwarp.ini https://github.com/sebaxakerhtc/rdpwrap.ini/blob/master/rdpwrap.ini

Hi
the latest rdpwrap.ini (21332.1000-SLInit) do not worked on windows 10 20h2.
Please help me figure out how to fix this problem.
Thanks

Duplicate of https://github.com/stascorp/rdpwrap/issues/1317


added some info

added some info on

Thanks for the submission @jaichhabra . These additions are duplicating content from index.rst . I think it's better to keep this page unique.
I will however suggest a doc page that could use some updates that you could work on. This page: https://github.com/AcademySoftwareFoundation/OpenColorIO/blob/master/docs/FAQ.rst has a table of supported LUT formats which is out of date. You could look at this directory: https://github.com/AcademySoftwareFoundation/OpenColorIO/tree/master/src/OpenColorIO/fileformats for all the currently supported LUT formats, and add what is missing.


Spring - test unreleased azure-core and remove jackson 2.12 explicitly specified in Spring

This PR is to test the changes made in https://github.com/Azure/azure-sdk-for-java/pull/19918, which to work with both Jackson 2.12 and 2.11, to see whether a Spring Boot project can work with the new azure-core.

Remove the managed Jackson dependencies specified in Spring testing projects
Change appconfiguration, cosmos depending azure-core to the unreleased version.

/azp run java - spring - tests

/azp run java - spring - tests

/azp run java - appconfiguration - tests

/azp run java - cosmos - tests

Closing this PR now, it's only used for test.


Hide directive syntax when not editing

As a user, I don't want to see the directive syntax when not editing it directly. If the cursor is not within the result of the query, those lines could be hidden.
Example:

Here I'd like to just see the resulting link as generated by the directive.

Yeah, I played with this, but the UX issue is: should this be 100% hidden? When should the directive appear? At some point I just showed the # and / little widget, but not the directive code, but that just results in a lot of whitespace. Suggestions?

what about this: when the user's cursor enters in the contained text, the enclosing syntax is shown? Just like in the code blocks, the first line is also hidden when not within the code block.

Right, that's worth trying.

Reopening because I want to add some sort of visual indication, perhaps a border-left for directive bodies. To make it somewhat visual where directives are at work.


⚠ Bofrost.de has degraded performance

In 7f2b453, Bofrost.de (https://www.bofrost.de) experienced degraded performance:

HTTP code: 200
Response time: 1457 ms

Resolved: Bofrost.de performance has improved in e23bc49 after 41 minutes.


[SUPPORT] Spark Read Hudi Tables with WARN Message

Describe the problem you faced
I'm using Spark 3.3.2 with Hudi v0.14.1 package to read hudi table(0.12.3), then I will get warn message as below:
WARN  HoodieFileIndex:367 - Met incompatible issue when converting to hudi data type, rollback to list by prefix directly

What does it mean? How to avoid this warning?
Environment Description

Hudi version : 0.14.1

Spark version : 3.3.2

Hive version :

Hadoop version :

Storage (HDFS/S3/GCS..) : GCS

Running on Docker? (yes/no) : no

@michael1991 Can you let us know more about when are you getting this issue. This is expected when the partition column datatype can't relate to hudi data type based on below mapping. Can you provide writer configuration and schema of the table.

Thanks for your quick response! @ad1happy2go
Spark writer configuration:
newDetails.write.format("hudi")
          .option(RECORDKEY_FIELD.key(), "id")
          .option(PRECOMBINE_FIELD.key(), "id")
          .option(SCHEMA_EVOLUTION_ENABLED.key(), "true")
          .option(DATABASE_NAME.key(), "db_prod")
          .option(INDEX_TYPE.key(), "BLOOM")
          .option(COMBINE_BEFORE_UPSERT.key(), "false")
          .option(INSERT_PARALLELISM_VALUE.key(), "30")
          .option(UPSERT_PARALLELISM_VALUE.key(), "200")
          .option(CLEANER_COMMITS_RETAINED.key(), "4")
          .option(ASYNC_CLEAN.key(), "false")
          .option(PARTITIONPATH_FIELD.key(), "req_date,req_hour")
          .option(TBL_NAME.key(), TBL_LOG_INCREMENT_DETAILS_NAME)
          .option(OPERATION.key(), INSERT_OPERATION_OPT_VAL)
          .option(WRITE_PAYLOAD_CLASS_NAME.key(), CUSTOM_PAYLOAD_CLASS)
          .option(COPY_ON_WRITE_RECORD_SIZE_ESTIMATE.key(), "64")
          .mode(SaveMode.Append).save(TBL_LOG_INCREMENT_DETAILS_PATH)

Schema just like: id string, req_date string, req_hour string, etc.

Can you do newDetails.printSchema and check the datatype of req_date and req_hour

@michael1991 Ideally you should not see this warning if both are strings. When are you getting this issue? On Read or Write? Can you provide some reproducible script if possible?

I'm using Spark 3.3.2 with Hudi 0.12.3 to write table a, meanwhile i'm using Spark 3.3.2 with Hudi 0.14.1 to read from table a and write to table b. All tables are COW type, just dataframe.write.mode("append").format("hudi").save(path) and spark.read.format("hudi").load(path).
Or is it possible to enable debug log to find more helpful things?

@michael1991 Ohh, I was checking 0.14.1. Not sure if you will find anything useful in debug logs but you can turn it on like this -
spark.sparkContext.setLogLevel("DEBUG")

I find HoodieFileIndex.scala:367 at branch "release-0.14.1" as below

Seems using index to filter files from metadata, am i right?
If so, the table is using bloom filter with metadata disabled, would it be the root cause?

@michael1991 Not sure if this one is related to warning.

I use spark3.5+hudi0.15.0 to write and read same table, this warning message could be seen too.

@michael1991 Not sure if this one is related to warning.

Hi @ad1happy2go , I resolved this warning message by setting "hoodie.datasource.write.partitionpath.urlencode" -> "true",, seems if I enable Hive Style Partitioning, urlencode setting must be set to avoid this warning message.


FR: Electric availability block

Agile requirement
As a business owner, I want to inform my clients of the availability of a truck in an electric version to promote electric trucks.
Description
Create a new "Electric availability" block following this design -> https://www.figma.com/file/oNwe2jHIICPMIe551EY62l/Mack-Reskin---Full-Project?type=design&node-id=2243-162383&mode=design&t=jgUGGxVA2ALLjbnf-4
Acceptance Criteria

As an editor, I can add a new "Electric availability" block to any page.
This block follows the figma design and style.
As an editor I can add any link to this block.
As a user when I click on the block, I'm redirected to the truck PDP in an electric version.

already implemented.


Fix misspelling identified by misspell

Required for all non-trivial PRs

[x] Sign CLA (if not already signed)

Fix go report card issues identified by misspell.

@bvwells if you can get the conflicted file sorted out I'm happy to merge this. Thanks so much!

Thanks @e-dard!


Convert UID2Manager To Actor

Refactored the original @MainActor class version of UID2Manager  to an actor object.  This will enable the identity data managed by UID2Manager to be accessible on different threads and queues while still safely managing shared mutable state.

I had to read up about Swifts Actor to better understand.

A helpful resource that I used was the "Protect mutable state with Swift actors" from WWDC21.
https://developer.apple.com/videos/play/wwdc2021/10133/


Feature request - load configuration from HashiCorp Vault

This is slightly a different case for loaders since it is not local but we use Vault \ Secrets Manager to hold configuration data such as DB URL, password, etc (which are different per env).

This would be really cool, does it need a new dependency? If so, I think it should be optional. Another possibility is to provide this loader as a separate package like classyconf-vault?
Something to consider is that we would need to have a "configuration of the configuration" since the loader would need to be configured:
VaultLoader(
        url='https://localhost:8200',
        token='asdf',
        namespace='/test/'
)

So the loader would need to get this params from somewhere
class VaultConf(ClassyConf):
    VAULT_URL = Value(default="https://localhost:8200")
    VAULT_TOKEN = Value()
    VAULT_NAMESPACE = Value()

    class Meta:
        loaders = [ EnvFile(".env") ]

vault_conf= VaultConf()

vault_loader = VaultLoader(
    url=vault_conf.VAULT_URL,
    token=vault_conf.VAULT_TOKEN,
    namespace=vault_conf.VAULT_NAMESPACE
)

ini_loader = IniFile("another_conf.ini")

class MyAppConf(ClassyConf):
    class Meta:
        loaders = [ vault_loader, ini_loader ]

Makes sense?


BUG: Why can't I get the right result with quad？

Describe your issue.
This is my code:
y = lambda x:1/(3.81*(2*np.pi)**0.5)*np.exp(-(x-116)**2/(2*3.81**2)) y1= quad(y,0,np.inf) print(y1)
This is result:
(8.871948827438051e-22, 1.718414783764695e-21)
Reproducing Code Example
y = lambda x:1/(3.81*(2*np.pi)**0.5)*np.exp(-(x-116)**2/(2*3.81**2))
y1= quad(y,0,np.inf)
print(y1)

Error message
(8.871948827438051e-22, 1.718414783764695e-21)

SciPy/NumPy/Python version information
1.7.3

There is only a very tiny portion of that integration region that has any significant mass. quad() isn't magic; it has to sample the function at a finite number of places, and it happened to not find ones near 116 where all the mass is. Using a large, but finite range like (0, 1000) would help.
|30> y = lambda x:1/(3.81*(2*np.pi)**0.5)*np.exp(-(x-116)**2/(2*3.81**2))
...> y1 = quad(y, 0, 1000)
...> print(y1)
(0.9999999999999993, 1.2774716999478267e-10)

@rkern Thank you for your answer. It really helped.
But why can't I get the correct result when I integrate another long function? Is there any solution?This is my code:

y=lambda  x:0.19*9.31*10**(8)/(10/60*(2*np.pi)**0.5*3.81)*np.exp(-116/(8.3145*400)*10**3-9.31*10**(8)/10*60*          x/8.314*np.exp(-x/(8.314*400))/(x/(8.314*400))**2*(((x/(8.314*400))**4+18*(x/(8.314*400))**3+86*(x/(8.314*400))**2+         96*(x/(8.314*400)))/((x/(8.314*400))**4+20*(x/(8.314*400))**3+120*(x/(8.314*400))**2+240*(x/(8.314*400))+120)))*\              1/(3.81*(2*np.pi)**0.5)*np.exp(-(x-116*10**3)**2/(2*3.81**2))
y1=quad(y,0,1000)
print (y1)
#This is rerult:
(0.0, 0.0)

Most of the mass of that one is around 116*10**3, which is well outside of those bounds.


clonedeep vs structuredClone

Just want to point out that there is a structuredClone natively that dose not require any dependencies...
https://github.com/APIDevTools/json-schema-ref-parser/blob/26d824b4b230f4ce2471f73401a4b6f7c7c67ac2/package.json#L98
maybe consider doing a conditional top level import or something like that?
const clone = globalThis.structuredClone || await import('lodash.clonedeep')

or let the user know that it requires support for structuredClone and it needs to be polyfilled

We still support node 16, and structuredClone was introduced in 17. Once we drop support for 16 we'll get rid of the lodash dependency

Turns out we didnt need cloneDeep or any dependency at all
https://github.com/APIDevTools/json-schema-ref-parser/commit/52ab2f8d2c05eba0dff99d68f34f793f3d340d50


compatibility for upcoming PySide2-5.11 preview

After 2 years of brewing, PySide2-5.11 will reach preview status in may 2018, with:

full support per the Qt Company,
full API support at release time of Qt versions.

Would it be possible to have PySide2 compatibility for that may 2018 milestone ?
(QtPy, vendored or not,  being a possible intermediate layer)
see http://blog.qt.io/blog/category/qt-for-python/
for PySide2 bug tracker, see https://wiki.qt.io/Qt_for_Python

Done


Webpack plugins

wasm-bindgen could be used as a Webpack loader and the different manipulation to the wasm binary could be done using Webpack's plugins.
The configuration would look like that:
module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  }

  module: {
    rules: [
      {
        test: /\.rs$/,
        loader: "wasm-bindgen/loader",
        type: "webassembly/experimental"
      }
    ]
  },

  plugins: [
    new RustFinalizer({ /* config */ })
  ]

};

The user would import the Rust entry point: import("./entry.rs").then(...) and Webpack will run the toolchain and apply the according configuration (based on its env for example).
That will also enable watch rebuilds.

Currently it's unclear to me if wasm-bindgen needs to be a loader, maybe we could have a generic Rust loader and an additional wasm-bindgen plugin.

The user would import the Rust entry point: import("./entry.rs").then(...) and Webpack will run the toolchain and apply the according configuration (based on its env for example).

Nitpick: We talked about this a little on the WG call yesterday, but I think we want to reference crates (or the .wasm file produced by compiling a crate) not rust source files. Nearly 100% of Rust development uses cargo to compile crates rather than compiling individual .rs files with rustc. The .rs file as an entry point is not the idiomatic paradigm for Rust programming.

Yes, I remember about that. I had in mind that we could use an entrypoint with the JS API and pulling in all the deps.
Does it make sense to talk about an entrypoint in Rust world? The loader is a bonus IMO but we can definitely import the built wasm.

D'oh for some reason I didn't realize that @xtuc == sven >_<

Does it make sense to talk about an entrypoint in Rust world?

I'm not super familiar with "entry points" in webpack, but my guess is that the equivalent in Rust is a crate. When you add a dependency on another Rust project, you add something like:
extern crate thing_we_are_depending_on;

I have to admit that I don't have enough experience with Rust but I would use a file in my crate that defines an API that will be exposed to JS. That's what I called the entrypoint because that's the impression from JS.
Also that will be used to trigger the compilation from a webpack loader, and as discussed using cargo.

@fitzgen maybe it's not the best place but I've published<EMAIL_ADDRESS>Do you want to setup wasm-snip here?

@xtuc sure! did you see #6? That has some discussion about when we want to wasm-snip.

Update:
We should spawn wasm-pack instead of the individual binaries.


GH Pages: setup a sitemap generator #292

Created sitemap.njk (includes info about all urls, date of its last modification and its priority of (in our case, homepage - 1,0, others - 0,9), robots.njk (contains link to our sitemap file).

:tada: This PR is included in version 3.0.0-beta.16 :tada:
The release is available on:

npm package (@beta dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


🗑 Deprecation promotion of notEmptySetOf function to error level

📝 Description
We would like to promote the deprecation of the notEmptySetOf function to an error level.
🔗 Dependencies
This issue is blocked by the following ones:

[x] #513

✅ Checklist

[ ] Promote the deprecation of this declaration, remove its tests and update the unreleased changelog.
[ ] Close this issue as completed and update tracking ones if present.

We are not ready to implement this change.


Can't access data in GET query

Hello, while trying to do
Route::add('/greet?([a-z]*)', function ($who) use($pug)
{
    echo $pug->renderFile('index.pug', [
        'title' => 'Hello ' . $who,
    ]);
});

I get only rendered 'Hello'
URL: /greet?World

Hi @ay0ks,
I think the problem is the ? sign inside your pattern. This is nothing about this router. Its about PHP basics. You try to parse out a query string using the router. But the problem is that the query parsing is already finished by the web server or PHP at an early stage of runtime before your code gets executed. All the router sees is that you are on the path '/greet'. Everything behind the ? was cut away by the web server or by PHP before the router fires. This is normal PHP behavior. You have two options:

Use the router to parse the string but don't use ?. For example use a virtual sub folder:

Route::add('/greet/([a-z]*)', function ($who) use($pug)
{
    echo $pug->renderFile('index.pug', [
        'title' => 'Hello ' . $who,
    ]);
});

Use the global PHP $_GET Array to access your query values. There you will find everything defined after your ? inside the URL:

Route::add('/greet)', function () use($pug)
{
    echo $pug->renderFile('index.pug', [
        'title' => 'Hello ' . $_GET['who'],
    ]);
});

This works with this URL: /greet?who=world
Note: Its not recommended to use a variable key like /greet?world because the first word should be a fixed key. You could use a dynamic key but this is not recommended in my opinion:
Route::add('/greet)', function () use($pug)
{
    $query_keys = array_keys($_GET);
    echo $pug->renderFile('index.pug', [
        'title' => 'Hello ' . $query_keys[0]
    ]);
});


[stable/wordpress] Add extra configuration parameters

Is this a new chart
No.
What this PR does / why we need it:
It adds new configuration parameters (extraEnv, extraVolumeMounts, and extraVolumes) to the Wordpress deployment.
One use-case is the configuration of SSL for the database connection:
# in values.yaml

# Additional container environment variables
extraEnv: []
  - name: WORDPRESS_DATABASE_SSL_CA_FILE
    value: /path/to/ca_cert

# Additional volume mounts
extraVolumeMounts: []
  - name: ca-cert
    subPath: ca_cert
    mountPath: /path/to/ca_cert

# Additional volumes
extraVolumes: []
  - name: ca-cert
    secret:
      secretName: ca-cert
      items:
      - key: ca-cert
        path: ca_cert

Checklist

[x] DCO signed
[x] Chart Version bumped
[x] Variables are documented in the README.md
[x] Title of the PR starts with chart name (e.g. [stable/mychartname])

/ok-to-test

Thanks for the PR @rjasper-frohraum. Looks good to me, there's only a thing with the version numbering.

/ok-to-test
/lgtm


perl-File-Modified: 0.07 -> 0.10

Motivation for this change
Build-time tests were failing.
Things done

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

[ ] NixOS
[ ] macOS
[x] Linux

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[x] Fits CONTRIBUTING.md.

I'd suggest to use the package as generated by nix-generate-from-cpan:
  FileModified = buildPerlPackage rec {
    name = "File-Modified-0.10";
    src = fetchurl {
      url = "mirror://cpan/authors/id/N/NE/NEILB/${name}.tar.gz";
      sha256 = "6b50b1aab6ec6998a017f6403c2735b3bc1e1cf46187bd134d7eb6df3fc45144";
    };
    meta = {
      homepage = https://github.com/neilbowers/File-Modified;
      description = "Checks intelligently if files have changed";
      license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ];
    };
  };

Then you also get a nice meta section :-)

done

Looking good. Rebased into master in e480b4baeefadeb39c1a9fdcbbebd3808cfe41bc. Thanks!
I'll cherry-pick this and your previous PR into 17.09 (and maybe 17.03) as well.


Refactor, find hwmon folder and get GPU details

See my issue #10.
I've refactored a bit, splitting class into separate files and doing the loading of the GPU details from that class.
I've also fixed #3 using the PCIIdentificationResolver library.

Oh yeah and if you could update the README to-do list as well!


how to use different CSS in differne resolution

i need make footer align center in XS view,but align right in LG view,VISIBLE and HIDDEN can not help me to make,how to use different CSS in different resolution

You need to write custom CSS to do that.


Website is more recent than github

Last change in this repository is on Nov. 2014 and there is no fork that matches to the running website.
@Azolo How did you update rubygems.org?

@Azolo How did you update rubygems.org?

I'm guessing you meant rubyinstaller.org. :wink:
This was an attempt at taking the CMS that backs the site now and turn it into a not CMS generated site. It never got that far.

Of course rubyinstaller.org - sorry!
Provided that you agree with the switch to RubyInstaller2 for ruby-2.4, could I prepare the texts in the CMS? English is not my native language - insofar I would be glad if someone could review what I wrote. Do you have an idea how we can arrange this?


Make it easier to explore this project and understand what it is

Hi Yossi
I was trying to find out what this is and how you are using Panel. it takes time because there are no images and I need to install locally to try it out.
Please make it easier. Please

Add visualization (image, gif, video) to README and Docs to quickly communicate what this is.
Add binder link to make it easy for users to try out.

[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/jmosbacher/xepmts/HEAD)

When running on binder some dependencies do not get installed

holoviews

Hi Mark, thank you for your suggestions! Ill try to make it a but more clear at a glance.
This is actually an internal package for the XENON dark matter experiment, we use it to make our PMT database easily accessible to our collaboration members.
Im not sure how useful this would be for the wider python community but I guess I could try to make it a bit more accessible.
I attempted to put the core stuff that may be useful for others in a separate package called eve_panel, and have that as a dependency for this package. I dont think eve_panel is "production ready" yet but I definitely intend to get it to that point where it can be used by others.
BTW I am a big fan of your work in panel.


Update Push Notifications Connector module dependencies

We are in the process of releasing a new version of the module v7.3.0. This should be published after the release.
We will communicate when the module is released.

We have just released the module version 7.3.0 here

@ConnorLand , can this PR be merged?

There are conflicts, and this PR needs to target Mx9 docs as well.
I will enact this PRs changes in both Mx9 and Mx10 docs manually, post the commit here, and then close the PR.

The conflict was easy to fix so I just duplicated all the changes into Mx9 within this PR. Thanks @MendixMurshed !


[.NET] Deeplinks aren't behaving as expected in Teams

Platform
What platform is your issue or question related to? (Delete other platforms).

.NET

Author or host
Author
If you're an author, who are you sending cards to?
Microsoft Teams
Version of SDK
NuGet 1.2.4
Details
I think I've found a bug with how adaptive cards in teams handle Internal DeepLinks.
If I make my bot send a simple non-adaptivecard message that uses a deeplink that links to a channel using the format [Text](deeplink) then it works fine, clicking the link in Teams takes you straight to the channel without leaving teams, which is the desired behaviour.
If I use the same link in an adaptivecard, again with the format [Text](deeplink) - clicking the resulting link in Teams causes a browser to be opened, which then opens a popup asking if I want to open in Teams, if I say yes, it will open the channel in my Teams app - so it works, but the experience isn't as smooth as when you're not using adaptive cards.
Here is an example below, the first line will send a message in Teams and it will work fine, but the card version will go via the browser.
I've censored the groupid and tenantid, don't care so much about the channelid because it's a test channel
The code below is also just hacky test code
var link = "https://teams.microsoft.com/l/channel/19%3ab974293647e040a587221882fa67f2a0%40thread.skype/Incident+1+-+fff+2019-12-14?groupId=GROUPID&tenantId=TENANTID";

await turnContext.SendActivityAsync(MessageFactory.Text($"[fff]({link.Replace("+", "%2520")})"),
                        cancellationToken);

AdaptiveCard card = new AdaptiveCard();

card.Body.Add(new AdaptiveTextBlock()
{
   Text = $"[tttt]({link.Replace("+", "%2520")})",
   Size = AdaptiveTextSize.Large,
   Weight = AdaptiveTextWeight.Bolder
});

Attachment attachment = new Attachment()
{
    ContentType = AdaptiveCard.ContentType,
    Content = card
};

turnContext.Activity.Attachments = new List<Attachment>();
turnContext.Activity.Attachments.Add(attachment);

await turnContext.SendActivityAsync(turnContext.Activity, cancellationToken);

@brettyj you are trying to render this on Teams Desktop i am assuming? @dclaux thoughts on this one? How does this scenario work again? Is this something that Teams controls via the resp Action handler or is this something that AdaptiveCards renderer handles? Also @siduppal / @clearab FYI

Hey, yeah @shalinijoshi19 this is on Teams Desktop - I haven't actually tested it on mobile. It only seems to be an issue if I render the link via an adaptive card.

@dclaux thoughts on this one real quick ? Thanks

@dclaux / @matthidinger thoughts?

I think @siduppal would have to help with this one. The .NET lib is just creating the JSON payload as built (@brettyj if you can post the JSON response that would also help), but Teams decides how links are opened. It seems like in other card types (e.g., HeroCard) they detect if the URL starts with teams.microsoft.com and if so make the app respond instead of opening a browser

For Adaptive Cards, deeplinks within Teams that don't jump out to browser are only supported via Action.OpenUrl buttons at this time.
@Wajeed-msft can you take a look?

@brettyj , To use deeplink within Teams, You can use OpenUrl action type in adaptive card.
Here is the sample code.
card.Actions.Add(new AdaptiveOpenUrlAction()
{
    Title = "Link Text",
    Url = new Uri("link_url"),
});

Thanks for the reply. I'll take a look when I get chance, the project I was working on has been put on the back burner due to reasons, but I'll try and test this to confirm if it fixes the initial issue.

@brettjenkins , I am closing this. If you still face any issue, please reopen it.


Add support for disk creation

In this patch, we tried to add the following things:

The support of persistent disk creation using softlayer-go client

Change the name of fs_disk things to softlayer_disk things

Add a fake client for mocking softlayer-go client instead of using existing mock client defined in softlayer-go project. We think it's a better solution for the unit testings, as softlayer-go is also a go lib that cpi project relies on. This new mock will remove the dependency of softlayer-go during unit testing.

close this one as the latest code is submitted at PR: https://github.com/maximilien/bosh-softlayer-cpi/pull/19


feat: implement skip-plugins option

PR Type
What kind of change does this PR introduce?
[ ] Bugfix
[x] Feature
[ ] Code style update (formatting, local variables)
[ ] Refactoring (no functional changes, no api changes)
[ ] Build related changes
[ ] CI related changes
[ ] Documentation content changes
[ ] Other... Please describe:

What is the current behavior?
The CLI does not have an option to skip plugins from the commands
Closes: #603
What is the new behavior?
The CLI has an option skipPlugins that will ignore the specified plugins from the command.
Does this PR introduce a breaking change?
[ ] Yes
[x] No

Awesome @BioPhoton! Thank you, I will handle those.

We are ready for a new review! Thanks for the great suggestions.

Thx for the updates! The collect.e2e.test.ts should get reverted and we are good to go imho.

Awesome! The collect.e2e.test.ts did get reverted, but I will move the changes to the print.e2e as you suggested.

Thank you both! This was fun, let's do it again :)