Confusing error on missing toMatchSnapshot() argument

🐛 Bug Report
When toMatchSnapshot(propertyMatchers, snapshotName) has null as the first argument, Jest prints a confusing error:
  Received value does not match snapshot properties for "foo: hello 1".

    Expected snapshot to match properties:
      null
    Received:
      "foo"

To Reproduce
Steps to reproduce the behavior:
it('foo', () =>
  expect('foo').toMatchSnapshot(null, 'hello')
);

with Jest 23
Expected behavior
I only wanted to specify snapshotName. The docs say it's the second argument: http://jestjs.io/docs/en/expect.html#tomatchsnapshotpropertymatchers-snapshotname
I have no idea what "property matchers" are and am not currently interested in them. (The docs fail to mention their format.) I passed null because I don't know what their default value is (the docs fail to mention that too).
I couldn't figure out for quite some time why my tests were failing. I expected null to be treated as a "missing" value for propertyMatchers instead of trying to treat it as some kind of a shape.
Link to repl or repo (highly encouraged)
Repl seems to be on an older Jest version without this problem.
But the above repro works for a clear Jest 23 install.

The most confusing part of this experience was Jest telling me to re-run my snapshots with -u to record changes, but -u not doing anything. I wasted some time digging why -u wasn't being passed to CLI (which it actually was).

You can do expect('foo').toMatchSnapshot('hello'). That should definitely be in the docs. Wanna send a PR for it?
@rickhanlonii we should improve the error message here

fwiw the docs say that the property matchers are optional
I added a better error message here: https://github.com/facebook/jest/pull/6528


[DC-1605] Use Shared Sandbox In survey_version_info.py Manual Cleaning Rule

Updated qrid_map_dataset_id to be the shared sandbox dataset id
Updated the integration test to reflect the changes in the module

Branch name is breaking integration test check, changing branch name, closing PR


Boost License?

We can't use the MIT License because it technically requires the copyright notice even in the binary. Would it be possible to relicense or dual-license this under the BSL (Boost Software License) ? Thanks!

Could you elaborate why including the copyright notice is a problem? It's typically included in some About dialog or similar, which is minimally intrusive.

@svaarala See https://github.com/github/choosealicense.com/issues/694 and https://github.com/github/choosealicense.com/pull/698

I know, I was just asking why it's a problem including the license. It is, after all, the only thing that is asked in return for free software.

Since, after https://www.copyrightservice.co.uk/copyright/p03_copyright_notices

There is no legal requirement to include a copyright notice.
Whether a notice is used or not will not change the fact that copyright exists in the work.

Requiring to keep the notice on binary is a pretty much useless archaism.
In terms of legal enforcement, authors could equally ask users to make sign of the cross every time they pass a local pub.

The problem with the MIT license is twofold: 1. The vague language, leading to legal uncertainty about how to comply with the license in many cases (for example, in binaries), and 2. The burden of compliance beyond attribution in source code.
While some will be okay with a credit in an about box, many are not. In many corporate settings, MIT License is simply unacceptable. For example, if I want to use your library as a component of a new Boost library that I am writing - I cannot, because the MIT License is less permissive than the Boost license. Consumers of Boost are not interested in anything which requires attribution or copyright beyond the source code.

I originally chose the MIT license without too much thought. It was used by Lua, which has wide acceptance, and since Duktape targets many of the same usage scenarios it seemed appropriate (i.e. anyone using Lua would probably be fine with it). While MIT license could be clearer about attribution, I personally think attribution is a very acceptable requirement when getting free software.
If I were to choose a license now, I'd be fine with a variety of licenses, including CC0.
Changing the license now would require a sign-off from all current contributors (around 40 or so). It's doable if this is a really major issue.

Assuming the project license was changed, the main issues would be:

Deciding on what license(s) to use. If the license is changed now, I would prefer it to be maximally permissive.
Contacting all existing authors to get their approval. All but a few have Github profiles so reaching them should be easy, and the remaining few I have e-mail addresses for.
There would need to be a reasonable time, say 1-2 months, to get approvals. Contributions from anyone not responding would then need to be removed or reimplemented. If all authors can be contacted and they give approval, the license change could also apply to older versions so that they would become in effect dual licensed.

By the way, I think this case can learn on how to handle the relicensing from @eric-s-raymond's text on Community practice on license changes, with the gist copied below:

Solving this problem will require flexibility and new behavior from everybody involved — project owners, project contributors, and everybody in the community. We have some recommendations about how to cope.
First: we need to stop treating project licenses as immutable sacred texts, ideological banners, or territory, and start thinking of them as functional software — which, like all software, needs periodic upgrading.
(...)
We also recommend that project contributors no longer attach explicit licenses of any kind to their patches or modules, and consent to having existing contributor licenses removed. Bare copyright notices are OK, but explicit licenses on contributions complicate the legal picture in unhelpful ways.
Third: we recommend that project leaders show respect for their contributors by preceding major licensing changes with a public comment period. It is important not just that the right thing be done, but that the right thing be seen to be done.

Deciding on what license(s) to use.

I am researching this to evaluate all the available licenses, thanks!!

Please don't change license. How could it be difficult to add a tiny license information to about page? Please give some respect to author. This project couldn't be exist without his effort.
Beside this what will hapen when someone comes and says that BSL is not suitable for me.

Please @webfolderio reread the whole thread trying to understand the problem. This has nothing to do whatsoever with avoidance to display respect or credits.

Wouldn't requirement to distribute license with binaries make it pretty tricky to use Duktape on microcontrollers? Anyways, I have no problem with the license change (I made one trivial PR a while back and I am listed as a contributor). This goes for all my existing and future contributions, no matter what license is chosen. Thanks!

MIT licensed libraries are used quite widely (including Lua) so I'm not aware of any problems with that.

@mloskot Re: the license change process, I agree it would be nice to have flexibility.
But, in my view it should be made clear beforehand in CONTRIBUTING, e.g. that a contributor agrees to whatever license change unless they object to the change in a notice period.

