clboss-status reporting internet offline

My fresh install of FreeBSD clboss-status reports internet connection being constantly offline.
I checked Boss/Mod/InternetConnectionMonitor.cpp and it seems to be checking some popular servers on port 443 periodically. I can connect to these servers manually.
Here's my lightningd-bitcoin.conf:
alias=[REDACTED]
lightning-dir=/var/db/c-lightning
always-use-proxy=true
large-channels
funding-confirms=1
announce-addr=[redacted].onion:1234
bind-addr=<IP_ADDRESS>:5678
bitcoin-rpcconnect=<IP_ADDRESS>
bitcoin-rpcpassword=[redacted]
bitcoin-rpcport=8332
bitcoin-rpcuser=[redacted]
log-file=lightningd.log
network=bitcoin
proxy=<IP_ADDRESS>:9050
plugin=clboss

Unfortunately I don't know C++ and libev enough to investigate this issue further but if you could maybe provide a small snippet of code I can run on this box that might help. Thank you.

With a proxy, a good amount of code in the clboss gets involved (pulls in code in Net/ directory), so a small snippet of code would not be so small.  Maybe I can add a dev binary that performs the connection check directly though.

I commented out the tor proxy line and the tor announce addr and the status is now reporting online.

I also noticed that when clboss was running on tor proxy (using the config above) it didn't open or rebalance any channels. It went through of ChannelFinderByPopularity/ChannelFinderByDistance: Dijkstra progress and XXX-channeld-chan#46: Peer connection lost/Peer transient failure in CHANNELD_NORMAL: channeld: Owning subdaemon channeld died over and over but didn't manage to do any actual work.
It looks like a possible bug with the tor proxy. I still have the logs if you need them.

 This thing is incredible to say the least. Opened ~ 20 channels, most of them are already relatively balanced, rebalancing doesn't seem to cost an arm and a leg either. Maybe I wasn't using the right tools on LND but before I never managed to maintain a node with the same ease, speed and low cost (like a boss ) :) Thank you 🥇

Glad you liked it.  FWIW the node somebody lent me, that also has a Tor proxy, is also getting "not online" a good amount of the time, maybe I have a bug somewhere, hmm.

I just pushed a new dev tool, dev-proxy-connect, on master.
The 100 is the errno, and looking it up in the Linux errno file shows it is ENETDOWN.
I then traced the command over and over until I could get something strange, and came upon this part of my code: https://github.com/ZmnSCPxj/clboss/blob/971beadaa1ff2248c33e589e567fa3259123fbd8/Net/ProxyConnector.cpp#L85-L97
See the part where it transforms the SOCKS5 0x01 error to ENETDOWN?  I added a printf there, which showed that the "Not connected: Networks is down (100)" passed through that branch.  This to_error function translates the SOCKS5 error to the nearest equivalent errno.
The SOCKS5 protocol shows this: https://tools.ietf.org/html/rfc1928
          o  REP    Reply field:
             o  X'00' succeeded
             o  X'01' general SOCKS server failure
             o  X'02' connection not allowed by ruleset
             o  X'03' Network unreachable
             o  X'04' Host unreachable
             o  X'05' Connection refused
             o  X'06' TTL expired
             o  X'07' Command not supported
             o  X'08' Address type not supported
             o  X'09' to X'FF' unassigned

So it looks to me that for no good reason, Tor returns 0x01 at random times, leading us to conclude that we are not connected to the Internet.
Duckduckgo on "tor general socks server failure" leads to this: https://tor.stackexchange.com/questions/8668/proxy-client-unable-to-connect-general-socks-server-failure which seems to suggest that there is some failure in the ISP level.
In any case, I tried again until I could get a "not connected", then checked my syslogs:
zmnscpxj@developer:~/dvpt/clboss$ date; ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
Fri 13 Nov 2020 11:42:34 AM PST
Not connected: Network is down (100)

And syslog:
Nov 13 11:42:35 pop-os Tor[1043]: Have tried resolving or connecting to address '[scrubbed]' at 3 different places. Giving up.

Unfortunately I do not have detailed Tor logs, so I have to go enable them and restart my Tor service.

Enabling Tor logs does not show me anything more detailed than "Have tried resolving or connecting to address '[scrubbed]' at 3 different places. Giving up." anyway.  Hmm.
Looks like my workarounds here are:

If not always-use-proxy, do not use the proxy in the Internet connection monitoring.
In the proxy connector, if we get a SOCKS5 0x01 error, try try again.

In the proxy connector, if we get a SOCKS5 0x01 error, try try again.

Turns out not to help much (>_<#)
I tried modifying it so that it makes up to 3 attempts.  In the below tries is the number of failures before we returned:
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 1
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 3
Not connected: Network is down (100)
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 3
Not connected: Network is down (100)
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 3
Not connected: Network is down (100)
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 3
Not connected: Network is down (100)
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 3
Not connected: Network is down (100)
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.
zmnscpxj@developer:~/dvpt/clboss$ ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 0
Connected.

Out of several dozen tries, many of the failures ended up repeating pointlessly anyway.   Most of the above "Connected" succeeded on the first try, and there still exist "Not connected" that persisted even after 3 tries in quick succession.  Hmmm.
I tried adding a 100-millisecond delay between each try, but it looks like Tor is bursty when it fails.... sigh.
zmnscpxj@developer:~/dvpt/clboss$ time ./dev-proxy-connect <IP_ADDRESS> 9050 www.google.com 443
tries: 3
Not connected: Network is down (100)

real    0m0.312s
user    0m0.000s
sys     0m0.009s

Hi @hosiawak, I did the workaround where, if you set proxy but not always-use-proxy, CLBOSS will not use the proxy and instead connect directly.  Can you please try checking this if it works for you with a proxy setting? clboss-ca27f303cfa9fc18e51d72d6164d2942da9a5760.tar.gz
My own node with both a local Tor proxy and always-use-proxy seems to have no problem connecting to the servers via the proxy.  The other node is also now okay with its InternetConnectionMonitor, mostly.  Maybe just a recent attack on Tor?

5 minutes after restarting c-lightningd:
   "internet": {
      "connection": "offline",
      "checking_connectivity": true
   },

wut.
Do you have debug-level logs log-level=debug:clboss?

I do, relevant bits here.
Do you need anything else from this log ?

No, just realized my code was wrong and it was considering "always-use-proxy" if the key existed in the listconfigs instead of checking its true-ness.  The key always exists in the listconfigs, LOL.

@hosiawak sorry for the trouble, here is the updated tarball: clboss-91bbbf93720784fd56c1633fa401e2b497fd83be.tar.gz, could you please check?

@ZmnSCPxj Now, with "proxy" set but "always-use-proxy" commented out it's online. With both set it's offline.
Is the connection status used internally by clboss (to initiate channel openings for example) or just for clboss-status output ?

It is used in particular to prevent reducing the connect_rate metric when we are offline --- if we believe we are offline, we do not record the connect_rate for any peers.  We do not attempt to probe channel candidates if they are online, since we think we are offline and cannot probe anything.  There are probably other processes I should suppress if we are offline as well, such as active probing.
In any case, on the system where you have issues, can you check how often this succeeds?
torify wget https://www.google.com/index.html

@ZmnSCPxj Ran it 10x, it succeeded 10x.
# time torify wget https://www.google.com/index.html
--2020-11-14 02:11:38--  https://www.google.com/index.html
Resolving www.google.com (www.google.com)... <IP_ADDRESS>
Connecting to www.google.com (www.google.com)|<IP_ADDRESS>|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html.10’

index.html.10                                          [    <=>                                                                                ]  12.57K  14.9KB/s    in 0.8s

2020-11-14 02:11:41 (14.9 KB/s) - ‘index.html.10’ saved [12870]

0.027u 0.006s 0:02.55 0.7%	1124+406k 17+10io 0pf+0w

It takes between 3 and 10 seconds.  Sometimes Resolving takes a few seconds. Maybe there's a low timeout somewhere ?

Okay, so I decided to ptrace the torify wget https://www.google.com/index.html command, and here is the bit during the resolving:
write(2, "Resolving www.google.com (www.go"..., 45Resolving www.google.com (www.google.com)... ) = 45
socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(9050), sin_addr=inet_addr("<IP_ADDRESS>")}, 16) = 0
sendto(3, "\5\1\0", 3, 0, NULL, 0)      = 3
recvfrom(3, "\5\0", 2, 0, NULL, NULL)   = 2
sendto(3, "\5\360\0\3\16www.google.com\0*", 21, 0, NULL, 0) = 21
recvfrom(3, "\5\0\0\1", 4, 0, NULL, NULL) = 4
recvfrom(3, "\254\331\243\344", 4, 0, NULL, NULL) = 4
close(3)                                = 0
ioctl(0, TIOCGPGRP, [330878])           = 0
getpgrp()                               = 330878
write(2, "<IP_ADDRESS>", 15<IP_ADDRESS>)         = 15

In particular, it seems to be a separate SOCKS5 proxy request to resolve the www.google.com hostname, which it then connects to later here:
write(2, "Connecting to www.google.com (ww"..., 70Connecting to www.google.com (www.google.com)|<IP_ADDRESS>|:443... ) = 70
socket(AF_INET, SOCK_STREAM, IPPROTO_IP) = 3
getsockopt(3, SOL_SOCKET, SO_TYPE, [1], [4]) = 0
connect(3, {sa_family=AF_INET, sin_port=htons(9050), sin_addr=inet_addr("<IP_ADDRESS>")}, 16) = 0
sendto(3, "\5\1\0", 3, 0, NULL, 0)      = 3
recvfrom(3, "\5\0", 2, 0, NULL, NULL)   = 2
sendto(3, "\5\1\0\3\017<IP_ADDRESS>\1\273", 22, 0, NULL, 0) = 22
recvfrom(3, "\5\0\0\1\0\0\0\0\0\0", 10, 0, NULL, NULL) = 10

So let us go through the first ptrace fragment way above.  This sets up the socket to the proxy:
socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(9050), sin_addr=inet_addr("<IP_ADDRESS>")}, 16) = 0

The torify wget sends it the standard SOCKS5 opening with the "unauthenticated" authentication method:
sendto(3, "\5\1\0", 3, 0, NULL, 0)      = 3

This is the same that is loaded and written by CLBOSS code:
https://github.com/ZmnSCPxj/clboss/blob/91bbbf93720784fd56c1633fa401e2b497fd83be/Net/ProxyConnector.cpp#L120-L127
In our CLBOSS code, we write the three bytes 5, 1, and 0, aka "\5\1\0" in the torify wget run.
The proxy responds:
recvfrom(3, "\5\0", 2, 0, NULL, NULL)   = 2

