Local force-closing on remote Error is not happening

Background
When SBW has a locally missing channel user may connect to remote peer and send an Error extracting a channelId from remote ChannelReestablish message. Remote LND is expected to force-close a channel but instead it replies with an Error and nothing happens.
Message log from SBW side:
SBW <-- ChannelUpdate(b2670a0473ae4f71e3487891f41e064aa3c66f8c52ed08a96a7fc1ad61c5879c54e6f481557b1e8562d39deeedd877e4d54919453fa9da3e035e06c1c5be0f07, ...

SBW <-- ChannelReestablish(93273fd57c8714ae0ddaff5a730d3adb82a7afc98700345ecffbd52938cbee03,168,167, ...

... user sees a missing channel warning and decides to ask a force-close.

SBW --> Error(93273fd57c8714ae0ddaff5a730d3adb82a7afc98700345ecffbd52938cbee03,ByteVector(36 bytes, 0x706c65617365207075626c69736820796f7572206c6f63616c20636f6d6d69746d656e74))

SBW <-- Error(93273fd57c8714ae0ddaff5a730d3adb82a7afc98700345ecffbd52938cbee03,ByteVector(43 bytes, 0x756e61626c6520746f20726573756d65206368616e6e656c2c207265636f76657279207265717569726564))

... channel stays open

Your environment

version of lnd: 0.13.1-beta commit=v0.13.1-beta

Steps to reproduce
Send an Error to remote LND peer.
Expected behaviour
Remote peer should force-close a channel.
Actual behaviour
Remote peer replies with an Error containing an unable to resume channel, recovery required message and does nothing.
If peer is sent an "all zeros" Error it still does nothing and does not reply with Error.

We don't force close in response to an Error message, or do anything with the all-zeros Error message

Why? Does not seem to be compliant with spec.

Not sure why as I didn't implement the initial logic there, but also all-zeros Error message is going to be removed I believe?

If you want to trigger a remote force close for an lnd channel, you can send an "old" ChannelReestablish message to trigger DLP, or send an invalid commit_sig

We never implemented it since we felt it was somewhat abusive (you send an error and we're forced to incur the CSV delay), I think most of the other implementations stopped doing it as well.


[release/1.2 backport] Ensure close in content test

backport of https://github.com/containerd/containerd/pull/3324
hopefully addresses https://github.com/containerd/containerd/issues/3701 for the 1.2 branch

Codecov Report

Merging #4067 into release/1.2 will decrease coverage by 3.66%.
The diff coverage is 53.84%.

@@               Coverage Diff               @@
##           release/1.2    #4067      +/-   ##
===============================================
- Coverage        47.86%   44.19%   -3.67%
===============================================
  Files               91      100       +9
  Lines             8484    10860    +2376
===============================================
+ Hits              4061     4800     +739
- Misses            3689     5318    +1629
- Partials           734      742       +8

Flag
Coverage Δ

#linux
47.88% <63.63%> (+0.01%)
:arrow_up:

#windows
41.01% <53.84%> (?)

Impacted Files
Coverage Δ

content/local/store.go
48.55% <53.84%> (-4.99%)
:arrow_down:

snapshots/native/native.go
43.3% <0%> (-10%)
:arrow_down:

metadata/snapshot.go
45.8% <0%> (-8.96%)
:arrow_down:

archive/tar.go
44.08% <0%> (-7.32%)
:arrow_down:

metadata/containers.go
47.97% <0%> (-6.62%)
:arrow_down:

content/local/writer.go
58.65% <0%> (-5.55%)
:arrow_down:

metadata/images.go
57.57% <0%> (-4.99%)
:arrow_down:

archive/tar_opts.go
28.57% <0%> (-4.77%)
:arrow_down:

archive/compression/compression.go
58.69% <0%> (-4.7%)
:arrow_down:

... and 58 more

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 4fcbc81...c1ceae5. Read the comment docs.

@estesp @dmcgowan @fuweid ptal


Implement Detekt tool

So that we all stick to the same coding standards, I think we should implement this tool having previously defined a common set of rules.

@fesave In order to upload the generated reports from the Detekt tool we need to allow writtings from Actions in the repository.
This repo configuration can only be made by the admin.
Please go to Settings/Actions and enable the read/write permissions under the Workflow Permissions section. See image attached for clarification.


feat(params): Add customisable committer params

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


add id_panl_bppt, a parallel corpus for en-id

Parallel Text Corpora for English - Indonesian

Hi @lhoestq, thanks for the review. I will have a look and update it accordingly.

Strange error message :-)
>           tf_context = tf.python.context.context()  # eager mode context
E           AttributeError: module 'tensorflow' has no attribute 'python'


Npm Koa: Wrong version

When i use :
'npm install koa'

I get :
"koa": "^1.1.2"

I guess it's normal, but you should write it on the README because i tried for 2 hours your examples code lol

Koa@2 is not the latest version on npm site, so a special version (2.0.0-alpha.1) is required.

Yeah i see that now. But the examples on the README are for version 2, and on the README, they use:
npm install koa

That's confusing :/ at least for me lol

Koa 2 is not released.

I understand that :)
But why the examples on the README of this repo are for version 2 and they don't specify it.

Well, since Koa 2 will not likely release for a long.... long time, the current master should be moved to a 2.0 branch and put the latest 1.x as master.

@yanickrochon Yeah, suggested this in #533

$ npm dist-tag ls koa
latest: 1.1.2
next: 2.0.0-alpha.3


Possible Bug : ng-change doesnt work with this plugin

I still didnt found solution to my previous problem, so as a workaround, temporary fix to get going i decided to put latitude and longitude in text boxes and then via $watch or ng-change i will use data in controller, but neither $watch nor ng-change works with this script, i wasnt sure about my code so i duplicated demo plunker and tried with that script and found that it didnt work with demo as well so i believe that ng-change doesnt work with this plugin.
My demo : http://plnkr.co/edit/FvdAzKBTRmVeSNI7qpG8?p=preview

I am not that good at angularjs so not sure if this is bug or my mistake.


web_public_view: Redirect to current narrow after login.

Add current hash as next URL to all login buttons
a spectator can access while in app.

Added preventDefault/stopPropagation and merged this, thanks @amanagr!
@alya just to confirm, I assume we don't want to try to make the "Register" button also preserve the URL you were at, because that'd mean not landing you on the conversation with Welcome Bot?


fixed README

Thanks for the fixes; this is what happens when you rewrite the README at 1 in the morning.


raspberrypi 3 golang download issue

doesn't work with a pi3
update-golang.sh: version 0.6
update-golang.sh: user: uid=0(root) gid=0(root) groups=0(root)
update-golang.sh: SOURCE=https://storage.googleapis.com/golang
update-golang.sh: DESTINATION=/usr/local
update-golang.sh: RELEASE=1.8.1
update-golang.sh: OS=linux
update-golang.sh: ARCH=armv7l
update-golang.sh: PROFILED=/etc/profile.d/golang_path.sh
update-golang.sh: CACHE=/usr/local
update-golang.sh: GOPATH=
update-golang.sh: DEBUG=
update-golang.sh: will install golang go1.8.1.linux-armv7l as: /usr/local/go
update-golang.sh: https://storage.googleapis.com/golang/go1.8.1.linux-armv7l.tar.gz is remote
--2017-05-08 10:14:17--  https://storage.googleapis.com/golang/go1.8.1.linux-armv7l.tar.gz
Resolving storage.googleapis.com (storage.googleapis.com)... 2a00:1450:4001:81b::2010, <IP_ADDRESS>
Connecting to storage.googleapis.com (storage.googleapis.com)|2a00:1450:4001:81b::2010|:443... connected.
HTTP request sent, awaiting response... 404 Not Found
2017-05-08 10:14:18 ERROR 404: Not Found.

update-golang.sh: could not download using wget from: https://storage.googleapis.com/golang/go1.8.1.linux-armv7l.tar.gz

It seems the Go project does not provide a binary tarball for armv7l.
Unfortunately, update-golang.sh is unable to build a binary release. It requires the precompiled binary release. Only if you can provide a URL with a prebuilt go1.8.1.linux-armv7l.tar.gz, then update-golang.sh will be able to grab it and install it.

How about forcing ARCH=armv6l ? Does it fix the issue for you?
sudo ARCH=armv6l ./update-golang.sh

same issue, ARCH=armv6l ./update-golang.sh helped

@x0x01 What does 'uname -m' report on your system?

@udhos armv7l

@x0x01 Thanks. I have added an exception to download armv6l when 'uname -m' reports armv7l. Can you please test how it goes for you?

@udhos yep, now loads armv6l

Thanks! Work-around added in https://github.com/udhos/update-golang/commit/dc306d9bae0af9cc0682f7243882b7bd30f0032e.


vsr: advance op_prepare_max when checkpoint is durable on a commit-quorum of replicas

Problem
Currently, we allow overwriting a prepare that a replica has already checkpointed. This builds on the understanding that the prepares that have already checkpointed are durable in the LSM tree. The key problem is that op_prepare_max is maintained independently on each replica according to their op_checkpoint. However, this can compromise availability in the presence of storage faults. Consider the following scenario in a 3-replica cluster:
A prepare P is replicated to R1 & R2, but not to R3. R1 decides to evict and overwrite P since it is in R1's checkpoint. However, R2 hasn't reached this checkpoint yet, so it still has P in its WAL.  Further, assume a pair of uncorrelated storage faults - a storage corruption of P in R2's WAL, combined with a storage corruption in R1's LSM. This can render the cluster unavailable. The core issue here is that even though even have logical durability of data across a commit-quorum of replicas (P is durable in R1's checkpoint in the LSM tree and in R2's WAL), the physical durability of the data is compromised, since the data is present across a commit-quorum of replicas in different forms.
Solution
The solution to this problem is to allow the overwrite of a prepare only if a commit-quorum of replicas has already checkpointed that prepare. Specifically, The primary only prepares past op_prepare_max when it hears from at least a commit quorum of replicas at the current checkpoint.
Example
Assume:

journal_slot_count=10
lsm_batch_multiple=2
pipeline_prepare_queue_max=2
checkpoint_interval = journal_slot_count - (lsm_batch_multiple + pipeline_prepare_queue_max) = 6

Based on the aforementioned configuration we can compute the following:
      checkpoint() call           0   1   2   3
      op_checkpoint               0   5  11  17
      op_checkpoint_next          5  11  17  23
      op_checkpoint_next_trigger  7  13  19  25

Now, let's assume a 3-replica cluster. Here, replication quorum is 2. All replicas start with op_checkpoint as 0.
Let's say R1 is the primary. R1 commits op=7 (op_checkpoint_next_trigger for op_checkpoint=5) and updates its op_checkpoint to 5. Now, R1 does not immediately prepare to past the current op_prepare_max (9). Instead, it waits till either R2 or R3 also update their op_checkpoint to 5 (via ping/commit messages). Once R1 hears from a replication quorum of replicas on op_checkpoint=5, it sets its op_prepare_max to 15.

Thanks a lot for the thorough review, @matklad! I've addressed the remainder of the comments in https://github.com/tigerbeetle/tigerbeetle/pull/2104/commits/08eaaf0aceb00f18951a40b99182db2a2fd93f93.
Ack, taking note of the the future work! Thank you for #2 there, I hadn't thought of that one. 😄

@chaitanyabhandari shell we close this PR?

In this PR, we implemented an explicit synchronization point for the primary at op_prepare_max, wherein it would have to wait for a commit quorum of replicas to reach the former checkpoint before preparing past it.  We discovered (in this Slack discussion) that there was a way to avoid this synchronization point by increasing the size of the journal (while consequently decreasing the checkpoint interval).
Closing this PR since we implemented the simpler fix in https://github.com/tigerbeetle/tigerbeetle/pull/2137.


Add opt-in functionality

Allow the user to specify they'd like to only run the hooks if a certain file is present. This file is gitignored so you opt-in by creating the file (and maybe it should have contents, like which hooks to opt-into).
This would make it easier for beginners to start contributing by removing barriers until they're comfortable with the project and contributing regularly.

Let me see if I got this correctly… If a file, say .ghooksignore, exists, then skip running all (or the ones listed in the file) hooks.
I see from the referenced GH issue this is related to a contributor not being too familiar with git itself (--no-verify). So implementing this feature would remove barriers for contributing to projects that use ghooks.
If what I understand is correct, I'm not sure if this should be ghooks' responsibility… Perhaps a new module or script that you'd prepend to your project's hooks? Something like:
…
    "ghooks": {
      "precommit": "skiphook || make test",
      "prepush": "skiphook || make lint"
    }
…

:thought_balloon:?

Ah, that's an interesting idea. Hmm... I think I like that. Maybe the module could be more generically named, but I like the idea.
For implementation, I was thinking that it'd be cool to have an opt-in and opt-out So then you could say opted in precommit make test and opted out prepush make lint
"ghooks": {
  "precommit": "opt --in precommit --exec \"make test\"",
  "prepush": "opt --out prepush --exec \"make lint\"",
}

Then you'd have files:
.opt-in
precommit

.opt-out
prepush

The behavior would be that if it's an opt --in then you MUST have the string specified in the .opt-in file. If it's an opt --out then you MUST NOT have the string specified in the .opt-out file. Then the --exec would be what to execute in the scenario that it passes the test.
Thoughts?

FWIW, https://www.npmjs.com/package/opt-cli is available :-)

Yeah, naming things is not one of my best skills. :smiley:
I like opt... And have a feeling you've already started sketching some code… :smile:

Haha, in my brain only. I wont have time to work on this very soon I think so if you wanna do it be my guest! :D

Same here… Full plate.
I'll drop I line here if/when I start something so we don't step on each other's toes :+1:

Same :+1:

I've shamelessly stolen your idea for an opt-cli module. Please, have a look and tell me what you think :smiley:

Gave that every positive reaction available :D

Closed by https://github.com/gtramontina/ghooks/pull/51


Allow NEW_PASSWORD_REQUIRED challenge completion.

Cognito allows users to be created via an admin user. The new user gets
a temporary password and is expected to change that password via a
challenge response. This allows that flow by making use of some existing
code.
Signed-off-by: Nick Campbell<EMAIL_ADDRESS>

Thanks for the PR @ncb000gt. I'll try to find some time this week to look into this. Been super busy on my end here -- sorry for the late responses.

No worries. I know how it feels running a few open source projects myself. ;D
Thanks!

Hey @ncb000gt any chance you have sample usage code for how to use set the new password?

@ncb000gt Any chance you can provide a sample example of how to use this? I'm having some trouble where when I call completeNewPasswordChallenge, it's being invoked with a null cognito user and null session.
My current flow is:

Call Login with username and password
When it throws an exception that a new password is needed, I ask the user for a new password and call this function. However it seems when I do this the UserService doesn't have the necessary session/user information.

@aneeshjoshi I'm using this library in Flutter so YMMV.
I'm using this inside my mobile app. I attempt to login. If that fails, an exception is thrown and I catch that with:
} on CognitoUserNewPasswordRequiredException catch (e) {
  message = 'It looks like this is your first time logging in. You need to specify a new password.';
  ...

Then I render the "new password" form. I've held onto the CognitoUser() object I used to attempt the login in the first place and call:
  myCognitoUser.completeNewPasswordChallenge("MY new PASSWORD!");

At this point I just require that the user login again.
I do think your point above is relevant, re: if the user doesn't enter the right password conforming to whatever specifications you've laid out...but again, I'd expect that an exception would be thrown. I should probably verify that part somewhere. ;D
Does that help?

That does help. I'm new to flutter and this lib, so I need to figure out
how to maintain access to the cognito user. I had trouble where each
rebuild of the widget was resetting my user service and underlying objects.
Not sure what the idiomatic dart/flutter way to deal with this is. For now
I'm trying to keep a user service as a static instance on MyApp level
widget.
On Thu, Nov 15, 2018 at 5:36 PM Nick Campbell<EMAIL_ADDRESS>wrote:

@aneeshjoshi https://github.com/aneeshjoshi I'm using this library in
Flutter so YMMV.
I'm using this inside my mobile app. I attempt to login. If that fails,
an exception is thrown and I catch that with:
} on CognitoUserNewPasswordRequiredException catch (e) {
message = 'It looks like this is your first time logging in. You need to specify a new password.';
...
Then I render the "new password" form. I've held onto the CognitoUser()
object I used to attempt the login in the first place and call:
myCognitoUser.completeNewPasswordChallenge("MY new PASSWORD!");
At this point I just require that the user login again.
I do think your point above is relevant, re: if the user doesn't enter the
right password conforming to whatever specifications you've laid out...but
again, I'd expect that an exception would be thrown. I should probably
verify that part somewhere. ;D
Does that help?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/jonsaw/amazon-cognito-identity-dart/pull/22#issuecomment-439215587,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ADEfayRg9u4rQiCPrAcpTg-a7yXULi4zks5uvexsgaJpZM4WqJYw
.

@aneeshjoshi Yea. I'm not entirely sure of the idiomatic dart/flutter approach, but the way I handled it was put a "service" layer that is a singleton inside the app. That maintains the CognitoUser state across the application. Then I have "listeners" that are notified of changes to auth state which will then return the user to the login screen. I settled on this approach, but I believe you could end up doing something similar or better using the BLoC approach in flutter. I just never got a chance to do that. Once the app is built and functional I'm expecting to rework a lot of parts of it. :)

