sendrecv not working with long distance connection

This is an odd problem. I have been working with sendrecv.py and everything works ok in a local connection and if I connect one peer to a 4G connection and the other with wifi.
However, when I try a long-distance connection, it doesn't work anymore.
To reproduce the error, I made a fresh install of Raspbian and GStreamer, connected it with local wifi (also with 4G connection) and tested sendrecv.py and sendrecv.c with https://webrtc.nirbheek.in/ for two scenarios: client connected with local network or in a remote desktop (I tested a remote Windows located in Germany and I'm located in Portugal). The local network works fine but the remote connection doesn't.

'''

It looks like the web browser only receives public ICE candidates with IPv6 addresses, and only sends out IPv4 addresses. Maybe they just can't find each other with that.

Any ideas on how to solve the "problem"? Because I don't see any error with the signaling process.

I suspect you need to either get an IPv6 address for the machine running the web browser, or an IPv4 address for the other one. Other than that, I think you'll need a turn server to relay the traffic

I just realized that I'm having an error equivalent to this issue. The sender is only sending host candidates. But I've defined the STUN server in the pipeline. So, no idea why is not generating srflx candidates.

Oh, silly. I thought the python example had the same stun setup as the other examples.
Just add the stun server at line 19:
webrtcbin name=sendrecv bundle-policy=max-bundle stun-server=stun://stun.l.google.com:19302
for example

Reopen if that doesn't fix it for you.

Sorry, I didn't explain correctly.  I do have the stun servers correctly configured in the pipeline. I even tried to manually set the property of the stun server with:
.set_property('stun-server', 'stun://stun.l.google.com:19302')
and still just getting host candidates. I also tried to use a turn server, but it keeps generating only host candidates. Besides that, it fires (the sendrecv.py) a lot of candidates, resembling this other issue

I'd run with GST_DEBUG=3 and check if there's any warning level messages in the debug log. I'm not sure what things could go wrong to mean STUN discovery of your public IP isn't working.
Or perhaps your machine just isn't behind a firewall and therefore only has a public IP - and it just doesn't have an IPv4 one?

I made a simple test with trickle-ice that is able to find good candidates (of type srflx).
I also made a fresh install of Gstreamer (1.16.2) in a fresh install of Raspbian 10 +(buster), and the webrtc-sendrecv.c example with https://webrtc.nirbheek.in/ resulted in the same problem. When in a local network works fine but not when the browser is in a different network. I show bellow the output of the non-working example, followed but the browser console output.

Connecting to server...
> GET  HTTP/1.1
> Soup-Debug-Timestamp:<PHONE_NUMBER>
> Soup-Debug: SoupSession 1 (0xf9f090), SoupMessage 1 (0xeb15b8), SoupSocket 1 (0x1243cc0)
> Host: webrtc.nirbheek.in:8443
> Upgrade: websocket
> Connection: Upgrade
> Sec-WebSocket-Key: CaGoqQ8dmNJOzHslR3q7GQ==
> Sec-WebSocket-Version: 13
> Accept-Encoding: gzip, deflate

< HTTP/1.1 101 Switching Protocols
< Soup-Debug-Timestamp:<PHONE_NUMBER>
< Soup-Debug: SoupMessage 1 (0xeb15b8)
< Upgrade: websocket
< Connection: Upgrade
< Sec-WebSocket-Accept: jU4QIPXX4FS+84BIidC5BylZCBg=
< Date: Sat, 22 Feb 2020 03:39:56 GMT
< Server: Python/3.6 websockets/8.0.2

Connected to signalling server
Registering id 3175 with server
Registered with server
Setting up signalling server call with 1576
Created data channel
Starting pipeline
Sending offer:
v=0
o=-<PHONE_NUMBER>3611703 0 IN IP4 <IP_ADDRESS>
s=-
t=0 0
a=ice-options:trickle
a=group:BUNDLE video0 audio1 application2
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 <IP_ADDRESS>
a=setup:actpass
a=ice-ufrag:4XZYqg0VEizs6zTjSk3EH/PmJO6ds154
a=ice-pwd:vmraxP6xR/t1FBjuD4UNN+spTVVCp05y
a=rtcp-mux
a=rtcp-rsize
a=sendrecv
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 nack pli
a=framerate:30
a=ssrc:1490386908 msid:user862260575@host-9809914d webrtctransceiver0
a=ssrc:1490386908 cname:user862260575@host-9809914d
a=mid:video0
a=fingerprint:sha-256 41:AA:01:2F:7E:4A:E3:E4:69:96:51:CA:96:5C:A4:15:CE:61:57:37:2C:7D:24:E2:FF:38:ED:07:FA:8B:C6:6E
m=audio 0 UDP/TLS/RTP/SAVPF 97
c=IN IP4 <IP_ADDRESS>
a=setup:actpass
a=ice-ufrag:4XZYqg0VEizs6zTjSk3EH/PmJO6ds154
a=ice-pwd:vmraxP6xR/t1FBjuD4UNN+spTVVCp05y
a=bundle-only
a=rtcp-mux
a=rtcp-rsize
a=sendrecv
a=rtpmap:97 OPUS/48000/2
a=rtcp-fb:97 nack pli
a=fmtp:97 sprop-maxcapturerate=48000;sprop-stereo=0
a=ssrc:3291853745 msid:user862260575@host-9809914d webrtctransceiver1
a=ssrc:3291853745 cname:user862260575@host-9809914d
a=mid:audio1
a=fingerprint:sha-256 41:AA:01:2F:7E:4A:E3:E4:69:96:51:CA:96:5C:A4:15:CE:61:57:37:2C:7D:24:E2:FF:38:ED:07:FA:8B:C6:6E
m=application 0 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 <IP_ADDRESS>
a=setup:actpass
a=ice-ufrag:4XZYqg0VEizs6zTjSk3EH/PmJO6ds154
a=ice-pwd:vmraxP6xR/t1FBjuD4UNN+spTVVCp05y
a=bundle-only
a=mid:application2
a=sctp-port:5000
a=fingerprint:sha-256 41:AA:01:2F:7E:4A:E3:E4:69:96:51:CA:96:5C:A4:15:CE:61:57:37:2C:7D:24:E2:FF:38:ED:07:FA:8B:C6:6E

Received answer:
v=0
o=-<PHONE_NUMBER>870850554 2 IN IP4 <IP_ADDRESS>
s=-
t=0 0
a=group:BUNDLE video0 audio1 application2
a=msid-semantic: WMS
m=video 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4 <IP_ADDRESS>
a=rtcp:9 IN IP4 <IP_ADDRESS>
a=ice-ufrag:bEC2
a=ice-pwd:ocMypN/dnm5Wx+X5xpCKBMWx
a=ice-options:trickle
a=fingerprint:sha-256 CA:70:E0:35:91:16:93:30:9B:21:CC:3E:DA:4F:73:CC:F7:48:2B:5D:16:31:CA:A1:E3:60:20:5A:A9:A4:55:F5
a=setup:active
a=mid:video0
a=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 nack pli
m=audio 9 UDP/TLS/RTP/SAVPF 97
c=IN IP4 <IP_ADDRESS>
a=rtcp:9 IN IP4 <IP_ADDRESS>
a=ice-ufrag:bEC2
a=ice-pwd:ocMypN/dnm5Wx+X5xpCKBMWx
a=ice-options:trickle
a=fingerprint:sha-256 CA:70:E0:35:91:16:93:30:9B:21:CC:3E:DA:4F:73:CC:F7:48:2B:5D:16:31:CA:A1:E3:60:20:5A:A9:A4:55:F5
a=setup:active
a=mid:audio1
a=recvonly
a=rtcp-mux
a=rtpmap:97 OPUS/48000/2
a=fmtp:97 minptime=10;useinbandfec=1
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 <IP_ADDRESS>
b=AS:30
a=ice-ufrag:bEC2
a=ice-pwd:ocMypN/dnm5Wx+X5xpCKBMWx
a=ice-options:trickle
a=fingerprint:sha-256 CA:70:E0:35:91:16:93:30:9B:21:CC:3E:DA:4F:73:CC:F7:48:2B:5D:16:31:CA:A1:E3:60:20:5A:A9:A4:55:F5
a=setup:active
a=mid:application2
a=sctp-port:5000

Connecting to server wss://webrtc.nirbheek.in:8443
webrtc.js:47 Registering with server
webrtc.js:109 Received HELLO
webrtc.js:47 Registered with server, waiting for call
webrtc.js:109 Received {"sdp":{"type":"offer","sdp":"v=0\r\no=-<PHONE_NUMBER>3611703 0 IN IP4 <IP_ADDRESS>\r\ns=-\r\nt=0 0\r\na=ice-options:trickle\r\na=group:BUNDLE video0 audio1 application2\r\nm=video 9 UDP/TLS/RTP/SAVPF 96\r\nc=IN IP4 <IP_ADDRESS>\r\na=setup:actpass\r\na=ice-ufrag:4XZYqg0VEizs6zTjSk3EH/PmJO6ds154\r\na=ice-pwd:vmraxP6xR/t1FBjuD4UNN+spTVVCp05y\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=sendrecv\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 nack pli\r\na=framerate:30\r\na=ssrc:1490386908 msid:user862260575@host-9809914d webrtctransceiver0\r\na=ssrc:1490386908 cname:user862260575@host-9809914d\r\na=mid:video0\r\na=fingerprint:sha-256 41:AA:01:2F:7E:4A:E3:E4:69:96:51:CA:96:5C:A4:15:CE:61:57:37:2C:7D:24:E2:FF:38:ED:07:FA:8B:C6:6E\r\nm=audio 0 UDP/TLS/RTP/SAVPF 97\r\nc=IN IP4 <IP_ADDRESS>\r\na=setup:actpass\r\na=ice-ufrag:4XZYqg0VEizs6zTjSk3EH/PmJO6ds154\r\na=ice-pwd:vmraxP6xR/t1FBjuD4UNN+spTVVCp05y\r\na=bundle-only\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=sendrecv\r\na=rtpmap:97 OPUS/48000/2\r\na=rtcp-fb:97 nack pli\r\na=fmtp:97 sprop-maxcapturerate=48000;sprop-stereo=0\r\na=ssrc:3291853745 msid:user862260575@host-9809914d webrtctransceiver1\r\na=ssrc:3291853745 cname:user862260575@host-9809914d\r\na=mid:audio1\r\na=fingerprint:sha-256 41:AA:01:2F:7E:4A:E3:E4:69:96:51:CA:96:5C:A4:15:CE:61:57:37:2C:7D:24:E2:FF:38:ED:07:FA:8B:C6:6E\r\nm=application 0 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 <IP_ADDRESS>\r\na=setup:actpass\r\na=ice-ufrag:4XZYqg0VEizs6zTjSk3EH/PmJO6ds154\r\na=ice-pwd:vmraxP6xR/t1FBjuD4UNN+spTVVCp05y\r\na=bundle-only\r\na=mid:application2\r\na=sctp-port:5000\r\na=fingerprint:sha-256 41:AA:01:2F:7E:4A:E3:E4:69:96:51:CA:96:5C:A4:15:CE:61:57:37:2C:7D:24:E2:FF:38:ED:07:FA:8B:C6:6E\r\n"}}
webrtc.js:272 Creating RTCPeerConnection
webrtc.js:174 {"video":true,"audio":true}
webrtc.js:47 Created peer connection for call, waiting for SDP
webrtc.js:55 DOMException: Requested device not found
setError @ webrtc.js:55
Promise.catch (async)
createCall @ webrtc.js:287
onServerMessage @ webrtc.js:133
webrtc.js:224 Incoming stream
webrtc.js:47 Remote SDP set
webrtc.js:47 Got SDP offer
webrtc.js:47 Got local stream, creating answer
webrtc.js:109 Received {"ice":{"candidate":"candidate:1 1 UDP<PHONE_NUMBER> 2001:818:e860:3300:18ae:c47a:ee6:4dee 56097 typ host","sdpMLineIndex":0}}
webrtc.js:94 Got local description: {"type":"answer","sdp":"v=0\r\no=-<PHONE_NUMBER>870850554 2 IN IP4 <IP_ADDRESS>\r\ns=-\r\nt=0 0\r\na=group:BUNDLE video0 audio1 application2\r\na=msid-semantic: WMS\r\nm=video 9 UDP/TLS/RTP/SAVPF 96\r\nc=IN IP4 <IP_ADDRESS>\r\na=rtcp:9 IN IP4 <IP_ADDRESS>\r\na=ice-ufrag:bEC2\r\na=ice-pwd:ocMypN/dnm5Wx+X5xpCKBMWx\r\na=ice-options:trickle\r\na=fingerprint:sha-256 CA:70:E0:35:91:16:93:30:9B:21:CC:3E:DA:4F:73:CC:F7:48:2B:5D:16:31:CA:A1:E3:60:20:5A:A9:A4:55:F5\r\na=setup:active\r\na=mid:video0\r\na=recvonly\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 nack pli\r\nm=audio 9 UDP/TLS/RTP/SAVPF 97\r\nc=IN IP4 <IP_ADDRESS>\r\na=rtcp:9 IN IP4 <IP_ADDRESS>\r\na=ice-ufrag:bEC2\r\na=ice-pwd:ocMypN/dnm5Wx+X5xpCKBMWx\r\na=ice-options:trickle\r\na=fingerprint:sha-256 CA:70:E0:35:91:16:93:30:9B:21:CC:3E:DA:4F:73:CC:F7:48:2B:5D:16:31:CA:A1:E3:60:20:5A:A9:A4:55:F5\r\na=setup:active\r\na=mid:audio1\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:97 OPUS/48000/2\r\na=fmtp:97 minptime=10;useinbandfec=1\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 <IP_ADDRESS>\r\nb=AS:30\r\na=ice-ufrag:bEC2\r\na=ice-pwd:ocMypN/dnm5Wx+X5xpCKBMWx\r\na=ice-options:trickle\r\na=fingerprint:sha-256 CA:70:E0:35:91:16:93:30:9B:21:CC:3E:DA:4F:73:CC:F7:48:2B:5D:16:31:CA:A1:E3:60:20:5A:A9:A4:55:F5\r\na=setup:active\r\na=mid:application2\r\na=sctp-port:5000\r\n"}
webrtc.js:109 Received {"ice":{"candidate":"candidate:2 1 TCP<PHONE_NUMBER> 2001:818:e860:3300:18ae:c47a:ee6:4dee 9 typ host tcptype active","sdpMLineIndex":0}}
webrtc.js:109 Received {"ice":{"candidate":"candidate:3 1 TCP<PHONE_NUMBER> 2001:818:e860:3300:18ae:c47a:ee6:4dee 51477 typ host tcptype passive","sdpMLineIndex":0}}
webrtc.js:109 Received {"ice":{"candidate":"candidate:4 1 UDP<PHONE_NUMBER> <IP_ADDRESS> 54297 typ host","sdpMLineIndex":0}}
webrtc.js:109 Received {"ice":{"candidate":"candidate:5 1 TCP<PHONE_NUMBER> <IP_ADDRESS> 9 typ host tcptype active","sdpMLineIndex":0}}
webrtc.js:109 Received {"ice":{"candidate":"candidate:6 1 TCP<PHONE_NUMBER> <IP_ADDRESS> 34239 typ host tcptype passive","sdpMLineIndex":0}}
webrtc.js:109 Received {"ice":{"candidate":"candidate:7 1 UDP<PHONE_NUMBER> fe80::3894:f555:599a:a32c 33925 typ host","sdpMLineIndex":0}}
webrtc.js:109 Received {"ice":{"candidate":"candidate:8 1 TCP<PHONE_NUMBER> fe80::3894:f555:599a:a32c 9 typ host tcptype active","sdpMLineIndex":0}}
webrtc.js:109 Received {"ice":{"candidate":"candidate:9 1 TCP<PHONE_NUMBER> fe80::3894:f555:599a:a32c 55441 typ host tcptype passive","sdpMLineIndex":0}}
webrtc.js:109 Received {"ice":{"candidate":"candidate:1 2 UDP<PHONE_NUMBER> 2001:818:e860:3300:18ae:c47a:ee6:4dee 48879 typ host","sdpMLineIndex":0}}
webrtc.js:109 Received {"ice":{"candidate":"candidate:2 2 TCP<PHONE_NUMBER> 2001:818:e860:3300:18ae:c47a:ee6:4dee 9 typ host tcptype active","sdpMLineIndex":0}}
webrtc.js:109 Received {"ice":{"candidate":"candidate:3 2 TCP<PHONE_NUMBER> 2001:818:e860:3300:18ae:c47a:ee6:4dee 47387 typ host tcptype passive","sdpMLineIndex":0}}
webrtc.js:109 Received {"ice":{"candidate":"candidate:4 2 UDP<PHONE_NUMBER> <IP_ADDRESS> 39467 typ host","sdpMLineIndex":0}}
webrtc.js:109 Received {"ice":{"candidate":"candidate:5 2 TCP<PHONE_NUMBER> <IP_ADDRESS> 9 typ host tcptype active","sdpMLineIndex":0}}
webrtc.js:109 Received {"ice":{"candidate":"candidate:6 2 TCP<PHONE_NUMBER> <IP_ADDRESS> 53703 typ host tcptype passive","sdpMLineIndex":0}}
webrtc.js:109 Received {"ice":{"candidate":"candidate:7 2 UDP<PHONE_NUMBER> fe80::3894:f555:599a:a32c 40928 typ host","sdpMLineIndex":0}}
webrtc.js:109 Received {"ice":{"candidate":"candidate:8 2 TCP<PHONE_NUMBER> fe80::3894:f555:599a:a32c 9 typ host tcptype active","sdpMLineIndex":0}}
webrtc.js:109 Received {"ice":{"candidate":"candidate:9 2 TCP<PHONE_NUMBER> fe80::3894:f555:599a:a32c 57749 typ host tcptype passive","sdpMLineIndex":0}}
webrtc.js:47 Sending SDP answer
webrtc.js:47 Disconnected from server
webrtc.js:256 dataChannel.OnClose Event {isTrusted: true, type: "close", target: RTCDataChannel, currentTarget: RTCDataChannel, eventPhase: 2, …}
webrtc.js:47 Connecting to server wss://webrtc.nirbheek.in:8443
webrtc.js:47 Registering with server
webrtc.js:109 Received HELLO
webrtc.js:47 Registered with server, waiting for call

GStreamer uses libnice to do the ICE discovery, so you could be hitting a libnice bug. Or there's something else going on entirely that I'm missing.

Yes, it can be.
Do you know if there any method I can add the local ICE candidate manually? I was thinking I could generate manually a candidate, add it locally and send it to the client browser.

You can send any ICE candidates you like to the remote browser, but it won't work because there's no mechanism for telling the local webrtcbin to listen on those candidates (again, that all happens inside libnice and really needs fixing there)

I also have this exact same problem with long distance connections (even over just  20 miles).  Has anybody resolved this problem yet?    If the issue is libnice related, what must we do?  I have installed gstreamer1.0-nice, libnice10, and libnice-dev from Ubuntu repos (along with all other listed gstreamer libs and dependencies from here but the problem remains.  Would building libnice from source make the difference?  The Ubuntu repo installs version  0.1.14-1 of libnice.  Do the latest versions resolve this problem?   Or, does the problem having nothing to do with libnice?  Has anybody got the webrtc-sendrecv{.py,.c} demo working over long distances?

I also have this exact same problem with long distance connections (even over just 20 miles). Has anybody resolved this problem yet? If the issue is libnice related, what must we do? I have installed gstreamer1.0-nice, libnice10, and libnice-dev from Ubuntu repos (along with all other listed gstreamer libs and dependencies from here but the problem remains. Would building libnice from source make the difference? The Ubuntu repo installs version 0.1.14-1 of libnice. Do the latest versions resolve this problem? Or, does the problem having nothing to do with libnice? Has anybody got the webrtc-sendrecv{.py,.c} demo working over long distances?

Try with libnice 0.1.15 and see if it works


Pornhub date and uploader's username issues

Please follow the guide below

You will be asked some questions and requested to provide some information, please read them carefully and answer honestly
Put an x into all the boxes [ ] relevant to your issue (like this: [x])
Use the Preview tab to see what your issue will actually look like

Make sure you are using the latest version: run youtube-dl --version and ensure your version is 2017.08.13. If it's not, read this FAQ entry and update. Issues with outdated version will be rejected.

[X] I've verified and I assure that I'm running youtube-dl 2017.08.13

Before submitting an issue make sure you have:

[X] At least skimmed through the README, most notably the FAQ and BUGS sections
[X] Searched the bugtracker for similar issues including closed ones

What is the purpose of your issue?

[X] Bug report (encountered problems with youtube-dl)
[ ] Site support request (request for adding support for a new site)
[ ] Feature request (request for a new functionality)
[ ] Question
[ ] Other

The program doesn't recognize the video upload date or the uploader's username and maybe other stuff.
Example URLs (warning, NSFW, lol):
https://www.pornhub.com/view_video.php?viewkey=ph56940e86a653a
https://www.pornhub.com/view_video.php?viewkey=ph56c4c63310af0
https://www.pornhub.com/view_video.php?viewkey=ph5676caec66fb0

No explicit upload date is provided by the website.


Create MidElementDeletion.java

Issue #56

Thanks for contribution pls star this repo and follow afterwards ur PR is merged


Hugo 0.7.1 pin

This is a workaround until we update hugo-learn-theme.
Related-Issue: #158

Thank you guys


Optimizing lambda

Hi,
What is a good way to optimize lambda here in cases where the true answer is unknown? I tried using the MSE of a validation set as a guide but upon testing it leads to many false detections. Is there a better way to optimize lambda?
Thank you,
Suryadi

Hi there, that's a good question. This problem comes up whenever you're training a sparse model, whether it's a cMLP/cLSTM for GC discovery or a lasso regularized linear model, and I think it's usually difficult.
One solution would be: if you have a rough idea of how many connections there should be in your system, tune lambda to find the value that returns that level of sparsity. Another solution would be to try a range of lambda values and plot the MSE that is achieved with each sparsity pattern (by retraining after learning the sparsity pattern, and evaluating the MSE on an validation dataset); on this plot, there may be a point at which using larger lambda values results in much worse MSE, so a reasonable choice would be the highest lambda value that still gives good MSE.
Hopefully that makes sense. This is definitely a challenging aspect of the method.

I see, and yes that makes sense. Thank you for the quick response!


test "require interface"

We're currently testing the ability to require("mocha").it and require("mocha").describe but none of the other exported interface functions: https://github.com/mochajs/mocha/blob/f20de56637b2223f614ce40adc0d41a58030f042/test/unit/required-tokens.spec.js
Full list here: https://github.com/mochajs/mocha/blob/2bc9c4d1d638c8a95250757dd23724f788918abe/lib/mocha.js#L200-L214
I think the test file above should just use the global describe and it, but inside the it we should assert that the exports all are equal to the corresponding globals. It would be "more brittle" in the sense that we would have to change the test if we wanted to change the implementation from a simple reference copy to having separate global and exported functions, but I have a hard time imagining why we'd want/need to do that at the moment, and equality comparison would be fine for the current implementation and waaaaay easier than coming up with a way to use every last one of them and check for the correct behavior (and the current test doesn't even do the correct-behavior part for the two functions it does try using).
While we're in there, let's remove the done since the test is (and would still be) synchronous.
Note that once #2972 is resolved we should include xit (and whatever other x functions we have) in the new test.

#3004 should have been caught by some kind of test. Can we combine the concept of the JSAPI tests with the concept of the specific interfaces' tests?


OME preprocessing hotfix

Hotfix for #181

Codecov Report
Patch coverage has no change and project coverage change: +0.01 :tada:

Comparison is base (66e9717) 30.65% compared to head (542f0d2) 30.66%.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #182      +/-   ##
==========================================
+ Coverage   30.65%   30.66%   +0.01%
==========================================
  Files          66       66
  Lines        2512     2511       -1
==========================================
  Hits          770      770
+ Misses       1742     1741       -1

Impacted Files
Coverage Δ

steinbock/io.py
53.00% <0.00%> (+0.26%)
:arrow_up:

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


Feature request: Save data in JSON format

I suggest saving data in JSON format in addition to the existing CSV format.
By using JSON, a dynamic shields.io badge could be created with the help https://dynamic-badge-formatter.demolab.com/.

Hey. Sorry for the late response.

saving data in JSON format

Current totals, or time series?

Current totals would perfectly fit my needs.


Reduce repetition in derive(Error) docstring and error message

If the docstring is just text and the format of the error is too, just use the doc-string in both places. If the error Display impl has a format string,  the doc-string could be concatenated to the doc-string. E.g.
/// Too many inputs
#[error("{inputs}, maximum: {maximum}")]
TooManyInputs

which displays as  Too many inputs. 3 maximum: 2

Related: https://github.com/dtolnay/thiserror/issues/104

There is a possibility to rely on displaydoc to produce the Display implementation, without integrating it into the custom derive.
It, however, will require putting all the format-string to the doc-comment:
rust
/// Too many inputs. {inputs}, maximum: {maximum}
TooManyInputs

Displaying as Too many inputs. 3, maximum: 2.
The rustdoc will look not as good though


Set-ExcelColumn -Hide troubles (Null array)

Having an issue here trying to hide a particular column within a worksheet. I am piping the contents of an existing .csv on my computer into the Export-Excel function which is all working fine, but I am having trouble with some formatting. All I want to do is hide column 6 (F) on the worksheet that I am generating in the workbook.
Relevant code is as follows:
$importCsv = Import-Csv -Path $csvPath -Delimiter ','
$pkg = $importCsv | Export-Excel -Path $spreadsheetPath -WorksheetName "June 2019" -TableName table -TableStyle Light4 -FreezeTopRow
$wsData = $pkg.Workbook.Worksheets["June 2019"]
Set-ExcelColumn -Worksheet $wsData -Column 6 -Hide

When I run the script the spreadsheet gets generated with all my data, the table is formatted how I like, it all goes into a sheet called "June 2019", etc. but the single column does not hide and I get the following error:
Cannot index into a null array.
+ $wsData = $pkg.Workbook.Worksheets["June 2019"]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray

Set-ExcelColumn : Cannot bind argument to parameter 'Worksheet' because it is null.
+ Set-ExcelColumn -Worksheet $wsData -Column 6 -Hide
+                            ~~~~~~~
+ CategoryInfo          : InvalidData: (:) [Set-ExcelColumn], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Set-ExcelColumn

Any help is greatly appreciated.

Looks like you need -PassThru on the Export-Excel

Thanks for the suggestion, I tried using -PassThru but nothing happens at all when I run the script with that switch. Perhaps it is because I am running on a Mac? I have not been able to test it on Windows yet. Wondering if that might be the issue.

Does the error go away when you use -PassThru? If so, yes, could be an issue on the Mac.

Yes, there is no error at all when I run it with -PassThru, the file just does not write. Not going to worry about it - thanks again.


[WIP] New UI for 1.12

This is the beginning of developing a new UI for Shipyard that is Docker 1.12 compatible.  The new UI will be using React instead of Angular.
The UI is currently limping along, the user is able to log in and list containers.  With a few backend tweaks we should be able to get the rest of the UI to display services, tasks, containers, images, nodes, volumes, networks.
I think there are few remaining items for this PR before merging:

[x] Route APIs to engine instead of swarm
[x] Ensure all APIs that require credentials are given the authorization header and token

Once we have these items, we should have a functional (but limited) UI.

This is awesome!  I'll take a look and give it a spin :fireworks:

Here are some early screenshots of the progress so far:

Made a few more modifications, it now works with shipyard and I just successfully created a service using shipyard!

Still lots to do, but this should provide basic login/logout functionality along with being able to browse the various swarm mode resources.  You're also able to create a basic service and volume.
Needs some time now mapping the API requests/responses for the various pages now most of the routes are in place.
Help on this would be welcome!

Will the legacy swarm support still stay?

@tronicum: I'll defer to @ehazlett on the overall plans for 1.12.  Just hacking in my spare time to get a new UI together that supports the new service constructs etc. :smile:

@tronicum shipyard tries to stay on par with the latest docker release.  i'm not sure if we have the resources to support both legacy swarm and new swarm mode but I'm not opposed to contributions.
@tombee thanks for all of the hard work!

@tombee after thinking about this some i think we should allow non swarm mode as well.  maybe an option to skip the "Initialize" or move the Initialize to the Service view to activate later.  That way we can still manage containers, etc. without having to enable it if not needed.
thoughts?

@ehazlett @tronicum
Personally I think it'd be great if we could support both, I think it's more a matter of time and resources than anything.  My worry with the 1.12 work is that there's quite a bit of work we need to do already to support swarm mode without bringing all of the legacy that comes with non-swarm mode.
The other concern is that I'm not sure how 'compatible' the two modes will be with each other.  Deployment of swarm mode and non-swarm mode might be quite different, and the feature sets they will support might be quite different too.
For the moment I'd like to concentrate on getting a robust and clean swarm mode solution in place.  We can see where to go from there, depending on what time/resources we have available at the time.

Any specific reason it doesnt work on Mac. When i go to http://<IP_ADDRESS>:8080/ it shows blank.

@markrey Could you try using Docker for Mac? The development setup needs
access to the code mounted as a volume and inotify events for watching for
changes.
I can't tell exactly what's gone wrong there from this error, but the 404
on the /swarm API suggests there might have been an issue setting up the
proxy/backend on docker-machine.
On Sat 16 Jul 2016 at 00:14, markrey<EMAIL_ADDRESS>wrote:

Any specific reason it doesnt work on Mac. When i go to
http://<IP_ADDRESS>:8080/ it shows blank.
[image: screen shot 2016-07-15 at 4 09 52 pm]
https://cloud.githubusercontent.com/assets/8405940/16890784/b0523274-4aa6-11e6-845c-c28a7c4302d5.png
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/shipyard/shipyard/pull/837#issuecomment-233090364,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AADqpLPiOBzVXhRt8BFPOEnEv3RP3WDSks5qWBRggaJpZM4JBLvG
.

lgtm so far.  I'm going to merge this so we can start working on the branch instead of this PR.
Thanks!

Woohooo 🎉
On Sun 17 Jul 2016 at 02:27, Evan Hazlett<EMAIL_ADDRESS>wrote:

Merged #837 https://github.com/shipyard/shipyard/pull/837.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/shipyard/shipyard/pull/837#event-725332521, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AADqpHTIClYe5oZy9pFSEMWTbXwapFKxks5qWYT9gaJpZM4JBLvG
.

Awesome!

Thanks @thaJeztah! :smile:

@tombee thanks for your work on this!
I'll be testing today, if there's anything you'd like me to poke at in particular,  feel free to let me know.  Also, I think that only supporting Swarm Mode vs Swarm Mode + Swarm was the right call -- if 2 years in dockerland has taught me anything, it's that one should stick with the mothership or be abandoned :).

Old release support swarm and new release support swarm mode. I think user could choose by themselves.

Greetings, Guys!
2nd day with Docker, new swarm mode rocks! It's awesome you support it so fast. My question regarding installation part for 1.12 version for a newbie. Is there any way to get new shipyard container? Could you probably push it into docker hub?
I have no Go or NodeJS knowledge and only 2nd day testing docker. So there no way I'll be able to compile all stuff from repo manually in near future.
Maybe you have a timeline for documentation for the new version?
Thank you again for incredible work!

@fitz123
Similar difficulty here.  Maybe try making a .dsb bundle with compose?
I am not sure I tried that yet or not...

Just managed to install it =) My issue was checkout into origin/1.12 branch instead of 1.12
For those who're struggling like me with installation, you need to do 4 steps to get it work:

git clone https://github.com/shipyard/shipyard.git && cd shipyard
git checkout 1.12
docker-compose build
docker-compose up
And it works!

@tombee @ehazlett
Great work so far. I would really love to contribute. Is there any "starting point" where I could get my hands on?

@tombee @ehazlett
Looking great so far. Managed to clone and play with the code for a bit. Is htere any reason why the registries tab is gone? Are you supporting the ability to add a v1 or v2 ;) registry anymore or it was not omplemented yet for the new UI. Thanks a lot! Cheers!

Hi @tombee
Can you provide us with some information about release dates (or release-candidates)?

Looks really great, and its already a bit useful if you are starting doing stuff in swarm mode. Good job guys!

Looks really great.

Considering k8s dashboard more and more comfortable, where is the road of docker public easy-to-use(not CS version)?

@fitz123 I am having problems with this step. details as follows:

docker-compose up
log in http://<IP_ADDRESS>:8080
go to the "Get Started" page
Click the “Initialize” button

but ,No response after clicking.
the ssh console logs:
controller_1  | time="2016-11-10T02:50:06Z" level=debug msg="POST: /swarm/init"
On the “Initialize” page , open chrome F12 console and Refresh, Output 406 error:
GET http://<IP_ADDRESS>:8080/swarm 406 (Not Acceptable)
Click the “Initialize” button, Output 500 error:
POST http://<IP_ADDRESS>:8080/swarm/init 500 (Internal Server Error)
How to solve this problem? thanks.

Good question Daniel.
I would point at any number of third party tools like crane, but.... This
is a weak point for docker and it's starting to show.  I'm interested to
see a roadmap on this?
Basically, I think that the community wants to have a good looking UI and a
predictable back end for that UI.  DAB != Predictable.  Swarm didn't make
any sense at all after it hit the scene.  I know it's experimental, but
it's effect is clear and undeniable. It threw my conception of multi host
docker cluster straight into the fire. I still don't really get its
relationship to my compose files.
If it helps I consider myself a fairly advanced user of docker, kube, and
rancher and a mid-low gopher.  I want to love swarm mode but sure haven't
been able to bring myself to.
On Nov 10, 2016 10:03 AM, "agenge"<EMAIL_ADDRESS>wrote:

@fitz123 https://github.com/fitz123 I am having problems with this
step. details as follows:

docker-compose up

log in http://<IP_ADDRESS>:8080

go to the "Get Started" page

Click the “Initialize” button

but ,No response after clicking.
the ssh console logs:
controller_1 | time="2016-11-10T02:50:06Z" level=debug msg="POST:
/swarm/init"
On the “Initialize” page , open chrome F12 console and Refresh, Output 406
error:
GET http://<IP_ADDRESS>:8080/swarm 406 (Not Acceptable)
Click the “Initialize” button, Output 500 error:
POST http://<IP_ADDRESS>:8080/swarm/init 500 (Internal Server Error)
How to solve this problem? thanks.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/shipyard/shipyard/pull/837#issuecomment-259590186,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AGz6ideDO6mpKn9sTvuL4PG2EDstOXOtks5q8olpgaJpZM4JBLvG
.

@faddat swarm mode is one of the best things that have happen in docker since it inception, but surely it is rough in the corners and I had to develop quite a big chunk of tooling for our release process and still it is not 100% perfect...

I agree with all of this, and want to note that any complaint is directed
at Docker, Inc.
DAB is still somewhat "what!??"
;)
On Nov 10, 2016 6:30 PM, "Manuel Astudillo"<EMAIL_ADDRESS>wrote:

@faddat https://github.com/faddat swarm mode is one of the best things
that have happen in docker since it inception, but surely it is rough in
the corners and I had to develop quite a big chunk of tooling for our
release process and still it is not 100% perfect...
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/shipyard/shipyard/pull/837#issuecomment-259667541,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AGz6iQsQ8VHFpMJ0-nv57B9sg-zeIDuiks5q8wBUgaJpZM4JBLvG
.

@faddat @manast @agenge @aleksejlopasov @borzamircea
I'm really sorry for the late response on this! :disappointed: I've had a few things on my plate and just haven't been able to get around to continuing with this work.
Now that things have settled down in the 1.12 API, it should reduce some of the churn I was facing.
I'll re-test soon with the latest version of 1.12 and fix the swarm incompatibility issues folks had mentioned.  I think this is probably because join tokens changed between the RC that I was building this on and the 1.12 release.
@jmzwcn
Shipyard isn't an official product of Docker, Inc. and its development isn't sponsored by Docker, Inc., so I think this is probably a question that should be directed at the Docker, Inc. forum.  It's not something that I am able to answer, sorry! :smile:

@tombee no problem!
None of us are entitled to your time -- Thanks for all of your work on this!
I want to get involved. What can I do to help you vet out the integration with swarm features?
I have an existing swarm cluster with Traefik running as the service LB.
I'm starting to understand the relation between the necessary components of shipyard, but when I spun it up with docker-compose, I wasn't able to access the published ports externally from the node (only on localhost).
I started playing around with converting the compose stack to services but haven't succeeded yet.

ZOMG.
I had no idea Shipyard wasn't funded by Docker.
Where might someone send you some bitcoin?

@stealthybox
You're very welcome, it'd be great to have your help on Shipyard!  You're free to help out wherever you feel you are most comfortable contributing.  If you want to discuss ideas/suggestions, feel free to reach out on IRC to @ehazlett or I.  We're regularly on #shipyard on freenode.
@faddat
That's very kind 😄, but I contribute to shipyard because I enjoy it, so don't worry about it!  You can repay Shipyard contributors by continuing to support us with your help and ideas.

@stealthybox @agenge @michelvocks
I've put a PR up that hopefully gets the branch working again.  I'm assuming any swarm init errors were probably due to not specifying a listen address.  So I've added some additional error reporting and a listen address field to get us moving again.
https://github.com/shipyard/shipyard/pull/901

When I hit Craete Service button, nothing happened. I just see an error log in browser console like;
TypeError: null is not an object (evaluating 'internalInstance.getHostNode')


Feature request - option for Cyclic machines to require energy

Cyclic machines do valuable work saving the player much time.  However all of this work is now done for free without energy.  It may be more "accurate" to require some form of energy to do all this work.  When you get a chance, please add an option to use one of the various energy APIs available.
Thanks!

Ive been considering this for a while.  The things stopping me are
Balance: what to make everything cost
Which to use? Tesla? RF? forge? something else
Some of the cyclic machines are so simple they dont need a cost (block breaker)
how does it affect speed? Would uncrafter speed up with more power?  I only made the uncrafting grinder slow as a way to gate/balance it.
I think at the very least they should take burnable fuel like coal/wood.  But it might not get in until after 1.11 update, as people have been requesting that too.

After much back and forth thinking, and after porting it to 1.11.2, ive decided that energy systems dont suit this mod, i dont feel like its the right fit. You may have forgot about this ticket, but  Ill still try to put some of my thoughts here for anyone else who is wondering this too.  (forgive the typos)

I dont feel anything in Cyclic is powerful enough to need that extra restriction. There is already the cost of building the thing, and then either waiting for it to work (for a machine), or it costs durability if its an item) .  So the cost is in time or resources or both.  The most 'expesnive' things would be uncrafting, placing blocks, or harvesting crops.  but those things arent even that crazy compared to what other mods can do..  There are  mods that create blocks and resources out of the void, or create whole dimensions, or spawn tons of mobs for farming; things like that I understand gating behind a power system, at least a little bit.

Other mods sometimes have better machines than cyclic but they cost power, such as the Ender IO harvester.  well thats fine, cyclic machines are an early game option.

I make and play lots of vanilla like modpacks that dont have any RF, and i feel like this fits in those pretty decently. at least half of it if you want to config tweak stuff.

Whats the difference between a machine that runs for free.. vs a machine that costs power, and then you generate power for free over time (solar/wind/burning biofuel that you generate infinite amounts of).  Answer: well not much difference in the end you just have to run a cable.

Even without those eco friendlly ways, there has been many times where i build a giant reactor from one of a handful of mods, and a bunch of power storage, and never run out.   But its not really the right fit here.

If anything, i might add a fuel cost to a few things, like an upgraded uncrafter that works super fast but burns fuel, but the fuel will be coal or something. but even that is way down the road.
❤  for the feedback

Reopening this since im considering it again.  Might not be RF but might be some other fuel / liquid / lava / something


ModelCheckpoint and SaveConfigCallback have different saving path.

Description & Motivation
I'm using LightningCLI and NeptuneLogger.
When I pass a NeptuneLogger object to Trainer class, I expect the checkpoints and config files to be saved in a path determined by the logger by default. However, the current behavior differs from my expectation.
I slightly investigated how these paths are determined. If a logger is given in a trainer, the ModelCheckpoint.dirpath is determined as shown in the code below.
https://github.com/Lightning-AI/lightning/blob/fe9e5d55bf7991ba36b76d6adae9075b93dfcaa0/src/pytorch_lightning/callbacks/model_checkpoint.py#L605
So I expect the config.yaml will be saved in os.path.join(save_dir, str(name), version). Basically, in NeptuneLogger, the version denotes an automatically assigned ID from Neptune.ai, so collaborating with version is very important.
However, the SaveConfigCallback acts as follows,
https://github.com/Lightning-AI/lightning/blob/6df43685ee2f2dd0c53eefec295e0d6c79796fd2/src/lightning/pytorch/cli.py#L243-L246
which is the same as just save_dir.
Pitch
config.yaml should be saved in os.path.join(save_dir, str(name), version).
Alternatives
None
Additional context
It is very complex to figure out the meaning, behavior, and connections of these paths, such as Trainer.default_root_dir, Trainer.log_dir, ModelCheckpoint.dirpath, 'Logger.log_dir, and Logger.save_dir. It would be nice for users if Lightning provided tutorials about it.
cc @borda

I found this problem is already mentioned in #17168

I can work on this if it is still open

https://github.com/Lightning-AI/lightning/blob/3a70714219e7d0cae243bfd80cacb9de26e55872/src/lightning/pytorch/trainer/trainer.py#L1229-L1250
As shown in the above permalink, Trainer.log_dir is determined by the save_dir of the first logger given in Trainer. So when we pass NeptuneLogger into Trainer, the SaveConfigCallback saves the configs into os.path.join(os.getcwd(), ".neptune").
https://github.com/Lightning-AI/lightning/blob/3a70714219e7d0cae243bfd80cacb9de26e55872/src/lightning/pytorch/loggers/neptune.py#L459-L467
I think a way to fix this problem is adding another exception for NeptuneLogger in trainer.py like
         if len(self.loggers) > 0:
             if not isinstance(self.loggers[0], TensorBoardLogger) and not isinstance(self.loggers[0], NeptuneLogger):
                   dirpath = self.loggers[0].save_dir
               else:
                   dirpath = self.loggers[0].log_dir

, then add a log_dir property on NeptuneLogger, which tracks os.path.join(save_dir, str(name), version).

I found that the issues regarding log_dir have already been discussed in #14188. They suggested introducing either experiment_dir or Logger.log_dir.
Since both options can solve my issue, I hope that #14188 is resolved as soon as possible.

get the same question when using WandbLogger. The config.yaml is saved in {save_dir} instead of {save_dir}/{project}/{version}/ which is the parent folder of checkpoint folder.
In my solution, I just extend the SaveConfigCallback, and rewrite the setup(...) function as follows:
  def setup(self, trainer, pl_module, stage):
      if self.already_saved:
          return

      assert trainer.log_dir is not None
      log_dir = os.path.join(
          trainer.log_dir, trainer.logger.name, trainer.logger.version
      )  # this broadcasts the directory
      if trainer.is_global_zero and not os.path.exists(log_dir):
          os.makedirs(log_dir)
      config_path = os.path.join(log_dir, self.config_filename)

I use this class only when using wandb.


Allow "node_modules/..." file update detection and cache busting

Hi there,
First of all, thanks a lot for your work. Really appreciate this project.
I have an "issue" that can maybe touch other persons.
I work in a monorepo in which I have multiple "packages". Here's an example of structure:

toolkit --------------------
toolkit/package.json
toolkit/js/my-cool-file.js
ui -------------------------
ui/package.json
ui/snowpack.config.js
ui/js/index.js
ui/node_modules/toolkit symlink to the toolkit package

ui/js/index.js
import something from 'toolkit/js/my-cool-file';
The problem is that when I update the toolkit/js/my-cool-file.js file, my snowpack process that runs into the ui package does not detect the update and keeps serving me the old file...
Is there any solution to that? Or maybe a workaround?
Thanks in advance a lot guys.
Best regards
Olivier

I found a way using alias that seems to work.

@olivierbossel please resubmit as a discussion (normally I would automatically "convert to discussion" for you, but the GitHub button appears to be broken).
https://github.com/snowpackjs/snowpack/discussions/new


feat(tutorial): complete step 1

Closes #
{{short description}}
Changelog
New

{{new thing}}

Changed

{{change thing}}

Removed

{{removed thing}}

@kevtr0n Your repository page says Landing page.  Take another look at the repository page section of the tutorial and recommit/push.  It'll automatically update this pull request.

Congratulations! 🥇 You have successfully completed part 1 of the Carbon Tutorial.


White or blue glow issue in distant terrain and mountains  in Train Simulator Classic with d3d9.dll (Vulcan renderer)

Hi!
I've been playing Train Simulator since 2014, now it's called Train Simulator Classic. In the game, I use the Armstrong Powerhouse weather pack which you can find below: https://www.armstrongpowerhouse.com/enhancements/general/sky_weather_enhancement_pack_2.0
This pack aside, for a while I had an issue with ugly black mountains and terrain in the distance, here are two pictures to illustrate what it looked like:

Then last year on a forum, someone suggested I install d3d9.dll (Vulcan renderer) to fix this black distant terrain issue and it was fixed.
This is what this view looks like from the same angle with d3d9.dll installed:
However, d3d9.dll created a new issue, now I have a white or blue glow in distant terrain on mountain or hill tops but also around some buildings, catenary wires and trees especially in snow weather. This white or blue glow is only an issue in foggy, rainy or snowy weather.
I put some pictures below of what it looks like on a route in winter weather but I have the same issue on other mountainous routes in similar weather (rain, fog, snowfall). I checked with Armstrong Powerhouse, they say that there is nothing wrong with their weather pack and this is a shader (Vulcan renderer) issue.

And here's 2 pictures in rainy weather:

I tried several things to get rid of this issue like verifying the integrity of the game files and uninstalling then reinstalling the game but to no avail.
Could you please help me out?
System information

GPU: AMD Radeon RX 5700 XT
Driver: Windows 10
DXVK version: d3d9.dll (https://sourceforge.net/projects/dxvk.mirror/files/)

Hi there.
Try to make a apitrace of the game if able. Also post the dxvk d3d9 log that appears next to the exe.

Hi there. Try to make a apitrace of the game if able. Also post the dxvk d3d9 log that appears next to the exe.

I don't know how to make a apitrace of the game, I have never done that before.
There is no log for the dxvk d3d9 that appears next to the exe, it's just a single .dll file that, when installed, gets rid of the black distant terrain issue but also introduces the glow on mountains issue.

I don't know how to make a apitrace of the game, I have never done that before.

https://github.com/doitsujin/dxvk/wiki/Using-Apitrace
Just replace the d3d9 dll and do what you would normally do to reproduce the issue (it won't show but we will replay with dxvk)

There is no log for the dxvk d3d9 that appears next to the exe

A log should appear somewhere in the games folder if dxvk is being used.

I don't know how to make a apitrace of the game, I have never done that before.

https://github.com/doitsujin/dxvk/wiki/Using-Apitrace Just replace the d3d9 dll and do what you would normally do to reproduce the issue (it won't show but we will replay with dxvk)

There is no log for the dxvk d3d9 that appears next to the exe

A log should appear somewhere in the games folder if dxvk is being used.

Ok thank you, I will try that and report back.
Can you maybe show me a screenshot of how this log is supposed to appear, please? I have 'Logmate' on the game but that's for when the game crashes which it doesn't with dxvk, it's just that there is this annoying glow issue which I can't seem to get rid of.

RailWorks64_d3d9.log
Is this the log you were refering to?

I don't know how to make a apitrace of the game, I have never done that before.

https://github.com/doitsujin/dxvk/wiki/Using-Apitrace Just replace the d3d9 dll and do what you would normally do to reproduce the issue (it won't show but we will replay with dxvk)

There is no log for the dxvk d3d9 that appears next to the exe

A log should appear somewhere in the games folder if dxvk is being used.
^
RailWorks64_d3d9.log

Is this the log you were refering to? ^
I followed the instructions and copy-pasted the needed .dll files next to the exe in the game. It manages to fix the white glow issue BUT it slows down the game significantly overall...

It fixes the glow because you're not using dxvk anymore when adding the apitrace dlls and the slowdown is expected. You're supposed to play the game until you reach the spot where the issue would occur with dxvk, close the game, and upload the trace file found on your desktop afterwards here.

Yes that's what I did ^^ I can't really play the game properly either way because it's too slow now. I also can't 'reach the spot where the issue would occur with dxvk' because it occurs right away when I choose certain weather settings, it's not about reaching a spot.

If the issue appears right away, even better. Just choose those weather settings with apitrace active and upload the trace.

If the issue appears right away, even better. Just choose those weather settings with apitrace active and upload the trace.

Isn't apitrace this log which I've uploaded? RailWorks64_d3d9.log

No, with the apitrace dlls copied next to the game's .exe, it will create a (large) .trace file on your desktop after running the game. Upload that to some file hosting service and post a link.

It did create a large .trace file on my desktop after running the game, I just wasn't able to extract and open it with 7-zip or anything and then upload it here.

Just upload it as is.

Just upload it as is.

It's telling me 'we don't support that file type', I have to upload it in another format but I don't know which one to pick.

It's going to be too large to upload it direct to github anyways, you'll have to use a 3rd party service like google drive. You can also compress the .trace file to a .zip.

Would you or someone else be able to open the .trace file though if I compress it to a .zip? If not, I will upload it as a Google Drive link.

Yes, it's no problem to open it. But even compressed to a .zip it's going to be too large to upload to github directly and you'll need to use google drive.

https://drive.google.com/file/d/1tD692Fuz3LjJTFl_7LrAzOxM2H7SscRL/view?usp=drive_link
There you go, please let me know if it works ;)

You have to set the sharing option for the link in google drive to 'public'.

Done :)

The trace works and seems to reproduce the issue.

Ok so what's the next step now?

Some actual DXVK developer needs to take a look at it. Just noting that for some reason the trace fails to replay with wined3d and nine (nothing @Pasic1994 can do anything about).

Some actual DXVK developer needs to take a look at it. Just noting that for some reason the trace fails to replay with wined3d and nine (nothing @Pasic1994 can do anything about).

Ok then but do we have some actual DXVK developers here that can assist or do I have to find one and contact them individually?

Yes this is the official dxvk issue tracker. No need to find anyone.

Yes this is the official dxvk issue tracker. No need to find anyone.

So then I just have to wait for an actual DXVK developer to see this and read everything?

yes

Thank you for the trace.
Sadly this is again a thing that regressed back in commit https://github.com/doitsujin/dxvk/commit/65635b23c1e8575362722c99e6ffdf9d9df64116 and isn't a problem that is simple to solve correctly.

Thank you for the trace. Sadly this is again a thing that regressed back in commit 65635b2 and isn't a problem that is simple to solve correctly. (that i know of)

Are you a developer? What's commit 65635b2?

No i am a tester.
That commit is the piece of code work that introduced the issue.

No i am a tester. That commit is the piece of code work that introduced the issue.

And the piece of code cannot be removed?

Not just like that no. At least without breaking some other game.

So I guess nothing can be done then? Unless a developer sees this and responds with a solution.


fix: delete old ldk log files on startup

Temporary workaround for https://github.com/getAlby/nostr-wallet-connect-next/issues/206

Unfortunately, there's no straightforward way to implement this in LDK. I have added a periodic log cleanup routine in NWC instead. WDYT? @rolznz

Using something like https://docs.rs/file-rotate/latest/file_rotate/ in this logger does not make sense? https://github.com/getAlby/ldk-node/blob/6477babffdee490e9ebd729da7f827a5027a1990/src/logger.rs

Using something like https://docs.rs/file-rotate/latest/file_rotate/ in this logger does not make sense? https://github.com/getAlby/ldk-node/blob/6477babffdee490e9ebd729da7f827a5027a1990/src/logger.rs

Not really, I'm afraid. Since they (LDK) open log file for each log line (which is quite weird), that seems to be very inefficient. file_rotate will have to check file sizes (or count lines, which is much worse) on every log attempt. Also, this library seems to be unable to delete old files.

yeah, when I saw that logger I was wondering why the implement that like this and on their own. there should be some default well built log loggers.

there should be some default well built log loggers

It is even simpler than that, usually. Rust libraries are not even supposed to instantiate and configure loggers internally. The idiomatic approach is to use the log crate which provides "frontend" logging macros like debug!(), info!(), error!(), etc. The users of the library pick whatever logging backend they prefer and configure it according to their needs.
To be fair, in case of LDK this is a bit different, since LDK is supposed to be used in apps written in different languages through FFI, and these apps are unlikely to be able to easily integrate a Rust logging backend. But it could have been bundled with LDK anyways 🤔 I am somewhat puzzled, too

edit: I would actually also like to log to STDOUT and let the log management be done externally

That's doable but has to be implemented in NWC as well as all client libraries for consistency


Pass metadata

Heya, we met in the Flow discord long ago when I myself started writing an elixir sdk!
I'd like to pass metadata into the grpc connection to utilize Alchemy's flow node. Their grpc api requires an additional api key in the metadata.
I figured the config api can take in additional keywords, one of which would be :metadata. But for the life of me, I can't figure out how to use the pass :metadata to the GRPC.Stub.connect. The lib did implement here - see issue. Ultimately metadata key-vals are passed along as header values.
Example API I'm playing with in my fork.
config :on_flow,
  host: "flow-mainnet.g.alchemy.com:443",
  connect_on_start: true,
  metadata: %{:api_key => "oiwpscm8wr2gvrrkfb1mcmhvpsomcuwd"}

If I start my server without authentication, I get
[error] Unexpected event in state :domain_lookup of type :info:
{:timeout, #Reference<0.2556804254.3388211201.221625>, {:cow_http2_machine, :preface_timeout}}
{:state, #PID<0.487.0>, {:up, #Reference<0.2556804254.3388211201.221607>},
 'flow-mainnet.g.alchemy.com', 443, "http", 'flow-mainnet.g.alchemy.com', 443,
 [],
 %{
   http2_opts: %{settings_timeout: :infinity},
   protocols: [:http2],
   retry: 100,
   retry_fun: &GRPC.Adapter.Gun.retry_fun/2,
   tcp_opts: [nodelay: true],
   transport: :tcp
 }, :undefined, :undefined, :gun_tcp, true, {:tcp, :tcp_closed, :tcp_error},
 :undefined, :undefined, :gun_default_event_h, :undefined}

Hardly helpful.

Hey @dangdennis! I pushed a branch called metadata, which should support the :metadata config option exactly like you have it in your original post.
Can you point your project to the new branch in the repo here and let me know if that works for you?

Thank you! I’ll try asap. I did this exact same thing in my fork but maybe the root connect isn’t doing what I expected. We shall see!

@dangdennis Just pushed another update and tested it with Alchemy. You'll need to add secure: true to your config, but it should work now.
Pushing the update to hex.

Works for me too.


internal error: entered unreachable code

Hi Prisma Team! My Prisma Client just crashed. This is the report:
Versions

Name
Version

Node
v21.6.1

OS
windows

Prisma Client
5.10.2

Query Engine
5a9203d0590c951969e85a7d07215503f4672eb9

Database
sqlite

Logs
tarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:request_handler {"name":"PrismaClientRustPanicError","clientVersion":"5.10.2"}
prisma:client:request_handler {"name":"PrismaClientRustPanicError","clientVersion":"5.10.2"}
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true
prisma:client:libraryEngine sending request, this.libraryStarted: true

Client Snippet
const { PrismaClient } = require("@prisma/client");
const { payrollHistoryService } = require("./payroll.history.service");
const { compesationHistoryService } = require("./compesation.history.service");
const { generateUniqueId } = require("../utils/uuid.util");
const { getFormattedDate } = require("../utils/date.util");
const {
  calculateTax,
  calculatePension,
  calculateTevetLevy,
  calculateAllowances,
  calculateDeductions,
} = require("./functions/payroll.calculations");

const prisma = new PrismaClient();
const taxBrackets = require("../models/malawi.tax.brackets");
const logger = require("../utils/logger.util");

const payrollProcessingService = async () => {
  const formattedDate = getFormattedDate();

  const payrollId = generateUniqueId();

  // fetch all active persons
  const persons = await prisma.person.findMany({
    where: { status: true },
  });
  for (const person of persons) {
    const personIdentinty = person.id;
    try {
      // fetch salaries for each person
      const salary = await prisma.salary.findMany({
        where: { personId: parseInt(person.id) },
      });

      // log salary amount
      const income = salary[0].amount;

      // calculate tevet levy
      const tevetLevy = calculateTevetLevy(income, 0.01);

      // calculate pension
      const pension = await prisma.pension.findUnique({
        where: { id: 1 },
      });

      const percentage = pension.percentage;

      const pensionAmount = calculatePension(income, percentage);

      // calculate allowances
      const totalAllowances = await calculateAllowances(personIdentinty);

      const grossSalaryTaxable = income + totalAllowances;

      // calculate tax
      const taxAmount = calculateTax(grossSalaryTaxable, taxBrackets);

      // calculate deductions
      const totalDeductions = await calculateDeductions(personIdentinty);

      const totalBenefits = 0;

      // calculate net salary
      const netSalary = grossSalaryTaxable - totalDeductions;

      // save to pay history
      await prisma.payHistory.create({
        data: {
          base_salary: income,
          gross_salary: grossSalaryTaxable,
          net_salary: netSalary, // Use the calculated net salary
          tevet_levy: tevetLevy,
          pension_amount: pensionAmount,
          tax_amount: taxAmount,
          total_allowances: totalAllowances,
          total_deductions: totalDeductions,
          total_benefits: totalBenefits,
          payrollId: payrollId,
          created_on: formattedDate,
          person: {
            connect: {
              id: personIdentinty,
            },
          },
        },
      });

      await compesationHistoryService(payrollId);
    } catch (error) {
      logger.error("Something happened!", error.message);
      throw error;
    }
  }

  await payrollHistoryService(payrollId);
  return {
    success: true,
    message: "Payroll processed successfully",
  };
};

module.exports = { payrollProcessingService };

Schema
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
 Thanks for the issue report!
Can you please describe whether the database you were using was previously filled with data, and you pulled the schema? or did you setup the DB with prisma itself?
I took the schema, db pushed, initialized a prisma client with the offending versions and issued person and salary findMany queries; and a payHistory.create but could not reproduce the issue.
It would help us a lot reproducing the problem if you could create a GitHub repository (if possible with a ../data/dev.db sqlite file) reproducing the problem. Would you be so kind to provide us with that? It can be a private repo where you add @janpio and/or @miguelff as collaborators.

@autopilot please create a PR for this

Hey @joykamlomo,
Have you checked @miguelff's message? We need more information in order for us to move this forward and reproduce your issue. Thank you 🙏

With the lack of information and our inability to reproduce this issue, we're now closing this issue.


Incomplete display of content in symbols drop-down list when resolution set to 1366*768

Method:
1.Install and launch Brackets
2.Open 01Class.php file
3.Press ctrl + T
4.Observe
Result:
Incomplete display of content in symbols drop-down list when resolution set to 1366*768
Expected:
Should be add scroll bar to display all content

01Classes.txt
Kindly change extension to ".php" as it does not support upload of ".php" file.


Use of a single port instead of two

The algorithm requires to run on two ports. It seems like it can easily be changed to using a single port by adding the following statement to the Alice and Bob start_protocol method. This would require to change:
https://github.com/TNO-MPC/protocols.kaplan_meier/blob/ee120eea7668bec71b3c436e9f059dfd4caa19f5/tno/mpc/protocols/kaplan_meier/data_owner.py#L260-L261
and
https://github.com/TNO-MPC/protocols.kaplan_meier/blob/ee120eea7668bec71b3c436e9f059dfd4caa19f5/tno/mpc/protocols/kaplan_meier/data_owner.py#L501-L502
to
await self.receive_share()
await self.pool.shutdown()
await self.run_mpyc()

I tested this locally and that worked. Would it make sense to include that in the source?

Nice suggestion. This seems fine to me as the pool is only used in the first part of the protocol.

I encounter an issue with the by me suggested change. It seems like the Alice worker closes the connection premature in some cases.
I temporary worked around by this by adding a time.sleep in the Alice worker before shutting the server down.
Do we have information from the other party when the connection can safely closed? Not sure if that is even possible.

I encounter an issue with the by me suggested change. It seems like the Alice worker closes the connection premature in some cases.
I temporary worked around by this by adding a time.sleep in the Alice worker before shutting the server down.
Do we have information from the other party when the connection can safely closed? Not sure if that is even possible.

I was just about to start testing this, will let you know!

The issue encountered is an unsolvable race-condition when exiting one communication channel (tno.mpc.communication) and switching to a new communication channel on the same port (MPyC). If one player starts communicating over the new channel (expecting that the other players are ready to start communicating), but they didn't switch to the new communication channel yet, stuff will (and should) break.
Also decided not to implement the shutdown as that modifies the communication pool (that is potentially in use for other analyses as well).


support for multiple instances

Hi Nil
I added rudimentary support for running multiple instances of your app (and tweaked a few minor things, too). Also removed BTC-e as that was seized and would cause the app to hang.
Let me know if this is useful at all.

Awesome, I'm using this branch, and it's exactly what I needed. Currency label before the currency, better rounding (2 decimals is more than enough) and multiple currencies.

@bluppfisk Looks great. Thanks for doing this!


chore: update OTel core deps and API

Which problem is this PR solving?

Short description of the changes

Checklist

[ ] Ran npm run test-all-versions for the edited package(s) on the latest commit if applicable.

I think this requires also a release of experimental core modules as e.g. @opentelemetry/instrumentation 0.27.0 has 1.0.x of stable pinned.

Yes... and @opentelemetry/exporter-trace-otlp-http(for @opentelemetry/browser-extension-autoinjection) which we cannot release right now because of the json exporter, or is it separate? @dyladan

https://github.com/open-telemetry/opentelemetry-js/pull/2835 moves them all back to experimental, then we will make them not depend on each other, then we will move only proto and grpc to stable. JSON is being stabilized so the exporter can be released stable when that happens.

@opentelemetry/instrumentation

Sorry, misclicked "close".
Actually, @Flarna, I take that back. We don't need to release @opentelemetry/instrumentation because it's peerDependencies are as such: { '@opentelemetry/api': '^1.0.0' }. Which means they allow 1.x, not 1.0.x.

It seems like I've run of "PR quota" or something, the CI just doesn't run.
:heart: GHA

Between this and https://github.com/open-telemetry/opentelemetry-js-contrib/pull/954, this is

probably safer because #954 doesn't take into account packages that have invalid peer dep ranges like 1.0.x versions of trace SDK.
more invasive for users because forces version 1.1.0 of the API.

I'm going to close this. All the conflicting deps are updated in #954.


adding extra high CR monsters (from DMPRO)

The original version of the monster definition builder came was a piece of code when it was written last August. The code might be messy but that's because each attribute required iterative testing to guarantee intended monster behaviour
Both unique monster powers and AI decisions require string parameters to function correct and so no names or strings should changed
It's legacy code so it needed the legacy base definitions builder to be enabled again.
I didn't have the JSON definitions pointed at the correct folder so I'll update that tomorrow night or Sunday

Ok I can't be doing with all of those silly comments. Instead of re-enabling legacy code why don't you use the new builders?

It's legacy code that was written before the new builders were created. That's why the new builders were not used.
The comments are meant as a reminder to all that making changes without testing is not refactoring.

That is not necessary. You can just leave the code as it is. it is functional and has been for months. .
General Reply: This mod is a collection of work from the Solasta modding community not a single individual and the general philosophy is everything is optional not that everything must conform to one opinion. This legacy code isnt perfect but it does not negatively effect anybody else or their work. There's things I disagree with in the mod but I only comment on things that either interest me or that impact the code I've contributed and am expected to maintain.
Specific Reply:  monsters are more complex and interdependent than almost any other definition so any changes are much more likely to break them. Not only do they have features,  powers, spelllists, spell casting, etc  all with associated conditions and attribute modifiers similar to PC classes and subclasses they also have unique spells, attacks , legendary actions, savings throws, attribute stats, group attacks, sizes, types, visual models, shaders, particles, sprites, AI decisions, AI packages. All of which I have created or customised for these monsters. If you refractor this, You will break the the monsters. Do not do that.
Finally, If you change the code then I have no interest in maintaining it. I have limited time, and I cant waste it learning how you will restructure it while trying to fix any potential future bugs.  Please respect that not everyone has the same amount of free time as you might.


Where do I find the txt files?

I am trying the repo for the first time. While preparing the data I find that we need the text annotations of the voxceleb files. But I find the dataset appears to have only mp4s and wavs.
Is there a way to get the annotations and the offsets? Is it available elsewhere?
Related command -
python ./makeFileList.py --output data/test.txt --mp4_dir VOX2_PATH/test/mp4 --txt_dir VOX2_PATH/test/txt --wav_dir VOX2_PATH/test/wav

I also did not find this file

@dheerajmpai , @old-fan-kk
You can download the test txt files from here and the dev txt files from here

@dheerajmpai , @old-fan-kk
You can download the test txt files from here and the dev txt files from here

hello，What do 'FRAME, X,Y, W,H'  mean  in the .txt file?


Funny fact - Windows phone is detected as Android

The first is the UA and the second is what detect is throwing

this should be fixed with https://github.com/Jam3/generator-jam3/pull/327. never tested on actual windows phone though

done


binder runs quite slow

I noticed that binder  runs now quite slow, any ideas why?
@tvt173
@proppy
@flaport

i had noticed the last time i ran it, it seems to be the bokeh plots taking a long time. not sure if matplotlib is any faster

also some bokeh notebooks went above Max Github 100MB limit so the documentation is failing to build
remote: warning: File notebooks/00_geometry.html is 63.09 MB; this is larger than GitHub's recommended maximum file size of 50.00 MB
  remote: warning: File notebooks/01_references.html is 84.67 MB; this is larger than GitHub's recommended maximum file size of 50.00 MB
  remote: warning: File notebooks/02_movement.html is 59.59 MB; this is larger than GitHub's recommended maximum file size of 50.00 MB
  remote: warning: File notebooks/03_layers.html is 52.80 MB; this is larger than GitHub's recommended maximum file size of 50.00 MB
  remote: warning: File notebooks/04_components_hierarchy.html is 57.17 MB; this is larger than GitHub's recommended maximum file size of 50.00 MB
  remote: error: Trace: 61b45c20e015111ca395450b45e07f0ac5393050d67676609330d603ac89a94c
  remote: error: See http://git.io/iEPt8g for more information.
  remote: error: File notebooks/03_waveguides_paths_crossections.ipynb is 208.56 MB; this exceeds GitHub's file size limit of 100.00 MB
  remote: error: File notebooks/01_references.ipynb is 171.81 MB; this exceeds GitHub's file size limit of 100.00 MB
  remote: error: File notebooks/04_components_hierarchy.ipynb is 115.24 MB; this exceeds GitHub's file size limit of 100.00 MB
  remote: error: File notebooks/03_waveguides_paths_crossections.html is 103.19 MB; this exceeds GitHub's file size limit of 100.00 MB
  remote: error: File notebooks/00_geometry.ipynb is 128.37 MB; this exceeds GitHub's file size limit of 100.00 MB
  remote: error: File notebooks/02_movement.ipynb is 121.25 MB; this exceeds GitHub's file size limit of 100.00 MB
  remote: error: File notebooks/03_layers.ipynb is 103.72 MB; this exceeds GitHub's file size limit of 100.00 MB
  remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com./

how about we disable holoviews as the default plotter?
we can leave the # gf.CONF.plotter = 'holoviews'  so it's easy to turn on

yeah, seems reasonable


Need third party graphics library

https://cdnjs.com/libraries/svg.js

https://cdnjs.com/libraries/svg.js

Rejected. use this instead.
http://visjs.org

http://sigmajs.org/

Concluded to use sigma.js instead of vis.js.


I want to keep the Chrome window open on my Mac and display the webpage content. Not just run background.

What versions are you running?

$ go list -m github.com/chromedp/chromedp
$ chromium --version
$ go version

What did you do?
ran all the chromedp examples
What did you expect to see?
i want to keep the chrome window open when executed code
What did you see instead?
the window close instantly when chrome.run function executed.
Sorry, it still closed instantly even though I made a breakpoint when chromedp.run function finished.
Here is the code. And i have already added chrome.Sleep function and removed the cancel function call.
package main
import (
"context"
"fmt"
"log"
"strings"
"time"
"github.com/chromedp/chromedp"
)
const code = `Sub test()
For i = 2 To 100
Next i
End Sub
`
func main() {
final := strings.Replace(code, "\n", \n, -1)
final = strings.Replace(final, ", ", -1)
ctx, _ := chromedp.NewContext( //	ctx, cancel := chromedp.NewContext(
context.Background(),
chromedp.WithLogf(log.Printf),
)
// defer cancel()
var example string
var res string
err := chromedp.Run(ctx,
chromedp.Navigate(http://www.vbindent.com/),
chromedp.Evaluate(document.getElementsByName("codeText")[0].value="+final+", &res),
chromedp.Evaluate(document.getElementsByTagName("input")[0].click(); "123";, &res),
chromedp.Sleep(time.Second*10),
chromedp.Evaluate(document.getElementsByName("codeText")[0].value;, &example),
)
if err != nil {
log.Fatal(err)
}
fmt.Print(example)
}

I still don't understand what you're trying to do here. If you want the browser to run separately from your Go program, see https://godoc.org/github.com/chromedp/chromedp#RemoteAllocator.

i  want the chrome browser can still be open when the chromedp.run fuction finished. but the reality is that when i the chrome browser doesn't open when the chromedp.run function hadn't call, and the browser will shut down instantly when the chromedp.run function finished. even then run time.sleep(time.second * 100) function.

Ok, first things first - please follow the issue template properly. You skipped the first portion.
If you're on Linux, the default allocator ensures that Chrome is killed when the parent process (the Go program using chromedp) exits.
If you want to work around that, one option is to start up Chrome separately. See my comment above.

Timing out.


Set default origin export (SOFTWARE-4138)

Also, remove the instructions for using a custom authfile. Deployed origins and caches should always get their authfiles from the Topology service. Submitting this as a draft PR since we need to verify that the latest fresh tag works as expected

No objections

Nobody actually uses this yet so full steam ahead. CI failures are unrelated so I'm merging.


Timers to repeaters

What?

Bump pusher-platform-swift dependency to 0.6.1
Use PPRepeaters in place of NSTimers

Why?
Bug fixes

CC @hamchapman

          1 Warning

:warning:
Any changes to library code should be reflected in the Changelog. Please consider adding a note there. \nYou can find it at CHANGELOG.md.

SwiftLint found issues
Warnings

File
Line
Reason

ChatManager.swift
83
TODOs should be avoided (When can percent encoding fail...).

ChatManager.swift
103
TODOs should be avoided (This could be nicer).

ChatManager.swift
104
TODOs should be avoided (We don't need to wait for init...).

ChatManager.swift
105
TODOs should be avoided (Do we need to nil out subscrip...).

ChatManager.swift
118
TODOs should be avoided (This is madness).

ChatManager.swift
212
TODOs should be avoided (This being here at the end see...).

ChatManager.swift
216
TODOs should be avoided (Maybe we need some sort of Cha...).

ChatManager.swift
263
TODOs should be avoided (This could be a lot more effic...).

ChatManager.swift
87
Function body should span 40 lines or less excluding comments and whitespace: currently spans 77 lines

ChatManager.swift
107
Variable name should be between 3 and 40 characters long: 'cu'

ChatManager.swift
183
Line should be 120 characters or less: currently 130 characters

ChatManager.swift
193
Line should be 120 characters or less: currently 129 characters

ChatManager.swift
197
Line should be 120 characters or less: currently 126 characters

ChatManager.swift
261
Line should be 120 characters or less: currently 139 characters

ChatManager.swift
265
Line should be 120 characters or less: currently 123 characters

ChatManager.swift
276
Line should be 120 characters or less: currently 122 characters

ChatManager.swift
284
Line should be 120 characters or less: currently 128 characters

ChatManager.swift
297
Line should be 120 characters or less: currently 125 characters

PCCurrentUser.swift
16
TODOs should be avoided (This should probably be [PCUse...).

PCCurrentUser.swift
377
TODOs should be avoided (Use the soon-to-be-created new...).

PCCurrentUser.swift
467
TODOs should be avoided (Do we need to fetch users in t...).

PCCurrentUser.swift
750
TODOs should be avoided (Do we need a Last-Event-ID opt...).

PCCurrentUser.swift
851
TODOs should be avoided (What happens if you provide bo...).

PCCurrentUser.swift
871
TODOs should be avoided (This should probably be a room...).

PCCurrentUser.swift
1063
Unused parameter "data" in a closure should be replaced with _.

PCCurrentUser.swift
929
Function body should span 40 lines or less excluding comments and whitespace: currently spans 52 lines

PCCurrentUser.swift
669
Lines should not have trailing whitespace.

PCCurrentUser.swift
193
MARK comment should be in valid format. e.g. '// MARK: ...' or '// MARK: - ...'

PCCurrentUser.swift
252
MARK comment should be in valid format. e.g. '// MARK: ...' or '// MARK: - ...'

PCCurrentUser.swift
671
Arguments can be omitted when matching enums with associated types if they are not used.

PCCurrentUser.swift
671
Arguments can be omitted when matching enums with associated types if they are not used.

PCCurrentUser.swift
5
Variable name should be between 3 and 40 characters long: 'id'

PCCurrentUser.swift
59
Variable name should be between 3 and 40 characters long: 'id'

PCCurrentUser.swift
163
Variable name should be between 3 and 40 characters long: 'id'

PCCurrentUser.swift
180
Variable name should be between 3 and 40 characters long: 'id'

PCCurrentUser.swift
214
Variable name should be between 3 and 40 characters long: 'id'

PCCurrentUser.swift
269
Variable name should be between 3 and 40 characters long: 'id'

PCCurrentUser.swift
329
Variable name should be between 3 and 40 characters long: 'id'

PCCurrentUser.swift
1092
Enum element name should be between 3 and 40 characters long: 'messageIdKeyMissingInMessageCreationResponse'

PCCurrentUser.swift
107
Collection literals should not have trailing commas.

PCCurrentUser.swift
721
Opening braces should be preceded by a single space and on the same line as the declaration.

PCCurrentUser.swift
184
Line should be 120 characters or less: currently 122 characters

PCCurrentUser.swift
202
Line should be 120 characters or less: currently 144 characters

PCCurrentUser.swift
214
Line should be 120 characters or less: currently 137 characters

PCCurrentUser.swift
218
Line should be 120 characters or less: currently 134 characters

PCCurrentUser.swift
521
Line should be 120 characters or less: currently 127 characters

PCCurrentUser.swift
580
Line should be 120 characters or less: currently 121 characters

PCCurrentUser.swift
605
Line should be 120 characters or less: currently 139 characters

PCCurrentUser.swift
609
Line should be 120 characters or less: currently 139 characters

PCCurrentUser.swift
631
Line should be 120 characters or less: currently 133 characters

PCCurrentUser.swift
642
Line should be 120 characters or less: currently 132 characters

PCCurrentUser.swift
706
Line should be 120 characters or less: currently 123 characters

PCCurrentUser.swift
762
Line should be 120 characters or less: currently 123 characters

PCCurrentUser.swift
967
Line should be 120 characters or less: currently 123 characters

PCCurrentUser.swift
1068
Line should be 120 characters or less: currently 136 characters

PCReadCursorDebouncerManager.swift
29
Initializing an optional variable with nil is redundant.

PCReadCursorDebouncerManager.swift
12
Line should be 120 characters or less: currently 121 characters

PCTypingIndicatorManager.swift
59
Line should be 120 characters or less: currently 137 characters

PCTypingIndicatorManager.swift
67
Line should be 120 characters or less: currently 136 characters

CursorTests.swift
42
TODOs should be avoided (the following should really wa...).

CursorTests.swift
83
TODOs should be avoided (hook for setting own read curs...).

CursorTests.swift
27
When using trailing closures, empty parentheses should be avoided after the method call.

CursorTests.swift
23
When using trailing closures, empty parentheses should be avoided after the method call.

CursorTests.swift
167
Limit vertical whitespace to a single empty line. Currently 2.

CursorTests.swift
86
Variable name should be between 3 and 40 characters long: 'ex'

CursorTests.swift
102
Variable name should be between 3 and 40 characters long: 'ex'

CursorTests.swift
126
Variable name should be between 3 and 40 characters long: 'ex'

CursorTests.swift
147
Variable name should be between 3 and 40 characters long: 'ex'

CursorTests.swift
132
Prefer _ = foo() over let _ = foo() when discarding a result from a function.

Errors

File
Line
Reason

PCCurrentUser.swift
4
Type body should span 200 lines or less excluding comments and whitespace: currently spans 655 lines

PCCurrentUser.swift
759
Variable name should be between 3 and 40 characters long: 'r'

PCCurrentUser.swift
1111
File should contain 400 lines or less: currently contains 1111

CursorTests.swift
79
Force tries should be avoided.

CursorTests.swift
92
Force tries should be avoided.

CursorTests.swift
160
Force tries should be avoided.

  Generated by :no_entry_sign: Danger


Gridpaint don't handle window resize

Gridpaint activity don't handle window resize event. So, if the activity is open with a small window then resized, the board keep the same size.

Fixed in https://github.com/llaske/sugarizer/commit/99ed20d71c4f18635efacf0d61b2da383fc28b76


[bug] Conceptional error in providing env-level config to multiple apps installed to the same env

We provide generic helm and ytt configuration in environment group folders, e.g. "envs/kubermatic-clusters" under "_apps/app-name". However, if a user wants to install the same app multiple times on the same environment, e.g. a web-service with slight modification for multiple different customers, the current concept does not permit this.
This could be made to work, by using the folder naming of "prototypes" instead: "_apps/base-app-name" or "_apps/base-app-group/base-app-name".

I'm not entirely sure I understand the problem.
Do you want to create new reusable flavours of a prototype by placing a special configuration somewhere under envs directory?
Or do you mean there is a naming problem?

I've checked the corresponding PR. I think I better understand the idea now.
However, the proposed approach feels confusing, because, depending on the file tree level, _apps/foo means different things: is foo a prototype or an application?
If you really don't want to create a separate prototype for a group of applications you want to customize in the same way, we can think of a _proto directory next to the _apps directory.
Or we can think about changing the structure of the prototypes themselves to make them also be assembled from a tree-like structure. Though, this doesn't look like a better idea at the moment.


⚠ Bofrost.fr has degraded performance

In 5e427b5, Bofrost.fr (https://www.bofrost.fr) experienced degraded performance:

HTTP code: 200
Response time: 1836 ms

Resolved: Bofrost.fr performance has improved in 69d4f62 after 1 hour, 18 minutes.


compiler option to ban recursive conditional types that aren't tail recursive

Suggestion

🔍 Search Terms
tail recursive

✅ Viability Checklist

My suggestion meets these guidelines:

[X] This wouldn't be a breaking change in existing TypeScript/JavaScript code
[X] This wouldn't change the runtime behavior of existing JavaScript code
[X] This could be implemented without emitting different JS based on the types of the expressions
[X] This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)
[X] This feature would agree with the rest of TypeScript's Design Goals.

⭐ Suggestion
tail-recursion elimintaion in my opinion means that writing recursive conditional types in a non-tail recursive way should be avoided. it would be nice if there was a compiler option to ban it

📃 Motivating Example
this one from the blog post:
type GetChars<S> =
    S extends `${infer Char}${infer Rest}` ? Char | GetChars<Rest> : never;

💻 Use Cases
i have a utility types package full of recursive conditional types. most of them aren't tail-recursive so i'm going back and rewriting them, however these can be difficult to spot and it would be nice if the compiler would warn me about them
an alternative solution is an eslint rule perhaps?

IIRC we tossed around the idea of an opt-in marker for a particular conditional type branch, e.g. something like
type GetChars<S> =
    S extends `${infer Char}${infer Rest}` ? recur Char | GetChars<Rest> : never;

would be an error while
type GetChars<S, Acc = never> =
    S extends `${infer Char}${infer Rest}` ? recur GetChars<Rest, Acc | Char> : Acc;

would not.


Refine the stragery

Sort out the candidate list by building two level ranking table -
First level - token_sort_ratio , threshold=90
Query Dataset = Unique tokenized Combined Columns of Name, Name 1, Name 2, Postal Code and City
Query String = Customer Name + City + Postal Code
Reason : Base on my observation, Those fields are less error and less impact by abbreviation. token_sort_ratio is good for matching name.
For score less than 90 but higher than 60 in above, save it as "alternative results"
Second Level - token_set_ratio,  threshold=80
Query Dataset = Street of "alternative results"
Query String = House + streetAddress
Reason: token_set_ratio insensitive to word order. Good for matching address.
For this Strategy , the weakness point is totally low score in name matching, may need to be covered by another Strategy

Hi @rorywoods , Would you please merge it into main branch if possible ?

lgtm