In the CLBOSS code, that is also what we expect, a 0x05 and a 0x00, aka "\5\0" in the torify wget trace:
https://github.com/ZmnSCPxj/clboss/blob/91bbbf93720784fd56c1633fa401e2b497fd83be/Net/ProxyConnector.cpp#L128-L145
Then things get interesting here:
sendto(3, "\5\360\0\3\16www.google.com\0*", 21, 0, NULL, 0) = 21
In CLBOSS we use this code:
https://github.com/ZmnSCPxj/clboss/blob/91bbbf93720784fd56c1633fa401e2b497fd83be/Net/ProxyConnector.cpp#L147-L161
CLBOSS writes four bytes, but note the second byte.  CLBOSS writse 0x05 0x01 0x00 0x03 (for something like "www.google.com" that is judged as type Name thus the fourth byte is 0x03).  The second byte is a command --- with CLBOSS, we just connect directly to the hostname, which is the CONNECT command or 0x01 in the second byte.
In the torify wget run this byte is "\360", aka 0xF0 == 240.  This is not a standard SOCKS5 command --- the SOCKS5 RFC has this to say about those 4 bytes:

      o  VER    protocol version: X'05'
      o  CMD
         o  CONNECT X'01'
         o  BIND X'02'
         o  UDP ASSOCIATE X'03'
      o  RSV    RESERVED
      o  ATYP   address type of following address
         o  IP V4 address: X'01'
         o  DOMAINNAME: X'03'
         o  IP V6 address: X'04'

There are only 3 valid commands, CONNECT 0x01, BIND 0x02, and UDP ASSOCIATE 0x03, no 0xF0.  So it looks like Tor secretly has a separate SOCKS5 command that resolves hostnames, and it might be more reliable than doing the connect to the hostname directly.
So I went looking for Tor extensions, and here's a document I found: https://github.com/torproject/torspec/blob/master/socks-extensions.txt
And I quote:

2. Name lookup

  As an extension to SOCKS4A and SOCKS5, Tor implements a new command value,
  "RESOLVE" [F0].  When Tor receives a "RESOLVE" SOCKS command, it initiates
  a remote lookup of the hostname provided as the target address in the SOCKS
  request.  The reply is either an error (if the address couldn't be
  resolved) or a success response.  In the case of success, the address is
  stored in the portion of the SOCKS response reserved for remote IP address.

So it is an extension that is Tor specific, and thus something I would like to avoid.  Yes, 99% of the time the SOCKS5 proxy will be Tor, but someone is going to have a legitimate standards-compliant SOCKS5 proxy that is not Tor at some point, so I would prefer not to use a Tor-only command.
Another thing is that while we write the other parts needed by the SOCKS5 proxy, we write them in separate write calls, whereas torify wget writes the 4-byte request followed by the length-preceded hostname in a single write call.  Kind of a long shot but maybe Tor is sensitive to some weird timing thing on the SOCKS5 socket and wants all the bytes in a single write call?  Nah, not buying it.
@hosiawak given that torify wget uses a Tor-specific extension to the SOCKS5 proxy (that I would like to avoid If I can), could you instead install curl?  curl can use the standard SOCKS5 protocol without Tor extensions (I think...).  Can you please test this command a dozen times on your system?
curl --socks5 <IP_ADDRESS>:9050 https://www.google.com/index.html

And see if it succeeds each time?  And if ptrace or an equivalent is somehow available on FreeBSD could you get me a ptrace of a successful run so I can compare what it does to CLBOSS?

I attached truss (FreeBSD equivalent of strace) to a newly started clboss process and looked for the first occurence of "9050". Here's the relevant bit where it checks duckduckgo.com etc. Is it of any use ?
The output of running the curl command from above in truss in here - it doesn't use the tor proxy for the DNS query but uses the LAN router <IP_ADDRESS>:53

Hmmm.  Looking more closely at curl --help command, it turns out there are two socks5 options:
     --socks5 <host[:port]> SOCKS5 proxy on given host + port
...
     --socks5-hostname <host[:port]> SOCKS5 proxy, pass host name to proxy

With --socks5 curl does the resolution separately on the local DNS setup, with --socks5-hostname curl does what CLBOSS does, which is to pass the hostname unresolved to the proxy and have the proxy resolve it.
Can you please try with --socks5-hostname instead?
curl --socks5-hostname <IP_ADDRESS>:9050 https://www.google.com/index.html

In general when C-Lightning sees always-use-proxy it tries to put even DNS lookups into the proxy (i.e. it uses the CONNECT command with type 0x03 for hostname), though there may be code paths still where it uses the local DNS setup.  And arguably if you want privacy you want to use Tor and always-use-proxy.
However, the fact that curl uses the shorter and more natural name socks5 for "resolve locally first, then use SOCKS5 on the IP address" versus the longer socks5-hostname for "send the hostname to the SOCKS5 proxy" may imply that curl devs know there are problems with SOCKS5 hostname resolution in the CONNECT command, and 99% of SOCKS5 use is Tor.