This PR is no longer "clean" since I inadvertently pushed changes up to my branch that @BerndWessels made to one of his PRs...I can recreate the original pr if you really want.

@ncb000gt @jonsaw
Hi guys, is this going to be available? We have the same scenario...

@jonsaw ping.

Hello there, Changes look safe. Can we merge this to master?

@jonsaw any chance of this being merged into master?

Hi all here,
I've copied this project in a separate package (because this one isn't supported anymore) https://pub.dev/packages/amazon_cognito_identity_dart_2
There are already fixes that were required by my project and NEW_PASSWORD_REQUIRED from maciejkozuch.
Pls take a look at latest PR https://github.com/furaiev/amazon-cognito-identity-dart-2/pull/2 and welcome to contribute


Converting char* to dart string

I'm trying to wrap an oss library which has an opaque struct. the struct is taken as an argument to void*. The function itself is returning 0 which means everything went well but the cast to a dart string is ending up in a Missing extension byte (at offset ...) exception. I try something similar also in a simplified example but there it works well minimal example, simple c function.
The header file:
/**
 * Opaque object representing a supported dive computer.
 */
typedef struct dc_descriptor_t dc_descriptor_t;

dc_status_t
dc_iterator_next (dc_iterator_t *iterator, void *item);

The source file:
struct dc_descriptor_t {
	const char *vendor;
	const char *product;
	dc_family_t type;
	unsigned int model;
	unsigned int transports;
	dc_filter_t filter;
};

dc_status_t
dc_iterator_next (dc_iterator_t *iterator, void *item)
{
	if (iterator == NULL || iterator->vtable->next == NULL)
		return DC_STATUS_UNSUPPORTED;

	if (item == NULL)
		return DC_STATUS_INVALIDARGS;

	return iterator->vtable->next (iterator, item);
}

My calling code looks like the following:
final class DcDescriptorT extends Struct {
  external Pointer<Char> vendor;
  external Pointer<Char> product;
  @Int32()
  external int type;
  @Int32()
  external int model;
  @Int32()
  external int transports;
  external Pointer<NativeFunction<DcFilterT>> filter;

  DcDescriptorT() {
    vendor = calloc<Char>();
    product = calloc<Char>();
  }
}

Pointer<dc_descriptor_t> descriptor = calloc<DcDescriptorT>().cast<dc_descriptor_t>();
inal status =  _bindings.dc_iterator_next(iterator.value, descriptor.cast<Void>());
final vname = vendor.cast<Utf8>().toDartString();

I have explained on Discord that the problem is that APIs are not used correctly. @Ben1980 needs to look at man pages and then transcribe C code to Dart mapping constructs appropriately. They key is to first understand how C code using the API would look like and then write corresponding Dart code.
If you see an opaque struct in the C header then obviously C code would not be able to allocate it to invoke the API - so you should not try that either.
Let us look at the man page. We see the following code there:
while (dc_iterator_next(iter, &desc) == DC_STATUS_SUCCESS) {
	printf("%s\en", dc_descriptor_get_vendor(desc));
	dc_descriptor_free(desc);
}

It omits declaration of desc - which I admit can be confusing, but from the flow of the code (because desc is later used in dc_descriptor_get_vendor and dc_descriptor_free) it is obvious that declaration would be dc_descriptor_t* desc.
This code needs to be translated to Dart, for example:
final descPtr = calloc<Pointer<dc_descritor_t>>();  // equivalent of &desc

while (_bindings.dc_iterator_next(iterator.value, descPtr.cast<Void>()) == DC_STATUS_SUCCESS) {
  final desc = descPtr.value;
  print(_bindings.dc_descriptor_get_vendor(desc).cast<Utf8>().toDartString());
  _bindings.dc_descriptor_free(desc);
}

calloc.free(descPtr);


incorrect operator predudece

e.g the following
s = """OPENQASM 2.0;
gate test_gate2(theta, phi) qreg_2, qreg_3, qreg_1 {
  x qreg_1;
  z qreg_2;
  rx(-(sin(theta))+2.0) qreg_3;
  rx(sin(theta)+tan(phi)) qreg_3;
  ry(cos(phi)-ln(phi)) qreg_3;
  ry(cos(phi)*sqrt(phi)) qreg_3;
  CX qreg_1, qreg_3;
}
"""
target_qasm = OpenQASM.parse(s).prog[1]

julia> target_qasm.body[3].cargs[1]|>OpenQASM.print_qasm
-sin(theta)+2.0

the negative sign is outside of sin(theta)+2.0 instead of (-sin(theta)) + 2.0
@thautwarm know how to fix this?

Hi @Roger-luo,
I don't see any differences between -( sin(theta) )+2.0 and (-sin(theta)) + 2.0. I think that the ( ) will do nothing because there is only a single value inside.  For example. (a) + (b) will only become a + b.
But maybe you could elaborate more about the bug?