@grafikrobot The most permissive license would obviously be "public domain". WTFPL (http://www.wtfpl.net/) is as close as you get to public domain while still calling it a license, so it might be my choice. But some contributors might feel differently, as there are quite many aspects to licensing.

Please don't change license. How could it be difficult to add a tiny license information to about page? Please give some respect to author. This project couldn't be exist without his effort.

What if the binary is actually a background service, that doesn't have any user interaction? Would it suffice to add a command switch, so if you run the binary from the command line, with the info switch or something, it shows the notice? (Even tho, one normally would never run the binary this way?)
Genuinely curious...

I don't see any reason to re-license the project because it does not match people needs. You can't come to any project and ask them to change their license because you don't like it.
So there is no reason to change MIT, which is very good license.

@kajmagnus: Apache 2.0 has another problem - it is incompatible with GPLv2.

@vinniefalco if you and/or your corporation could afford so much time discussing license I’m sure you could pretty much roll out your own JavaScript engine, considering you and you fellow workers are smart enough to read and find problems in the license itself.

@past-due — Apache 2 incompatible with GPLv2: Tahnks for mentioning, I didn't know. Here's what the FSF writes: https://www.gnu.org/licenses/license-list.en.html#apache2: "this license is not compatible with GPL version 2, because it has some requirements that are not in that GPL version. These include certain patent termination and indemnification provisions". And a StackOverflow question/answer: https://opensource.stackexchange.com/a/1364/9828 "Can I link a Apache 2.0 library into software under GPLv2?".

@kajmagnus: Apache 2.0 has another problem - it is incompatible with GPLv2.
The LLVM project has introduced the LLVM exception to the Apache License, version 2.0. That solves the GPLv2 incompatibility problem and also waives attribution for binary-only distributions.


Implement a modal for spanning lattices

ref #111

Changed the labels to reflect existing language about generators up from 1/1 in other modals.


Remove android.permission.GET_TASKS required by tsbackgroundfetch

It would be useful to remove this currently required android permission, as this permission was deprecated in API level 21. There are more fine-grained permissions available for the actions that this permission enables.

Went back/forth on a bunch of permissions to get it as good as we can for now.


Add shift register to keyboard daughter board

Would like to use less gpios

Maybe a Johnson counter with ext sync

https://www.digikey.com/en/products/filter/shift-registers/712?s=N4IgjCBcoGwJxVAYygFwE4FcCmAaEA9lANogAsADHAMw0gC6%2BADqlCAMoYCWAdgOYgAvvjAUArIhApIGHPiKRSERiBZsAkj1TY%2B2dEPwAmAOwxJ02XkIlw1MnDLGQIu3Apln4QwA5jbz2DwFGAIIkEUZmFuFNQBMN5w3hSeYnBiCSlBEPhiYsamnmTp3hIihmBghsllFRTenlUmxtUgjcbesUYUJr4N3X4tbQ59Psadrd3eSQzMrJAc3PwGrVVO0FJoWFYKpPUqavOa2rr6wiAAtIbmm3LWiiAS9IJnV-fsABZcAGaoAAToOi4AGdtPonkA

ordered 74HC series shift registers for both input & output
required pins off the esp32: shared clk (23?), shared en, input, output


make get fails

After git clone, make get fails on my macbook (osx 10.10.5)
amitava:usercorn amitava$ make get
go get -u github.com/bnagy/gapstone github.com/lunixbochs/argjoy github.com/lunixbochs/fvbommel-util/sortorder github.com/lunixbochs/ghostrace/ghost/memio github.com/lunixbochs/ghostrace/ghost/sys/num github.com/lunixbochs/go-shellwords github.com/lunixbochs/readline github.com/lunixbochs/struc github.com/mgutz/ansi github.com/unicorn-engine/unicorn/bindings/go/unicorn
# github.com/bnagy/gapstone
../../golang/src/github.com/bnagy/gapstone/arm64_constants.go:22:11: fatal error: 'capstone/capstone.h' file not found
 #include <capstone/capstone.h>
          ^
1 error generated.
# github.com/unicorn-engine/unicorn/bindings/go/unicorn
could not determine kind of name for C.uc_mem_map_ptr
could not determine kind of name for C.uc_mem_regions
could not determine kind of name for C.uc_query
could not determine kind of name for C.uc_query_type
make: *** [get] Error 2

Details on my environment
amitava:usercorn amitava$ uname -a
Darwin amitava.local 14.5.0 Darwin Kernel Version 14.5.0: Mon Jan 11 18:48:35 PST 2016; root:xnu-2782.50.2~1/RELEASE_X86_64 x86_64

The top of the readme lists dependencies (Capstone, Unicorn, and Go)

Yes this is a specific error you're getting for not having unicorn installed on the system. I ran into this exact issue and pulling the latest unicorn fixed the issue :)

Let me know if you run into anymore setup problems.


brew bundle check should list whats missing

The current message could be improved if it said what dependencies aren't currently installed, rather than the opaque message:
brew bundle can't satisfy your Brewfile's dependencies.

When the solution is just to run brew bundle does it matter what the message says?

If you blindly follow messages hen probably not. Personally I like to know why something is required/what it wants to do before it does.
For example, I can't imagine why there would be any differences since I just dumped the bundle file from my currently installed stuff, yet it tells me it needs to install. If it said what was missing it's be far easier to track it down.
Sent from Outlook Mobile
On Mon, Feb 8, 2016 at 3:03 AM -0800, "Mike McQuaid"<EMAIL_ADDRESS>wrote:
When the solution is just to run brew bundle does it matter what the message says?
—
Reply to this email directly or view it on GitHub.

@alias1 Funny you asked about this. I just noticed this issue, but I'd already implemented it locally. Something must be in the water.
Josephs-MacBook-Pro:~ joe$ brew bundle check --global
xz
libgcrypt
emacs --with-cocoa --with-x11 --with-gnutls --HEAD
node
homebrew/dupes/rsync
brew bundle can't satisfy your Brewfile's dependencies.
Install missing dependencies with `brew bundle install`.
Josephs-MacBook-Pro:~ joe$

From 84cedca0ab2dbefd24d3ff09c13927c2481cb7b3 Mon Sep 17 00:00:00 2001
From: ilovezfs<EMAIL_ADDRESS>Date: Sat, 6 Feb 2016 22:16:46 -0800
Subject: [PATCH] `check` should report missing and upgradable

Currently, this only supports the Homebrew subset.
---
 lib/bundle/commands/check.rb | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/lib/bundle/commands/check.rb b/lib/bundle/commands/check.rb
index 648618b..709c197 100644
--- a/lib/bundle/commands/check.rb
+++ b/lib/bundle/commands/check.rb
@@ -30,6 +30,13 @@ module Bundle::Commands
     def self.any_formulae_to_install?
       @dsl ||= Bundle::Dsl.new(Bundle.brewfile)
       requested_formulae = @dsl.entries.select { |e| e.type == :brew }.map(&:name)
+      needs = []
+      requested_formulae.each do |f|
+        if !Bundle::BrewInstaller.formula_installed_and_up_to_date?(f)
+          needs << @dsl.entries.select { |e| e.name == f }.map { |e| args = e.options[:args] ; args.nil? ? e.name : e.name + " " + "--" + args.join(" --") }
+        end
+      end
+      puts needs.flatten.join("\n")
       requested_formulae.any? do |f|
         !Bundle::BrewInstaller.formula_installed_and_up_to_date?(f)
       end
--
2.7.1

The problem is: we don't check to find everything that's missing for speed as it's much slower than just looking for a single thing that's missing.

@mikemcquaid Yeah, if this were to actually be integrated, I think it would probably need to be either

an option to pass to check (neither verbose nor debug is quite accurate) (e.g., brew bundle check --assess=[first|all|missing|outdated] or brew bundle check --report-all)
a dry-run/-n option for the subcommandless invocation (i.e., brew bundle --dry-run)
its own command (e.g., brew bundle assess [first|all|missing|outdated])
something else

a dry-run/-n option for the subcommandless invocation (i.e., brew bundle --dry-run)

This seems like the best idea to me. I had to check this option wasn't already there because I thought it was.

Passing on this issue as-is but would accept a --dry-run pull request.


Split view links behave strangely with tab bar setup

Hey
The split view template merged with the tabbar template does not work.
Instead all split view links end up opening in the first tab only.
Even if I open the left panel from a different tab, click a link, the split view still opens in the first tab
Demo link - https://jsfiddle.net/L5skgrdv/9/

If you open the left panel and click About, the view opens in the first tab, Home Page

The link does not open over all the tabs like in the split-view demo link above

If you navigate to any other tab, open the left panel and click About, the view still opens in the first tab. This is an issue.

What I am trying to do is, just want to open any links in the panel over all the tabs, like a preferences page
In the JSfiddle link, the split view link opens only and only under the first tab, not over all the tabs and views, masking it.
EDIT -
I am using Framework7 Version 2 on cordova

This is by design, you have configured to open links in side panel in main view data-view=".vew-main". Page can not be opened over other views. Page can be opened only in View

There is also an issue that if the side panel link is open from different tabs, side panel link only and only opens in the first tab. Why is that?
If I am on another tab and open the menu, I would expect to see the side panel page in the same tab. But instead I have to go back to the first tab to see it. This is unexpected while using the app.

This is by design. .... Page can not be opened over other views. Page can be opened only in View

In Android or iOS apps, that is not the default behaviour. If we are opening a link in the side panel, it opens up a separate view.
I did try to change data-view=".vew-main" to other containers but that doesn't work either.


 run bundle: Verify operator is installed/upgraded

Description:
Verification logic will handle verifying the operator is installed beginning with the starting CSV and upgraded through the ending CSV.
Log what happened and final state (e.g. operator is running in namespace foo, watching namespace bar.
Use CSV status and deployment status as a way to verify the operator.

@bharathi-tenneti Could you help add the unit test or e2e test for this feature? Thanks!

Hi @bharathi-tenneti,

@bharathi-tenneti Could you help add the unit test or e2e test for this feature? Thanks!
+1

IMO: We ought to  call the command in :

here to ensure that it works for Ansible.
here to ensure that it works for Helm
here to ensure that it works for Go.

@bharathi-tenneti Could you help add the unit test or e2e test for this feature? Thanks!

e2e tests and unit tests are coming in this sprint.


Re-enable teosd startup check for watchtower-plugin tests

https://github.com/talaia-labs/rust-teos/pull/153 disabled a check in the watchtower-plugin to wait for teosd startup. This is because after updating both cln and pyln-testing the check started to fail.
It looks like this is due to how the TailableProc checks for the logs, and it happens, especially, if the process is stopped and re-started. I tried to make the TailableProc re-init, so the logs and the offset are reset (which seemed to be a step in the right direction). This made the tests work but randomly fail sometimes.
Given #153 is blocking some issues / other PRs, and removing the check makes the tests pass (they may still randomly fail if the process happens to not have started by the time the tests are run though) I think it is worth disabling for now.
Do a proper investigation of why this is failing and fix it.

May this be due to logs not being flushed early enough?

May this be due to logs not being flushed early enough?

I'm not really sure tbh. Take a look at my WIP fix if you feel like it and you'll see it does not seem to be like that, because even that solution randomly fails.

I'm not really sure tbh. Take a look at my WIP fix if you feel like it and you'll see it does not seem to be like that, because even that solution randomly fails.

Well, the WIP code does somewhat assert my claim (right?). It fails randomly not based on whether it's re-initted or not, which might be due to stdout buffers not being flushed early.
But I visited the source of simple_logger crate and pyln.testing and this seems indeed not to be the case.
Will have to install lightningd and run the tests manually.

I'll also put more time into properly testing this, but I think other features may be worth prioritizing more at the moment, like fixing the blocked issues in https://github.com/talaia-labs/rust-teos/discussions/102 (that were unblocked after cln-plugin=0.1.1) and adding auto-registerandauto-retryto thewatchtower-plugin`

Cool I will take on some of them then. :+1:

As expected, removing the check makes test also randomly fail.
https://github.com/talaia-labs/rust-teos/actions/runs/3534308802/jobs/5931197578

Also notice it was canceled by github infra cuz the test took so long. So this kinda looks like a tower doesn't start issue and not a log doesn't write issue.

The log checks are removed here, it may be that the checks were done before the tower started, so the test ended up on a iffy state.


Eliminate use of mktemp -- use mkstemp instead

The use of mktemp() results in an unsuppressable warning message
on certain compilers, including gcc.  This causes problems for
projects which have rules regarding warning-free compiles.

Use mkstemp instead. The problem with mkstemp is that it opens the
file instead of just returning a unique file name.  However, as a
side effect it does change the template to a unique file name.
This can be used similarly to the return value from mktemp.

Thanks. Fails on Win though: https://ci.appveyor.com/project/tbeu/matio/build/1.5.8+build.14#L303 Need to check.

Changes Unknown when pulling 328b6b73e4ef84bff54241aa80e5d1eb0ded7e02 on gsjaardema:master into ** on tbeu:master**.

Changes Unknown when pulling 328b6b73e4ef84bff54241aa80e5d1eb0ded7e02 on gsjaardema:master into ** on tbeu:master**.


Config changes to reflect the default branch from master to main. Please merge to complete the default branch renaming job.

Auto branch renaming content.

Docs Build status updates of commit d140613:
:x: Validation status: errors
Please follow instructions here which may help to resolve issue.

File
Status
Preview URL
Details

:x:Error

Details

[Error-GitBranchDeletedOrForcePushed] Cannot sync git repo to specified commit because branch 0cb55592-6fc3-40ac-85fc-80d219d94dea has been deleted or has been force pushed

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Docs Build.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
Note: Your PR may contain errors or warnings unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel


⚠ ETF has degraded performance

In 472321a, ETF (https://markets.hankyung.com/equity-product/etf) experienced degraded performance:

HTTP code: 200
Response time: 7400 ms

Resolved: 신규상장 performance has improved in 6a72e82.


Adding Unit Tests for Maybe

Problem
There are no unit tests for the public functions of the Maybe module. This makes it impossible to apply refactoring to the existing code without knowing whether this will break the expected behaviour.
Also, unit tests are good examples on how to use an API. All public functions should have unit tests.
Solution
Add unit tests.

Thanks @FRosner!


Does not generate same OTP for same secret and time duration

Java Version: OpenJDK 15
OS: Ubuntu Linux
For the application I am working with, I need to be able to generate the same code for a 15 minute interval.  However, this library seems to only allow a max time of 5 minutes before it changes the code.
Here is the code I am using
    @Autowired
    private Cache<String, byte[]> otpKeyCache;

    @Override
    public String generate(String username, String emailAddress)
    {
        var otpGenerator = getOtpGenerator(emailAddress);
        var now = Instant.now();
        var otp = otpGenerator.now();

        logger.info(String.format("Time Step is: %d", otpGenerator.getPeriod().getSeconds()));
        logger.info(String.format("Code for 0 seconds: %s", otp));
        logger.info(String.format("Code for 60 seconds: %s", otpGenerator.at(now.plusSeconds(60))));
        logger.info(String.format("Code for 120 seconds: %s", otpGenerator.at(now.plusSeconds(120))));
        logger.info(String.format("Code for 180 seconds: %s", otpGenerator.at(now.plusSeconds(180))));
        logger.info(String.format("Code for 240 seconds: %s", otpGenerator.at(now.plusSeconds(240))));
        logger.info(String.format("Code for 300 seconds: %s", otpGenerator.at(now.plusSeconds(300))));
        logger.info(String.format("Code for 360 seconds: %s", otpGenerator.at(now.plusSeconds(360))));
        logger.info(String.format("Code for 420 seconds: %s", otpGenerator.at(now.plusSeconds(420))));
        logger.info(String.format("Code for 480 seconds: %s", otpGenerator.at(now.plusSeconds(480))));
        logger.info(String.format("Code for 540 seconds: %s", otpGenerator.at(now.plusSeconds(540))));
        logger.info(String.format("Code for 600 seconds: %s", otpGenerator.at(now.plusSeconds(600))));

        return otp;
    }

    private TOTP getOtpGenerator(String emailAddress)
    {
        var secret = getSecret(emailAddress);

        return createOtpGenerator(secret);
    }

    private byte[] getSecret(String emailAddress)
    {
        var secret = otpKeyCache.getIfPresent(emailAddress);

        if (secret == null)
        {
            secret = SecretGenerator.generate();
            otpKeyCache.put(emailAddress, secret);
        }

        return secret;
    }

    private TOTP createOtpGenerator(byte[] secret)
    {
        var builder = new TOTP.Builder(secret);

        return builder.withPasswordLength(6)
                      .withAlgorithm(HMACAlgorithm.SHA512)
                      .withPeriod(Duration.ofMillis(otpDurationMs))
                      .build();
    }

The attached image shows the code in execution.  Please note that this is the first time this method is executed, so it is not getting a "cached" secret.

Hi,
The 15-minute timer does not start when you generate your first code. It is completely dependent on the time you generate a code to know how long it will be valid until the next code is generated.
For each generate method call, a counter is generated from the period with the following code:
System.currentTimeMillis() / period.toMillis();

So, this counter is the same for every 30 seconds (with a period of 30 seconds). This counter with the same secret will always generate the same token. After the 30 second time window is over, the counter will be 1 bigger than the previous. Because it depends on the system time, it is not always the case that when a token generated on 10:00:00 will be invalid after 10:00:30.


update address to curl against

This command did not seem to be working on a mac:
./grpcurl -plaintext -H "Authorization: Bearer ${token}" -authority dev.petstore.com <IP_ADDRESS>:80 test.solo.io.PetStore/ListPets

so i changed the <IP_ADDRESS>:80 to $(glooctl proxy url | cut -c 8-)  and it worked.

Just spoke with Baptiste and he said this is not a problem in the workshop itself. Going to close this PR.

@cmwylie19 I think it would be better to use a delimiter in the cut.
Something like cut -c: -f1


Apply rewrite rule only to certain domain

My app serves up multiple domains.  Is there a way to scope the rewrite to only one of them.
Essentially something that would allow this:
r301 'http://www.domain1.com/something', 'some-other-location'
So http://www.domain1.com/something would redirect, but http://www.domain2.com/something would not.

https://github.com/jtrupiano/rack-rewrite#host should work

@ShaneBoyer this solution doesn't actually seem to work for my case.
I've got:
r301 "/app", "/some-marketing-url", host: "www.domain1.com"
r301 "/app", "/another-marketing-url", host: "www.domain2.com"

The first rule applies.  But the second redirect gets caught up by the first rule.....


NullPointerException thrown when parameter not found

When a parameter does not exist inside a query, a NullPointerException is thrown, with little information. It would be nice if a "ParameterNotFound: paramName" or similar was produced for debugging purposes.
public static void main(String[] args) {
    MysqlDataSource dataSource = new MysqlDataSource();
    dataSource.setUser("cc");
    dataSource.setPassword("password");

    Sql2o sql2o = new Sql2o(dataSource);

    try (Connection con = sql2o.open()) {
        con.createQuery("select * from table where field = :someParam")
           .addParameter("doesntExist", 40);

    }
}

Produces:
Exception in thread "main" java.lang.NullPointerException 	at org.sql2o.Query.addParameterInternal(Query.java:120) 	at org.sql2o.Query.addParameter(Query.java:198) 	at Sql2oTest.main(Sql2oTest.java:22) 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 	at java.lang.reflect.Method.invoke(Method.java:606) 	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Thanks!
P.S. Great framework - we're using it exclusively at my place of work.

Just noticed that this has been addressed in your 1.6.0-SNAPSHOT. Will you be releasing 1.5.5 maintenance that this could be included in?

Hi,
there are no plans for any more maintenance releases. This will have to wait until the 1.6.0 release. Hopefully we will be ready with the 1.6.0 release soon.

duplicate of #149

And why just to throw user friendly exception some like "this parameter doesn't exist,
please correct your spelling " . Many times you don't recognize space or double letters
or j instead g, so null pointer exception is luck of information about error.


Allow to deploy haproxy pod on Admin node, bsc#1062728

Velum to get kubeconfig connects to Dex service on kube-masters nodes.
For multimaster configuration it needs haproxy installed because all Kube-API
domains will be binded to localhost <IP_ADDRESS>

 Bug 1062728 - Downloading the kubectl-config redirects to the kube-master and returns "Bad Request" on the second attempt

@mjura can you rebase your changes to include latest fixes and trigger a new jenkins run?

Rebased, let's wait for CI

passed on 2.0 branch, failing here due to a 3.x change:
    ----------
              ID: docker
        Function: pkg.installed
          Result: False
         Comment: An error was encountered while installing package(s): Zypper command failure: Check Zypper's logs.
         Started: 16:03:40.773339
        Duration: 901.346 ms
         Changes:

PR for the docker issue - https://github.com/kubic-project/salt/pull/268

backport is https://github.com/kubic-project/salt/pull/266


Error when importing lottie

Hello,
I get this error when I try to import lottie, anyone who knows how to fix this?
error message:
'LottiePlayer' is declared but its value is never read.js(6133)
Could not find a declaration file for module '@lottiefiles/svelte-lottie-player'. <EMAIL_ADDRESS>implicitly has an 'any' type.
Try npm i --save-dev @types/lottiefiles__svelte-lottie-player if it exists or add a new declaration (.d.ts) file containing declare module '@lottiefiles/svelte-lottie-player';js(7016)
Thanks in advance !

@michielsarne you can import module dynamically i.e
  let LottiePlayer;

  onMount(async () => {
    const module = await import("@lottiefiles/svelte-lottie-player");
    LottiePlayer = module.LottiePlayer;
  });```


Dynamically built states on startup?

I wrote a pretty awful interface admittedly and spiked some runtime creation of AnimationState into this.  My interface is a bit awful because it's so simple and relies heavily on the outsider (me) but basically It's IStateAdder and must implement an AddStates(AnimationPlayer ap) function.  I spiked it at about line 57 of AnimationPlayer.cs kinda like:
----new code:
IStateAdder[] adders = GetComponents();
if (adders != null && adders.Length > 0)
{
foreach (var adder in adders)
adder.AddStates(this);
}
----your existing code below: I had to create my states before the below loop fired, or else the underlying lists and stuff would be out of sync with the states.
for (var i = 0; i < layers.Length; i++)
layers[i].InitializeSelf(graph);
This way, I can create a component of my own and define how to add states outside of the animator.  OBVIOUSLY, there is a much cleaner approach to be taken here, but I think something like this would be hugely valuable on your API.  My AddStates() implementation basically specifies a hard-coded layer, and wipes all states from that layer to start off.  I then add in a custom number of states as needed.  This allows me to essentially define a series of animation behaviors somewhere else, and the same animator/character prefab/etc. is reusable between scenes and stuff.  In my use case, I'm creating an Idle state, a Blocking state, and n # of attacking states which are just SingleClipState in my use case.
Now that I'm done, I have 4 separate animated behaviors all created at runtime, each can have a different number of attacks and all animations are working great!  Also, if I really wanted to I could do fully randomize an infinite number of behaviors.

I'll get around to making a way to add states at arbitrary times. I think it should look like this;
var state = new SingleClipState(); state.clip = myClip; state.name = "Woo" int layer = 2; animationPlayer.AddState(state, layer) //then you can: animationPlayer.Play("Woo", layer);
The API also needs to allow you to set a state as the layer's default state, and to add entire layers.
The biggest issue is the seperation between methods that needs to be called only internally and methods that you can use. You probably don't ever need access to the state's CreatePlayable, nor the AnimationPlayer's InitializeSelf. Looks like I'll need to start using the internal access modifier more, but figuring out where the line goes between making the API clean and making the API flexible will be interesting. I don't want to be as restrictive as Unity is.

AnimationPlayer.AddState is now implemented. It needs a proper set of examples, but you essentially create any of the AnimationState subclasses through the appropriate Create methods (like SingleClip.Create), and call AddState.
Adding transitions should be implemented at one point, as that has the same issues as adding states with regards to cached information.


Use a pre-ES5 version of Array filtering to avoid expensive defineProperty call

While profiling our Webpack build I noticed roughly 11% of execution time comes from Array.prototype.filter's call to defineProperty, almost all of that filtering comes from applyPluginsParallelBailResult1. Calling MDN's filter polyfill instead removes that overhead.
Results:
without change:
real	5m5.751s
user	5m4.721s
sys	0m4.788s

calling fastFilter:
real	4m43.964s
user	4m42.328s
sys	0m4.669s

Thanks


File uploads on https://staging-azure.civiform.dev/ don't work

Describe the bug
File uploads on our Azure staging instance throw a CORS error.
To Reproduce
Steps to reproduce the behavior:

Go to https://staging-azure.civiform.dev/
Apply to a program with a file upload
Choose a file and click "Upload"
Nothing happens

Access to XMLHttpRequest at 'https://stagingqxzox.blob.core.windows.net/files/...' from origin 'https://staging-azure.civiform.dev' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Expected behavior
File uploads should work
Root cause
Server-side, we generate the parameters used for the client-side JavaScript to use when making a blob upload request to Azure. One of these is setting relevant CORS headers, where we do set an Access-Control-Allow-Origin header (code). We set this to the domain configured as the "base_url" configuration value (code).
This consults the BASE_URL environment variable and defaults to http://localhost:9000 (code). As far as I can tell, we don't set this environment variable anywhere in our Staging terraform config. The closest thing I can find is the custom_hostname property (code). The docs for this property claim that it's used for CORS, but I don't ever see the value being wired up to a BASE_URL environment variable.
I believe this is the reason file uploads aren't working for our Azure staging environment. Based on this, I can't see how they ever would have worked on this instance. Once we have staging probers, it'll be a great way to catch these types of issues sooner.

cc @azizova-leyla

ahh yeah so somewhat interestingly the deploy system sets the BASE_URL via the azure::slot_setting command!

and just checked it is set to https://staging-azure.civiform.dev

This now works. @goldblatt had changed some unrelated settings within the Azure portal. We don't have a good idea what's happening here or what fixed it. We're not going to invest future effort here.

Prioritized as P2 as no entities are using Azure (staging) at the moment.

@lagosr-google fyi, probably related to what you're working on.

Closing this as a duplicate of https://github.com/civiform/civiform/issues/8108


Changes related to generator v5

https://github.com/Kentico/kontent-generators-net/releases/tag/5.0.0-beta2

Looks good. Merged.


Invalid characters in query

In https://docs.microsoft.com/en-us/azure/sql-data-warehouse/resource-classes-for-workload-management#stored-procedure-definition the CTE for "alloc". uses space characters that are not actually spaces, this causes the script to fail.

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

ID: b4d8aad5-9f41-5cce-4688-f0f5fa5ff59a
Version Independent ID: 0ca92d1e-73ad-90f4-4b42-48e6a6dac359
Content: Resource classes for workload management - Azure SQL Data Warehouse
Content Source: articles/sql-data-warehouse/resource-classes-for-workload-management.md
Service: sql-data-warehouse
Sub-service: workload-management
GitHub Login: @ronortloff
Microsoft Alias: rortloff

Hi @potato-enthusiast Thanks for your feedback. We will review and update as appropriate.

@potato-enthusiast We have created the pull request to correct the file. Once approved the changes will be visible.


Failed to push self monitoring time series

I followed the Kubernetes quick start in the readme on a simple cluster, when I check the container status I get a 403 permissions denied error. Any idea what this might be? When I follow the bash instructions and deploy a cloud function it works fine and I'm seeing metrics in Dynatrace, but I have some constraints and have to go via the kubernetes route, I used the same Dynatrace API Token in both cases. Many thanks in advance
kubectl -n dynatrace logs -l app=dynatrace-gcp-function

2020-11-02 17:06:34.795092 [c5410aad] : Finished uploading metric ingest lines to Dynatrace in 1.1920928955078125e-06 s
2020-11-02 17:06:34.795097 [c5410aad] : Pushing self monitoring time series to GCP Monitor...
2020-11-02 17:06:34.889516 [c5410aad] : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/connectivity'
2020-11-02 17:06:34.988816 [c5410aad] : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/ingest_lines'
2020-11-02 17:06:35.086464 [c5410aad] : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/request_count'
2020-11-02 17:06:35.186966 [c5410aad] : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/phase_execution_time'
2020-11-02 17:06:35.285764 [c5410aad] : Failed to push self monitoring time series, error is: 403 => {'error': {'code': 403, 'message': 'Permission monitoring.timeSeries.create denie
d (or the resource may not exist).', 'status': 'PERMISSION_DENIED'}}
2020-11-02 17:06:35.286386 [c5410aad] : Execution took 2.5885870456695557

When I follow the bash instructions and deploy a cloud function it works fine and I'm seeing metrics in Dynatrace, but I have some constraints and have to go the kubernetes route

HI @hom-bahrani , Can you double check if You have granted roles/monitoring.editor to the Service Account.
Some background:
dynatrace-gcp-function tries to register self-monitoring metrics in GCP to help with troubleshooting if there is no data in Dynatrace. 403's You are getting are related to this feature: function does not have permission to create metrics descriptors.
This issue will not stop pushing metrics to Dynatrace, only self-monitoring in Google Operations will not work..

Hi @pawelsiwek many thanks for the quick reply, I gave the dynatrace-gcp-function service account project editor permissions as quick test but I'm still not seeing any self-monitoring in Google Operations or getting any metrics pushed to Dynatrace. Also I double checked the Cloud Function installation again, as before its pushing all the metrics using my Dynatrace tenant URI and API token. I also inspected the container logs in my dynatrace-gcp-function pod running on my cluster and I don't see the nice output that I get at the end of the cloud function installation confirming that all the dashboards have been created for me, is that to be expected?
- Create ["Google Cloud APIs"] dashboard from file [dashboards/api.json]
{"id":"5010d65b-559c-4b7b-baab-367b2a983aa9","name":"Google Cloud APIs"}
- Create ["Google Cloud Function"] dashboard from file [dashboards/cloud_function.json]
{"id":"06e8d1f7-e8fa-4d67-80cc-0615d3f35708","name":"Google Cloud Function"}
- Create ["Google Cloud SQL"] dashboard from file [dashboards/cloudsql_database.json]
{"id":"3487cfc7-8ff0-4b0a-b4fd-dd2da706d400","name":"Google Cloud SQL"}
- Create ["Google Cloud Datastore"] dashboard from file [dashboards/datastore.json]
{"id":"1ae5e77b-399b-4318-a848-cca3b6ea0534","name":"Google Cloud Datastore"}
- Create ["Google Cloud Filestore"] dashboard from file [dashboards/filestore_instance.json]
{"id":"4c0ac430-8bd0-45c9-a70f-c94c9e4392f3","name":"Google Cloud Filestore"}
- Create ["Google Cloud Storage"] dashboard from file [dashboards/gcs_bucket.json]
{"id":"42c606b9-9ace-4083-8b7f-b58892081303","name":"Google Cloud Storage"}
- Create ["Google Cloud HTTPs Load Balancing"] dashboard from file [dashboards/lb_https.json]
{"id":"19bbd395-fcee-4148-91d7-44afdff51710","name":"Google Cloud HTTPs Load Balancing"}
- Create ["Google Cloud TCP Load Balancing"] dashboard from file [dashboards/lb_tcp.json]
{"id":"4ff9840b-fd08-43af-94d3-2b37218b68f4","name":"Google Cloud TCP Load Balancing"}
- Create ["Google Cloud Pub/Sub"] dashboard from file [dashboards/pubsub.json]
{"id":"44bddef7-1cf8-41df-b21c-66f8bf41c282","name":"Google Cloud Pub/Sub"}

Hi, indeed K8S approach is not (currently) importing dashboards to Dynatrace. We will add initContainer to k8s Deployment template that will do the trick.
I observed that sometimes pods logs appears after some time in GKE. Can you verify if container logs are there now?

thanks @pawelsiwek yes you're right the pod logs appear after a few minutes

@hom-bahrani are the metrics flying to Dynatrace or still U have issue?

Hi @pawelsiwek thanks for the update. Unfortunately not! Strangely the error from before for self monitoring metrics has not gone either, even with the roles/monitoring.editor role
2020-11-03 17:08:36.606911 [834eb7af] : Failed to push self monitoring time series, error is: 403 => {'error': {'code': 403, 'message': 'Permission monitoring.timeSeries.create denied (or the resource may not exist).', 'status': 'PERMISSION_DENIED'}}

@hom-bahrani could you please share with us more of the logs?
Please run kubectl -n dynatrace logs --tail=1000 -l app=dynatrace-gcp-function so we will be able to see at least one full run of the worker.

@pgutkowski here are the steps to replicate, logs below
gcloud config set compute/zone us-central1-c

gcloud services enable container.googleapis.com
# Operation "operations/acf.4ba29857-d879-4138-8a48-cb8cdea16bfa" finished successfully.

gcloud container clusters create "demo-cluster" \
  --num-nodes "1" \
  --machine-type "n1-standard-1" \
  --cluster-version "1.16.13-gke.401" \
  --zone "us-central1-c" \
  --no-enable-basic-auth \
  --image-type "COS" \
  --disk-type "pd-standard" \
  --disk-size "100" \
  --enable-stackdriver-kubernetes \
  --enable-ip-alias
# NAME          LOCATION       MASTER_VERSION   MASTER_IP       MACHINE_TYPE   NODE_VERSION     NUM_NODES  STATUS
# demo-cluster  us-central1-c  1.16.13-gke.401  <IP_ADDRESS>  n1-standard-1  1.16.13-gke.401  1          RUNNING

gcloud container clusters get-credentials demo-cluster
# kubeconfig entry generated for demo-cluster.

kubectl create namespace dynatrace
# namespace/dynatrace created

kubectl -n dynatrace create secret generic dynatrace-gcp-function-secret --from-literal="access-key={DYNATRACE_API_TOKEN}" --from-literal="url={DYNATRACE_URL}"
# secret/dynatrace-gcp-function-secret created

gcloud iam service-accounts create dynatrace-gcp-function-sa --display-name "dynatrace-gcp-function-sa"
# Created service account [dynatrace-gcp-function-sa]

gcloud projects add-iam-policy-binding playground-s-11-5f1276bb<EMAIL_ADDRESS>--role=roles/monitoring.editor
gcloud projects add-iam-policy-binding playground-s-11-5f1276bb<EMAIL_ADDRESS>--role=roles/monitoring.viewer
gcloud projects add-iam-policy-binding playground-s-11-5f1276bb<EMAIL_ADDRESS>--role=roles/compute.viewer
gcloud projects add-iam-policy-binding playground-s-11-5f1276bb<EMAIL_ADDRESS>--role=roles/cloudsql.viewer
gcloud projects add-iam-policy-binding playground-s-11-5f1276bb<EMAIL_ADDRESS>--role=roles/cloudfunctions.viewer
gcloud projects add-iam-policy-binding playground-s-11-5f1276bb<EMAIL_ADDRESS>--role=roles/file.viewer
gcloud projects add-iam-policy-binding playground-s-11-5f1276bb<EMAIL_ADDRESS>--role=roles/pubsub.viewer

gcloud services enable cloudapis.googleapis.com monitoring.googleapis.com
# Operation "operations/acf.80d1fa7e-2f31-4ffa-956c-c46c7f7ce759" finished successfully.

wget https://raw.githubusercontent.com/dynatrace-oss/dynatrace-gcp-function/master/k8s/dynatrace-gcp-function.yaml

kubectl apply -f dynatrace-gcp-function.yaml
# serviceaccount/dynatrace-gcp-function-sa created
# configmap/dynatrace-gcp-function-config created
# deployment.apps/dynatrace-gcp-function created

kubectl annotate serviceaccount --namespace dynatrace dynatrace-gcp-function-sa<EMAIL_ADDRESS># serviceaccount/dynatrace-gcp-function-sa annotated

kubectl -n dynatrace logs --tail=1000 -l app=dynatrace-gcp-function

Logs
                    ,,,,,..
                  ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.
               ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
            .,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,     ,,
          ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,    .,,,,
       ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,     ,,,,,,,.
    .,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.    ,,,,,,,,,,,
  ,,,,,,,,,,,,,,,,,......  ......,,,,,,,    .,,,,,,,,,,,,,
,,                                        ,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,                        .,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,                        .,,,,,,,,,,,,,,,,.
,,,,,,,,,,,,,,,,,       Dynatrace        .,,,,,,,,,,,,,,,,.
,,,,,,,,,,,,,,,,, dynatrace-gcp-function .,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,                        .,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,                        ,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,                        ,,,,,,,,,,,,,,,,,,
.,,,,,,,,,,,,,,,                         ,,,,,,,,,,,,,,,,,
.,,,,,,,,,,,,,    .,,,,,,,,,,,,,,,,,,.   ,,,,,,,,,,,,,,,
 ,,,,,,,,,,     ,,,,,,,,,,,,,,,,,,,,,,  .,,,,,,,,,,,,.
 ,,,,,,,     ,,,,,,,,,,,,,,,,,,,,,,,,,  ,,,,,,,,,,,
 ,,,,,    .,,,,,,,,,,,,,,,,,,,,,,,,,,.  ,,,,,,,,
  ,     ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,  ,,,,,,,
     ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,  ,,,,

2020-11-05 10:51:51.343561 : Dynatrace function for Google Cloud Platform monitoring

Running with configured services: api,cloud_function,cloudsql_database,datastore_request,filestore_instance,gcs_bucket,https_lb_rule,internal_http_lb_rule,internal_tcp_lb_rule,internal_udp_lb_rule,tcp_lb_rule,udp_lb_rule,pubsub_snapshot,pubsub_subscription,pubsub_topic,pubsublite_topic_partition
2020-11-05 10:51:51.343596 : Setting up...

2020-11-05 10:51:51.344057 [4b3d1684] : Starting execution
2020-11-05 10:51:53.365444 : Selected services: cloud_function,filestore_instance,pubsub_snapshot,pubsub_subscription,pubsub_topic,pubsublite_topic_partition,cloudsql_database,datastore_request,https_lb_rule,internal_http_lb_rule,internal_tcp_lb_rule,internal_udp_lb_rule,tcp_lb_rule,udp_lb_rule,api,gcs_bucket
2020-11-05 10:51:53.366302 : Trying to use default service account
2020-11-05 10:51:53.466241 : Successfully obtained access token
2020-11-05 10:51:53.509698 : Access to following projects:
2020-11-05 10:51:53.509756 : Fetched GCP data in 2.1696090698242188e-05 s
2020-11-05 10:51:53.509766 : Finished uploading metric ingest lines to Dynatrace in 7.152557373046875e-07 s
2020-11-05 10:51:53.509771 : Pushing self monitoring time series to GCP Monitor...
2020-11-05 10:51:53.610875 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/connectivity'
2020-11-05 10:51:53.710088 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/ingest_lines'
2020-11-05 10:51:53.809946 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/request_count'
2020-11-05 10:51:53.909637 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/phase_execution_time'
2020-11-05 10:51:54.010682 : Failed to push self monitoring time series, error is: 403 => {'error': {'code': 403, 'message': 'Permission monitoring.timeSeries.create denied (or the resource may not exist).', 'status': 'PERMISSION_DENIED'}}
2020-11-05 10:51:54.012354 [4b3d1684] : Execution took 2.6682727336883545

2020-11-05 10:52:51.384452 [6307e2aa] : Starting execution
2020-11-05 10:52:53.347520 : Selected services: cloud_function,filestore_instance,pubsub_snapshot,pubsub_subscription,pubsub_topic,pubsublite_topic_partition,cloudsql_database,datastore_request,https_lb_rule,internal_http_lb_rule,internal_tcp_lb_rule,internal_udp_lb_rule,tcp_lb_rule,udp_lb_rule,api,gcs_bucket
2020-11-05 10:52:53.348212 : Trying to use default service account
2020-11-05 10:52:53.378355 : Successfully obtained access token
2020-11-05 10:52:53.409606 : Access to following projects:
2020-11-05 10:52:53.409653 : Fetched GCP data in 1.430511474609375e-05 s
2020-11-05 10:52:53.409663 : Finished uploading metric ingest lines to Dynatrace in 7.152557373046875e-07 s
2020-11-05 10:52:53.409668 : Pushing self monitoring time series to GCP Monitor...
2020-11-05 10:52:53.511596 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/connectivity'
2020-11-05 10:52:53.611293 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/ingest_lines'
2020-11-05 10:52:53.710174 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/request_count'
2020-11-05 10:52:53.809431 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/phase_execution_time'
2020-11-05 10:52:53.911759 : Failed to push self monitoring time series, error is: 403 => {'error': {'code': 403, 'message': 'Permission monitoring.timeSeries.create denied (or the resource may not exist).', 'status': 'PERMISSION_DENIED'}}
2020-11-05 10:52:53.912359 [6307e2aa] : Execution took 2.527869701385498

2020-11-05 10:53:51.427242 [49fb8e8d] : Starting execution
2020-11-05 10:53:53.428786 : Selected services: cloud_function,filestore_instance,pubsub_snapshot,pubsub_subscription,pubsub_topic,pubsublite_topic_partition,cloudsql_database,datastore_request,https_lb_rule,internal_http_lb_rule,internal_tcp_lb_rule,internal_udp_lb_rule,tcp_lb_rule,udp_lb_rule,api,gcs_bucket
2020-11-05 10:53:53.429565 : Trying to use default service account
2020-11-05 10:53:53.457597 : Successfully obtained access token
2020-11-05 10:53:53.486392 : Access to following projects:
2020-11-05 10:53:53.486441 : Fetched GCP data in 1.2874603271484375e-05 s
2020-11-05 10:53:53.486451 : Finished uploading metric ingest lines to Dynatrace in 7.152557373046875e-07 s
2020-11-05 10:53:53.486456 : Pushing self monitoring time series to GCP Monitor...
2020-11-05 10:53:53.610230 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/connectivity'
2020-11-05 10:53:53.712024 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/ingest_lines'
2020-11-05 10:53:53.811439 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/request_count'
2020-11-05 10:53:53.910601 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/phase_execution_time'
2020-11-05 10:53:54.012138 : Failed to push self monitoring time series, error is: 403 => {'error': {'code': 403, 'message': 'Permission monitoring.timeSeries.create denied (or the resource may not exist).', 'status': 'PERMISSION_DENIED'}}
2020-11-05 10:53:54.012749 [49fb8e8d] : Execution took 2.5854671001434326

2020-11-05 10:54:51.483009 [e216dd12] : Starting execution
2020-11-05 10:54:53.460601 : Selected services: cloud_function,filestore_instance,pubsub_snapshot,pubsub_subscription,pubsub_topic,pubsublite_topic_partition,cloudsql_database,datastore_request,https_lb_rule,internal_http_lb_rule,internal_tcp_lb_rule,internal_udp_lb_rule,tcp_lb_rule,udp_lb_rule,api,gcs_bucket
2020-11-05 10:54:53.461252 : Trying to use default service account
2020-11-05 10:54:53.488429 : Successfully obtained access token
2020-11-05 10:54:53.515738 : Access to following projects:
2020-11-05 10:54:53.515785 : Fetched GCP data in 1.1920928955078125e-05 s
2020-11-05 10:54:53.515796 : Finished uploading metric ingest lines to Dynatrace in 7.152557373046875e-07 s
2020-11-05 10:54:53.515800 : Pushing self monitoring time series to GCP Monitor...
2020-11-05 10:54:53.609756 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/connectivity'
2020-11-05 10:54:53.712393 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/ingest_lines'
2020-11-05 10:54:53.812488 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/request_count'
2020-11-05 10:54:53.910173 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/phase_execution_time'
2020-11-05 10:54:54.010861 : Failed to push self monitoring time series, error is: 403 => {'error': {'code': 403, 'message': 'Permission monitoring.timeSeries.create denied (or the resource may not exist).', 'status': 'PERMISSION_DENIED'}}
2020-11-05 10:54:54.011413 [e216dd12] : Execution took 2.5283656120300293

2020-11-05 10:55:51.540663 [fadc1eee] : Starting execution
2020-11-05 10:55:53.542299 : Selected services: cloud_function,filestore_instance,pubsub_snapshot,pubsub_subscription,pubsub_topic,pubsublite_topic_partition,cloudsql_database,datastore_request,https_lb_rule,internal_http_lb_rule,internal_tcp_lb_rule,internal_udp_lb_rule,tcp_lb_rule,udp_lb_rule,api,gcs_bucket
2020-11-05 10:55:53.543034 : Trying to use default service account
2020-11-05 10:55:53.565867 : Successfully obtained access token
2020-11-05 10:55:53.596873 : Access to following projects:
2020-11-05 10:55:53.596949 : Fetched GCP data in 1.6689300537109375e-05 s
2020-11-05 10:55:53.596960 : Finished uploading metric ingest lines to Dynatrace in 7.152557373046875e-07 s
2020-11-05 10:55:53.596965 : Pushing self monitoring time series to GCP Monitor...
2020-11-05 10:55:53.710461 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/connectivity'
2020-11-05 10:55:53.810138 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/ingest_lines'
2020-11-05 10:55:53.911425 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/request_count'
2020-11-05 10:55:54.011066 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/phase_execution_time'
2020-11-05 10:55:54.110437 : Failed to push self monitoring time series, error is: 403 => {'error': {'code': 403, 'message': 'Permission monitoring.timeSeries.create denied (or the resource may not exist).', 'status': 'PERMISSION_DENIED'}}
2020-11-05 10:55:54.111077 [fadc1eee] : Execution took 2.5695698261260986

2020-11-05 10:56:51.596257 [928891e2] : Starting execution
2020-11-05 10:56:53.582624 : Selected services: cloud_function,filestore_instance,pubsub_snapshot,pubsub_subscription,pubsub_topic,pubsublite_topic_partition,cloudsql_database,datastore_request,https_lb_rule,internal_http_lb_rule,internal_tcp_lb_rule,internal_udp_lb_rule,tcp_lb_rule,udp_lb_rule,api,gcs_bucket
2020-11-05 10:56:53.584283 : Trying to use default service account
2020-11-05 10:56:53.623335 : Successfully obtained access token
2020-11-05 10:56:53.665620 : Access to following projects:
2020-11-05 10:56:53.665667 : Fetched GCP data in 1.430511474609375e-05 s
2020-11-05 10:56:53.665678 : Finished uploading metric ingest lines to Dynatrace in 7.152557373046875e-07 s
2020-11-05 10:56:53.665683 : Pushing self monitoring time series to GCP Monitor...
2020-11-05 10:56:53.814676 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/connectivity'
2020-11-05 10:56:53.910986 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/ingest_lines'
2020-11-05 10:56:54.009634 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/request_count'
2020-11-05 10:56:54.109626 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/phase_execution_time'
2020-11-05 10:56:54.208556 : Failed to push self monitoring time series, error is: 403 => {'error': {'code': 403, 'message': 'Permission monitoring.timeSeries.create denied (or the resource may not exist).', 'status': 'PERMISSION_DENIED'}}
2020-11-05 10:56:54.209122 [928891e2] : Execution took 2.612828493118286

2020-11-05 10:57:51.648153 [7b2516b1] : Starting execution
2020-11-05 10:57:53.636201 : Selected services: cloud_function,filestore_instance,pubsub_snapshot,pubsub_subscription,pubsub_topic,pubsublite_topic_partition,cloudsql_database,datastore_request,https_lb_rule,internal_http_lb_rule,internal_tcp_lb_rule,internal_udp_lb_rule,tcp_lb_rule,udp_lb_rule,api,gcs_bucket
2020-11-05 10:57:53.637040 : Trying to use default service account
2020-11-05 10:57:53.684843 : Successfully obtained access token
2020-11-05 10:57:53.729284 : Access to following projects:
2020-11-05 10:57:53.729336 : Fetched GCP data in 1.52587890625e-05 s
2020-11-05 10:57:53.729347 : Finished uploading metric ingest lines to Dynatrace in 7.152557373046875e-07 s
2020-11-05 10:57:53.729352 : Pushing self monitoring time series to GCP Monitor...
2020-11-05 10:57:53.811521 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/connectivity'
2020-11-05 10:57:53.907834 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/ingest_lines'
2020-11-05 10:57:54.008805 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/request_count'
2020-11-05 10:57:54.108301 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/phase_execution_time'
2020-11-05 10:57:54.209422 : Failed to push self monitoring time series, error is: 403 => {'error': {'code': 403, 'message': 'Permission monitoring.timeSeries.create denied (or the resource may not exist).', 'status': 'PERMISSION_DENIED'}}
2020-11-05 10:57:54.210007 [7b2516b1] : Execution took 2.5618138313293457

2020-11-05 10:58:51.694859 [a8dac70d] : Starting execution
2020-11-05 10:58:53.650246 : Selected services: cloud_function,filestore_instance,pubsub_snapshot,pubsub_subscription,pubsub_topic,pubsublite_topic_partition,cloudsql_database,datastore_request,https_lb_rule,internal_http_lb_rule,internal_tcp_lb_rule,internal_udp_lb_rule,tcp_lb_rule,udp_lb_rule,api,gcs_bucket
2020-11-05 10:58:53.650997 : Trying to use default service account
2020-11-05 10:58:53.686948 : Successfully obtained access token
2020-11-05 10:58:53.729447 : Access to following projects:
2020-11-05 10:58:53.729497 : Fetched GCP data in 1.430511474609375e-05 s
2020-11-05 10:58:53.729507 : Finished uploading metric ingest lines to Dynatrace in 7.152557373046875e-07 s
2020-11-05 10:58:53.729511 : Pushing self monitoring time series to GCP Monitor...
2020-11-05 10:58:53.809539 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/connectivity'
2020-11-05 10:58:53.909867 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/ingest_lines'
2020-11-05 10:58:54.008558 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/request_count'
2020-11-05 10:58:54.106655 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/phase_execution_time'
2020-11-05 10:58:54.208519 : Failed to push self monitoring time series, error is: 403 => {'error': {'code': 403, 'message': 'Permission monitoring.timeSeries.create denied (or the resource may not exist).', 'status': 'PERMISSION_DENIED'}}
2020-11-05 10:58:54.209149 [a8dac70d] : Execution took 2.5142529010772705

2020-11-05 10:59:51.739974 [7d10f986] : Starting execution
2020-11-05 10:59:53.733112 : Selected services: cloud_function,filestore_instance,pubsub_snapshot,pubsub_subscription,pubsub_topic,pubsublite_topic_partition,cloudsql_database,datastore_request,https_lb_rule,internal_http_lb_rule,internal_tcp_lb_rule,internal_udp_lb_rule,tcp_lb_rule,udp_lb_rule,api,gcs_bucket
2020-11-05 10:59:53.733842 : Trying to use default service account
2020-11-05 10:59:53.769470 : Successfully obtained access token
2020-11-05 10:59:53.812272 : Access to following projects:
2020-11-05 10:59:53.812319 : Fetched GCP data in 1.2636184692382812e-05 s
2020-11-05 10:59:53.812330 : Finished uploading metric ingest lines to Dynatrace in 9.5367431640625e-07 s
2020-11-05 10:59:53.812341 : Pushing self monitoring time series to GCP Monitor...
2020-11-05 10:59:53.910398 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/connectivity'
2020-11-05 10:59:54.009044 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/ingest_lines'
2020-11-05 10:59:54.106608 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/request_count'
2020-11-05 10:59:54.207939 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/phase_execution_time'
2020-11-05 10:59:54.310609 : Failed to push self monitoring time series, error is: 403 => {'error': {'code': 403, 'message': 'Permission monitoring.timeSeries.create denied (or the resource may not exist).', 'status': 'PERMISSION_DENIED'}}
2020-11-05 10:59:54.311160 [7d10f986] : Execution took 2.5711495876312256

2020-11-05 11:00:51.799187 [346eb534] : Starting execution
2020-11-05 11:00:53.766890 : Selected services: cloud_function,filestore_instance,pubsub_snapshot,pubsub_subscription,pubsub_topic,pubsublite_topic_partition,cloudsql_database,datastore_request,https_lb_rule,internal_http_lb_rule,internal_tcp_lb_rule,internal_udp_lb_rule,tcp_lb_rule,udp_lb_rule,api,gcs_bucket
2020-11-05 11:00:53.768238 : Trying to use default service account
2020-11-05 11:00:53.821448 : Successfully obtained access token
2020-11-05 11:00:53.851242 : Access to following projects:
2020-11-05 11:00:53.851292 : Fetched GCP data in 1.4781951904296875e-05 s
2020-11-05 11:00:53.851303 : Finished uploading metric ingest lines to Dynatrace in 4.76837158203125e-07 s
2020-11-05 11:00:53.851308 : Pushing self monitoring time series to GCP Monitor...
2020-11-05 11:00:54.006780 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/connectivity'
2020-11-05 11:00:54.104803 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/ingest_lines'
2020-11-05 11:00:54.204243 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/request_count'
2020-11-05 11:00:54.307002 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/phase_execution_time'
2020-11-05 11:00:54.407122 : Failed to push self monitoring time series, error is: 403 => {'error': {'code': 403, 'message': 'Permission monitoring.timeSeries.create denied (or the resource may not exist).', 'status': 'PERMISSION_DENIED'}}
2020-11-05 11:00:54.407632 [346eb534] : Execution took 2.6084084510803223

2020-11-05 11:01:51.846118 [8b033f09] : Starting execution
2020-11-05 11:01:53.867604 : Selected services: cloud_function,filestore_instance,pubsub_snapshot,pubsub_subscription,pubsub_topic,pubsublite_topic_partition,cloudsql_database,datastore_request,https_lb_rule,internal_http_lb_rule,internal_tcp_lb_rule,internal_udp_lb_rule,tcp_lb_rule,udp_lb_rule,api,gcs_bucket
2020-11-05 11:01:53.868370 : Trying to use default service account
2020-11-05 11:01:53.961215 : Successfully obtained access token
2020-11-05 11:01:53.996120 : Access to following projects:
2020-11-05 11:01:53.996173 : Fetched GCP data in 1.430511474609375e-05 s
2020-11-05 11:01:53.996185 : Finished uploading metric ingest lines to Dynatrace in 9.5367431640625e-07 s
2020-11-05 11:01:53.996190 : Pushing self monitoring time series to GCP Monitor...
2020-11-05 11:01:54.105673 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/connectivity'
2020-11-05 11:01:54.206583 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/ingest_lines'
2020-11-05 11:01:54.305989 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/request_count'
2020-11-05 11:01:54.405251 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/phase_execution_time'
2020-11-05 11:01:54.506197 : Failed to push self monitoring time series, error is: 403 => {'error': {'code': 403, 'message': 'Permission monitoring.timeSeries.create denied (or the resource may not exist).', 'status': 'PERMISSION_DENIED'}}
2020-11-05 11:01:54.506753 [8b033f09] : Execution took 2.660597562789917

2020-11-05 11:02:51.904054 [5fb854d3] : Starting execution
2020-11-05 11:02:53.872840 : Selected services: cloud_function,filestore_instance,pubsub_snapshot,pubsub_subscription,pubsub_topic,pubsublite_topic_partition,cloudsql_database,datastore_request,https_lb_rule,internal_http_lb_rule,internal_tcp_lb_rule,internal_udp_lb_rule,tcp_lb_rule,udp_lb_rule,api,gcs_bucket
2020-11-05 11:02:53.873651 : Trying to use default service account
2020-11-05 11:02:53.908137 : Successfully obtained access token
2020-11-05 11:02:53.977059 : Access to following projects:
2020-11-05 11:02:53.977109 : Fetched GCP data in 1.4543533325195312e-05 s
2020-11-05 11:02:53.977119 : Finished uploading metric ingest lines to Dynatrace in 4.76837158203125e-07 s
2020-11-05 11:02:53.977124 : Pushing self monitoring time series to GCP Monitor...
2020-11-05 11:02:54.104620 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/connectivity'
2020-11-05 11:02:54.207008 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/ingest_lines'
2020-11-05 11:02:54.313285 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/request_count'
2020-11-05 11:02:54.408603 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/phase_execution_time'
2020-11-05 11:02:54.506519 : Failed to push self monitoring time series, error is: 403 => {'error': {'code': 403, 'message': 'Permission monitoring.timeSeries.create denied (or the resource may not exist).', 'status': 'PERMISSION_DENIED'}}
2020-11-05 11:02:54.507151 [5fb854d3] : Execution took 2.6030521392822266

2020-11-05 11:03:51.961386 [95489ede] : Starting execution
2020-11-05 11:03:53.947687 : Selected services: cloud_function,filestore_instance,pubsub_snapshot,pubsub_subscription,pubsub_topic,pubsublite_topic_partition,cloudsql_database,datastore_request,https_lb_rule,internal_http_lb_rule,internal_tcp_lb_rule,internal_udp_lb_rule,tcp_lb_rule,udp_lb_rule,api,gcs_bucket
2020-11-05 11:03:53.948378 : Trying to use default service account
2020-11-05 11:03:54.012341 : Successfully obtained access token
2020-11-05 11:03:54.054952 : Access to following projects:
2020-11-05 11:03:54.055008 : Fetched GCP data in 1.5735626220703125e-05 s
2020-11-05 11:03:54.055021 : Finished uploading metric ingest lines to Dynatrace in 7.152557373046875e-07 s
2020-11-05 11:03:54.055025 : Pushing self monitoring time series to GCP Monitor...
2020-11-05 11:03:54.208709 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/connectivity'
2020-11-05 11:03:54.308795 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/ingest_lines'
2020-11-05 11:03:54.408472 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/request_count'
2020-11-05 11:03:54.508986 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/phase_execution_time'
2020-11-05 11:03:54.609789 : Failed to push self monitoring time series, error is: 403 => {'error': {'code': 403, 'message': 'Permission monitoring.timeSeries.create denied (or the resource may not exist).', 'status': 'PERMISSION_DENIED'}}
2020-11-05 11:03:54.610340 [95489ede] : Execution took 2.648916006088257

2020-11-05 11:04:52.019574 [c85581dc] : Starting execution
2020-11-05 11:04:54.049185 : Selected services: cloud_function,filestore_instance,pubsub_snapshot,pubsub_subscription,pubsub_topic,pubsublite_topic_partition,cloudsql_database,datastore_request,https_lb_rule,internal_http_lb_rule,internal_tcp_lb_rule,internal_udp_lb_rule,tcp_lb_rule,udp_lb_rule,api,gcs_bucket
2020-11-05 11:04:54.049992 : Trying to use default service account
2020-11-05 11:04:54.122497 : Successfully obtained access token
2020-11-05 11:04:54.159144 : Access to following projects:
2020-11-05 11:04:54.159194 : Fetched GCP data in 1.4781951904296875e-05 s
2020-11-05 11:04:54.159203 : Finished uploading metric ingest lines to Dynatrace in 7.152557373046875e-07 s
2020-11-05 11:04:54.159208 : Pushing self monitoring time series to GCP Monitor...
2020-11-05 11:04:54.307043 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/connectivity'
2020-11-05 11:04:54.409465 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/ingest_lines'
2020-11-05 11:04:54.508119 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/request_count'
2020-11-05 11:04:54.600719 : Creating missing metric descriptor for 'custom.googleapis.com/dynatrace/phase_execution_time'
2020-11-05 11:04:54.707411 : Failed to push self monitoring time series, error is: 403 => {'error': {'code': 403, 'message': 'Permission monitoring.timeSeries.create denied (or the resource may not exist).', 'status': 'PERMISSION_DENIED'}}
2020-11-05 11:04:54.707980 [c85581dc] : Execution took 2.688345432281494

2020-11-05 11:05:52.069248 [d55f7e0f] : Starting execution
2020-11-05 11:05:54.052835 : Selected services: cloud_function,filestore_instance,pubsub_snapshot,pubsub_subscription,pubsub_topic,pubsublite_topic_partition,cloudsql_database,datastore_request,https_lb_rule,internal_http_lb_rule,internal_tcp_lb_rule,internal_udp_lb_rule,tcp_lb_rule,udp_lb_rule,api,gcs_bucket
2020-11-05 11:05:54.053524 : Trying to use default service account
2020-11-05 11:05:54.099219 : Successfully obtained access token

@hom-bahrani thank you for the steps to replicate and logs. Your cluster setup misses argument to enable the workload identity, see https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity#enable_on_cluster. I'd recommend to remove the cluster and create a fresh one.
We'll update the README to communicate clearly that Workload Identity is required for k8s deployment.

@pgutkowski perfect, thanks so much


Tag knowledge skill rolls with dubious knowledge

QOL request: if a character rolls a knowledge skill and has the dubious knowledge feat, tag the roll message with "Dubious Knowledge" just to give the GMs a passive reminder
Maybe also worth making it conditional on the roll being a (non-crit) failure?

This wouldn't be correct, sorry.

More accurately, this is already done, but it must specifically be a roll for recall knowledge. Some modules expose such a roll (workbench has a basic actions macro that does such a thing), but also so do the roll links of some adventures.
What we're actually missing is a way for NPCs to dump RK in the chat.


No video load Progress Indication

IS there any way  that show video load progress?

I have the same question :)

You can google about AVPlayerItem loadedTimeRanges


[GUI-v1][Socket] In a short time, the GUI stops consuming realtime data in the device details

when the map is not selected, the line graphs with the speed and pedal data seem to stop working
And when  the page is refresh, get the data from the history everything works again and the data all appear.

How is the data in history:

Version v0.5.2


Extend the grammar a bit (list comprehensions and trailing commas)

Just a few tweaks to accept more things that OpenSCAD 2021.01 accepts.
Trailing commas
For some reason, OpenSCAD allows trailing commas in lists and function/module declarations (even with zero elements/parameters!) but not in function/module calls.
List comprehensions
The brackets are not actually an inherent part of list comprehensions; there can be multiple comprehensions within one list or nested for clauses. Accordingly, list comprehensions should instead be treated as list cells rather than top-level expressions.
Examples:

[for (i = [1, 2]) i, for (j = [3, 4]) j] == [1, 2, 3, 4]
[for (i = [1, 2]) for (j = [3, 4]) i * j] == [3, 4, 6, 8]

The addition of a precedence on if_clause is necessary to satisfy the grammar generator; I must confess that I'm not sure why or whether it should be right or left.

p.s. Thanks for putting this grammar together! I was just about to embark on doing the same thing myself when I came across this repo, already ready to go. It's been very helpful!

Awesome, thanks for the PR! Before merging I'm going to test it on my own machine and look into that if_clause precedence issue. The choice between left or right can be really important so I wanna make sure we get it ~right~ correct.
If you don't mind me asking, what are you using this for? I ask because I've yet to get syntax highlighting working, and I've actually got a standing issue (https://github.com/tree-sitter/tree-sitter/issues/1324) on the tree-sitter main repo for it. If you need syntax highlighting, it would be great if you gave it a try and let me know how it goes.

Looks like your choice of right-precedence was correct. The precedence is needed to resolve this situation:
if_for_ifelse = [for (x = 0) if (x < 0) for (y = 2) if (y == 2) y else x];

In the above example, which if clause is the else associated with? After some testing with OpenSCAD, it appears the answer is the right-most if clause, hence right precedence is the correct choice. You can essentially read the above example as
if_for_ifelse = [for (x = 0) if (x < 0) for (y = 2) (if (y == 2) y else x)];

However, this does reveal another problem. What if we wanted that else to be associated with the left-most if clause? OpenSCAD allows you to solve that problem by grouping if clauses using parentheses:
if_for_ifelse = [for (x = 0) if (x < 0) for (y = 2) (if (y == 2) y) else x];

The parser currently doesn't handle this syntax, and I'm sure there are other corner cases I haven't thought of. I'm gonna merge this PR anyway and create issues to track the lack of grouping support.

Thanks for the quick response and thorough verification! Yeah, I feel like that line with the parenthesized if is getting into pretty obscure bits of the language.
I'm working on an LSP server for OpenSCAD. Syntax highlighting could come into play (there's a feature for clients to take highlighting information from the server); I wasn't planning for it to be a high priority, though I could try it out at some point if that would be helpful.
I'm just about ready to release the initial version of my thing, but I wanted to ask first (I guess this would most properly be a separate issue, but while we're here...): could you update Cargo.toml to allow tree-sitter 0.20 (and publish a new version to crates.io)? I've been using 0.20 locally for a useful new method that it provides (TreeCursor::goto_first_child_for_byte).

I will absolutely bump to 0.20 and make a new release. The only reason I had it at 0.19.5 was because 0.20 wasn't released on crates.io yet.
It's great to hear that you're making a language server. That was actually my initial reason for making this parser before life got in the way and I had to move on to other things. I look forward to seeing you publish!

I've just published an updated version using tree-sitter 0.20.
As for syntax highlighting, I was able to clear the blocker I had before, but now I'm encountering a bug in tree-sitter that's preventing highlighting from working. Apparently there's a fix in master, but there's no rush for you to go and test it.

Great, thanks for the update! I've published the server at https://github.com/dzhu/openscad-language-server; give it a spin when you get a chance. And I'll probably be back here with another issue or PR before too long. :slightly_smiling_face:


[Question] Should we keep ViewPagerAndroid or use only ScrollView for both Android and iOS

I wonder if it is necessary to keep ViewPagerAndroid for Android users.
Any opinion about that ?

It appears there are several bugs with ViewPagerAndroid component. Also, it is not possible to scroll vertically with it.

If doing that would add the vertical scrolling abillity to android then I say yes - use scrollview insteas of ViewPager

And bugs like this one: https://github.com/leecade/react-native-swiper/issues/574

An attempt to fix the Android vertical swiper gets close to a fix, but with some problem: #643.  It does appear that the ScrollView for android has some fixes that are almost merged into the most recent react-native (https://github.com/facebook/react-native/pull/10999, https://github.com/facebook/react-native/issues/16257).
I would wait until that happens and ScrollView fixes get incorporated into Expo before doing the unification.  Meanwhile, move forward with #643 once some minor issues are cleaned up with it.

@arribbar
So I actually have a very specific use case where switching to ScrollView from ViewPagerAndroid fixed an issue for an app my team and I at work are developing.
It's a survey app where the survey component uses this package's Swiper component to render a dynamic number of SurveyQuestion components. The main issue is when one of these child components is a multiple choice question (renders a scrollView of choices, and tapping one of these choices may cause the data for the Survey swiper to include more or less questions, hence the dynamic aspect).
If in one of these child components you scroll to the bottom of the choices and update the swiper state, for some reason when the number of views changes to reflect the new questions the entire subtree of child components is unmounted and re-mounted, like in reconciliation when the root element changes.
However, changing ViewPagerAndroid to ScrollView just like the iOS implementation fixed this behavior. I don't quite understand why ViewPagerAndroid caused this, but if anyone knows more about it please jump in 😄

hi @SSTPIERRE2 , can you provide the code samples you're mentioning? Thanks!


failure in package:dart_style using a .packages file

There seems to be a new failure in the dart_style package, when it is tested using the --no-package-symlinks option to pub.
https://github.com/dart-lang/dart_style/issues/521

Note that the option was renamed to --no-package-dir in https://github.com/dart-lang/sdk/commit/38dccc88ffa9ab190154a1f40b36d5ab0d3be728

Marking this as P1 -- we are hoping to make this the default configuration in 1.20.

Fixed in CL https://codereview.chromium.org/2252013002/

Fixed


Relax key length for real world where one cannot chose.

Hi, I've integrated totp-rs in pass-fu. Nice and easy. Thanks. Unfortunately I have a system with short keys I have to deal with. This was the minimal change to make it work. The authenticator extension allows it too.
Perhaps you'd like to make it configurable or gate it with a feature flag or just generate a warning, that'd all be fine with me.
Btw. I did not study much, but glancing over the RFC, I read that the key size should match the HMAC. Haven't found a fixed bit size. Unless indeed the HMAC we use is 16 :)

Hi!
Sorry for the late response. This requirement comes from https://www.rfc-editor.org/rfc/rfc4226#section-4 R6.
R6 - The algorithm MUST use a strong shared secret.  The length of
     the shared secret MUST be at least 128 bits.  This document
     RECOMMENDs a shared secret length of 160 bits.```


Show rules for specific list level

Description
From the following example I reckon that lists don't have enough structure exposed to effectively match different levels in show rules, or even to match just the top level and programmatically find the target level from there.
A depth count attribute will make show rule matching trivial, while a parent reference will make it at least possible without ambiguities.
#show list: it => [#it.fields() #it]
- First item on level 1
  - second item on level 2
  - third item on level 2

Use Case
Motivated by https://discord.com/channels/1054443721975922748/1088371919725793360/1269790642704351262

Perhaps relevant https://github.com/typst/typst/issues/1926

Duplicate of https://github.com/typst/typst/issues/4520


NuxtJs: Runtime public config (or runtime private config)

Hi.
I noticed this repo hasn't been updated in a while, and it could benefit from quite a lot of new features/enhancements. Are you planning to maintain this repo or what's the plan going forward?
One issue that I'm facing right now, is trying to inject variables at runtime config (rather than build), in a NuxtJS installation with ssr: false and target: server. (especially the pusher key, e.g. key: process.env.PUSHER_APP_KEY)
Either I'm not doing something right, or, from the looks of it, this is not supported.
Any hints would be really appreciated.

Hi @popovicidinu
I'm updating now, sorry for the delay
See #42

I tried it but does not work in production.
In $echo.option.host, its still use the built time host.

@ricardogobbosouza i can't seem to find this change in the source anymore? Any idea what happened?

https://github.com/nuxt-community/laravel-echo-module/pull/75


Rafactor cache - Support custom memory cache and disk cache

New Pull Request Checklist

[x] I have read and understood the CONTRIBUTING guide

[x] I have read the Documentation

[x] I have searched for a similar pull request in the project and found none

[x] I have updated this branch with the latest master to avoid conflicts (via merge from master or rebase)

[x] I have added the required tests to prove the fix/feature I am adding

[x] I have updated the documentation (if necessary)

[x] I have run the tests and they pass

[x] I have run the lint and it passes (pod lib lint)

This merge request fixes / reffers to the following issues: #1270 #1355 #1912
Pull Request Description
Reason
Custom memory and disk cache
Our SDImageCache works for most cases. But it's tied to UIImage and it's not customable at all. For most question, some people want to implement a LRU-cache algorithm for memory cache and disk cache for performance. However, we can not easily do this unless we open the memory cache and disk cache impl to user. This need we to introduce the protobol and let user provide their desired cache such as YYCache by writing a category to conform the protocol. This can make our cache more scalable.
Cache Paths API
And also, some of current API like cache paths is really counter-intuitive.  It's looks like a internal API but should not publish to user.
Why cause this it's may because of the historic issue that we introduce one feature to let user customize the read only cache path. So we need to know both the folder and cache file name after MD5 hash. However, this should be refactor using a more common design.
Design
Custom memory and disk cache
To support custom memory cache and disk cache, we should introduce two abstract protocol and separate the current implementation into two level. So that our SDImageCache can just like a manager to control the memory cache and disk cache operations. This can also make the code more clean to maintain.
-------- Image Cache --------
               |
Memory Cache ----- Disk Cache

For the protocol define, we could just keep a abstract of basic operation, including: check, fetch, store, remove, removeAll, trim(For disk cache only, remove the out-dated files). This is enough for basic usage. All the current information in SDImageCacheConfig can also be passed to the implementation (Some really implement-detailed config are optional).
Cache Paths API
And if we have custom disk cache. Current cache paths API may become a problem because we should not put something like cachePathForKey:inPath to the protocol. It's more like a internal tool function and it let user to provide a arbitrary parent directory. Which may confuse the user to need to write the custom disk cache.
So I think, for cache paths API. We just need to keep the one cachePathForKey:. Which can return the full file path for the cached data. It's simple and enough. For example, If you need the file name, just using NSString's API lastPathComponent .
For that current API of addReadOnlyCachePath:, which is used to allow custom cache path if the disk cache missed. This design may works, but not good at all. User have to add  a list of string and have no choice to rename their bundle resource to the hash function we used. This's is a little frustrating. What if user do not want to rename the images with MD5 hash and just want to use the cache? This problem can also trigger issue if thier custom disk cache's hash function is not the same as the built-in one(We use MD5, but not all user use).
To solve this is really simple, we provide a block to allow custom remapping from the key to the cache path. User can return the actual file path for the key after the query failed. And it's also allow custom disk cache work with this feature.
Implementation
Custom memory and disk cache
We introduce two protocol,  SDMemoryCache and SDDiskCache. And provide the built-in implementation class conform these two protocol. The actually implementation code is just copied from the original SDImageCache class :)
See the diff code for more detail information about the protocol define.
Cache Paths API
We use a custom block to allow user provide the cache path if query failed.
typedef NSString * _Nullable (^SDImageCacheAdditionalCachePathBlock)(NSString * _Nullable key);
/**
 *  The additional disk cache path to check if the query from disk cache not exist;
 *  The `key` param is the image cache key. You should return the specify file path to load image from disk. You can use built-in hash method(See `cacheFileNameForKey:` in SDDiskCache) or your own way to provide mapping between cache key and file path.
 *  Useful if you want to bundle pre-loaded images with your app
 */
@property (nonatomic, copy, nullable) SDImageCacheAdditionalCachePathBlock additionalCachePathBlock;

Extra change
One extra change is that I mentioned in #1898. Through the error information is useful for some people. But after I research acrossing many library including YYCache/YYImage/AFNetworking/Kingfisher, they do not have this design. Because cache is used for something may be evict and removed at any time. You should check using something like exist method instead of handler error. But it's can be done even if we revert that change. We keep the support for custom NSFileManager. Use the delegate method to get some file level error. For the error generated by -[NSData writeToURL:], I think we can only use POSIX errno. Through it's hard to use, but since this use case is really rare, I think's the pain(API-break) is more than the gain.
And also, if you really need the error information for metric or logging. Consider use custom disk cache class instead. You can implement that inside the class (You can even subclass our SDDiskCache and override some function). So I think this PR can solve that problem as well.

@skyline75489 No. The SDImageCache.defaultCacheConfig itself is a global static config object. Merans if you modify that, all the default config will be affected.
However, for each cache instance which create from config object. You don't want that cache's behavior changed by further modification on global cache object, right ? Suppose these code:
		SDImageCacheConfig *myConfig = [SDImageCacheConfig new];
		myConfig.diskCacheClass = [MyDiskCache class];
		myConfig.shouldCacheImagesInMemory = NO;
		SDImageCacheConfig.defaultCacheConfig = myConfig;
		SDImageCache *cache1 = [SDImageCache sharedCache];
		// Global shared cache
		// Except cache1.diskCacheClass == MyDiskCache, cache1.shouldCacheImagesInMemory = NO

		myConfig.diskCacheClass = nil; // back to `SDDiskCache`
		myConfig.shouldCacheImagesInMemory = YES;
		SDImageCache *cache2 = [[SDImageCache alloc] initWithNamespace:@"cache2" diskCacheDirectory:path config:config];
		// stand-alone cache
		// Except cache2.diskCacheClass == SDDiskCache, cache2.shouldCacheImagesInMemory = YES

		// Now, what about shared cache ? It should not be affect by `myConfig` changes, or it must faced with non-sync issue
		// So this is why we use copy
		expect(cache1.config.diskCacheClass).equal([MyDiskCache class]);

This is the common design for configuration object. See configuration. We most keep a copy of the config to avoid multiple cache accidentlly change the behavior. If you need modify the specify cache config. Modify the config property after the cache instance created.

@skyline75489 Actually. That defaultCacheConfig and copy behave more like CloudKit this design. If we don't suppot dynamic changes totally, the behavior will match NSURLSession's design. But I see some of code supposes to change the cache config dynamically ? (It that a designed behavior or just because of 4.x's implementation ? )
CKOperationGroup
.defaultConfiguration
CKOperation
.configuration

Since we support custom disk cache. If some one have their own usage, such as handle file error. They can override the proper method their own.
@interface MyDiskCache : SDDiskCache
@end

@implementation MyDiskCache
- (void)setData:(NSData *)data forKey:(NSString *)key {
    [super setData:data forKey:key];
    NSError *error = [NSError errorWithDomain:NSPOSIXErrorDomain code:errno userInfo:nil]; // Grab the POSIX error
    self.errorHandler.error = error;
}
@end

// Or, just write without super method
@implementation MyDiskCache
- (void)setData:(NSData *)data forKey:(NSString *)key {
    // get cache Path for image key
    NSString *cachePathForKey = [self cachePathForKey:key];
    // transform to NSUrl
    NSURL *fileURL = [NSURL fileURLWithPath:cachePathForKey];

    NSError *error;
    [data writeToURL:fileURL options:self.config.diskCacheWritingOptions error:&error];
    self.errorHandler.error = error;
}
@end

Well. At the beginning I think that SDDiskCache and SDMemoryCache is enough for every user who need advanced feature. But I miss one reality that some hack logic (Using SDImageCacheOptions) is already exist on SDImageCache instance itself. Especially for that queryCacheOperationForKey:options:context method.
This is only useful for SDWebImageManager currentlly. So it may become more and more non-related to image cache, tied with SDWebImageManager. We'd better provide a way to change.
And also, I found that some image loading system use their own way of cache, such as mutiple caches (query from multiple source, store into a priority cache),  non memory-disk cache (like SQLite or something). Maybe we need a extra abstact layer to make it more customable and ready for future maintain (Seperate image cache code to manager-tied-code).
So I create another protocol SDWebImageCache, represent the basic CRUD op for cache. See the code about it.

@skyline75489 The cache path API changes part has been moved to #2276 . So we can merge it easily since this PR contains too much things.

The custom web cache protoocl (SDWebImageCache & SDWebImageCachesManager) changes part has been moved to #2278 . So we can merge it easily since this PR contains too much things.


an isssue when trying to license bigip via bigiq using the sdk api

hi,
I experimented to license an bigip via the bigiq using the sdk api, while the following phenomenon occurred.
From the bigiQ's ui, the license has been assigned to the bigip already while the bigip hasn't yet actually been licensed.
Following is the code snapshot.  What we could do to move this forward?
Thanks in advance.
import os
from f5sdk.bigiq import ManagementClient
from f5sdk.bigiq.licensing.pools import MemberManagementClient
from f5sdk.logger import Logger
LOGGER = Logger(name).get_logger()
def revoke_license(ip, mac):
mgmt_client = ManagementClient(
        '<IP_ADDRESS>',
        user='admin',
        password='f5default')

member_mgmt_client = MemberManagementClient(mgmt_client)

return member_mgmt_client.create(
    config={
        'licensePoolName': 'bigip',
        'command': 'assign',
        'address': <IP_ADDRESS>,
        'assignmentType': 'UNREACHABLE',
        'macAddress': mac,
        'hypervisor': 'azure'
    }
)

if name == 'main':
RESPONSE = revoke_license(
os.environ['F5_BIGIP_MAC']
)
LOGGER.info('Response: %s', RESPONSE)
========================================

Hi Jikui, it seems you have picked assignment type "unreachable" which means the BIG-IQ will not go automatically license the BIG-IP, instead the license text will be included in that method call response as licenseText. This license can then be installed on BIG-IP manually or via BIG-IP API. The license will eventually reside within the /config/bigip.license file on BIG-IP. - https://clouddocs.f5.com/products/big-iq/mgmt-api/v6.0/HowToSamples/bigiq_api_modules/t_license_member_management.html#assigning-a-license-to-an-unreachable-device
If you want the BIG-IQ to go license the BIG-IP, you can provide the following "config" (request body) in the method call - https://clouddocs.f5.com/products/big-iq/mgmt-api/v6.0/HowToSamples/bigiq_api_modules/t_license_member_management.html#assigning-a-license-to-an-unmanaged-device

hi krithikaCT,
Much thanks for your help. I will have a try with your suggestion.
THanks
Jikui

hi, KrithikaCT,
Your suggestion works. Much thanks and I close the issue now.
Thanks.


Add xfail tests for cost estimation rotation invariance

If you rewrite the exact same query in a different way, you get a different result. That's bad.
I've added a failing test case. Looking for solutions. The bug has to do with absolute filter selectivities.

This is the problem:
An absolute filter selectivity with value 1 means "in the entire query, there's only one match for that vertex". However, due to difficulties with the recursive structure of the computation, we treat it as "Treat the many-to-many edge going into this scope as a many-to-one edge", which is much weaker.

The second test case I added demonstrates the bug appears even with fractional filter selectivities. The problem is that in the recursive algorithm, the selectivity is only propagated to the children, but not up towards the root.

One of the tests was broken. Turns out the only problem is that absolute selectivity is interpreted locally.


Documentation

#8  Document the Baby Dragons
Added documentation for all four specified files.
PES2UG21CS334
Nikhil Girish

Additional issue solved:
#5 Better test sentences
PES2UG21CS334
Nikhil Girish

Cant merge this PR @nik2203. The quality of test sentences dont match the requirement :/

hi, the pull request consisted of two issues but both were accidentally rejected as the latest one was rejected. Do I resubmit the PR of the earlier one (Documentation)?

Hi @nik2203, thanks for bringing this to my notice, however, I just reviewed the documentation and that still seems to be inaccurate in certain places so I cannot merge this PR :/


Update project website

Update project website

Codecov Report

Merging #9 (e6cca5c) into master (e9564c7) will not change coverage.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master       #9   +/-   ##
=========================================
  Coverage     73.21%   73.21%
  Complexity      421      421
=========================================
  Files            73       73
  Lines          1288     1288
  Branches        131      131
=========================================
  Hits            943      943
  Misses          313      313
  Partials         32       32

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 e9564c7...e6cca5c. Read the comment docs.


Could it possible to be a scripting engine?

Could it possible to be a scripting engine?the script compile in the runtime and run it?

you could try https://github.com/cosmos72/gomacro.
if you want it like lua or javascript, it will be a big project

you could try https://github.com/cosmos72/gomacro.
if you want it like lua or javascript, it will be a big project

Thanks!


docker-compose down/up removes #public attribute from edge-router

right now everytime you "up" docker-compose it'll delete/recreate the edge router... That's "fine" but not ideal whatsoever. Update the docker-compose environment (and any other environment similarly impacted) to not delete/recreate the edge router for 'no reason'. Check if it exists instead - or something else smarter.

Fixed by commit 251806d43b0e18e8fb02480db2e1c9d430d46080 and PR https://github.com/openziti/ziti/pull/670


python3.5 official support

Thanks! Can you open this one to ellisonbg/ipyleaflet? This one is a fork.

ok. even Ipykernel is marked "3", and "3.3" , so I have a doubt if it's pertinent or a long-time forgotten thing because Jupyter team is mainly on conda.