@ZmnSCPxj curl --socks5-hostname ... succeeds consistently (it takes ~ 10 seconds the first time it's run and then 2-3 seconds for subsequent runs.
Here's the gist of running it on www.duckduckgo.com (because google.com request got cached I think).

Thank you.  Hmmm.  I guess I have to check the differences in traces
Here is something that seems different:
sendto(6,"\^E\^B\0\^A",4,MSG_NOSIGNAL,NULL,0)    = 4 (0x4)

Basically the "\^E\^B\0\^A" is the bytes 0x05, 0x02, 0x00, 0x01.  This is a BIND` command, which I could not really understand the purpose of in the RFC1928.  The truss trace then shows the proxy as responding with 0x05 0x00.  Maybe I am missing that?  Lemme try to code this up.

No, wait, the previous comment is wrong.  That 0x05 0x02 0x00 0x01 is the authentication request.  CLBOSS uses 0x05 0x01 0x00, which is basically requesting for authentication type 0 (i.e. unauthenticated).  curl is requesting authentication types 0 or 1 (0x05 0x02 0x00 0x01 --> 0x05 == SOCKS5, 0x02 == two authentication methods following, 0x00 == no authentication, 0x01 == GSSAPI).  Then the server responds:
recvfrom(6,"\^E\0",2,0,NULL,0x0)                 = 2 (0x2)

That is 0x05 0x00: 0x05 == SOCKS5, 0x00 = I selected authentication type "no authentication".
Hmmmm.
Maybe I need to set the socket options and flags specially?  Hmmm.

So I decided to strace the dev-proxy-connect binary.  And the really weird thing is that inside the strace, the command consistently fails.  Outside the strace sometimes it fails and sometimes it passes.
So another major difference is that in CLBOSS we send the 0x05 0x01 0x03 in one write call, then we send the length-prefixed hostname, then we send the additional postfix, all in separate write calls.  Both curl and torify wget consistently send the entire command-hostname-postfix sequence in a single write or sendto call.
Maybe Tor has a latent bug related to this, where the hostname is not yet properly loaded before Tor goes and pokes its resolver, and that is greatly exacerbated when CLBOSS delays sending the hostname compared to the command.  Tor might be looking up a garbage hostname!  And nobody can notice this because Tor logs never store the hostname, it just writes [Scrubbed], so if the hostname is not yet loaded at the time Tor is looking it up, it could be looking up an incomplete or unloaded garbage hostname, and that is never logged because it is [Scrubbed].  That would be big WTF if true.
Lemme try if sending the entire sequence in a single large write call works better....

IT WORKS WHEN I SEND THE ENTIRE SEQUENCE IN A SINGLE LARGE write CALL WTF.  Previously dev-proxy-connect would inconsistently succeed and sometimes fail.  Now it consistently succeeds.  WTF.  I think I need to go file an issue at Tor.

@hosiawak can you give details on OS kernel version and Tor version of your system? I intend to file a bug report to Tor, and it seems likely they might want to know your details as well.

@ZmnSCPxj FreeBSD 11.2-RELEASE-p15 amd64, Tor version <IP_ADDRESS>.

Thanks!  I believe this is resolved so closing issue as well.


Why does JSON data override JSON schema?

I've created JSON data from a schema using json-editor's forms. Later, I've modified the schema, adding a few fields. My expectation was that the new fields would be displayed with null or default data. What surprised me is that the new fields that don't appear in the data are not displayed.
For instance, in this example, check out the "Video Loop" field in the schema that doesn't appear in the Shot object because it wasn't originally in the JSON data.
JSON Editor Example with Data
Is this expected behavior? Is there a workaround for this? Is there a way the form can amend the incoming data?

Your example URL doesn´t work. The URL is 'invalid'
Did you check the "properties" button? Are the fields you are missing listed there? If so, check the Parameter "required" for theses fields.

The URL is goes directly to jdorn's json-editor example which allows you to input schema and generate a form and then with the form generate JSON data. Or from JSON data you can have it populate the form.
I was using the form on my own site tonight and happily it doesn't do what I reported the example did. If the data doesn't contain fields in the schema/form it just assigns them the defaults. In fact, if the data contains fields not in the form, it adds new fields to the form.
So we can consider this resolved.

Hm, maybe it´s a problem with one of the proxies I´m behind. The URL maybe to long for one of them ;)

You need to add "required"-Fields if you want to force property fields that are not in JSON Data.


Fixed couple of typos

Fixed typos in command for gettings pods in kube-system namespace

/check-cla

/assign @m00nf1sh

Sorry, it's unneeded. Closing the PR.


A11y: Hidden Design Elements for more accessible content

The problem
Sometimes it's needed to add hidden text elements to Websites for screenreaders. E.g. texts that are only read by screenreader but are visually hidden. You could think about integrating such elements directly to the design system to integrate conceptional accessibility during the design process. Also this could create more awareness for designers to think about accessible structure from start. For developers this would be easier to implement those elements.
@mfranzke fyi, I'd like to hear your opinion as well ;)
The solution

Examples
No response

Hi @annsch, we are currently working on providing such screen reader text fields for the existing components (e.g. icon button, etc.)

Will be released soon for the components that are to become stable in January, the remaining components will also be gradually optimized in this respect.


Bump RN CLI, add @react-native/metro-config to template

Summary:
Changelog:
[General][Changed] - The default metro.config.js in apps now extends @react-native/metro-config, and should be updated in existing apps.
Context
React Native Metro config → React Native repo (https://github.com/facebook/react-native/pull/36502)
We (the React Native team) are aiming to relocate the default Metro config for React Native out of react-native-community/cli-plugin-metro and into the React Native repo + app template as a new react-native/metro-config package.
This is the first (and minimum viable) phase we can ship to separate the release process of Metro from RN CLI in order to reduce coupling and iterate faster for our users.
See full motivation, design, and test plan (which previewed the CLI bump) here: https://github.com/facebook/react-native/pull/36502
Changes
This is part 2/2 of the @react-native/metro-config changes, now that https://github.com/react-native-community/cli/pull/1875 is merged.

Upgrade react-native-community/cli to 11.0.0, upgrade all metro packages to 0.76.0 (version distributed in this CLI release).
Remove hotfix https://github.com/facebook/react-native/pull/36631.
Update the metro.config.js file in packages/react-native/template/.

Now merges defaults from @react-native/metro-config, and can be used with CLI >= 11.0.0.

Update the metro.config.js files for packages/react-native/ and packages/rn-tester/ (these are integration test locations).

Now merges defaults from @react-native/metro-config, and can be used with CLI >= 11.0.0.

Changes to @react-native/metro-config — 0.72.1 (prepared but not depended on yet):

Export mergeConfig util (removing direct metro-config dependency in consuming projects).
Explicitly depend on metro-react-native-babel-transformer and metro-runtime (transitively included today).

Reviewed By: cortinico, blakef
Differential Revision: D44099691

🛠 This commit should resolve failing CircleCI tests on main.
This appears to have happened because we expected to have bumped RN CLI to 11.0.0 in this commit — however we'd already been using the version specifier "11.0.0-alpha.2", where Yarn globs the portion of the specifier after '-'.
https://github.com/facebook/react-native/blob/8c9c8ba5adb59f7f891a5307a0bce7200dd3ac7d/packages/react-native/package.json#L82
(Incidentally, v11.0.0-alpha.1 was the most recent prerelease — v11.0.0-alpha.2 had been unpublished from npm.)
Since the template/ folder does not have a yarn.lock, and due to the interpretation of this specifier, when the RN CLI release was published yesterday .

Technically, a subset of this commit could have been merged earlier this week, that would have implemented the "this stack, before new CLI is merged" test case — and therefore have been forward-compatible in the event of an automatic bump, however I was waiting on:

https://github.com/facebook/react-native/pull/36582

TLDR; the automatic major bump of RN CLI on main was not expected, and we should see what we can do to bring lockfile-equivalent behaviour to CI. cc @cortinico @cipolleschi

(Note: I understand why we don't have a lockfile in the template, but this is inherently variable for CI!)

I agree we should avoid anything non-deterministic where we can. There is also value in testing the real flow of users building a new app though. E.g. if this was a change in the NPM ecosystem which broke more RN versions than 0.72, folks trying to generate a new app, without an existing lockfile, could be broken the same way.
I think it is better to do something deterministic for diffs/PRs, but I think there would be value in continuing to test live dependencies in some continuous test.

For where we do want determinism, could we just copy the repo lockfile into the template and do a yarn install? Any dependencies unique to the template would still be live, but then all of the ones defined in the main RN repo would be used otherwise.

Because I'd temporarily deleted my react-native fork, GitHub isn't updating the "Files changed" tab or triggering CircleCI on this PR. https://github.com/facebook/react-native/pull/36697 is a copy of this PR to verify CircleCI stability. The Meta-internal commit is the source of truth.
All Tests are passing for https://github.com/huntie/react-native/commit/ad7c99f957df9889bc4063031d40904dc502662e:

https://github.com/facebook/react-native/pull/36697

We still have some internal CI quirks to resolve in order to merge.
In the meantime, @cipolleschi cherry picked all contents of this PR onto 0.72-rc yesterday.

🎉


API suggestion: allow RequestBuilder to specify URI, method, and content without sending the request

I think RequestBuilder's API should be optimized for building requests, and not necessarily sending them. Currently the methods used to specify the URI, HTTP method, and request body/content also send the request, making it impossible to build a request without sending it. It should be possible to use this class to build a complete request and still maintain control over when it's sent.
I also think the semantics of these methods are a little unclear. Consider the code,
httpClient.createRequest()
    .post(uri, content)

Asking a request to post something doesn't make sense because "post" is a property or attribute of a request. It's something a client does, not something a request does. It makes more sense to tell the request that it uses "post", and then ask for the request to be sent.
I propose the following changes to the RequestBuilder class:

Replace .get(), .post(), etc. methods with .with- style methods that specify the HTTP method with no side effect.
Add .withUri() and .withContent().
Add a .getRequest() method that returns a complete HttpRequestMessage.
Add a .send() convenience method to let the API stay fluent and chain-able.

We could also consider allowing the URI and HTTP method to be passed as parameters to HttpClient.createRequest().
Current API:
client.createRequest()
    .withParams({ foo: 'bar' })
    .get('/cool/stuff');

client.createRequest()
    .withParams({ foo: 'bar' })
    .post('/cool/stuff', { some: 'content' });

Proposed API:
client.createRequest('/cool/stuff') // or `.withUri('/cool/stuff')`
    .withGetMethod() // it seems reasonable to make GET the default, and allow this to be omitted
    .withParams({ foo: 'bar' })
    .send();

client.createRequest('/cool/stuff')
    .withPostMethod() // or .withMethod('POST')
    .withContent({ some: 'content' })
    .send();

What about asGet() and asPost() or withMethod.get() and withMethod.post()?

I like asGet() and asPost(). That reads nicely. The main goal of my suggestion was to separate the building from the sending. I don't feel particularly strongly about the method names. I will admit to a slight aversion to the (ab?)use of getters in fluent APIs. It's just personal preference, though :-)

I ended up not adding a .getRequest() method because the helpers all create transformers that aren't applied until the request is sent by the client, so the request created by RequestBuilder has basically no info on it.


added a feautre of genrating random quotes by author name

Generate Random Quotes by writing the name of a particular author like William Shakespeare or Mark Twain, etc.

Close #2


Support for AirPlay

It would be nice to be able to output to an AirPlay server.
Related: it would be nice to be able to choose the audio output, but it might be another issue to open.

Have you tried something like - https://github.com/AdRoll/AirControl
I don't have an airplay device to play with or would test before suggesting.


After reinstall, operations fail with "No secret key available"

I was getting started with Keybase on my Ubuntu laptop, and here's what I did:

Briefly attempted to install the node client before I read it was deprecated; hit Ctrl-C halfway through.
Installed the Go client via the deb package (curl | sudo dpkg -i).
Attempted keybase login, but it failed with a permission error. I found that ~/.config/keybase was owned by root. chown -R mquander:mquander (myself) fixed it.
Made a few proofs.
In an attempt to reproduce the permissions problem, I uninstalled the package and deleted ~/.config/keybase. Then I reinstalled the package (the permissions problem didn't reproduce -- it was owned by mquander this time) and did keybase login again. This time keybase login did not ask me to provision the device; it just took my keybase passphrase.

Afterward, signing and other operations failed due to the error provided in the title. I saw https://github.com/keybase/client/issues/1411 and ran keybase pgp select --only-import to import my key again. That worked, and I can sign, encrypt, and decrypt messages. However, other operations still fail:
crescens:~$ keybase prove hackernews mquander
You already have a proof for mquander@hackernews; overwrite? [y/N] y
▶ ERROR No secret key available

crescens:~$ keybase deprovision

mquander, BE CAREFUL!  \('o')/

You are about to delete this device from your account, including its secret
keys. If you don't have any other devices, you'll lose access to your account
and all your data!

Also, the secret keyring you're about to delete contains PGP keys. To list them
or copy them, use `keybase pgp export`.

Proceed? (type 'YES' to confirm): YES
▶ INFO Revoking KIDs:
▶ INFO   01200798af7c953d8be52d1579cfc05e09e458aa31eeb76823eeef10c7e66e74b0d30a
▶ INFO   0121da1190f11b0a43310ff69f63758fb427e518cd6c612eda626997b296278c22730a
▶ ERROR No secret key available

I think I understand what happened.
Try this: keybase ctl stop
Then nuke your config directory again
Then try to login.
On Wednesday, December 2, 2015, Marshall Quander<EMAIL_ADDRESS>wrote:

I was playing around with Keybase on my Ubuntu laptop, and here's what I
did:

Briefly attempted to install the node client before I read it was
deprecated; hit Ctrl-C halfway through.
Installed the Go client via the deb package (curl | sudo dpkg -i).
Attempted keybase login, but it failed with a permission error. I
found that ~/.config/keybase was owned by root. chown -R
mquander:mquander fixed it.
Made a few proofs.
In an attempt to reproduce the permissions problem, I uninstalled
the package and deleted ~/.config/keybase. Then I reinstalled the
package. (The permissions problem didn't reproduce -- it was owned by
mquander this time) and did keybase login again. This time keybase
login did not ask me to provision the device; it just took my keybase
passphrase.

Afterward, signing and other operations failed due to the error provided
in the title. I saw #1411 https://github.com/keybase/client/issues/1411
and ran keybase pgp select --only-import to import my key again. That
worked, and I can sign messages. However, other operations still fail:
crescens:~$ keybase prove hackernews mquander
You already have a proof for mquander@hackernews; overwrite? [y/N] y
▶ ERROR No secret key available
crescens:~$ keybase deprovision
mquander, BE CAREFUL!  ('o')/
You are about to delete this device from your account, including its secret
keys. If you don't have any other devices, you'll lose access to your account
and all your data!
Also, the secret keyring you're about to delete contains PGP keys. To list them
or copy them, use keybase pgp export.
Proceed? (type 'YES' to confirm): YES
▶ INFO Revoking KIDs:
▶ INFO   01200798af7c953d8be52d1579cfc05e09e458aa31eeb76823eeef10c7e66e74b0d30a
▶ INFO   0121da1190f11b0a43310ff69f63758fb427e518cd6c612eda626997b296278c22730a
▶ ERROR No secret key available
—
Reply to this email directly or view it on GitHub
https://github.com/keybase/client/issues/1463.

That fixed the problem. Thanks!

Sure thing!
What happened was you nuked your private key but the daemon was still
running and didn't change its internal view of your provisioning status
accordingly.  That is arguably a bug but one that would only come up if you
did something drastic like nuking your config directory.
  It auto forks the next time you
run a command, like login.
Glad I could help out!
On Wednesday, December 2, 2015, Marshall Quander<EMAIL_ADDRESS>wrote:

That fixed the problem. Thanks!
—
Reply to this email directly or view it on GitHub
https://github.com/keybase/client/issues/1463#issuecomment-161499827.

Makes sense, I hadn't realized there was a daemon running at all -- I figured all of the local state was probably being stored in the config files.


Add ISSUE_TEMPLATE

@kenjis do you see this repo as an internal tool for the CodeIgniter organization?

Yes! This repo is for the CodeIgniter organization.
Not for everyone who uses CI4.

@MGatner I sent #13


Terminal cannot start up and crash (when Scale and layout NOT 100%)

Environment
Windows build number: [run `[Environment]::OSVersion` for powershell, or `ver` for cmd]
Version 1909 (OS Build 18363.476)
Windows Terminal version (if applicable):
0.7.3291.0
Any other software?

Steps to reproduce

When Display: Scale and layout NOT 100%, the program startup and show the windows. Then it will crash immediately.
Expected behavior

Wish to use Scale and layout to see bigger FONT in windows and can fit the monitor pixels.
Actual behavior

/dup #3749


Issue: Downloading the TEKKEN 7 base assets crashed TSH. The base assets did however finish downloading before the crash

Please send the log.txt and log_error.txt files from when the download failed (in the asset folder), as well as the program_state.json file (in the out folder)
The issue was not reproduced on the release version of 5.2 on Windows on 2023-03-07 at 22:40 UTC

I did however manage to reproduce a similar behavior with the full asset pack on 2023-03-07 at 22:42 UTC. I did not find any interesting logs. Files attached.
program_state.zip
log.txt
log_error.txt

Yeah I can't seem to reproduce the bug reliably nor am I sure that I ran into the same issue as you in the first place, so we're gonna need the logs for that one

Tested this recently and was not seeing a crash, and I believe this was due to the original crash we were seeing due to an erroneous unlock of a mutex (which should not have lead to a crash.....) but has long since been addressed.


[BUG] - cardano-node was refusing connections

Summary
@karknu reported that IOHK relay <IP_ADDRESS> seemed to have died.
[testnet-:cardano.node.DnsSubscription:Error:27831] [2020-05-28 06:02:42.98 UTC] [String "Connection Attempt Exception, destination <IP_ADDRESS>:3001 exception: Network.Socket.connect: <socket: 29>: timeout (Connection timed out)",String "SubscriptionTrace",String "\"relays-new.ff.dev.cardano.org\""]
[testnet-:cardano.node.DnsSubscription:Debug:27831] [2020-05-28 06:02:42.98 UTC] [String "Closed socket to <IP_ADDRESS>:3001",String "SubscriptionTrace",String "\"relays-new.ff.dev.cardano.org\""]
[testnet-:cardano.node.ErrorPolicy:Notice:79] [2020-05-28 06:02:42.98 UTC] [String "ErrorPolicySuspendConsumer (Just (ConnectionExceptionTrace Network.Socket.connect: <socket: 29>: timeout (Connection timed out))) 20s",String "ErrorPolicyTrace",String "<IP_ADDRESS>:3001"]

A restart of cardano-node worked around the issue.

Closing this. If this is still relevant please re-open.


Release installable emoji font

Is your feature request related to a problem? Please describe.
I want to use this emoji as font. so that i can render it in any way like terminal or vscode.
Describe the solution you'd like
Build .ttf files or the similar which facilitate installations
Describe alternatives you've considered
na
Additional context
na

SBIX, COLR, CBDT, SVG or a combination thereof?

SBIX, COLR, CBDT, SVG or a combination thereof?

i guess glyph.

SBIX, COLR, CBDT,
Sorry i don' t understand these three.

I want anything which is a install-able font file like--.tff or .otf
Which can be install system-wide like windows or linux. so that it can be rendered everywhere on the os

There are four color font variants included in the OpenType format now.
For the SVG variant, the readme already links to https://github.com/eosrei/twemoji-color-font.

nice i got the ttf from  https://github.com/mozilla/twemoji-colr .
You can close this issue. Thanks


I tried sltest in the qrd778 Android firmware, but it crashed.

Hello, I have an Android device qrd778, this device without secure boot
Attempting to flash "tz" and "HYP" from the firmware of the Qualcomm 7280 CLS laptop to qrd778, and then running sltest, the phone crashed and entered Qualcomm 900e.May I ask if it is related to mssecapp? Or something else? I'm not quite sure why my phone crashed.
This is uefilog:
FS4:> sltest.efi tcblaunch.exe

0x27FC01000 [81532]
SL-Bounce
Running in EL=1
We are FS12:\sltest.efi
Launching using tcblaunch.exe
Allocated 512 pages at 0x7F603000 (TCB)
Loadint PE header with 21504 bytes to 0x7F603000
Loading section '   .text' with 715264 bytes from offt=0x5400 to 0x7F609000
Loading section '       CS' with 512 bytes from offt=0xB3E00 to 0x7F6B8000
Loading section '  .rdata' with 83456 bytes from offt=0xB4000 to 0x7F6B9000
Loading section '   .data' with 4096 bytes from offt=0xC8600 to 0x7F6CE000
Loading section '  .pdata' with 14848 bytes from offt=0xC9600 to 0x7F6EA000
Loading section '   .rsrc' with 1536 bytes from offt=0xCD000 to 0x7F6EE000
Loading section '  .reloc' with 2048 bytes from offt=0xCD600 to 0x7F6EF000
Security entry at offt 0xCDE00 with size 0x4358
Cert: Len=0x4358, Rev=0x200, Type=0x2
Allocated 35 pages at 0x7FBDE000 (data, cert pages = 5)
TB entrypoint is 0x7FC0585C, Image is at 0x7FC05000, size= 0x2000, data[0]= 0x7FC0E000
Allocated 3 pages at 0x7FC1E000 (bootparams)
Data creation is done. Trying to perform Secure-Launch...
== Available: 0x0
== Auth: 0x0
== Launch: Start EBS        [83527]
0x7F8183F8 [83527] Shell.dll
0x9C8D9A24 [83527] CapsuleRuntimeDxe.dll
0x9C8DFABC [83527] RealTimeClock.dll
0x9CBD90C4 [83527] EmbeddedMonotonicCounter.dll
0x9CB38944 [83527] VariableDxe.dll
0x9E2D0710 [83527] SdccDxe.dll
0x9E31DD08 [83527] ResetRuntimeDxe.dll
0x9E3272A0 [83527] RuntimeDxe.dll
0x9E7EE790 [83527] SCHandlerRtDxe.dll
0x9E7F5EF0 [83527] RscRtDxe.dll
0x9E8030A8 [83527] EnvDxe.dll
0x7FE2738C [83527] UsbInitDxe.dll
0x7FE565AC [83527] UsbMsdDxe.dll
0x7FF77C04 [83527] UsbfnDwc3Dxe.dll
0x7FF137FC [83527] UsbConfigDxe.dll
0x7FFAF4B0 [83527] DisplayDxe.dll
0x9C7B67F0 [83527] QcomBds.dll

This is some data from the CDBBTIM.bin in 900e after the crash, I don't know if it is related to the crash.
0       1.016337 HYP Version Info: QC_IMAGE_VERSION_STRING=TZ.XF.5.11-00559.1-1
0       1.016493 HYP Version Info: IMAGE_VARIANT_STRING=IAGAANAAA
0       1.016626 OEM Version Info: OEM_IMAGE_VERSION_STRING=CRM
0       1.016755 (0)
0       1.019281 hyp_global_consts_init: psci version:00010001
0       1.035280 QUP Private Resource assignment success !!!
0       1.036322 Mapped HLOS Context Bank Aperture Successfully
0       1.036584 ~HYPX REGISTRATION FAILED~ Reason: 0xfa11
0       1.072589 first psci cpuon time: 1072588
0      89.703930 hyp_manager_launch: smcParams:0x27f602000 action:0x1
0      89.704012 hyp_manager_launch: status:0x0
0      89.798125 hyp_manager_launch: smcParams:0x27f602000 action:0x2
0      89.798170 hyp_manager_validate_region: Failed region not mapped
0      89.798583 hyp_manager_validate_region: Failed region not mapped
0      89.798836 hyp_manager_lookup_mssecapp_id: qcom.tz.mssecapp APP ID:0x1
0      89.798899 hyp_manager_tzapp_send:  skAction: HYP_IMG_AUTHENTICATE
0      89.799449 hyp_manager_launch: status:0x0
0      89.987942 hyp_manager_launch: smcParams:0x27f602000 action:0x4
0      89.988040 hyp_manager_tzapp_send:  skAction: HYP_IMG_LAUNCH
0      89.988374 hyp_manager_tzapp_send: Mapping 0x64 Memory regions
0      89.988424 hyp_manager_handle_launch: hyp_manager_tzapp_send failed
0      89.989689 Core:0, Data abort from EL2, Translation fault 2nd level
0      89.989736  Write operation
0      89.989758  Faulting Address: 0x27f602000
Address of Last Instruction Executed: 0x80057fcc at EL2
System Registers:
ESR_EL2(96000146)
FAR_EL2(27f602000)
HPFAR_EL2(150000)
ELR_EL2(80057fcc)
HCR_EL2(80080007)
0      89.989921 Making SMC call with ID: TZ_SECURE_WDOG_TRIGGER_ID to ensure the fault is handled

Hi!

this device without secure boot

Then IMO you should look into using a sane bootloader that will boot linux in EL2.

firmware of the Qualcomm 7280 CLS laptop to qrd778, and then running sltest, the phone crashed

The WoA firmware is fragile garbage, in your case seems like something inside mssecapp has failed but it could be for any reason whatsoever.
Generally android devices are out of scope for slbounce, and I'd explicitly state the sb-off devices are as well, since your time is better spent i.e. making u-boot work. Even just parching the firmware to jump to your code in el2 upon some smc is probably not that hard.


Study the Spring REST Docs API specification Integration project

Research the Spring REST Docs API specification Integration project: https://github.com/ePages-de/restdocs-api-spec

[x] Read the README file
[x] Create a small app and create documentation with it
[x] Generate the documentation and test it

In this ticket I have done the following tasks:

I created a new repo where I copied an official Spring RestDocs example project.
Added Spring RestDocs API Spec plugin and configuration to it.
I also modified the code as needed.
Added additional part to its documentation how to generate and configure OpenAPI 2/3 and/or Postman Collections.


Set AI spawner properties accordingly when survival mode is toggled

References #369
When survival mode is enabled, I will need to adjust the AISpawnerController to spawn in waves instead of standard spawning.

I added a couple methods to toggle wave spawning, to get the current wave size, and to get the number of active enemies which will eventually be used by the HUD and game logic to keep track of the survival mode. Spent half an hour, but it was combined with my work on #394

Worked half an hour on fixing a spawning bug where the wave didn't match up with the wave size and spawned AI. Also adjusted the wave spawning properties based on the difficulty.


Spread anywhere feature

Feature request from #670.
The new feature will allow spread anywhere in a list creation expression.
For example, list creation like
let _ = list{1, 2, 3, ...x, 4, 5, ...y, 6}

will no longer trigger an error anymore, but parsed to
let _ = Belt.List.concatMany [|(1 :: 2 :: 3 :: x);(4 :: 5 :: y);[6]|]

Can anyone help review this feature PR? Thanks ^v^

Would you add printing tests?

What is printing tests stand for? Like printing some parse results related to this feature?

Add a file in tests/print or extend an existing one where list examples are.
It will tell you how things print, and whether printing is idempotent, so you don't get different results if you format twice.

Thanks, I think I understand. I'll give it a try.

See how the syntax of normal lists is preserved by printing.
A similar mechanism is needed for this extension to lists.

tiny concern, but would it be better not allowing this expression at all ?
lists are not okay when manipulation is occurred at non-head position.
Once spreadings are used inadvertently, it would cause performance problem.
 For some reason.
First, IMHO again, list concatenation is a little bit verbose at present. We have to write some prefixes of Module.
Belt.List.concatMany([list{1, 2, ...x}, list{3, ...x}, list{4, ...x}, list{5}])
// or
Belt.List.concat(list{1, 2, ...x}, list{3, ...x})
// or
List.concat(list{list{1, 2, ...x}, list{3, ...x}})

Second, I think if we support @ operator (like OCaml), the verbose issues will be moderated. But for the existence of list open token list{,  looks still not concise enough. Like we have to tell the reader repeatedly "it's a list".
// pretend we have operator @
list{1, 2, ...x} @ list{3, ...x} @ list{4, ...x} @ list{5}
list{1,2, ...x} @ list{3, ...x}

If we let spread show anywhere, we can just write:
list{1, 2, ...x, 3, ...x, 4, ...x, 5}
list{1, 2, ...x, 3, ...x}

I think that's more concise, right?

Finally, the performance issue you mentioned does exist while this feature is being misused. But this feature will not downside any performance of existing code, and I think (I'm not sure) concatenate seems can be optimized in some way. So I think it's still a good deal.  I'll always wait for more suggestions.

Before adding this to the language, we should take a closer look at the design of this feature.
What is the reach of this problem? There are 3 vectors:

volume of GH issues, forum posts, twitter etc…
how blocking is this problem if the developer encounters
how many of the total ReScript devs does it affect in their day to day work?

When making design decisions regarding new syntax in the language, it’s also important to weigh the costs, not all of which are performance, against the potential benefits. The following things can happen:

The language gets larger.
The language gets slower.
The documentation becomes more extensive.
We're spending time developing new syntax, rather than refining other parts of the language.
We run the risk of introducing changes that don't play well with existing syntax. (Why don't we allow this for array then?)

Let me explain a bit why this feature it is useful and why you should not worry about performance.
This feature is very helpful for expressing lots of  algorithms, for example
Add(e1,e2) => list {... compile(e1), ... compile(e2), Add }

It is much more readable than the alternatives, and as efficient as you could, in theory the compiler can do
a better job than you since it kows the compile is a temporay variable and can do some smart mutations.
So the argumets are:

You should avoid list if you care about performance
If you want to concate two lists, the alternative is not better at performance, you have to express this pattern, by
disabling this syntax does not mean you can avoid the problem, JavaScript is also consistent here

Before we add this feature, this used to be a bug, the syntax was accepted but not reported error, it is worse so
that we are not enriching the syntax: we are fixing existing issues.
With regard to developer resources, this is the feature I would like to add on day one when making BuckleScript,
finally, I have some dedicated resources to make it possible, it also makes the sample code for PL course in ReScript much more readable, instructions concatenation are everywhere.
Hope my explanantions make the motivation clear

Thanks for the context @bobzhang 👍

@butterunderflow looks good to me once the comments are addressed.
Note Belt.List.concatMany is an implementation detail, in theory, we could swap more efficient ones in the future

Done. Please check again, thanks!

@butterunderflow Thanks, cannot wait for to use it in the course!

@butterunderflow would you add a line to CHANGELOG.md

Done. Please check https://github.com/rescript-lang/syntax/pull/698


[4.X]DataTables loading script twice if load the view inside the form.

When I load a ajax crud view inside a create or edit backpack view through custom input field, it shows DataTables is not a function or Jquery is not defined.
When I define jquery with cdn it says DataTables is not a function(even when defining datatables from cdn)
In a normal view it works.
Possible issues: Double loading of datatables/jquery
Any fix?

Hello @samuk190
I was having a look at issues. I don't think I fully understand your question ?
If jquery is already loaded in that view don't load it again in your custom view ? I don't know, didn't get it at all. Sorry man.
I hope you can explain me better what you did, until then I will just change the title because this is not a confirmed bug in backpack.
Best,
Pedro

Closing this since i wasn't able to replicate. Please feel free to reply or reopen if I'm wrong. Cheers!


plugin not compatible with cordova-plugin-code-push

Describe the bug
This plugin is not working with cordova-plugin-code-push
Build fail on android (not tested ios)
To Reproduce
Steps to reproduce the behavior:

start new ionic/cordova project
ionic cordova plugin add cordova-plugin-code-push
ionic cordova plugin add cordova-plugin-firebase
ionic cordova build android

Expected behavior
A working build
Build failed
Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'.
> In project 'app' a resolved Google Play services library dependency depends on another at an exact version (e.g. "[1.3.1,2.3]"
but isn't being resolved to that version. Behavior exhibited by the library will be unknown.
Dependency failing: com.nimbusds:nimbus-jose-jwt:5.1 -> net.minidev:json-smart@[1.3.1,2.3], but json-smart version was 2.3.
The following dependencies are project dependencies that are direct or have transitive dependencies that lead to the artsitive dependencies that lead to the art   ifact with the issue.
-- Project 'app' depends onto<EMAIL_ADDRESS>-- Project 'app' depends onto<EMAIL_ADDRESS>Plugin Version
cordova plugin list

code-push 2.0.6 "CodePushAcquisition"
cordova-plugin-android-fingerprint-auth 1.5.0 "FingerprintAuth"
cordova-plugin-androidx 1.0.2 "cordova-plugin-androidx"
cordova-plugin-androidx-adapter 1.0.2 "cordova-plugin-androidx-adapter"
cordova-plugin-camera 4.0.3 "Camera"
cordova-plugin-code-push 1.11.19 "CodePush"
cordova-plugin-device 2.0.2 "Device"
cordova-plugin-dialogs 2.0.1 "Notification"
cordova-plugin-file 6.0.1 "File"
cordova-plugin-file-transfer 1.7.1 "File Transfer"
cordova-plugin-firebase-lib 4.0.1 "Google Firebase Plugin"
cordova-plugin-googlemaps 2.6.2 "cordova-plugin-googlemaps"
cordova-plugin-inappbrowser 2.0.2 "InAppBrowser"
cordova-plugin-ionic-webview 1.2.1 "cordova-plugin-ionic-webview"
cordova-plugin-pin-dialog 0.1.3 "PinDialog"
cordova-plugin-qrscanner 2.6.2 "QRScanner"
cordova-plugin-splashscreen 5.0.2 "Splashscreen"
cordova-plugin-statusbar 2.4.2 "StatusBar"
cordova-plugin-stripe 1.5.3 "cordova-plugin-stripe"
cordova-plugin-touch-id 3.3.1 "Touch ID"
cordova-plugin-whitelist 1.3.3 "Whitelist"
cordova-plugin-zip 3.1.0 "cordova-plugin-zip"

Desktop (please complete the following information):

Ionic:

ionic (Ionic CLI)  : 4.2.0 (C:\Users\hugob\AppData\Local\Yarn\Data\global\node_modules\ionic)
Ionic Framework    : ionic-angular 3.9.2
@ionic/app-scripts : 3.2.3

Cordova:

cordova (Cordova CLI) : 9.0.0<EMAIL_ADDRESS>Cordova Platforms     : android 8.0.0
Cordova Plugins       : cordova-plugin-ionic-webview 1.2.1, (and 20 other plugins)

System:

(C:\Users\hugob\AppData\Local\Android\android-sdk)
NodeJS            : v10.16.0 (C:\Program Files\nodejs\node.exe)
npm               : 6.9.0
OS                : Windows 10

Smartphone (please complete the following information):

Device: [e.g. iPhone6]
OS: [e.g. iOS8.1]
Browser [e.g. stock browser, safari]
Version [e.g. 22]

Plugins are independently working well (code-push alone or firebase alone)

according to https://github.com/microsoft/react-native-code-push/issues/1448#issuecomment-501936547
This worked for me.
Modify this line to your *.gradle in the /platforms/android/cordova-plugin-code-push/
compile 'com.nimbusds:nimbus-jose-jwt:5.1' ->
compile('com.nimbusds:nimbus-jose-jwt:5.1') { exclude group: "net.minidev", module: "json-smart" }

Didn't expect to find solution into react issue. Thanks a lot, it's working


add a GUI fullscreen setting for exported player

enable a new "Windowed Player" option in settings, allow to set the player behavior with a better UX.
... if this change is good, more settings could probably be enabled (res ? vsync ?)
also fixes a few cosmetic around player.exe (window title, some text)

That's a really good idea and it's totally worth an option.

It's possible to add  an option to allow Windowd Player resizable?
AllowUserResizing = false


end of line command ($) while in visual mode

Using the $ command while in visual mode incorrectly highlights the newline character at the end of the line instead of only the characters up til there.
Atom: 1.0.7
OS: Windows 10
vim-mode: 0.58.0

As stated in the README, this package is no longer maintained and is deprecated. We recommend that people use the vim-mode-plus package instead. Because of this, we are archiving this repository and closing all issues and pull requests. Thanks very much for your support and contributions!


return 'SubscriptionArn' from subscribe method

It's important to get $SubscriptionArn when make subscription for a user. $SubscriptionArn is required for unsubscribe method.

Thanks 😄  I guess I didn't need this originally because you can also get SubscriptionARN's from listSubscriptions() and listSubscriptionsByTopic()

Thanks for merging 💯


Added a bootstrapping and bootstrapped event for pre and post boostrapping

Laravel currently supports listening to pre- and post-events for individual bootstrappers, but if you want to do something after all the bootstrappers have been run, or before any have been, you have to hardcode references to the default bootstrappers and hope nothing has changed.
This PR adds the bootstrapping and bootstrapped events, following the theme of bootstrapping: BootstrapperName and bootstrapped: BootstrapperName. This should allow developers to react to bootstrapping without having to worry whether Kernel::$bootstrappers has been modified in some way. In fact, the very existence of these two new events may remove any need to modify the bootstrappers array.
I have also added tests for both of these.
bootstrapping
This event is fired before Application loops through the bootstrappers and can be hooked into using:
Application::preBootstrapping(Closure $callback)

bootstrapped
This event is fired after Application loops through the bootstrappers and can be hooked into using:
Application::postBootstrapping(Closure $callback)

Pretty cool idea. 🥳
IDK if anyone agrees with me but I would prefer using this wording instead:
Application::beforeBootstrap(Closure $callback)

Application::afterBootstrap(Closure $callback)

Pretty cool idea. 🥳
IDK if anyone agrees with me but I would prefer using this wording instead:
Application::beforeBootstrap(Closure $callback)

Application::afterBootstrap(Closure $callback)

The names could be changed to that, though that feels a little too close to the two methods that already exist.

I like this idea, but wondering where would you call Application::beforeBootstrap(Closure $callback)?
I assume you would need to put this in bootstrap/app.php, as I don't believe it can go in a service provider, as service providers are part of the bootstrapping process.
$app = new Illuminate\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);

$app->singleton(
    Illuminate\Contracts\Http\Kernel::class,
    App\Http\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Console\Kernel::class,
    App\Console\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\Exceptions\Handler::class
);

$app->beforeBootstrap(function () {
    //
});

return $app;

I don't think you would be able to use the Application facade

I like this idea, but wondering where would you call Application::beforeBootstrap(Closure $callback)?
I assume you would need to put this in bootstrap/app.php, as I don't believe it can go in a service provider; the service providers are part of the bootstrapping process.
$app = new Illuminate\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);

$app->singleton(
    Illuminate\Contracts\Http\Kernel::class,
    App\Http\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Console\Kernel::class,
    App\Console\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\Exceptions\Handler::class
);

$app->beforeBootstrap(function () {
    //
});

return $app;

The problem here is that the applications 'events' instance has not yet been bound to the container, i.e. the EventServiceProvider has not yet run. I think that the instance it resolved in the above would then be replaced.

You raise a very good point. I did have a solution for this, but I dont have it to hand

I think it would make sense to have the "after" hook. But if you need a before hook, you may as well just put that code in the boostrap/app.php file outside of a closure.
// bootstrap/app.php

$app = new Illuminate\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);

// ...

$app->instance('laravel.started_at', Carbon\Carbon::now());

return $app;

// AppServiceProvider

public function register()
{
    $this->app->afterBootstrap(function ($app) {
        if ($app['laravel.started_at']->addSecond()->isAfter(now()) {
            report('Bootstrapping the app took longer than one second.');
        }
    });
}

I think it would make sense to have the "after" hook. But if you need a before hook, you may as well just put that code in the boostrap/app.php file outside of a closure.
// bootstrap/app.php

$app = new Illuminate\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);

// ...

$app->instance('laravel.started_at', Carbon\Carbon::now());

return $app;

// AppServiceProvider

public function register()
{
    $this->app->afterBootstrap(function ($app) {
        if ($app['laravel.started_at']->addSecond()->isAfter(now()) {
            report('Bootstrapping the app took longer than one second.');
        }
    });
}

Oh wait, sorry. The events handler is registered. It's registered as a core provider before bootstrapping even happens. It's how you can listen for particular bootstrappers.

What's would be the difference between the suggested afterBootstrap vs existing booted method?

What's would be the difference between the suggested afterBootstrap vs existing booted method?

That happens later in the startup process, after providers have been registered and booted.

I think it would make sense to have the "after" hook. But if you need a before hook, you may as well just put that code in the boostrap/app.php file outside of a closure.
// bootstrap/app.php

$app = new Illuminate\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);

// ...

$app->instance('laravel.started_at', Carbon\Carbon::now());

return $app;

// AppServiceProvider

public function register()
{
    $this->app->afterBootstrap(function ($app) {
        if ($app['laravel.started_at']->addSecond()->isAfter(now()) {
            report('Bootstrapping the app took longer than one second.');
        }
    });
}

My particular use case is a package, and I want to add the following to bootstrap/app.php, either automatically, or by having the user do it.
$app->beforeBootstrapping(function () use($app) {
    $app->registerProvider(new MyProvider(require /file.php));
});

The amount of stuff this provider does would make the app file very large. All of the things it does also needs to happen before any ENV or Config is loaded.

$app->beforeBootstrapping(function () use($app) {
    $app->registerProvider(new MyProvider(require /file.php));
});

If your intention to add this under ServiceProvider::register() method doesn't provide any different because the application is already bootstrapping, you might as well just write:
$this->app->registerProvider(new MyProvider(require /file.php));

$app->beforeBootstrapping(function () use($app) {
    $app->registerProvider(new MyProvider(require /file.php));
});

If your intention to add this under ServiceProvider::register() method it doesn't provide any difference because the application is already bootstrapping, you might as well just write:
$this->app->registerProvider(new MyProvider(require /file.php));

Even registering afterBootstrap() in a Service Provider is too late, because previous "bootstrap" classes have been executed.

For my particular use case, I need to perform a bunch of actions before the env and config is loaded, as the result of these actions can and will affect what is loaded. You are absolutely correct that I could simply load the provider right there, but, adding a provider then will still happen before "bootstrapping".
Here's the lifecycle process:

Create new instance of Application with base bindings in bootstrap/app.php
The Application constructor does the following:

Create base bindings for things like Container and Mix
Register and boot the following service providers in the following order:

EventServiceProvider
LogServiceProvider
RoutingServiceProvider

Register container aliases

This is where any extra code in bootstrap/app.php would be run
It then creates a new Kernel
It then creates a Request and passes it to Kernel::handle()
The Kernel::handle() method does the following:

Bind Request to the container
Clear the resolved instance for the request facade
Calls Kernel::bootstrap(), which:

**This is where the "pre-bootstrapping" event would be
Cycles through the bootstrappers

LoadEnvironmentVariables
LoadConfiguration
HandleExceptions
RegisterFacades
RegisterProviders
BootProviders

Before each bootstrapper it fires off an event bootstrapping: {class}
After each bootstrapper it fires off an event bootstrapped: {class}
This is where the "post-bootstrapping" event would be

There was a mistake in my previous code example, I would be using Application::register() not Application::registerProvider(), as the second doesn't exist.
You are correct that you can just run the code directly in app.php, but if in the process you need an instance of Request, it will not be available.
While I completely appreciate that the event is only slightly later during the framework booting process, I also think there's no harm in adding it as it complements the two bootstrapping and bootstrapped events that already exist. Sure I could use the Application::beforeBootstrapping() and Application::afterBootstrapping() methods, but that would only work as long as there aren't modifications to Kernel::$bootstrappers.

Can you explain a bit more what kind of package you are trying to write? 😅

Can you explain a bit more what kind of package you are trying to write? 😅

It's a fully fledged all singing all dancing multitenancy package, as in, it does just about every combination of different features attributed to multitenancy.
This particular change would be for the static/modular style multitenancy that is common in applications built to serve a franchise, where each tenant will have custom templates/views, as well as possible their own config and/or environment variables. When dealing with the dynamic/SaaS style multitenancy, you create new database connections, storage drives, etc, etc, but with the static approach, the default driver should match their default settings.
The idea is that config/ and .env contain the core default settings, but something like tenant/ollieread.com (which would like sort of like a laravel/laravel installation) would have its own config/ and .env that would override the default. It would be the same with the default view path, etc.
I could absolutely achieve what I want to do without this, but I figured that this is a small enough addition, and it wouldn't hurt to have it there.

Since you can continue working on the package without this particular feature at the moment, could you come back to us when the package is totally finished and ready for release and then we can look at adding it? Or, is it totally finished now?

Since you can continue working on the package without this particular feature at the moment, could you come back to us when the package is totally finished and ready for release and then we can look at adding it? Or, is it totally finished now?

It's not finished now, and it's going to be a closed source package. I'm more than happy to close this PR if you aren't convinced. I can make do.

OK - why don't you re-open this when the package is ready for release just so we can be certain it will actually be needed. 👍

OK - why don't you re-open this when the package is ready for release just so we can be certain it will actually be needed. 👍

Will do, thanks.


building validations

Is there a way to populate validate_doc_update in the design document other than creating validate_doc_update.js in the root of the application? I'd like to compose the validations from several sources. What kind of approach for this would you accept if it requires patching?

Like python couchapp you could use the Macro plugin to include helper methods from multiple sources. Another Idea could be a "validations" entry in the config.json that lists validations as seperate files in an ordered array:
{
  //...
  "validations": [
     "validations/user.js",
     "validations/mydoc.js",
   //...
  ]
}

I would definitely accept that as a pull request.

We ended up using couch's server-side js includes to pull validators for each kind of document together into the main validator. We're doing something similar for update handling and accessors (accessors are what we call the generic object get that is rewritten to go through our own kind of checker)


Bump calico/typha/flannel, fix cause of calico/typha restarts

In looking at whether the networking was working post the 0.11.x upgrade I did find some issues and have have bumped the versions of the images forwards and altered the readiness/liveness checks in line with new behavoir around pods running in the host network.  I also found a couple of init containers that were responsible for writing semaphore files to trigger network migration that can be cleaned up.

Codecov Report

Merging #1466 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master    #1466   +/-   ##
=======================================
  Coverage   37.88%   37.88%
=======================================
  Files          75       75
  Lines        4593     4593
=======================================
  Hits         1740     1740
  Misses       2611     2611
  Partials      242      242

Impacted Files
Coverage Δ

core/controlplane/config/config.go
63.46% <ø> (ø)
:arrow_up:

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 6126a93...fb79bfb. Read the comment docs.


In Safari 14 (macOS), swiping back to an obs results in blank page

Make sure "Swipe between pages" is turned on in your Trackpad system preferences.
Go to an observation detail page in Safari 14, eg https://www.inaturalist.org/observations/71493093
Click on the obs taxon to go to its taxon page.
Swipe back to return to the observation.
Observation is shown briefly then goes blank.

Console:

Working in newer versions of Safari, so I think it's OK to close.


File populated by xlsx-populate can not open with Excel

I have a template xlsm file and I use this library to populate some data. However, my template file cannot open with Excel after xlsx-populate edited. Excel prompts:

After clicking "Yes", all cell format are lost, and Excel prompts "Removed Part: /xl/styles.xml part with XML error.  (Styles) Load error. Line 1, column 0."
According to my resarch, this is due to wrong handing for paticular cell style by xlsx-populate. When setting a cell style to horizontal center, xlsx-populate will append <alignment horizontal="center"/> after original cell style , look like this:
<xf numFmtId="0" fontId="8" fillId="5" borderId="1" xfId="0" applyFill="1" applyProtection="1" applyFont="1" applyBorder="1">
	<protection locked="0"/>
	<alignment horizontal="center"/>
</xf>

But unfortunately, it seems Excel expects all cell format property are located before <protection locked="0"/>.
If switch their positions like this:
<xf numFmtId="0" fontId="8" fillId="5" borderId="1" xfId="0" applyFill="1" applyProtection="1" applyFont="1" applyBorder="1">
	<alignment horizontal="center"/>
	<protection locked="0"/>
</xf>

Excel can open this file normally then.
Thank you for your contribution, your work has helped me a lot, also hope that this library can be made better.

I'll take a look. I might be able to control the insertion order so that this does not happen.

I was able to reproduce this issue.
In Excel:

Create new xlsx
Select a range of cells
Format cells: uncheck locked within Protection tab

Run xlsx-populate code to add a horizontal alignment:
XlsxPopulate
    .fromFileAsync("cell-protection.xlsx")
    .then(workbook => {
        workbook
            .sheet("Sheet1")
            .cell("A1")
            .style("horizontalAlignment", "center");

        return workbook.toFileAsync("./out.xlsx");
    });

Bump. Any progress on this? It's causing some issues in that we're not able to open any of our files with Excel (only open office) which is not a great work around.

I will take a look. If I find a fix, I will make a pull request.

Actually, I've found it was a combination of issues. I managed to work around this one but found another issue. It only impacts excel and not open office.

Try if this works: https://github.com/LesterLyu/xlsx-populate/tree/issue-157
npm install https://github.com/LesterLyu/xlsx-populate.git#issue-157

-> Bump here <-
I ran into this issue as well, I will attempt to debug and maybe suggest a change myself tomorrow, however I've only just started working with xlsx-populate ( my favorite open source repo 😉)

Update:
I can reproduce this issue when I'm dealing with sheets > 1,000 rows in length and 38 columns wide.
I'm not too sure how to continue debugging, but will try. It does not matter how many styles nor what their value is, if I so much as set all the cells to have a black fill the spreadsheet will not open in excel.

Try if this works: https://github.com/LesterLyu/xlsx-populate/tree/issue-157
npm install https://github.com/LesterLyu/xlsx-populate.git#issue-157

@LesterLyu Afraid that version of xlsx-populate does not solve my problem, if it is the same problem 😅

I believe I have concluded this issue ( or at least my issue ) to be directly related to #188 . When there are less rows, my workbook opens perfectly fine. I have attempted to set the styles uses ranges instead, but the end result is still the same.
I will move to that issue.

There is a limitation on the number of styles. If it exceeds that number, excel will fail to open. In current implementation, each cell uses a style, even though the styles are same. Ideally those cells should share the same style.

If you download this excel file from the server side (In my case Node JS).
The problem is solved by one line on the client side:  req.responseType = "arraybuffer";
var req = new XMLHttpRequest();
req.open("GET", "http://...", true);
req.responseType = "arraybuffer";
req.onreadystatechange = function () {
    if (req.readyState === 4 && req.status === 200){
        XlsxPopulate.fromDataAsync(req.response)
            .then(function (workbook) {
                // ...
            });
    }
};

req.send();

There is a limitation on the number of styles. If it exceeds that number, excel will fail to open. In current implementation, each cell uses a style, even though the styles are same. Ideally those cells should share the same style.

I haven't looked under the hood to confirm this, but it looks like you can make cells share the same style like this:
const numFormat = ws.cell('C2').style('numberFormat');
ws.range('C2:C10000').style('numberFormat', numFormat);

Using this approach resolved the issue for me.

I experienced the same issue and managed to work around it in two ways as follows.
I hope that the issue is resolved soon so that this information is no longer relevant, in the meanwhile however this could be useful for anyone else experiencing the same problem.
Method 1 - Manually editing the source excel
The error in the output excel (where an xf cell style tag has the protection children before the alignment children) is caused by xlsx-populate appending the alignment tag at the end of xf's children when one sets, for example, the horizontalAlignment style property to an unstyled cell. However, if an aligment tag is already present in the cell style tag, then it is reused avoiding the mis-ordering.
For my specific usecase, I needed to unlock only some cells in a sheet in the source file, then style them using xlsx-populate and export the resulting excel. I noticed that if when preparing the input sheet I set at least one alignment property (such as verticalAlignment, horizontalAlignment, textWrap) for all the cells which need to be unlocked, then I don't encounter the issue, since the alignment tag and the protection tag are both alrady present and in the correct order.
Method 2 - exploiting xlsx-populate's implementation details
If editing the source file to set an alignment property on all of the cells which are unlocked is not feasible, another option is to reorder the alignment and protecton tags manually before exporting the excel as follows, altering xlsx-populate's internal representation of the workbook. I tested this on the current version (1.21.0) but since it uses undocumented implementation details it might break in future versions or even in the current one in some cases.
Note that the re-ordering must be applied after editing the workbok style and before exporting to excel.
Building on eddiecorrigall's sample from https://github.com/dtjohnson/xlsx-populate/issues/157#issuecomment-463204424, here is the code I used.
XlsxPopulate
    .fromFileAsync("cell-protection.xlsx")
    .then(workbook => {
        workbook
            .sheet("Sheet1")
            .cell("A1")
            .style("horizontalAlignment", "center");

        /* if an xf tag has two or more children, it means that problably
         * the protection and alignment children tags are in the wrong order.
         * Here we manually fix the order, so that excel can read the file. */
        workbook._styleSheet._cellXfsNode.children
            .filter((xf) => {
                // only consider xf nodes where the protection tag is before the alignment one
                return (
                    xf.children.length > 1 &&
                    xf.children[0].name === "protection"
                );
            })
            .forEach((xf) => {
                xf.children = xf.children.reverse(); // <-- put "alignment" before "protection"
            })

        return workbook.toFileAsync("./out.xlsx");
    });

Hey, Does this issue resolved?
Am still getting the same error in windows.I have added drop down options (using dataValiadtion) to one of my column and this is not working in windows.
here is my code
`        // Create a new workbook
const workbook = await XlsxPopulate.fromBlankAsync();
    // Define the dynamic drop-down options
    const dropDownOptions = ['red', 'blue', 'green'];

    // Get the first sheet of the workbook
    const sheet = workbook.sheet(0);

    // Set the header row values
    sheet.row(1).cell(1).value('id');
    sheet.row(1).cell(2).value('name');
    sheet.row(1).cell(3).value('type');

    // Apply bold font to the header row
    sheet.row(1).style('bold', true);

    // Set the data validation for each cell in the "type" column
    for (let i = 2; i <= 200; i++) {
        const cell = sheet.cell(`C${i}`);
        cell.dataValidation({
            type: 'list',
            formula1: dropDownOptions.join(','),
            allowBlank: false,
            showInputMessage: false,
            prompt: false,
            promptTitle: 'String',
            showErrorMessage: false,

        });
    }

    // Generate the Excel file buffer
    const excelFileBuffer = await workbook.outputAsync();`


CVE-2018-10933

I noticed that ssh-honepot use libssh. Is it secure?

Yes, this project uses libssh.
I do not believe this is vulnerable to CVE-2018-10933. Clients don't authenticate to this in the traditional sense, and ssh channels aren't opened with this software. It merely logs the usernames/passwords tried. People using this can recompile it after patching libssh for this vulnerability; it is statically linked by default.
As for your question "Is it secure?"; who knows? Like all software, there are probably some bugs present. If there are, I don't know about them. As with all of my projects, bug reports and PRs are welcome.


How do I use gtkmm?

I am trying to use gtkmm with vcpkg but It neither has pkg-config nor cmake support?

See example https://github.com/microsoft/vcpkg/blob/master/docs/examples/installing-and-using-packages.md#handling-libraries-without-native-cmake-support

Thanks

I created one CMake file for both windows and Linux.
https://gist.github.com/renjuashokan/88f6acec7d4a6f6462abed548423c349


how to pass settings to a custom component

How can i pass a additional settings to a custom component and access it via props ?

Hi @wiredots01!
You'll see in the file linked below, an input has props key you can use to pass down an object to a custom/any component!
https://github.com/andrewhathaway/Winterfell/blob/master/src/question.js#L141
Thanks!


TK5000 data not coming in

Hello
First I would like to thank for this great platform and work :-) With your iOS Tracker Client everything works.
Now we would like to use Tracker TK5000 which should be supported according to the devices list.
We have configured the tracker and there are data coming in from TK5000, but somehow not enought.
We are getting the following data from TK5000:
2015-03-26 11:49:01 DEBUG: [5032 <- <IP_ADDRESS>] - HEX: d0d7090001ca9a3b
2015-03-26 11:49:01 DEBUG: [5032 -> <IP_ADDRESS>] - HEX: d0d7090001ca9a3b
On the working iOS Tracker Client, we get the following:
2015-03-26 11:53:18 DEBUG: [5005 <- <IP_ADDRESS>] - HEX: 244750524d432c3130353331392e3030302c412c343732352e323437352c4e2c30303932322e333037392c452c302e30302c302e30302c3236303331352c2c2a30300d0a
2015-03-26 11:53:18 DEBUG: [5005 -> <IP_ADDRESS>] - HEX: 4f4b310d0a
2015-03-26 11:53:18  INFO: device: 7, time: Thu Mar 26 11:53:19 CET 2015, lat: 47.420791666666666, lon: 9.371798333333333
Do you have any idea what's going on here?
It also could be a problem on Tracker side, but it's weird that we get some data from TK5000, but not all.
Thank you very much for any help.
Best Regards
Silvan

Looks like your device sends only heartbeat message which doesn't have any location info.

Thank you very much. We have forgot something to configure on Tracker.

@gogcam What did you forget to configure exactly? Might help others...
Probably this can be closed then?


We need more API.For methods

As described here: http://blog.vavr.io/redundancy-of-the-java-language/

Hi @danieldietrich , link is broken, where can I find article?

@danieldietrich some of the internal links on the blog are also broken (they're absolute links pointing to javaslang.io instead of relative links). For example:

In our previous post we showed the Grill example...

Thank you for the hint! I will fix them!

@danieldietrich following this broken links topic - there are also images links broken:
These are the results: ![for-benchmark](/content/images/2016/10/for-benchmark-1.png)

Hi @danieldietrich ,
Can you maybe provide some examples how it should look like?
Do you expect to have For() method on every monadic type?

Hi @CauchyPeano,

following this broken links topic - there are also images links broken:

I fixed the image - it wasn't the link, it was a changed behavior of the markdown renderer in the the Ghost blog version.
Before I used this snippet to change the size of an image:

![for-benchmark](/content/images/2016/10/for-benchmark-1.png)

Now I have to use this code instead:

@CauchyPeano

Can you maybe provide some examples how it should look like?

We need to change the code generator for vavr/src-gen/main/java/io/vavr/API.java, located in vavr/generator/Generator.scala.
Wlog, currently we have:
public static <T1> For1<T1> For(Iterable<T1> ts1) { ... }

Basically, we need additional method overloads for all monadic types.
public static <T1> For1<T1> For(Option<T1> monad1) { ... }

We start with Option, Try, Either, Future and Validation. We will decide later if we do the same for all collection types (or just Seq, (Multi)Set, (Multi)Map, ... - or something else).
We will not add classes in addition to the existing  API.For1, ..., API.For8. Currently we have:
    public static class For1<T1> {

        private final Iterable<T1> ts1;

        private For1(Iterable<T1> ts1) {
            this.ts1 = ts1;
        }

        public <R> Iterator<R> yield(Function<? super T1, ? extends R> f) {
            Objects.requireNonNull(f, "f is null");
            return Iterator.ofAll(ts1).map(f);
        }

        public Iterator<T1> yield() {
            return yield(Function.identity());
        }
    }

But we need to substitute Iterable with Value (and pull out the Iterator factory method call) in order to make For1..8 reusable:
    public static class For1<T1, MT1 extends Value<T1>, MR extends Value<R>> {

        private final MT1 monad1;

        private For1(MT1 monad1) {
            this.monad1 = monad1;
        }

        @SuppressWarnings("unchecked")
        public <R> MR yield(Function<? super T1, ? extends R> f) {
            Objects.requireNonNull(f, "f is null");
            return (MR) monad1.map(f);
        }

        public MT1 yield() {
            return yield(Function.identity());
        }
    }

Maybe we need to treat the generics a bit in order to make it compile...

thanks @danieldietrich for explanation!
I'm still not sure what to do with
public static <T1> For1<T1> For(Iterable<T1> ts1)
because there we no longer can use For1<> as result - Iterable is not a Value. Should we then remove those methods, and leave for Iterables only this one:
public static <T, U> Iterator For(Iterable<T> ts, Function<T, Iterable> f) ?

@CauchyPeano For now you can leave the method signature as is and change the implementation like this:
public static <T1> For1<T1> For(Iterable<T1> ts1) {
    Objects.requireNonNull(ts1, "ts1 is null");
    return new For1<>(Iterator.ofAll(ts1));
}

You pull the Iterator.ofAll out of the For1..8 class constructor, up to the calling method.
(Iterator is part of io.vavr.collection)

Hi @danieldietrich , i'm working on it. Don't you think that it's worth to lift in signatures Iterator to Traversable then?

@CauchyPeano Thx!
For loops iterate over Iterables. An Iterable does not need necessarily be a collection. I would stick with Iterator for now. It has a very small memory and cou footprint.
Later we might add more overloads for collections.
—-
I did not spend time on flatMap, yet. I have some ideas but need to test a bit. Will come back tomorrow...

Oh, spent plenty of time trying to figure out why new implementation was not working on List
`
public static <T1, T2> For2<T1, T2> For(List ts1, List ts2) {
return new For2<>(Iterator.ofAll(ts1), Iterator.ofAll(ts2));
}
public static class For2<T1, T2> {
    private final Iterator<T1> ts1;
    private final Iterator<T2> ts2;
    private For2(Iterator<T1> ts1, Iterator<T2> ts2) {
        this.ts1 = ts1;
        this.ts2 = ts2;
    }
    public <R> Iterator<R> yield(BiFunction<? super T1, ? super T2, ? extends R> f) {
        Objects.requireNonNull(f, "f is null");
        return
            ts1.flatMap(t1 ->
            ts2.map(t2 -> f.apply(t1, t2)));
    }
}

`
then this test fails:
       final List<Integer> result = For(             List.of(1, 2, 3),             List.of(1, 2, 3)         ).yield((i1, i2) -> i1 + i2).toList();
Results in
List(2,3,4)
As far as I understood it's because of mutable state of Iterator. First iterator could be consumed only once. But then I don't get why it was working before...

Ok, I'm returned from vacation+new job change process so want to finish this 🤣 😢

@danieldietrich I was trying to recover where i've stopped last time. So right now it's not clear if we want to have flatMap on Value interface or not. From my prospective it would make sense. What do you think?

(Copied from this discussion)
We would need a common Monadic interface that is implemented by our 'sealed' classes (like Option, Try, List, ...). This type has to be a recursive self-type, like:
interface Monadic<M extends Monadic<M, ?>, T> {

     Monadic<M, U> flatMap(Function<? super T, ? extends Monadic<? extends M, ? extends U>> mapper);

     Monadic<M, U> map(Function<? super T, ? extends U> mapper);
}

I will remove the common Value interface, because it does not work well in conjunction with checked functions. E.g. Option will have flatMap(Function), Try will have flatMap(CheckedFunction).
Given that, we would also need a CheckedMonadic interface:
interface Monadic<M extends Monadic<M, ?>, T> {

     Monadic<M, U> flatMap(CheckedFunction<? super T, ? extends Monadic<? extends M, ? extends U>> mapper);

     Monadic<M, U> map(CheckedFunction<? super T, ? extends U> mapper);
}

Using the above interfaces, we could reduce the overall amount of For methods to (Monadic, CheckedMonadic) x (1..8) = 16 classes. This amount will stay constants when supporting more types, like Either, Future, Stream, ...
However, the flatMap API will be uglified regarding the sketched solution because the mapper requires a recursive self-type (e.g. CheckedMonadic<Try<?>, U>) instead of a concrete type Try. In turn, the return types of map and flatMap could be overloaded with concrete types.
I will defer the decision a bit if we use recursive self-types for map and flatMap (but I think, it is the right solution and it will open a whole new space for creating new APIs/better functionality).

See
https://github.com/vavr-io/vavr/pull/2281#issuecomment-410884413


Cannot contact a domain controller

Installed and got running.  However trying to change the first password gives me this error:
"There was an error changing your password
Error Information: The system cannot contact a domain controller to service the authentication request. Please try again later. (Exception from HRESULT: 0x800704F1)"
I had this issue with a different password manager as well.  It seems MS did some shifting around on their changing password policies with a MS update.  see https://support.microsoft.com/en-us/kb/3177108
Any ideas?

Before you ask, Ive already uninstalled this update from all the dcs and from this server as well.  Same issue

We have started to see this happen in our environment.  I don't think it is related to the KB as that refers to disabled or expired accounts.  Sometimes if I restart the web service, it seems to work again for awhile, but not always.

Found out there is another KB that needs to be uninstalled KB3167679


[9.x] Request model helper

Hi,
This PR aims to do similar thing like $request->enum() helper only in this case we are binding an Eloquent model instance.
Eg:
$post = $request->model('post_id', Post::class);

Just like enum helper, it returns null if the field is missing from the payload or if there's an invalid key provided in the input field itself.
If that's something worth having I'll provide tests to cover all the cases.

@rcerljenko hey
In fact, I was thinking of adding the same pr, but I was a little lazy, but good job 😂♥

Thanks for your pull request to Laravel!
Unfortunately, I'm going to delay merging this code for now. To preserve our ability to adequately maintain the framework, we need to be very careful regarding the amount of code we include.
If possible, please consider releasing your code as a package so that the community can still take advantage of your contributions!
If you feel absolutely certain that this code corrects a bug in the framework, please "@" mention me in a follow-up comment with further explanation so that GitHub will send me a notification of your response.


Improve the Types.checkFieldEquivalencyForStamping() method

The current implementation of the checkFieldEquivalencyForStamping() method is a naive implementation. Need to improve this.

I don't think we use isStampingAllowed which ends up calling this checkFieldEquivalencyForStamping method anymore. We can check and remove this if unused.


[containerapp] az containerapp add-on/service : support milvus vector database service

This checklist is used to make sure that common guidelines for a pull request are followed.
Related command

General Guidelines

[ ] Have you run azdev style <YOUR_EXT> locally? (pip install azdev required)
[ ] Have you run python scripts/ci/test_index.py -q locally? (pip install wheel==0.30.0 required)

For new extensions:

[ ] My extension description/summary conforms to the Extension Summary Guidelines.

About Extension Publish
There is a pipeline to automatically build, upload and publish extension wheels.
Once your pull request is merged into main branch, a new pull request will be created to update src/index.json automatically.
You only need to update the version information in file setup.py and historical information in file HISTORY.rst in your PR but do not modify src/index.json.

containerapp


style of  set the opacity to 0

Ionic version:  (check one with "x")
(For Ionic 1.x issues, please use https://github.com/ionic-team/ionic-v1)
[ ] 2.x
[x] 3.x
[ ] 4.x
I'm submitting a ...  (check one with "x")
[x] bug report
[ ] feature request
Current behavior:
Tab bar not appearing, and it's css-style set opacity to 0.
Expected behavior:
A tab bar should be appear in bottom of page.
Steps to reproduce:

Create a blank project
Remove all codes from home.html
Add tabs to home.html

Related code:
Modified home.html:
<ion-tabs>
  <ion-tab tabTitle="Tab1" [root]="tab1"></ion-tab>
  <ion-tab tabTitle="Tab2" [root]="tab1"></ion-tab>
  <ion-tab tabTitle="Tab3" [root]="tab1"></ion-tab>
</ion-tabs>

Other information:

Ionic info: (run ionic info from a terminal/cmd prompt and paste output below):
cli packages: (%APPDATA%\npm\node_modules)

    @ionic/cli-utils  : 1.15.0
    ionic (Ionic CLI) : 3.15.0

global packages:

    cordova (Cordova CLI) : 7.1.0

local packages:

    @ionic/app-scripts : 3.0.1
    Cordova Platforms  : android 6.3.0
    Ionic Framework    : ionic-angular 3.7.1

System:

    Node : v6.11.4
    npm  : 3.10.10
    OS   : Windows 7

Environment Variables:

    ANDROID_HOME : not set

Misc:

    backend : pro

Partial of generated main.css content:
.tabbar {
  left: 0;
  bottom: 0;
  position: absolute;
  z-index: 10;
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  opacity: 0;
}

Hello! Thank you for opening an issue with us! Would you be able to provide a sample application via GitHub that demonstrates the issue you are having? Thanks for using Ionic!

I was having the same issue until I put the contents of the tab view inside . Ionic is really weird about exactness of semantic structure. It's hard to learn because it doesn't ever tell you something is wrong, you just have to figure it out by experimenting.

I'm having this issue too, and I've already wrapped the tabs component within an ion-content tag and it didn't fixed it.
Apparently, if I set the opacity: 1 to .tabbar class, it gets fixed, but it sounds more like I am doing a "hack" and it does not appear to be a clean solution.
Does anyone have more information about this? Thanks!

Does anybody found a different solution than setting opacity: 1 on .tabbar?

This error seems to happen only when tab page is not properly defined. Here's a working repository / solution: https://github.com/giovannipds/ionic-tabbar-opacity-0

Tested with this info:
√ Gathering environment info - done!

Ionic:

   ionic (Ionic CLI)  : 4.0.6 (C:\Users\Giovanni\AppData\Roaming\npm\node_modules\ionic)
   Ionic Framework    : ionic-angular 3.9.2
   @ionic/app-scripts : 3.1.11

System:

   NodeJS : v6.11.2 (C:\Program Files\nodejs\node.exe)
   npm    : 3.10.10
   OS     : Windows 10

ping @bastiantowers @melicodes @tamashii

The error is becuase the class show-tabbar is not added to the div with tabbar class, i dont know why this occurs.

@giovannipds I fixed this issue setting the opacity of .tabbar to 1 and I never returned to this anymore. Let me try that repo and I will write you again in a moment

@bastiantowers Hi. It's working there to me. That seems to just happens when the tab page is not properly defined.

@giovannipds what d'you mean with 'the tab page is not properly defined'? With this line over here? -> https://github.com/giovannipds/ionic-tabbar-opacity-0/blob/master/src/pages/home/home.ts#L10

@bastiantowers I meant: if you do not have a tab assigned to <ion-tab root>, it'll put opacity to 0.

@giovannipds I got defined the root attribute in my project and that doesn't seem to be the problem.  I saw that you only have one tab only. Have you tested this with more than one tab? Can you test it adding a tab2 with different content and tell us if the opacity issue appears then? Thanks!

@bastiantowers Here it goes, showing the error (I also update the README.md and files: https://github.com/giovannipds/ionic-tabbar-opacity-0
And there also the working sample with two tabs you've requested on separated branch: https://github.com/giovannipds/ionic-tabbar-opacity-0/tree/two-tabs

My ionic info:
cli packages: (/usr/local/lib/node_modules)
@ionic/cli-utils  : 1.19.2
ionic (Ionic CLI) : 3.20.0

local packages:
@ionic/app-scripts : 3.1.11
Ionic Framework    : ionic-angular 3.9.2

System:
Node : v8.11.3
npm  : 5.10.0
OS   : macOS High Sierra

Misc:
backend : pro


Add sodre as a maintainer

Hi @curtlh, please add me as a comaintainer.

Checklist

[x] Used a fork of the feedstock to propose changes
[ ] Bumped the build number (if the version is unchanged)
[x] Reset the build number to 0 (if the version changed)
[x] Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
[x] Ensured the license file is being packaged.

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe) and found it was in an excellent condition.

@conda-forge-admin, please update team

I'm not sure why, but I don't write access to merge pull requests in this repo, even though I'm listed as a maintainer.
Any thoughts on what the issue might be @conda-forge/core?

@CJ-Wright -- I double checked to see if maybe I misspelled my username or accidentally included a trailing space, but that doesn't appear to be a problem.

@conda-forge-admin, please update team.

Can you please recheck @CurtLH?

I'm not sure if it's just coincidence, or if someone did something, but I just got the email that I've been added.  Thanks for your help @scopatz @CJ-Wright @jakirkham

I asked the bot to update the team. It must have had issues before.


Creating volume backup time takes too long and no feedback on the front end

After clicking the backup button, jump to the backup page, and you can't see the backup information immediately.  Users need to refresh the page multiple times to see the results

After clicking the backup button, there is no feedback on the front end, the user will mistakenly think that the backup function is not good, and will click the backup button multiple times in succession.

Push to v0.4. We will have backup progress then.

We did a simple solution as in #174 for this release.