I don't quite remember what was the issue, maybe I thought the sign was -(... + 2.0) I'm gonna close this first.


Setting max retryCount on error

Is there a way to add a max retryCount on error without overriding the entire onErrorRetry? I think it'd be nice to be able to keep the very reasonable default behaviour of exponential backoff and stopping on !isDocumentVisible(), but be able to tweak and limit max tries via config.
What do you think?

This would be really nice, if you have an API always throwing it will continue requesting forever.


Failed to Install L3MON4D3/LuaSnip

	-- LSP
	use({
		"VonHeikemen/lsp-zero.nvim",
		branch = "v2.x",
		requires = {
			{ "neovim/nvim-lspconfig" },
			{ "williamboman/mason.nvim" },
			{ "williamboman/mason-lspconfig.nvim" },
			-- Autocompletion
			{ "hrsh7th/nvim-cmp" }, -- Required
			{ "hrsh7th/cmp-buffer" }, -- buffer completions
			{ "hrsh7th/cmp-path" },
			{ "saadparwaiz1/cmp_luasnip" },
			{ "hrsh7th/cmp-nvim-lsp" },
			{ "hrsh7th/cmp-nvim-lua" },
			-- Snippets
			{ "L3MON4D3/LuaSnip", run = "make install_jsregexp" }, -- Required
			{ "rafamadriz/friendly-snippets" },
			{ "jose-elias-alvarez/null-ls.nvim" },
			{ "jose-elias-alvarez/typescript.nvim" },
		},
	})

whenever i try to run with 'make install_jsregexp' it fails btu when i remove it, it installs and snippets do work, but the problem is the auto capitalization fails when jsregexp doesn't get installed.
this works fine on my mac but on PopOS it keeps throwing this error, any fix for fix?

i tried uninstalling and installing again with luajit installed, it still says error when installing

You'll need libluajit-5.1.so, or something similar, could you look for that?

it says its already installed

Ah, okay, then you'll have to modify the -l we use, manually call make LUA_LDLIBS=-lluajit5.1-2 install_jsregexp in luasnips directory

Ah, omit the lib in -llibluajit5.1-2, -l always prepends it when searching for the actual file
Yeah, that looks like the correct directory :+1:

yep it doesnt work either, the second command i ran is that, and next i added `lib' which also didnt work, any other solutions?

Oh, my bad, ofc
Can you list the files provided by the libluajit5.1-2-package? I guess the .so-file is called something different

Hi, just encountered this same issue and I found libluajit-5.1.so in /usr/lib/x86_64-linux-gnu, how can I tell the compiler to use this path?

Nice👌👌

Perhaps this could be added to the README for any people who might encounter this issue in the future?

I'll pin this issue for now, we should switch to providing the static library from the get-go (@leiserfg you were right :sweat_smile:)

The LDLIBS variable should be empty because we don't actually link against libluajit (or liblua5.1) when building the module. Only the headers from either luajit or lua5.1 are needed.

Oh dammit :facepalm:
But why not? How is luaL_newlib resolved?

I'll pin this issue for now, we should switch to providing the static library from the get-go (@leiserfg you were right sweat_smile)

This would be so helpful.
By the way, I distro hopped to Arch to get this feature working 💀

@L3MON4D3
The nvim binary is compiled so that all symbols (including those from shared libraries, i.e. libluajit) are exported. luaL_newlib resolves to whatever library nvim is linked against (which could also be lua5.1). See also man ld and search for export-dynamic.
Unsetting LDLIBS will probably break the MacOS build again. I had to see and check how luarocks does it.

Ahh okay, that's pretty cool
Thank you!
I'll upload some patches and ask the MacOS-users in the other thread to test it :D


version` is obsolete  &timeout

'

If you are using Docker image mirrors in China, I'm sorry to inform you that around June, many Docker mirror sites were blocked in mainland China. This has made it impossible to pull images, resulting in timeouts. I am currently looking for alternative solutions. Most likely, I will package the images into tar files and make them available for download from some online storage services. Thank you for your support!
And I`m using Docker Compose version 1.29.2.  you can change version number by yourself

我增加了阿里云的镜像库，具体部署参阅：
https://github.com/QingHeYang/EasyAccounts/blob/main/README-Deploy.md#启动项目


wbtc not found

fresh trusty, bootstrap, then:
$ make gateware
...
Saving bit stream in "atlys_hdmi2usb-hdmi2usbsoc-atlys.bin".
Bitstream generation is complete.
ERROR:Portability:50 - Execution of the    "/home/juser/HDMI2USB-misoc-firmware/third_party/misoc/build/wbtc" failed.
ls: cannot access /home/juser/HDMI2USB-misoc-firmware/third_party/misoc/build/wbtc: No such file or directory

You can safely ignore this error, it only occurs with the strip back Xilinx tools. The important line is
Saving bit stream in "atlys_hdmi2usb-hdmi2usbsoc-atlys.bin".
Bitstream generation is complete.

This is a duplicate of https://github.com/timvideos/HDMI2USB-misoc-firmware/issues/97


Parse  tags and be able to detect dynamic permission creation

The newish  XML tag in a manifest indicates that the application will likely use the dynamic permission creation.  These need to be parsed.

Tagging for future.


Integrate version compare API info into footer_html endpoint

This integrates the data provided by /api/v1/version/<project>/highest/<version> into the /api/v2/footer_html/ response. We can use this to avoid one API request per doc page view. The API v1 version endpoint is still in place for backwards compatibility.
I also refactored the doc-embed JavaScript into multiple files for easier maintainability.
Fixes #1463.

Big +1 on making our JS more managable.

Looks like a solid refactor. :+1: -- Do we need to include any changes in the gulp configs or anything along those lines, or will it automagically just work?

:fireworks:

This broke when I tested it, so I've reverted it for now.

Sorry mate! :crying_cat_face: I have addressed the raised issues in #1507


Updated scram to version 1.9-beta1

The scram library 1.9-beta1 support Java 7+ (see also PR on pgjdbc repository).

This will probably fail until https://github.com/pgjdbc/pgjdbc/pull/1520 is not merged into master

@teoincontatto  I think if you rebase this, it should build as I fixed the java 7 issues building with Travis-CI

Opened https://github.com/pgjdbc/pgjdbc-jre7/pull/5 with a newer version of scram library.


Simplifying predicates before sending them to the SMT

Reviewer checklist

[ ] Test coverage: stack test --coverage
[ ] Public API documentation: stack haddock
[ ] Style conformance: stylish-haskell

@u-- thanks!


Session.getDatabase() not working in Hybrid Xpages App

I am working on xpages hybrid application, where the frontend(ui) and backend(database) are on two different on-premise servers of same domain.
Issue is, I am not able to access database using org.openntf.domino.Session in the frontend using the below code. It returns null.
Session session = Factory.getSession(SessionType.FULL_ACCESS);
Database database = session.getDatabase("servername", "dbpath");
Where as I am able to access the database using the lotus.domino.session as shown below.
lotus.domino.Session session = ContextInfo.getUserSession();
lotus.domino.Database database = session.getDatabase("servername", "dbpath");
Is there a way to make ODA session work in this scenario.
Thanks

Does it behave any differently when you do Factory.getSession(SessionType.CURRENT)? In theory, that session would be the equivalent to the one you're getting from ContextInfo. From there, that'd help us narrow down where the trouble is.
Additionally, it may help to enable bubbled exceptions in the session, which you could do with DominoUtils.setBubbleExceptions(true), I think. Doing that before the getDatabase call may highlight the specific issue.

Factory.getSession(SessionType.CURRENT) also returns null.
Setting DominoUtils.setBubbleExceptions(true) did not help as it is not throwing any exception

Do other session-related methods run successfully, e.g. getEffectiveUserName()? Do they return what you expect? If so, it's a problem with IP address.
I don't have much experience of Bluemix, but when developing at a workshop in May I had to use IP address to connect, so was using currSess.getDatabase(XX.XX.XX.XX!!bluemix/dev/tododata_1.nsf) - getDatabase accepts an ApiPath as well as server/filepath.

Have you tried adding the dao bean or using code from it. I've used this with java and it have worked with an ordinary session. Haven't tried with openntf domino api.
https://openntf.org/XSnippets.nsf/snippet.xsp?id=daobean-for-xsp-on-bluemix

Thank you all for the responses. Actually I was using ip address in the place of servername, that is how i had to access database on Bluemix runtime, hence i used the same approach on on-permise servers too(which did not work).
Now on on-premise servers, I am able to access database by replacing ip address with servername.


how to   clear checkbox selected  rows , hava a event function?

how to   clear checkbox selected  rows , hava a event function?
jsfiddle
If you provide a jsfiddle reproducing the issue, it'll be addressed much faster.
you can use this as base

I'd like to know too. When a checkbox is checked, there's a 'clear' link. How can we execute that same behavior?

Use the vgtSelected properties on your rows to select/unselect rows. See the solution suggested by @hyzami as an example: https://github.com/xaksis/vue-good-table/issues/783#issuecomment-771637988


Custom filter implementation / combobox

Hallo,
thanks you for the great work. I really like MoonStorm.
I want to replace the filter textbox (input) with a combobox (select) of an column. Can not find any information to these topic. Should i replace the header and include my own solution? What about filtering for custom columns?

Discussion moved to #12, where you'll also find a working sample based on @diego-vieira 's solution.


Assertion failed

Hi all
I'm not even sure I'm supposed to write here, you'll tell me if there's a problem.
When I run zipperposition on a file containing:
data nat := Zero | Succ nat.

def plus : nat -> nat -> nat where
  forall y. plus Zero y = y;
  forall x y. plus (Succ x) y = Succ (plus x y).

goal forall (x:nat) (y:nat). plus x y = plus y x.

I get "File "src/prover_calculi/induction.ml", line 238, characters 8-14: Assertion failed".
The problem seems to appear when the last of the 3 commands is run.
The error seems to occur deep in your code, I would hardly figure it out.
I've installed Zipperposition with opam and it's the 1.6 release.
 Note that the induction features are
research from 2014-2017 and are not actively maintained :-)

Thanks for your answer.
Ok, so I should proceed manually to install Zipperposition (via git clone) ?
You've more or less let down the induction, but is there a maintained way to make some arithmetic ?

The integer/rational arithmetic should still work. However, it's not maintained either and has never been super good (see results at CASC in 2014). Mixing arithmetic and superposition is still a research problem and other solvers tend to delegate most of the work to SMT solver (see: Beagle).
To install the master version: yes, a local git clone, and compile with make or use opam pin locally.

If you refer to (http://www.tptp.org/CASC/J7/WWWFiles/ResultsSummary.html) you did good for integers.
By "use opam pin locally", do you mean install opam and use "opam install" in the cloned folder ?

By "use opam pin locally", do you mean install opam and use "opam install" in the cloned folder ?

Something like that. Typically I'd go inside the cloned repository and
running opam pin .#HEAD to tell opam to pin the latest git version.

It ended up working, thanks.
Must I close the ticket ?
By the way, is there a way to import files ? But maybe this kind of stuff is more suited to SMT ?

There isn't a way to import files in .zf files (nor in smt files). Only TPTP has such a feature, and it's not necessarily a good idea (read about the $TPTP env variable…).
I'll close the issue.

With my PC (i7, 16 Go, Ubuntu 20) the associativity of multiplication was proved in 159s and its commutativity wasn't proved at all (the engine keeps computing, with no result). Is it normal ?

Possibly? Is the associativity of multiplication done from scratch? All files in examples are not meant to pass successfully, some are just too hard. Induction is a hard problem :slightly_smiling_face:


UNABLE TO VIEW THE PROCESSED DOCUMENT AFTER PDFMINER

I am unable to view my processed document in case of pdfminer.

I chose the default program to open py files with python.exe(can be found where python is installed)
or write
where python
on cmd to know its location
and hence the pdf2txt.py command runs on cmd

Fixed by #321


embed() does not work from inline expressions

What happened?
embed does not work from inline expressions, it returns only plain text and not a link or embedded link
= link(" - Notes") works
= embed(link(" - Notes")) does not work
Also text manipulation also gets scrubbed to plain text
DQL
= embed(link(" - Notes"))
JS
No response
Dataview Version
0.5.56
Obsidian Version
1.3.7
OS
MacOS

I can confirm it still dœsn't work in:
Dataview Version
0.5.64
Obsidian Version
1.4.16
OS
Windows 11

Here is a test with an image, in the test vault with no other plugin installed (it works with regular DQL, but not in an inline query):

---
img: "[[test.png]]"
---

```dataview
TABLE
embed(link(img)) as Image
WHERE img
```

`= embed(link(this.img))`

It dœs the exact same rendering with img: test.png instead of img: "[[test.png]]".

Me too. I want to embed daily notes using:
`=embed(link(dateformat(date(today), "yyyy-MM-dd")))`

But it only show the daily notes' filename.

I would like to add to this that even something like ="![[" + "image.png" + "]]" results in only text being displayed. Or even ="!" + link("image.png"). Something about the inline queries just makes displaying images literally impossible. For example, using a "lens.png" from my current vault, the html renders as:
              lens.png

The cause of this issue seems to be the same as of #1051:

This is because inline queries don't currently use react (which supports inline images) for their rendering; will see if I can get it to work.

Originally posted by @blacksmithgu in https://github.com/blacksmithgu/obsidian-dataview/issues/1051#issuecomment-1112870489

As of today, the example posted by @EdualcLaiv, is working for me.
Obsidian Version: 1.7.4
Dataview Version: 0.5.67
OS: Windows 10

I confirm, it's working now.
Obsidian Version: 1.7.5
Dataview Version: 0.5.67
OS: Windows 11 (Professionnel) x86_64 — Kernel: WIN32_NT 10.0.22621.4317 (22H2)


Server refuses to die in container

SIGINT seems to be ignored by server. HTTP server exposes .kill() and .close() but default listener for SIGINT seems to be missing
Package version
Adonis packages
    "@adonisjs/assembler": "^1.3.4",
    "@adonisjs/ace": "^6.8.4",
    "@adonisjs/core": "^5.0.0-preview.4",
    "@adonisjs/fold": "^6.3.4",

Node.js and npm version
NodeJS: 13.9.0
NPM: 6.13.7
Sample Code (to reproduce the issue)
When building container and setting start command as CMD [ "node", "./build/server.js" ]
Container does not die gracefully with SIGINT since SIGINT is sent to process, which just ignores it
Fix is to add process.on('SIGINT') yourself to some part of application, server.ts for example
// server.ts (original)
new Ignitor(__dirname)
  .httpServer()
  .start()
  .catch(console.error)

Workaround is to chop it into multiple pieces and adding SIGINT listener
// server.ts (workaround)
const server = new Ignitor(__dirname)
  .httpServer()

server.start()
  .catch(console.error)

// Without it process won't die in container
process.on('SIGINT', () => {
  server.kill(10)
})

BONUS (a sample repo to reproduce the issue)
https://gitlab.com/McSneaky/youtube-downloader

We listen for SIGINT but I believe only when process is started using pm2 https://github.com/adonisjs/core/blob/develop/src/Ignitor/SignalsListener/index.ts#L36.
So is there any way to detect that app is inside a Docker container, so that we can listen for this event?
Why not always listen for it?
Because the terminal sends SIGINT when pressing Ctrl + C and doing a graceful shutdown may have some delay, so the user will be under impression that Ctrl + C was never pressed

Could't we always listen for SIGINT and display a message when Ctrl + C is pressed so they know something is hapening

I think @RomainLanz has good idea.
Could log some message like: Server is shutting down when SIGINT comes in
Also it seems it turned out to be issue in core? Perhaps should move?

Opened https://github.com/adonisjs/core/pull/2273 to try and fix this


Wrong text object for an argument after a brace

foo(() => { bar(baz); }, qwe);

When the cursor is on qwe and daa is pressed, something totally else happens. This is for JavaScript.

Should be fixed now, try it out?

Works like a charm, thanks!


Updating the card

First of all, congratulations!! It is an amazing tool!!!
Sometimes, after the form submit, due model validations, the page is reloaded with card's form filled however the image and data are not updated at the card.

How to make the card recheck the form and change accordingly?
Regards

I had a similar issue where my card would not update types at all. No matter how many different (correct) card numbers I provided, it would not display the card type.
So I went about looking into the source code for this library and found a solution myself.
$("#credit-number").blur(function() {
        // NOTE: $("#credit-number") is what my field name is.
        // This can/should be replaced with your credit card number input field.
	check_card_type($(this).val());
});

function check_card_type(card_number) {
	var cards = Payment.getCardArray(); // Returns the complete cards validation
	var card_type = "";

	for (var i = 0; i < cards.length; i += 1) {
	  	if (cards[i].pattern.test(card_number)) {
			card_type = cards[i].type;
			console.log(card_type); // the credit card type
		}
	}

	if (card_type != "") {
		set_card_type(card_type);
	} else {
		set_card_type("unknown");
	}
}

function set_card_type(type) {
	var card_types = Card.prototype.cardTypes.join(' ');

	// Remove identifying classes.
	$(".jp-card").removeClass("jp-card-unknown");
	$(".jp-card").removeClass("jp-card-identified");
	$(".jp-card").removeClass(card_types);

	if (type != "" && type != "unknown") {
		$(".jp-card").addClass("jp-card-" + type);
		$(".jp-card").addClass("jp-card-identified");
	} else {
		$(".jp-card").addClass("jp-card-unknown");
		$(".jp-card").removeClass("jp-card-identified");
	}
}


Wrong matching for Arabic

Related to https://github.com/meilisearch/MeiliSearch/issues/1331

Hello @ahmedkrmn thanks for your interest! 😁
@ManyTheFish can help you on this when he will have the time :)

Hello @ahmedkrmn are you sure that deunicoding Arabic script is a good thing to do?
the sentence المتعة والمرح في تعلم العربية would be deunicoded as lmt@ wlmrH fy tlm lrby@` 🤔

Hello @ManyTheFish,
I believe that that the characters أ ا إ آ should be processed in a way similar to "lowercasing".
So when a user search for a query containing for example احمد he should be able to receive all these variations أحمد احمد إحمد آحمد.

Hello @Reex11, I will investigate your case, 🤔
I tried if the lowercase function of rust could help us but no:
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=92777875ea531819640dfedea3d42395
Is there a name of this similar process to "lowercasing"? This could help me to find a library or a function that would do the job.
Thanks for your help 😁

Hi again,
I found the following:

Harakat - like these َ ِ ُ - should be totally ignored. So, removing them should be part of normalization process.
Ta' Marbota  letter ة should be normalized to  Ha'  letter ه.
Waw letter و is a stop word usually - it means and -, there maybe an issue here because the letter Waw is not always a stop word.
for example سماء وأرض here the Waw letter is a stop word (Translation Earth and Sky).
But in other cases its not a stop word. Ex. كتاب وليد here the Waw letter is part of an actual word, (Translation Waleed's Book)

I'll lookup for a solution for Waw stopword. And I already have some workarounds in mind.
I understand that you may face difficulties in understanding some parts of the languages. So, Let me know if you need any help.

Hello @Reex11! Thanks for your help, we have to design or find a specialized normalizer for this.
I have a question about tokenization, are words only space-separated?

Hi @ManyTheFish,
First, You should know that I have basic knowledge about NLP.
I think that there are a lot of cases that are not space-separated.
But its ok to start with space-separation. ( and I believe that this is the general case in Arabic supported tokenizers I seen )
Although, There are some important and common conditions that need to be considered to improve the search results.
Such as And => و , The => الـ
Example:
الشجرة => The Tree is a combination of الـ and شجرة
الـ is equivalent to The and its always connected (not space separated) to the next word.
I found a great Arabic NLP library, I think its the best so far. Its called CAMeL tools

Closed in favor of https://github.com/meilisearch/product/discussions/139
Any contribution to add an Arabic normalizer and segmenter is welcomed!


Deserialize zipCode as postalCode

Related Issue or Background Info

Resolves #1624

Changes Proposed

Adds a JsonAlias to StreetAddress.postalCode so that incoming data from the Patient Experience, which calls it zipCode, can be correctly deserialized
Update the response shape of PXP's PersonUpdat from Person to instead use PxpVerifyResponse, which correctly maps fields of interest and obscures fields that don't need to be transmitted to the UI

Checklist for Author and Reviewer
UI

NA - ~Any changes to the UI/UX are approved by design~
NA - ~Any new or updated content (e.g. error messages) are approved by design~

Testing

[x] Includes a summary of what a code reviewer should verify

Changes are Backwards Compatible

NA - ~Database changes are submitted as a separate PR~
NA - ~GraphQL schema changes are backward compatible with older version of the front-end~

Security

NA - ~Changes with security implications have been approved by a security engineer (changes to  authentication, encryption, handling of PII, etc.)~
NA - ~Any dependencies introduced have been vetted and discussed~

Cloud

NA - ~DevOps team has been notified if PR requires ops support~
NA - ~If there are changes that cannot be tested locally, this has been deployed to our Azure test environment for verification~

Works for me! Wondering if eventually we should align these prop names across the app

That seems not-so-likely to me, given that all of the database entities that store this datapoint use postal_code, and it appears to have been a deliberate choice to use zipcode in the GraphQL schema and DataResolvers.
This was a slip-up on the PXP side, where we just didn't handle this mapping adequately, or closely inspect the de/reserialization of Person


EDA for each of the datasets in the Datasets folder

Perform EDA on any one of the datasets and put the code files in the EDA folder. EDA without final insights, results or conclusion will not be accepted.

Hello @darshML Can you please assign the issue to me . I can work on Eda

@mohantyrohan3 On which dataset will you perform EDA?

@darshML I can perform on all the datasets

perform on anyone i would say heart dataset

Ok @darshML   sure I would perform on Heart dataset

Hey @darshML , can you assign me to perform EDA on Diabetes dataset?

done

Hi @darshML ,can you assign me EDA for studentperformance dataset?

okayy

Hi @darshML, can you please assign me the EDA for the student performance dataset?

sure go on


Captions not working after loading new video when page already generated

Current Behavior
I am generating a web page with the ability to watch different videos on the given page. I am only loading one ReactPlayer object and using useState to shift out which video (Vimeo) url I am pointing to. When a user clicks a button the page stays the same but loads a new video url into the ReactPlayer component. The new video loads correctly and everything looks and works as expected except for the subtitles.
I am loading the subtitles to automatically turn on using the following prop:
config={{
file: {
tracks: [
{
src: url,
kind: 'subtitles',
srcLang: 'en',
default: true,
label: 'English',
},
],
},
}}
This configuration successfully loads and turns on subtitles for the first video that loads when the page opens, however, when the new video is loaded subtitles no longer work. This holds true for just using Vimeo controls option as well. I cannot turn on captions on for the second video loaded into the screen, unless that video is loaded first.
I have added a key to the ReactPlayer component in an attempt to force a reload but that doesn't work either. Is there a way to force update the react play or any other option that might work?
Expected Behavior
Should be able to change the url being passed to the React Player and subtitle options should still load and work as expected.
Steps to Reproduce

Generate a new array of video urls
const urlsArr = [
"myurl.com/",
"myurl.com/",
"myurl.com/",
"myurl.com/"
]

Generate a react player and display it on the web page passing the url from urlsArr
const myVideoPlayerPage = () => {
 const [videoIdx, setVideoIdx] = useState(0);

 return (
    <ReactPlayer
       key={urlsArr[videoIdx]}
       url={urlsArr[videoIdx]}
       config={{
         file: {
           tracks: [
             {
                src: urlsArr[videoIdx],
                kind: 'subtitles',
                srcLang: 'en',
                default: true,
                label: 'English',
             },
          ],
        },
      }}
    />
  }

Add a button that loads the new url when clicked
<Button onClick={() => setVideoIdx(videoIdx+1)} >Next Video

The code above successfully loads the video with working subtitles for any video that is loaded first. However, the second video loaded next after the button is clicked won't work with subtitles. Just the video and audio work.
Environment

URL attempting to play:
Browser: chrome
Operating system: apple

For anyone dealing with this issue one fix is to unmount the component and remount it after a set time, it's an ugly fix but it works for now, example :


Improve the UI of the popover

I believe a good idea to improve the UI is to set title attribute on each "button" that accurately describes that buttons action. While the Facebook and Twitter buttons are a little self-explanatory I found myself unsure of what the other three would do.
If not a title attribute how about a smaller popover in the same style as the original popover?

@bbenefield89 Thanks for your suggestion, I'll certainly take that into consideration.

@prateekkalra Of course and if you have any ideas I wouldn't mind helping out.

@bbenefield89 About your suggestion , I can't really come up with a way to tell users what each option stands for , because a 'pop over'  over another 'pop over' won't look good . So if you got a idea, that'll help me

@prateekkalra Yea I didn't really like the "create another popover" idea either but if you were to add a title attribute with a short description, in my opinion, is easy to add and will give the user some direction as to what the button will do.
Examples

COPY: This icon is really similar to my phones "update security" notification. Adding a short description "Copy Text" or "Copy text to clipboard" could solve this.

SPEECH: This icon may seem more familiar to a user in terms of "I need to speak into a microphone" instead of "This will actually speak to me". This could also be solved by replacing the icon with something that resembles noise like this icon

@prateekkalra I wasn't sure if this issue was still open. I implemented the title attribute as suggested by bbenefield89. Please see the pull request. I also didn't update the minified file since I wasn't sure which program you used to minify it.

@Thomdeleon This title attribute makes no difference to the user's look and feel(UI).
I was thinking of something which will help the user identify what each icon on the popover stands for, and I don't want to go for just a simple text as suggested by @bbenefield89.

Perhaps making the popover larger, with small text under each button indicating the use of each?

Can't we use tooltip for each icon?

@Shai1436 Using tooltip won't be a good option as the tooltip would be shown every time whenever the user hovers over the option and the popover's UI won't be minimalistic anymore.
Showing the tooltip just for the first time user selects some text, can be considered though.

We could also replace some icons with simple text, just like selection option in android phones.

Hello @prateekkalra, I would like to contribute.
How about adding 'help button' to the main popover? This button can open additional text field (like in 1st pic), or it can replace initial popover with the larger one that contains descriptions (2d pic).

@prateekkalra is anyone working on this ?

Hello @prateekkalra, I would like to contribute.
I have done some simple work. Though not much changes but I think this looks clean and clear than the current one. Please have a look.

Current One ->

My Changes ->

Thanks.

I'm interested in contributing to this.

@prateekkalra
How about a simple title attribute? It is built in to the browser and takes a moment before showing up!

@prateekkalra I have created a PR where I added a small pop up animation on selection #43


Export again super_textfield/style.dart

This file used to be exported and was also being used in client code. It was probably removed during recent refactoring (splitting super_text_layout, etc.).

I checked the last 5 or 6 revisions of this file and I didn't see styles.dart exported from it anywhere. Since it seemed to have been exposed somewhere, we can merge this in, but we may need to export this from a different place in the future, depending on why it wasn't exported from this filed before.


Modifying tab completion for files to be relative.

Right now if you are in a subdirectory of a Git repository, and you attempt to tab complete a list of files, you get repo-relative paths.
This patch modifies the tab completion to get paths relative to your current path so that the paths can be used properly in git commands like add.
I ran the tests by hand (gci -Filter '*.ps1' .\test\ | ForEach-Object { & $_.FullName }) and did not find any test differences from master.
Please let me know if you need more information.
Thanks!
# Chris

I checked in a fix for the AppVeyor tests into master, if you want to rebase and try again.

OK, fixed.
(I removed my attempt to fix CI from history entirely, which appears to have also hidden/deleted the GitHub discussion on that.  Will be more mindful of that in the future and do a revert instead of chopping off HEAD.

Overall looks good but @dahlbyk will do the final review.  One thing I'm not 100% sure about is if a .git dir's parent is always what you want to be relative to.  I think so but then I'm not as familiar with how that works with working tree's, subtrees, etc.

@cdonnellytx Finally getting back around to this and in my testing (without this PR) I'm seeing dir relative paths.  For instance, I modify a file in the test dir (Shared.ps1) and then I cd into the test dir.  When I tab complete either git add <tab> or git checkout -- <tab> I get the correct, relative path i.e. Shared.ps1 and not test/Shared.ps1.  Which git commands are not tab-completing paths with the correct relative path?

@rkeithhill I'm seeing it on git add <tab> and git checkout -- <tab>.
Steps to reproduce:

Load posh-git
cd to a repo with a change
git add  - this is correct
cd to a subdir of the repo (e.g. src/)
git add  - returns full path

@cdonnellytx Sorry for the delay.  What version of posh-git are you using?  I do not see what you're seeing on 1.0.0-beta.3 (or the tip of master).  This is what I see:

OK, so I figured it out... and it amounts to my forgetting something: I had made a local change to the git status call in GitUtils.ps1 to use --porcelain, since that is supposed to be what you use in scripts per the man page:

--porcelain[=<version>]
Give the output in an easy-to-parse format for scripts. This is similar to the short output, but will remain stable across Git versions and regardless of user configuration. See below for details.

This is what the change looked like in GitUtils.ps1:
- $status = Invoke-Utf8ConsoleCommand { git -c core.quotepath=false -c color.status=false status $untrackedFilesOption --short --branch 2>$null }
+ $status = Invoke-Utf8ConsoleCommand { git status $untrackedFilesOption --porcelain --branch 2>$null }

I meant to submit a PR for this change, but never got to it.
But worse than that, what I did not realize was this:

The description of the short format above also describes the porcelain format, with a few exceptions:

The user’s color.status configuration is not respected; color will always be off.
The user’s status.relativePaths configuration is not respected; paths shown will always be relative to the repository root.

In other words, the bug is something I introduced by using --porcelain. 🤦♂ I apologize for that.
The good news, though, is that this will still work, since --porcelain is guaranteed to never change (per the Git maintainers), while human-readable output has no such guarantee.  I don't know if that's worth the extra changes at this time, though.
One other possibility is to use porcelain format v2, which does honor status.relativePaths and thus would not be as invasive a change.  The only downside there is that may require raising the minimum version of Git that posh-git supports to 2.11.0 (commit).
Thoughts?
# Chris

Nice sleuthing. Thanks for taking the time to track that down!! RE using porcelain format v2, that's a question for @dahlbyk.

One other possibility is to use porcelain format v2, which does honor status.relativePaths and thus would not be as invasive a change. The only downside there is that may require raising the minimum version of Git that posh-git supports to 2.11.0 (commit).

We do require Git 2.15+ now, and I am considering using --porcelain=2 --branch. Especially after the quoted-path fix needed in #892.
Anyway, thanks for trying to help…almost three years ago. 🤦♂

No worries, it happens.


Readme incomplete?

After confirming that your development environment meets the specified requirements, you can create a new project based on react-redux-starter-kit in one of two ways:

But I only see one way described.

You are correct, this is outdated. I will fix this later today.

This has been fixed with https://github.com/davezuko/react-redux-starter-kit/commit/c135b61617327b9386d83e053f7a61ac46ff13d7.


Scan Page https://sara-sabr.github.io/ITStrategy/nos-billets.html for accessibility issues

Scan this page using axe to see if there are any accessibility issues

no issues found


fix(masthead-search): activate/deactivate on focus/blur

Related Ticket(s)
Refs #3882.
Description
This change activates the search box when it gets focus, and deactivates the search box when it loses focus.
Changelog
New

A mechanism to activate the search box when it gets focus, and deactivate the search box when it loses focus.

Changed

A change to consolidate reactive properties in the file to a chunk.
Fix for missing custom events in the doc.

FYI, looks like there's an error in the build:

@jeffchew Sorry for that... Fixed.


Postgres JSON Query Syntax not supported

It seems project is not updated for a while, but here it goes:
SELECT x->'y' FROM user

Is not parsed, though SQLite supports it for sometime. It fails with:
expected expression, found '>'

Fixed by https://github.com/rqlite/sql/pull/20


Implement WCS 1.1.2

Add it (with any OWS common structure) for the minimum GetCapabilties to start.
See if there's an existing branch?

See #4 and 40780d0. Some minor namespace differences between the three 1.1.x versions.


How to use?

Were do i put my Injector_path.exe dll_path [process_name]? When running the program it just says invalid params?

In a console (cmd)


Improving error messages

Hi
When using the data package validation, there are error messages that seem unclear. It would be great if these could be made more specific (ie: hone in on what the, say, the index in resources descriptor refers to). As an example, in leaving out the 'name' field in Resource, the top of error stack comes back as:
Descriptor validation error:         Missing required property: resources         at "" in descriptor and         at "/required/0" in profile         at "" in descriptor and         at "/required/0" in profile     at Profile.validate ... datapackage/lib/profile.js:41
@Stephen-Gates, you might be able to phrase this better than I can?

Thanks @mattRedBox, if I understand correctly, the validation error returned is difficult to understand the error without looking into the code.
I looked through the source files and I think most of the error messages are pretty good except for the one you point out.
The error is a data resource that doesn't have a name but every resource must have a name as required by the profile.
So:

Missing required property is good
but the values trying to provide the location of the error in the datapackage.json are less helpful

It would be helpful for the error message to say that name is required in a resource
Is that a good summary?


Online Status no longer working

On try.nexodus.io, all of my devices show up as offline, though I can verify that all of them are functional. It seems to be a regression somewhere.

nexctl showing the same so it may be the redis interaction on the API server. Hiram currently looking at the issue as well.
https://github.com/nexodus-io/nexodus/blob/main/internal/handlers/online_tracker.go


Height width fix

closes #5636
Searched through all of the example files for occurrences of "100vh" and these three files is what I came up with. If I missed any let me know!

Thank you!


Greater than five data series wraps data

When trying to plot more than five line series i find that each additional series greater than five doesn't render. This appears to be because react-vis is wrapping the data so that given six line series, what you would expect would be:
<lineseries data=data_1>
<lineseries data=data_2>
<lineseries data=data_3>
<lineseries data=data_4>
<lineseries data=data_5>
<lineseries data=data_6>

But instead i find that last one gets the firsts data, that is:
<lineseries data=data_1>
<lineseries data=data_2>
<lineseries data=data_3>
<lineseries data=data_4>
<lineseries data=data_5>
<lineseries data=data_1>

I think that this is connected to https://github.com/uber/react-vis/issues/62.

This appears to be affecting both line and area series


Not working with Swift 1.2

Hi,
Thanks for your plugin, it works great... except with XCode 6.3 and Swift 1.2.
I had to copy the files in my project and link them in the Bridging-Header file (and add pod 'googleplus-ios-sdk' into my Podfile) to make it work.
It's not an ideal solution, so I would be grateful if you could have a quick look :)
Thanks!

I just set up a Swift example project to look for issues with Xcode 6.3.
But everything seems to work fine...
Here's what I did:

Started out with the "Single View Application" template, but ditched some unnecessary files from the template (storyboard etc).
Copied the Podfile from the Objective-C example project and ran pod install
Added an Objective-C bridging header and imported <GooglePlus/GooglePlus.h> as well as <GooglePlusShareActivity/GPPShareActivity.h>
Translated the code from the Objective-C example project to Swift

And then it worked.
You can have a look at Examples/Swift to see the result and compare to what you tried in your setup.
If what I listed above isn't working for you, please describe your problem in more detail. Maybe I can be of more help then.

Hi, thanks for your reply. I still get the error on my project. It goes like this:
Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_GPPShare", referenced from:
      objc-class-ref in GPPShareActivity.o
     (maybe you meant: _OBJC_CLASS_$_GPPShareActivity)
  "_OBJC_CLASS_$_GPPSignIn", referenced from:
      objc-class-ref in GPPShareActivity.o
  "_kGTLAuthScopePlusLogin", referenced from:
      -[GPPShareActivity performActivityInternal] in GPPShareActivity.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

I'll have a closer look anyway ;)

Looking at https://github.com/CocoaPods/CocoaPods/issues/3106 I suppose you have use_frameworks! in your Podfile. The linked issue describes that dependencies with bundled frameworks, such as the google-plus-ios-sdk, do not work with CocoaPods 0.36 when using frameworks to build the pods.
It looks like there will be a workaround in the future, but the only thing you can do right now is removing use_frameworks! ... unless of course you have Swift pods, then your current solution would be the only option until the issue is fixed.


Can't build using 'npm run bundle'

This may be my system but not sure. I tried building the add-on as suggested, but it fails with the following error (after running 'sudo apt install npm' first to install npm):
`$npm run bundle

bundle
./bundle.sh

rm: cannot remove 'dist': No such file or directory
/mnt/c/Users/USERNAME/Downloads/Software/Thunderbird/Extensions/thundersort-1.1.0/node_modules/typescript/lib/tsc.js:93
for (let i = startIndex ?? 0; i < array.length; i++) {
^
SyntaxError: Unexpected token '?'
at wrapSafe (internal/modules/cjs/loader.js:915:16)
at Module._compile (internal/modules/cjs/loader.js:963:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14)
at Module.require (internal/modules/cjs/loader.js:887:19)
at require (internal/modules/cjs/helpers.js:74:18)
at Object. (/mnt/c/Users/USERNAME/Downloads/Software/Thunderbird/Extensions/thundersort-1.1.0/node_modules/typescript/bin/tsc:2:1)
at Module._compile (internal/modules/cjs/loader.js:999:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
cp: target 'dist/' is not a directory
rm: cannot remove 'thundersort.zip': No such file or directory
./bundle.sh: line 7: zip: command not found
`
I am running it in WSL (ubuntu winux) from within the '/mnt/c/Users/USERNAME/Downloads/Software/Thunderbird/Extensions/thundersort-1.1.0' directory, I am wondering if running 'sudo apt install npm' whilst in the same directory has anything to do with it? (Except that looks like a syntax error above.)

The bundle.sh script assumes that a dist folder already exists from a previous build. This is a mistake and needs to be fixed.
As a workaround, you can try just creating an empty folder called dist in the root of the project folder and running the script again.

Yeah, I installed zip but it still failed. I'll try creating the empty dist folder as you say. But yes, it appears there is a syntax error where there is a "??" in the typescript file, which I think is imported and not yours.
One other thing, as I understand the bundle.sh script, it appears to want to create a zip file, but the extensions in the Thunderbird/extensions directory are .xpi files. I know these are a form of zip and I can open them in 7zip, but not sure how this bundle script will create the .xpi to drop into TB/extensions folder.

Took a lot of searching to find this page that even mentions the nullish coalescing operator: (https://stackoverflow.com/questions/68692038/how-to-solve-error-syntaxerror-unexpected-token).
It looks like that is what has been used here.

So, as I understand it, this:
let i = startIndex ?? 42;
effectively means:
let i equal startIndex unless it is NULL or UNDEFINED, in which case let it equal 42

Due to the precedence of the ?? operator I wonder if adding parentheses might fix it:
for (let i = (startIndex ?? 0); i < array.length; i++) {

Is it possible that you are running an older NodeJS version, that doesn't support the ?? operator?

Yeah, I installed zip but it still failed. I'll try creating the empty dist folder as you say. But yes, it appears there is a syntax error where there is a "??" in the typescript file, which I think is imported and not yours.
One other thing, as I understand the bundle.sh script, it appears to want to create a zip file, but the extensions in the Thunderbird/extensions directory are .xpi files. I know these are a form of zip and I can open them in 7zip, but not sure how this bundle script will create the .xpi to drop into TB/extensions folder.

To create a xpi, simply rename the resulting zip to end with .xpi - I dunno why the script doesn't do that on it's own

Is it possible that you are running an older NodeJS version, that doesn't support the ?? operator?

Well ok...so, I only installed npm specifically for this. and it appears to have installed nodejs version v12.22.9 as a dependency. The npm version is 8.5.1. It looks like ?? requires v14+...

Yeah, I installed zip but it still failed. I'll try creating the empty dist folder as you say. But yes, it appears there is a syntax error where there is a "??" in the typescript file, which I think is imported and not yours.
One other thing, as I understand the bundle.sh script, it appears to want to create a zip file, but the extensions in the Thunderbird/extensions directory are .xpi files. I know these are a form of zip and I can open them in 7zip, but not sure how this bundle script will create the .xpi to drop into TB/extensions folder.

To create a xpi, simply rename the resulting zip to end with .xpi - I dunno why the script doesn't do that on it's own

Would changing bundle.sh from:
zip -qqr thundersort.zip README.md LICENSE manifest.json package.json package-lock.json tsconfig.json src dist
to:
zip -qqr thundersort.xpi README.md LICENSE manifest.json package.json package-lock.json tsconfig.json src dist
?

Would changing bundle.sh from:
zip -qqr thundersort.zip README.md LICENSE manifest.json package.json package-lock.json tsconfig.json src dist
to:
zip -qqr thundersort.xpi README.md LICENSE manifest.json package.json package-lock.json tsconfig.json src dist
?

I believe that should work - However, I am not all too invested in the topic of xpi files, nor do I know if the zip command cares about the file ending or not. For now, you can simply rename the resulting file.

Well ok...so, I only installed npm specifically for this. and it appears to have installed nodejs version v12.22.9 as a dependency. The npm version is 8.5.1. It looks like ?? requires v14+...

You should be able to install a newer version of NPM and Node as per official instructions. I cannot assist you much more than this, as there are many ways to install npm/node and I am currently not anywhere near my PC.

Would changing bundle.sh from:
zip -qqr thundersort.zip README.md LICENSE manifest.json package.json package-lock.json tsconfig.json src dist
to:
zip -qqr thundersort.xpi README.md LICENSE manifest.json package.json package-lock.json tsconfig.json src dist
?

I believe that should work - However, I am not all too invested in the topic of xpi files, nor do I know if the zip command cares about the file ending or not. For now, you can simply rename the resulting file.

Well ok...so, I only installed npm specifically for this. and it appears to have installed nodejs version v12.22.9 as a dependency. The npm version is 8.5.1. It looks like ?? requires v14+...

You should be able to install a newer version of NPM and Node as per official instructions. I cannot assist you much more than this, as there are many ways to install npm/node and I am currently not anywhere near my PC.

node and npm upgraded (took a bit of forced overwriting). npm run bundle now works and changing the extension in the bundle.sh has produced thundersort.xpi instead of thundersort.zip.


Implement New UI Design for Form

This pull request introduces the new UI design for the form, as per the specifications in the design.

Keep an eye on the form's performance and user feedback post-deployment to quickly address any issues that arise. Thank you.


Spanish translation

pretty accurate spanish translation to the installer and rpc

btw sorry if i made this suggest bad, im new at this

Worked perfectly! I'll add the translation.

Nice! Happy to help.


Grid : inlineAction event not getting added

After adding new record to grid, inline event for delete button is not working...

Hi BForms Team, as gunaseelanra stated in his post on June 20 i experienced the same problem after the creation of new rows. The delete Icon does not show any popup on the new rows. I have to expand the row first so that the delete button works correctly...
While checking the js implementation if found this event:
this._trigger('afterAdd', 0, {
row: row,
data: data
});
and I added it to my Grid init:
this.$grid.bsGrid({
uniqueName: 'pmgrNamingConventionGrid',
pagerUrl: this.options.pagerUrl,
detailsUrl: this.options.getRowsUrl,
beforeRowDetailsSuccess: $.proxy(this._beforeDetailsSuccessHandler, this),
afterRowDetailsSuccess: $.proxy(this._afterDetailsSuccessHandler, this),
afterAdd: $.proxy(this._afterAddHandler, this),
inlineActionSelector: '.js-inlineAction', ....
Now I would like to initialise the delete Button for the newly Added Row:
//#region Add Handler
pmgrnamingconventionIndex.prototype._afterAddHandler = function (e, data)
{

    $row = data.row;

    var $btn = $row.find(this.options.btnSelector);

    $btn.bsInlineQuestion({
        question: "Are you sure?",
        placement: 'auto',
        buttons: [{
            text: 'Yes',
            cssClass: 'btn-primary bs-confirm',
            callback: $.proxy(function () {
                var data = [];
                data.push({
                    Id: $row.find('objid')
                });

                this._ajaxDelete($row, data, options.url, function () {

                    context._getPage(true);

                }, function (response) {

                    if ($(options.btnSelector).is('.js-inlineAction')) {

                        context._pagerAjaxError(response, $row);

                    } else {

                        context._rowActionAjaxError(response, $row);

                    }
                });

                $btn.bsInlineQuestion('toggle');
            }, this)
        },
            {
                text: 'No',
                cssClass: 'btn-theme bs-cancel',
                callback: function (e) {
                    $btn.bsInlineQuestion('toggle');
                }
            }]
    });
}

But this doesn't  seem to work.
What would be the best approach to solve this problem? Is this event "public" or are there other reasons that it not shown in the doc?
Regards Dumitru

Hi Cristi, thanx again for your support!


Support for Arduino/Genuino 101

It is based on Intel Curie SOC(https://www.arduino.cc/en/Main/ArduinoBoard101). So there is no platformio package for this yet.
Toolchain is ARC GNU Toolchain located at https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain.
Upload with dfu-util(http://dfu-util.sourceforge.net/) and seems to ship with own drivers.
The files are available via Arduino IDE board manager, but the documentation is quite thin until now. Is there any chance, platformio will support this platform? Tell me, if I can help with anything.

Thanks, we will contact with Arduino.cc and Intel Corporation to help us with integration this board to PlatformIO.

@w4ilun, @D3f0
Do you have any ideas as for this issue?

All info is in https://github.com/platformio/platformio/issues/157#issuecomment-189547354

@maxbrueckl please re-test with the latest http://docs.platformio.org/en/latest/installation.html#development-version

Thank you for your efforts!
I can confirm that it compiles for arduino101 now.
However, I get an error message, when I try to upload to the board. This is the corresponding console output:
E:\Arduino\BalanceBot>platformio run --upload-port COM3 -e genuino101 -t upload
[04/28/16 15:09:58] Processing genuino101 (platform: intel_arc32, board: genuino
101, framework: arduino)
-------------------------------------------------------------------------------
BeforeUpload(["upload"], [".pioenvs\genuino101\firmware.bin"])
"C:\Users\max\.platformio\packages\tool-arduino101load\arduino101load" E:\Arduin
o\BalanceBot\.pioenvs\genuino101 .pioenvs\genuino101\firmware.bin "COM3" verbose

Starting download script...
Args to shell: [E:\Arduino\BalanceBot\.pioenvs\genuino101 .pioenvs\genuino101\fi
rmware.bin COM3 verbose]
Serial Port: COM3
BIN FILE .pioenvs\genuino101\firmware.bin
Waiting for device...
exec: "E:/Arduino/BalanceBot/.pioenvs/genuino101/dfu-util": file does not exist
scons: *** [upload] Error 1
========================= [ ERROR ] Took 1.66 seconds =========================

Hi @maxbrueckl !
Could you please test latest PlatformIO and this uploader. Just replace old one in C:\Users\max\.platformio\packages\tool-arduino101load\
Thanks!

I can confirm, that it all works now. Uploading included. Great work!
Thank you very much.
Notice to everyone working with Arduino101 right now: dfu-util currently does not reset the board before uploading. You need to manually press the "reset" button to bring the board in a flashable state.

I know, the issue is solved now, but may I ask a question considering packages in platformio.
As it seems they just exist and get downloaded (concrete toolchain-intelarc32, framework-arduinointel, tool-arduino101load), but I cant find where they are defined in the commits mentioned with this issue. Am I missing something?
If I understand correctly, it would be much more scalable, if they would be treated like boards and platforms (definable by users).

@maxbrueckl the packages are located in @bintray https://bintray.com/platformio
PlatformIO installs package into ~/.platformio/packages directory.


Hello! I am using gradle7.4.2 and idea2021.3 to build a java project, but it has not been able to compile for unknown reasons. Please help analyze the reason, I am new to gradle, this problem has troubled me for a long time, thank you very much!

Hello! I am using gradle7.4.2 and idea2021.3 to build a java project, but it has not been able to compile for unknown reasons. Please help analyze the reason, I am new to gradle, this problem has troubled me for a long time, thank you very much!
The following exception message appears every time I build:
idea Build Output：
Could not resolve org.springframework.boot:spring-boot-dependencies:2.4.13 because no repositories are defined

build.gradle.kts
buildscript {
    repositories {
        maven { setUrl("https://repo.spring.io/libs-milestone") }
//        maven { setUrl("https://maven.aliyun.com/nexus/content/groups/public") }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.4.13")
    }
}

plugins {
    id("java")
}

group = "com.xhz"
version = 11

subprojects {
    apply(plugin = "java")
    apply(plugin = "org.springframework.boot")
    apply(plugin = "io.spring.dependency-management")
}

settings.gradle.kts
rootProject.name = "meihu"
include("user")
include("common")

Your Environment
idea 2021.3
gradle 7.4.2
jdk 11.14
Windows 10 19044 x64
I am new to gradle and hope to get help from teachers as soon as possible to solve this problem together, thank you very much!

@zhouxinghong , please follow https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/htmlsingle/#getting-started
a) You do not need buildscript { block.
b) Please use plugins { id(...) } syntax instead of apply(plugin = ...
c) Prefer configuring the repositories via settings.gradle.kts -> dependencyResolutionManagement so they are declared in a single place for all the projects: https://docs.gradle.org/current/userguide/declaring_repositories.html#sub:centralized-repository-declaration
d) Prefer configuring the repositories via settings.gradle.kts -> pluginManagement: https://docs.gradle.org/current/userguide/plugins.html#sec:custom_plugin_repositories
Basically, "c" would resolve your issue.

Thank you teacher for your careful help! thank you very much! Again, I wish the teacher the best of luck in all aspects! You are great! 👍😜


Log an error message if the executable given to the test suite runner is incorrect

At the moment, if you try to run the test suite using runtestsuite.py with an incorrect executable path (see -t argument), the program fails silently. Instead, print an error message.

Do we still want report.html created? Or, should we just error out early with a message to stderr?

I think we just need an error


Geospatial benchmark utility

Develop a spatial (and consider temporal) benchmark utility that can be generally applicable to run against any system that stores, indexes, and retrieves spatial content.  Likely this will be most generally done by keeping it separate from GeoWave, and utilizing GeoTool's data store abstraction.

We have a benchmark for the point cloud capabilities in geowave-benchmark;
A geotools/feature specific benchmark is currently in the works with CCRi.


Match patch for ldap.TIMEOUT bug affecting python-ldap

python-ldap has a bug related to the handling of ldap.TIMEOUT.  Until that bug is fixed, syncrepl_client won't really work on python-ldap.
Rather than waiting for the bug to be fixed, provide a patch that people can apply themselves.
This is a problem that I haven't been able to look into as much, so I might not target it at Version 1.

Actually, one note: syncrepl_client works fine with python-ldap as long as we are refresh-only.  It's refresh-and-persist where the timeouts can happen.


Identifiers with Astral Unicode characters are unsupported

TypeScript Version
3.5.1
Search Terms
utf8, unicode
Code
const 𝑚 = 4;
const 𝑀 = 5;
console.log(𝑀 + 𝑚); // 9

Expected behaviour
The above is legal JavaScript, so 9 should be printed to the console.
Actual behaviour
The TypeScript compiler goes completely apeshit:

(click to see warnings)
test.ts:1:7 - error TS1127: Invalid character.

1 const 𝑚 = 4;

test.ts:1:8 - error TS1127: Invalid character.

1 const 𝑚 = 4;

test.ts:1:10 - error TS1134: Variable declaration expected.

1 const 𝑚 = 4;
           ~

test.ts:1:12 - error TS1134: Variable declaration expected.

1 const 𝑚 = 4;
             ~

test.ts:2:7 - error TS1127: Invalid character.

2 const 𝑀 = 5;

test.ts:2:8 - error TS1127: Invalid character.

2 const 𝑀 = 5;

test.ts:2:10 - error TS1134: Variable declaration expected.

2 const 𝑀 = 5;
           ~

test.ts:2:12 - error TS1134: Variable declaration expected.

2 const 𝑀 = 5;
             ~

test.ts:3:13 - error TS1127: Invalid character.

3 console.log(𝑀 + 𝑚); // 9

test.ts:3:14 - error TS1127: Invalid character.

3 console.log(𝑀 + 𝑚); // 9

test.ts:3:18 - error TS1127: Invalid character.

3 console.log(𝑀 + 𝑚); // 9

test.ts:3:19 - error TS1127: Invalid character.

3 console.log(𝑀 + 𝑚); // 9

... and generates obviously unusable JavaScript:
var ;
4;
var ;
5;
console.log(+); // 9

More info

ECMA-262, § 11.6 Names and Keywords.

Title is underspecific;  𝑚 is a surrogate pair which is why we don't recognize it. The broad class of other non-ASCII Unicode characters are correctly parsed.

𝑚 is a surrogate pair

Uhm, no it isn't.
If it was a surrogate character, then it wouldn't be valid UTF-8, let alone valid as a JavaScript identifier.

I've amended the title with what I think you meant.

Our scanner is still only following the 5.1 spec which lists explicitly accepted unicode groups for identifiers - the 6.0 spec allows any Unicode code point with the Unicode property “ID_Start” or “Other_ID_Start” as an IdentifierStart and any Unicode code point with the Unicode property “ID_Continue”, “Other_ID_Continue”, or “Other_ID_Start” as an IdentifierPart`.
cc @rbuckton  - we have to have looked at this before, right? I mean, it'd be nice if we could just use /\p{ID_Start}/u, /\p{Other_ID_Start}/u, /\p{ID_Continue}/u, and /\p{Other_ID_Continue}/u`, but that'd be host-dependent.

Oh, our scanner also iterated by char code and not by code point, so every time we call isIdentifierPart we do so with only part of an astral plane character rather than the whole thing, in addition to the list of accepted charactersets being out of date.

Oh, our scanner also iterated by char code and not by code point

Yup, and there's the culprit. 👍
Seems like a pretty easy fix if it's just swapping string.charCodeAt for string.codePointAt.

Seems like a pretty easy fix if it's just swapping string.charCodeAt for string.codePointAt.

Not quite - iterating by string index is by char code, so you need to handle the second "char code" of a multi-code code point - and to top it off, using exclusively the builtin codePointAt would cause us to break on es5 or below runtimes, so we need to polyfill it. In any case, #32096 should do juuuust enough to support parsing this all correctly.

Ah right, I forgot about supporting legacy environments. Makes sense, then.
Thanks for the fast PR!

Ehhhh, it's just a first draft - it'll probably take us a bit to figure out how we want to take it.

Uhm, no it isn't.

To be fair, he did say surrogate pair - i.e. it would have to be encoded as two codepoints in UTF-16.  It's true that astral characters can't legally be encoded as surrogate pairs in UTF-8, though (that's what CESU-8 is for).
"Astral" is the correct term, of course, since "surrogate pair" describes a particular encoding scheme, not something inherent to the character itself.  But it is relevant here, as astral characters are represented in JS strings per spec as surrogate pairs--that's why we needed fromCodePoint.

I'm well aware of how surrogate pairs and Unicode transform formats work, thank you. But that's more-or-less unrelated to the issue I was reporting: it doesn't matter how a character is encoded bytewise, only that the grapheme itself is considered valid in an ECMAScript identifier (as dictated by Unicode).
So, yes, while 𝑚 may be a surrogate pair in the most literal sense, it's theoretically a single character (U+1D45A), not two (U+F09D. U+919A).
Let's not carry this discussion into the murky cesspool of what defines a "character" with relation to computer encoding schemes, please. :)

Right, I was just pointing out the relevance of the surrogate pair comment, because that's how JS engines encode it (i.e. "𝑚".length === 2), which is thus also how the TS compiler sees it, which is (I think) what @RyanCavanaugh's point was in bringing it up.  It was kind of a "this is why the bug manifests", which is indeed useful information. :smiley:

Let's not carry this discussion into the murky cesspool of what defines a "character" with relation to computer encoding schemes, please. :)

Yeah, I agree, that wasn't my intent.

Would this work?

Yeah, disappointing, right? Gotta petition tc39 to specifically add emoji ideographs to the IdentifierPart and IdentifierStart productions.

"Astral" is the correct term, of course

For the record, "astral planes" is slang that comes from a Dungeons and Dragons joke, and does not actually occur in the Unicode specification
They're properly called the "supplementary planes," and people of culture call them "the phlogiston"


Zoom with mouse wheel scroll

In that PR there are 2 changes.

zoom centered on mouse position
zoom on mouse wheel scroll

nice! one question about the first bullet: did it not zoom centered around the mouse cursor before? you mean it centers the zoomed-in pixels under the mouse cursor instead of in the center of the screen?

did it not zoom centered around the mouse cursor before?

Just checked. It did actually. My brain ...


The current instance Arbitrary Address causes run-time errors in Cardano

Specifically "Staking pointers are not supported", triggered by
https://github.com/input-output-hk/plutus-apps/blob/46e831e49287c3a04f83497b9dd9e70718092cde/plutus-ledger/src/Ledger/Tx/CardanoAPI.hs#L490
This was ultimately caused by the Arbitrary instance for Address that generates all possible staking credentials, including the currently unsupported ones.
instance Arbitrary Address where
  arbitrary = Address <$> arbitrary <*> arbitrary
  shrink (Address cred sCred) = Address <$> shrink cred <*> shrink sCred

It's unfortunate, but as long as plutus-extra is locked to an incomplete implementation of plutus-apps it will have to work around its issues.

@blamario What do you think the best solution to this would be? I definitely think this is a bug, but I'm not sure what we can do to fix it.

Could we not just build the address enforcing the use of the StakingHash constructor in the StakingCredential of the address?
Alternatively, perhaps a newtype wrapper specifically named for omitting StakingPtrs, then we coerce it when using

The simplest short-term solution would be to always generate Nothing in the staking credential. This might be an overkill even for the current Plutus, I haven't carefully examined the code path that leads to the error. And of course we'd need to remember to generalize the instance once Plutus is ready for it.
I don't have any better solution either. The newtype @samuelWilliams99 suggests would push the problem to the client code, and if you're going to do that it's probably better to just put a warning in the code. Maybe a WARNING pragma. It's usually possible to adjust the Arbitrary instance once you know you need to do it.

I don't like forcing the staking to always be Nothing, as that's an important part of an Address. Especially in the usecase for which you found this bug, we definitely would need staking addresses to come through.

I also don't think that modifying the Address Arbitrary to remove a case is good either, it should remain total.
I think our best bet here is a named alternative that explicitly doesn't have the pointers, with a warning. Then, once plutus supports these pointers properly, we deprecate it. What do you think?

Following further on the issue itself, what exactly isn't supporting these pointers? Could any contract support addresses with staking pointers in plutusTx at this time?

I didn't get any stack trace, but my workaround was
-    [ testProperty "Invertible toABI" (invertibleTest @DepositLPEventParams)
+    [ testProperty
+        "Invertible toABI"
+        -- TODO : Revert the workaround once it's upstreamed, https://github.com/Liqwid-Labs/plutus-extra/issues/174
+        (\x@DepositLPEventParams {dlpCardanoAddress} -> isNothing (stakingCredential dlpCardanoAddress) ==> invertibleTest x)

where
invertibleTest a = (toABI >=> fromABI $ a) === pure a

so it's about the serialization of Address to Text. If we fix issue #172 first perhaps we can switch to our own solution and work around the Plutus bug.

So is it our serialisation that uses a plutus function that doesn't support StakingPtrs?

So you're saying we should generate addresses with Nothing and with Just StakingHash but not with Just StakingPtr, correct?

Exactly that, yes, since StakingPtrs seem pretty undersupported in plutus generally at the moment. We should however still attach a warning, stating that the instance will change once StakingPtrs become better supported

OK, let's close out #172, then repair this.


Remove bad newlines from EBADENGINE message

What are you trying to accomplish?
When EBADENGINE node errors are detected, dependabot prints a string like this:
Dependabot uses Node.js v20.14.0
 and NPM 10.7.0
. Due to the engine-strict setting, the update will not succeed.

This is due to interpolation of strings with trailing newlines. The intended message seems to be:

Dependabot uses Node.js v20.14.0 and NPM 10.7.0. Due to the engine-strict setting, the update will not succeed.

By calling .strip, the newlines are removed and the message should be well formatted.
Anything you want to highlight for special attention from reviewers?

How will you know you've accomplished your goal?

Checklist

[ ] I have run the complete test suite to ensure all tests and linters pass.
[ ] I have thoroughly tested my code changes to ensure they work as expected, including adding additional tests for new functionality.
[ ] I have written clear and descriptive commit messages.
[ ] I have provided a detailed description of the changes in the pull request, including the problem it addresses, how it fixes the problem, and any relevant details about the implementation.
[ ] I have ensured that the code is well-documented and easy to understand.

Thanks! Good catch.


Legion succubus (heal caster) heal is too quick and upgraded version is melee

#2328  should fix


No options, no button

I'm trying to add in my mod options using a reference to ModLib.Definitions.dll. Is it enough to add in module a class that inherits from SettingsBase? I did it and it just does not work. I can't even see a button Mod Options in the game menu. ModLib is installed and activated.
And when I add some mod that uses MBOptionScreen I can see mod options button. There are tabs there for modlib and my mod, but they are empty.

MBOptionScreen breaks modlib at the moment, the author thinks it good practice to specifically mess with modlib.
I would recommend developing your mod without any other mods installed, as this will allow you to isolate any bugs that may happen.
To get the options to show, you need to install MCM: https://www.nexusmods.com/mountandblade2bannerlord/mods/612
and make sure that it is loaded before ModLib. Then go into Mod Options -> MCM settings -> Disable ModLib override.

It is a real problem I guess. A lot of mods are based on MBOptionScreen. I can test a mod on clean setup but for end-user that's definetly will not be the case. I hope you guys will find a solution that will be good for the comunity. Anyway thanks for your work.

MCM does not 'specifically' mess with ModLib.
MCM provides it's own ModLib substitute because there is no way to use IL/Harmony to make the old and new ModLib work together with your original library.
Since the goal of MCM is to show options from every possible API, it was decided to create a 'frankenstein' that combines the old and the new ModLib assemblies in a way that mods that depend on them will work, but ModLib as a standalone mod will not be able to show those settings itself, because MCM's ModLib substitute does not include the whole ModLib's code and only uses the necessary minimal amount for mods to work.
I do not consider that 'breaking' ModLib. While it's true that ModLib will not work as an independent mod, MCM replaces it's functionality to ensure that everything will work.
You still can use ModLib's Option Screen by disabling MCM.
ModLib's override is shipped by default right now. There is a work in progress to modularize MCM and make ModLib's override optional, check the beta experimental release. This will ensure that the original ModLib will still function, but if any mod will use the old ModLib implementation, it wont work.


Pre and post conditions are not respected in the instarepl

As has been mentioned in #107 and #127 the InstaREPL "ignores" pre and post conditions.  I suspect that what's really happening is that IR uses CLJS as its evaluation chain.  In this case it makes sense because a pre/post map is just a map in the body of a function def to CLJS.  It would be nice to allow the user to select the eval engine (CLJ vs CLJS) for use in the InstaREPL.

This issue has moved to https://github.com/LightTable/ClojureInstarepl/issues/1 as the instarepl is its own plugin

This issue has moved to https://github.com/LightTable/ClojureInstarepl/issues/1 as the instarepl is its own plugin


modules documentation doesn't have pattern for Node.js users

I find the module documentation page very confusing when I try to apply it to Node.js commonjs modules. I think my main difficulty understanding modules is that most documentation focuses on internal modules, with treatment of external modules as an option.
It seems to me that the two module types, internal and external, have little in common, and that they use different coding patterns. And I haven't figured out how to check my external module code in the TypeScript Playground. My guess is that a separate playground is required.
I would also like to see a separate best practices guide for node.js development.
Currently, my guidelines include:

each module has an implementation file and a declaration file
each implementation file has the following format:

references
There may only be references to native node packages and to commonjs packages.
module imports and alias imports
I use alias imports to avoid namespaced references in my code (e.g. module.interface_name), unless the namespace is clarifying.
interfaces and classes that are private to the module
the implementation, with only the minimum required exports

declaration files go into a decl directory
And 3rd-party declarations going into decl/3rd_party  .
I'm sure there's a better way to do this. It's cumbersome to manage with DefinitelyTyped.
(BTW, I just starting investigating tsd)

Here is a simplified example of a module:
/// <reference path='../../../decl/3rd_party/node.d.ts' />
/// <reference path='../../../decl/3rd_party/Q.d.ts' />
/// <reference path='../../../decl/appModule1.d.ts' />
/// <reference path='../../../decl/appModule2.d.ts' />

// native and 3rd-party modules and aliases
import http                             = require('http');
import Q                                = require('q');

// my app's modules and aliases
import AppModule1                       = require('appModule1');
import AppModule2                       = require('appModule2');
import Type1                            = appModule2.Type;
import some_var                         = appModule2.some_var;

// interfaces and classes that are private to this module
interface A {};
class B {}

// the implementation, with public element exported
var a;
export var b;
function c() {}
export function d() {}

And my declaration for the above module will look like:
// <reference path='../../../decl/3rd_party/Q.d.ts' />
/// <reference path='../../../decl/appModule3.d.ts' />

declare module "myApp" {

    // modules and aliases used by this declaration file
    import Q                                = require('q');
    import AppModule3                       = require('appModule3');
    import AM3Type                          = AppModule3.Type;

    // public interfaces and classes
    interface X {}
    class Y extends AM3Type {}

    // public variables and functions
    var b;
    function d() : Q.Promise<X> {}
}

Notice that the public interfaces aren't in the global namespace, they belong to the module, and must be referenced within its namespace. In some cases, I've been unable to figure out how to do this for 3rd-party libraries.
This is a fairly narrow set of guidelines.  If they seem reasonable, I'd be happy to work on them further to create a best practices guide for node.js development.

closing this issue for now, please reopen if there further details needed.