support for configurable settings for security-secrets-setup

user can specify paths for WorkDir, CacheDir, DeployDir and
CertConfigDir in the configuration.toml
CertConfigDir specifies the directory for certificate configuration json
files (fix #1767)
setting specified in environment variables override the configurable
settings
Signed-off-by: Enobong Udoko<EMAIL_ADDRESS>

Codecov Report

Merging #1882 into master will increase coverage by 0.09%.
The diff coverage is 81.31%.

@@            Coverage Diff             @@
##           master    #1882      +/-   ##
==========================================
+ Coverage   42.51%   42.61%   +0.09%
==========================================
  Files         182      182
  Lines       11682    11740      +58
==========================================
+ Hits         4967     5003      +36
- Misses       6445     6456      +11
- Partials      270      281      +11

Impacted Files
Coverage Δ

internal/security/setup/option/cache.go
54.76% <50%> (-7.01%)
:arrow_down:

internal/security/setup/option/generate.go
53.19% <73.07%> (-2.63%)
:arrow_down:

internal/security/setup/option/import.go
76.92% <75%> (-13.56%)
:arrow_down:

internal/security/setup/option/optionHelpers.go
69.94% <95.55%> (+3.76%)
:arrow_up:

Continue to review full report at Codecov.

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


The read operation timed out reading a google spreadsheet

Hi Google team, I am facing an issue when executing this line in Python,
from googleapiclient.discovery import build

service = build('sheets', 'v4', credentials=creds,cache_discovery=False)
sheet_metadata = service.spreadsheets().get(spreadsheetId=spreadsheet_id).execute()

the final issue on the log is socket.timeout: The read operation timed out
this issue is very rare when executing this issue, as we run this code more than ten times per day. I want to know why this happens and what can I do to resolve this.
we use this version of the module google-api-python-client==2.90.0
and we run this in a lambda on aws
this is the full log of the issue.
Traceback (most recent call last):
File "/var/task/lambdas/createSheet.py", line 66, in _update_spreadsheet
sheet_metadata = service.spreadsheets().get(spreadsheetId=spreadsheet_id).execute()
File "/opt/python/lib/python3.9/site-packages/googleapiclient/_helpers.py", line 130, in positional_wrapper
return wrapped(*args, **kwargs)
File "/opt/python/lib/python3.9/site-packages/googleapiclient/http.py", line 923, in execute
resp, content = _retry_request(
File "/opt/python/lib/python3.9/site-packages/googleapiclient/http.py", line 222, in _retry_request
raise exception
File "/opt/python/lib/python3.9/site-packages/googleapiclient/http.py", line 191, in _retry_request
resp, content = http.request(uri, method, *args, **kwargs)
File "/opt/python/lib/python3.9/site-packages/google_auth_httplib2.py", line 218, in request
response, content = self.http.request(
File "/opt/python/lib/python3.9/site-packages/httplib2/__init__.py", line 1701, in request
(response, content) = self._request(
File "/opt/python/lib/python3.9/site-packages/httplib2/__init__.py", line 1421, in _request
(response, content) = self._conn_request(conn, request_uri, method, body, headers)
File "/opt/python/lib/python3.9/site-packages/httplib2/__init__.py", line 1373, in _conn_request
response = conn.getresponse()
File "/var/lang/lib/python3.9/http/client.py", line 1377, in getresponse
response.begin()
File "/var/lang/lib/python3.9/http/client.py", line 320, in begin
version, status, reason = self._read_status()
File "/var/lang/lib/python3.9/http/client.py", line 281, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "/var/lang/lib/python3.9/socket.py", line 704, in readinto
return self._sock.recv_into(b)
File "/var/lang/lib/python3.9/ssl.py", line 1242, in recv_into
return self.read(nbytes, buffer)
File "/var/lang/lib/python3.9/ssl.py", line 1100, in read
return self._sslobj.read(len, buffer)
socket.timeout: The read operation timed out

Hey, don't know if you have a different solve but this issue helped me out.
https://github.com/googleapis/google-api-python-client/issues/709
Also, if you have multiple get calls switching to using batch calls helped me as well.

I am still facing problems with this issue however,
I have tried to increase the socket timeout (8 min), tried to force sockets to use IPV4 and switched my get to a batchGet. But I am still getting timeouts.
Is there some limit to reading sheets that are larger then 1MB that is not documented somewhere? It seems to only be an issue when I try to get values from large sheets.
NOTE: the a1 ranges that I try to fetch are not the entire sheet. They are small sections of the sheets that I am pulling in.


Showing an image for JS-Disabled Browsers?

Is it possible to show an image for JS-disabled browsers?
I know that Picturefill 1.2 supports this feature but I am curious whether Picturefill v2 also supports to show an image when no javascript is enabled.
Is there any solution to this issue?

Hey @yakutsa,
For critical content you can use a src attribute as well as a srcset attribute, but that will result in a double download in browsers that don't support responsive images natively, but have Picturefill (as at the point Picturefill executes the browser will likely have prefetched the image, if not downloaded it already).
You can also make use of a <noscript> tag to display a fallback, but that will result in a double download in browsers which support responsive images natively and can't execute JS for whatever reason. What is probably even worse: They'll both display the responsive image and the fallback at the same time. Which is not ideal. To my knowledge there's no smart way of hiding one of these images in a failproof manner, as feature detection of responsive images, e.g. Modernizr, requires JS. So if you can't rely on that, you'll either end up with two images displaying in browsers with native support, or if you do something like .no-js noscript > img { display: none; } you'll fall back to the alt text on browsers without responsive image support as the regular image gets hidden.
So, basically, they're all suboptimal tradeoffs. We normally recommend merely falling back to the alt text for this reason, but if it's a crucial image that you need to always display to browsers with images enabled, you can make use of both src and srcset and swallow the double download in some browsers, or use Picturefill 1.2. That's up to you, and what's best to do depends on your individual circumstances and your users.
Of course, I'm sure you could do something clever with cookies and server-side code if you're that way inclined. What I'm saying is there's no nice way of doing it. :)

Hi @jegtnes ,
Thank you for detailed explanation.
Picturefill 1.2 doesn't support IE8 nor IE9 so that would be a big tradeoff.
The main reason I am using Picturefill 2 is that it supports both IE8 and IE9. It is crucial to display the image for JS-disabled browsers so I probably have to go with <noscript> tag even though it would result in double download and increase the loading time.

Picturefill 1.2 documents fallbacks for IE8: https://github.com/scottjehl/picturefill/tree/1.2#supporting-ie-desktop
It should support IE9 however. Are you having problems with IE9?

Hi @quoo,
I uploaded my code to a jsfiddle. You can check it: https://jsfiddle.net/y533jfzx/
If the IE version is lower than 10, it just resize itself by width:100% . What I want is to get the right image by respective device width. IE9 and IE8 don't support it.
Maybe I am missing something here?

The main reason I am using Picturefill 2 is that it supports both IE8 and IE9. It is crucial to display the image for JS-disabled browsers so I probably have to go with <noscript> tag even though it would result in double download and increase the loading time.

Terrible idea! Like he said, you will have the image showing up twice in browsers where srcset has native support. Use src and srcset together. You'll still get a double download, but it won't look like shit.

@yakutsa
For IE9 support you will also need to include a matchMedia polyfill (https://cdn.rawgit.com/scottjehl/picturefill/1.2/external/matchmedia.js)

@QWp6t
I didn't realize it until I implemented it. Yes, you were right. It was a terrible idea. I am going with src and srcset as you suggested.
@aFarkas
I tried that, too. Here's the updated jsfidlee: https://jsfiddle.net/y533jfzx/1/
IE9 still don't act as it should. IE8 doesn't show the image at all.

@yakutsa, it looks like you have a solution for js disabled browsers. Unless you have any objections, I'm going to close this issue. Thanks!

@mike-engel ,
Yes, I am closing this issue now. Thank you all to those who contributed to this thread.


[#3503] Update VSIX templates to 4.15.0

Addresses # 3503
Description
This PR updated the dotnet generators (VSIX and dotnet templates) to the 4.15.0 version of botbuilder.
Detailed Changes
This PR updates the following samples:

dotnet-templates:

Microsoft.BotFramework.CSharp.CoreBot
Microsoft.BotFramework.CSharp.EchoBot
Microsoft.BotFramework.CSharp.EmptyBot

VSIX:

CoreBot
CoreBotWithTests
EchoBot
EmptyBot

Testing
These images show the core, echo, and empty bots working.

Promoted to MS in PR# 3596


The Control Node Stopped Giving a Heartbeat in Flight

This happened at 9:24 in ISAAC-2, right before the LOS.

/gnc/ekf continued publishing during the time of missing heartbeat.
9:22:07: last message published to /gnc/ctl/traj
I'm not sure what happened and not sure we can figure anything more out with the available data. The EKF was publishing the entire time but /ctl seemed to have stopped. It does not look like it crashed.

We will revisit this if we are able to repeat it.


toJson and fromJson functions not provided

Hello,
While working on my code today, I noticed that the TimeRange class and TimeOfDay class do not have the toJson and fromJson functions implemented. As a result, I had to create these functions in another class, which is not the most optimal solution. Could you please consider adding these functions to the original classes? Your assistance would be greatly appreciated.
Thank you!

I would suggest using https://pub.dev/packages/json_serializable or something similar and implementing the logic using it.  This logic should not be coupled with the code of the package since toJson might be implemented in various ways, depending on backend and choices.


[CI] Engine CI Rework, Part 1

Pull Request Description
I have created PR with the first set of changes for the Engine CI. The changes are small and effectively consist of:

Spltting the verifyLicensePackages. It is now run only on Linux. There are hardly any time benefits, as the actual job cost is dominated by the overhead of spinning a new job — but it is not expensive in the big picture.
Splitting the Scala Tests into separate job. This is probably the biggest "atomic" piece of work we have.
Splitting the Standard Library Tests into a separate job.

The time is nicely split across the jobs now. The last run has:

27 min for Scala tests;
25 min for Standard Library tests;
24 min for the "rest": the old job containing everything that has not been split.

While total CPU time has increased (as jobs are not effectively reusing the same build context), the wall time has decreased significantly. Previously we had ~1 hour of wall time for the old monolithic job, so we are getting more than 2x speedup.
The now-slowest Scala tests job is currently comparable with the native Rust tests (and they should improve when the old gui is gone) — which are the slowest job across all CI checks.
The PR is pretty minimal. Several future improvements can be made:

Reorganizing and splitting other "heavy" jobs, like the native image generation.
Reusing the built Engine distribution. However, this is probably a lower priority than I initially thought.

Building package takes several minutes, so duplicating this job is not that expensive.
The package is OS-specific.
Scala tests don't really benefit from it, they'd need way more compilation artifacts.
It'd make sense to reuse the distribution if we, for example, decided to split more jobs that actually benefit from it, like Standard Library tests.

Reusing the Rust build script binary.

As our self-hosted runners reuse environment, we effectively get this for free. Especially when Rust part of codebase is less frequently changed.
This is however significant cost for the self-hosted runners, affecting our macOS runners. Reusing the binary does not save wall time for jobs that are run in parallel (as we have enough runners), but if we introduce job dependencies that'd force sequential execution of jobs on macOS, this would be a significant need.

Important Notes

Checklist
Please ensure that the following checklist has been satisfied before submitting the PR:

[x] The documentation has been updated, if necessary.
[x] Screenshots/screencasts have been attached, if there are any visual changes. For interactive or animated visual changes, a screencast is preferred.
[x] All code follows the
Scala,
Java,
and
Rust
style guides. In case you are using a language not listed above, follow the Rust style guide.
All code has been tested:

[x] Unit tests have been written where possible.
[x] If GUI codebase was changed, the GUI was tested when built using ./run ide build.

Previously we had ~1 hour of wall time for the old monolithic job, so we are getting more than 2x speedup.

+1
I see Mac native image failure:
ERROR main_internal: enso_build_cli: error=Failed to get output of the command: Command:
	ENSO_DATA_DIRECTORY="/Users/runner/work/enso/enso/built-distribution/enso-engine-2024.1.1-dev-macos-amd64/enso-2024.1.1-dev" "/Users/runner/work/enso/enso/runner" "--run" "/Users/runner/work/enso/enso/engine/runner/src/test/resources/Factorial.enso" "6"

[WARN] [2024-03-05T21:12:22Z] [org.enso.editions.updater.EditionUpdater] Failed to fetch editions from [https://editions.release.enso.org/enso]: {}
       java.lang.UnsupportedOperationException: Preview Features not enabled, need to run with --enable-preview
       	at java.base@21.0.2/jdk.internal.misc.PreviewFeatures.ensureEnabled(PreviewFeatures.java:49)
       	at java.base@21.0.2/java.lang.Thread.ofVirtualWithoutLoom(Thread.java:680)
       	at java.base@21.0.2/java.util.concurrent.Executors.newVirtualThreadPerTaskExecutor(Executors.java:269)
       	at org.enso.downloader.http.HTTPDownload$.asyncDownload(HTTPDownload.scala:82)
       	at org.enso.downloader.http.HTTPDownload$.fetchString(HTTPDownload.scala:53)

  Exception in thread "main" org.graalvm.polyglot.PolyglotException: org.enso.editions.EditionResolutionError$CannotLoadEdition: Cannot load edition [2024.1.1-dev]: The edition was not found.
       	at org.enso.editions.EditionResolver.$anonfun$resolveParent$1(EditionResolver.scala:157)
       	at scala.util.Either$LeftProjection.map(Either.scala:614)
       	at org.enso.editions.EditionResolver.resolveParent(EditionResolver.scala:157)
       	at org.enso.editions.EditionResolver.resolveEdition(EditionResolver.scala:39)
       	at org.enso.editions.EditionResolver.resolve(EditionResolver.scala:29)
       	at org.enso.editions.updater.EditionManager.resolveEdition(EditionManager.scala:26)

CCing @Akirathan.
Btw. why is Mac CI only "optional"? It should be passing regularly, should it not?

Shouldn't Engine CI / Scala Tests (linux, x86_64) be required to pass?

@JaroslavTulach @radeusgd
Good point about adjusting required checks. I will do this after merging this, as this is repository-wide configuration setting. Applying it earlier, would block all other PRs (that are obviously missing the new checks).

@JaroslavTulach @radeusgd Good point about adjusting required checks. I will do this after merging this, as this is repository-wide configuration setting. Applying it earlier, would block all other PRs (that are obviously missing the new checks).

But won't that mean that for a while we will be able to merge (even by accident) PRs that are not passing the tests (i.e. as soon as I merge in these changes)?
Won't these changes only be in place once the PR with such changes lands? Thus they will start once this PR is merged. Then other pending PRs will just have to merge develop in to get the latest checks. That seems fine.
I don't see reason to do this in two parts, it feels much safer to do 'atomically'.

@JaroslavTulach @radeusgd Good point about adjusting required checks. I will do this after merging this, as this is repository-wide configuration setting. Applying it earlier, would block all other PRs (that are obviously missing the new checks).

But won't that mean that for a while we will be able to merge (even by accident) PRs that are not passing the tests (i.e. as soon as I merge in these changes)?
Won't these changes only be in place once the PR with such changes lands? Thus they will start once this PR is merged. Then other pending PRs will just have to merge develop in to get the latest checks. That seems fine.
I don't see reason to do this in two parts, it feels much safer to do 'atomically'.

Yes, yes. By "after" I meant "immediately after". I might as well do "immediately before".


How to implement smooth parameter value changes?

I don't own a push anymore, but i miss a few of its buttons so I've set out to create my own 'pocket push'. A webapp that used the webrtc2osc bridge to send osc messages to Ableton.
I created a volume mixer, but using it creates a stutter because the update frequency is too low. (i suspect the internal tick is the bottlenecks at around 100ms?)
I am looking for a way to tween/animate/automate to the new value in a 100ms timeframe so changes are smooth.
Does anybody know if the python API offers a built in function, or how I could achieve such thing?
Workaround could also be a webrtc to midi bridge, and perhaps use/mimic existing controller scripts like the Akai APC mini, which has faders.

Turns out the limitation was not OSC, but the network itself. On a local machine, OSC is sufficiently fast for smooth transitions.
Decompiled ableton surface controller python scripts show smart ways of creating smooth transitions, but these were too hard to implement


Request: extract_locon.py Half Precision when loading models for memory saving

Currently I can't load two models on a free Colab instance, but if I modify it to load the models in half precision it'll work without issue as long as the weights are changed back to float for SVD.
It also seems to load the VAE for both, which shouldn't be needed, and it always loads the text encoder. I'd like an option to skip the text encoder and just focus on the U-Net.

Ok
I will ad these things

can we possibly extract lycoris from sdxl model? I'm trying but I have gotten the error

can we possibly extract lycoris from sdxl model? I'm trying but I have gotten the error, does lycoris not support sdxl model yet for this thing?

Other ppl already opened issues for it. and it is added in latest dev.

Have checked if your ckpt file is half-precision it will use half-precision directly
You can consider to convert your ckpt file at first


Amplitude v3.0.2 removed from repository

I liked that version very much so I kept it in my package.json for a long time, and now it is not there and all my CI jobs are angry shades of red and we are barricaded in our office behind some old Sun E450s while they try to knock it down to get to the version they want please help

Hi, this is the relevant line from our package.json:
"dependencies": {
    "amplitude-js": "github:amplitude/Amplitude-Javascript#v3.0.2",

Hmm. That tag definitely still exists on github as you can see here:
https://github.com/amplitude/Amplitude-JavaScript/tree/v3.0.2.
I'm wondering if something changed with some version of npm where that github url stopped working for you. We've noticed some strange dependency resolution bugs with npm 5 releases and package-lock files. We generally converted to using yarn instead of npm for our own projects.
Unfortunately I can't reproduce the problem you're encountering. Testing with npm 5.5.1, everything downloads as expected.

@jrstr Closing this for now. Hopefully your npm install issues simply resolved themselves, as they often do. Feel free to follow up if you're still having issues and we can try to investigate more.


Growthbook lodash.isempty not resolved

Introduction
I am trying to add OpenFeature growthbook provider into my vitejs project and I am getting this error. I don't see any "lodash.isempty" package in node_modules, any clues if I am doing something wrong or is the dependency is missing in pkg?
X [ERROR] Could not resolve "lodash.isempty"

    node_modules/@openfeature/growthbook-client-provider/index.esm.js:4:20:
      4 │ import isEmpty from 'lodash.isempty';
        ╵                     ~~~~~~~~~~~~~~~~

  You can mark the path "lodash.isempty" as external to exclude it from the bundle, which will
  remove this error and leave the unresolved path in the bundle.

Thanks!

@gvillo you're right! These deps are generated by NX automatically, but this subproject was missing the setting that does this. See my fix: https://github.com/open-feature/js-sdk-contrib/pull/1034

I'm also getting this error. Looking forward for growthbook-client-provider 0.1.2 to be released 🥳


Introduce php support

@hunterloftis So... all that is required for this PR to go through is to add tests, correct?

Yep.

Yes, something like this.


Create an interface for online repo functions

To make my own code calling online repo functions testable, I need some functions behind an interface. Using aliases, this is a safe refactoring. Please pull :)

Please avoid using ALIASes if at all possible, IMHO there is something wrong in the OO design if aliases are required, we've put in a lot of work removing some of these, see https://github.com/abapGit/abapGit/issues/3531 and https://github.com/abapGit/abapGit/issues/3460
That being said, the REPO classes needs refactoring, see #3799 #2127 #1757

Please avoid using ALIASes if at all possible, IMHO there is something wrong in the OO design if aliases are required, we've put in a lot of work removing some of these, see #3531 and #3460
That being said, the REPO classes needs refactoring, see #3799 #2127 #1757

It is good engineering practice to make small refactorings. It is entirely possible to go through every user of each method and make them call the interface instead of the class, but that is another small refactoring. This solves the immediate problem with minimal changes.

@larshp What do you think, can we merge this PR, or should I get rid of at least some of the aliases?

I'll merge it, just typically leaving it for a bit to allow more people to review


[stable/openebs] Add securityContexts

Is your feature request related to a problem? Please describe.
Feature req:
add security-contexts to the different pods/containers - so that they run with only required permissions, readonly container if possible, and avoid running as root etc.
Describe the solution you'd like
SecurityContext defined in values for each deployment, with strict (only required) defaults
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
This will match well with ICP (IBM Cloud Private) where namespaces are bound to a PSP through a role-binding, binding a cluster-role, which again has use access to some predefined PSPs. This will allow us to use the least privileged one https://www.ibm.com/support/knowledgecenter/en/SSBS6K_3.1.1/manage_cluster/security.html

This will be attempted for 1.5 release.

This is being worked on. As a first step the current RBAC rules are being reviewed. https://github.com/openebs/openebs/pull/2850

The fix is being worked on at : https://github.com/openebs/openebs/pull/2850


e.preventDefault() doesn't work in ionic.on() callback;

In the code below e.preventDefault(); doesn't prevent navigating of  elements:
ionic.on('tap', function(e) {
e.preventDefault();
}, element);
I expect ionioc.on() to work the same way as Jquery but it doesn't.
Jquery code works well:
element.on("click", "a", function (e) {
e.preventDefault();
});
Am I missing something? I thought there should be 'options' in ionic.on() but I didn't find any.

Greetings @Qvatra!
I've closed this issue because my sensors indicated it was old and inactive, and may have already been fixed in recent versions of Ionic. However, if you are still experiencing this issue, please feel free to reopen it and include any examples and other necessary information, so that we can look into it further.
Thank you for allowing me to assist you.

Hi,
I'm using the version: "1.0.0-rc.1", and I still met the same issue, as my code below:
ionic.on('tap', function (ev) {
ev.preventDefault() // not working
}, document.getElementById('id'));
In addition to way, as below:
点我
How to get the Event object and then do 'preventDefaut' as in angularjs
点我
the I can do it.


Implemented GetSupplyWithOpts method to be able to exclude non circulating accounts list from getSupply response.

Hi @martelev
Thanks for your PR! :raised_hands:
Just one thing: I'd like to keep the existing GetSupply method as-is.


Document additional  Project Public API workflows

Description

Document additional Public API workflows for the Project resource.
Comments

Apparently @btat or @martyav need to review this pullrequest and only then they can merge it

@btat Should this PR be opened against v2.10.0 or main branch?

@pmatseykanets v2.10.0 is more suitable in this case since there are 2.10 specific changes to /docs, which we don't want to publish yet. The /docs/ folder represents the latest released version, which is currently 2.9 and will represent 2.10 upon its release.


Simplify AWS account preinstallation (IAM resources)

Is your feature request related to a problem? Please describe.

AWS Customers need to do multiple steps to provisions the basic IAM resources for initial configuration of their accounts.
Describe the solution you'd like

Create a Cloud Formation template that provision all IAM resources needed.
Describe alternatives you've considered

We have already the guide to do it manually and a terraform helper but still requires unnecessary actions.

@pipo02mix can we close this one now that you merged https://github.com/giantswarm/giantswarm-aws-account-prerequisites/pull/97?


[bug] variable scope bug in BehatApplication.php

Hello!
I'm checking your work and i found something wrong.
In Behat\Behat\Console\BehatApplication
this class extends Symfony\Component\Console\Application and all its properties are private.
So into the renderException method you can't set to null the parent property "runningCommand" (and also create a public property of BehatApplication) and expects the parent::renderException use it. The parent::method will use its private property.
The console component is not easy to extends because of all this private properties

Yep, forgot to remove it after console refactoring.

The console component is not easy to extends because of all this private properties

I was one of the guys, who've refactored it ;-) And there's a good reason for it:
http://fabien.potencier.org/article/47/pragmatism-over-theory-protected-vs-private


fixed nodelist and edgelist reference problem

a = pd.DataFrame([{'a': 1, 'c': 0}, {'a': 2, 'c': 2}, {'a': 3, 'c': 5}])
b = a
b = b.loc[[0, 2]]
b =>
a c
0 1 0
2 3 5
a =>
a c
0 1 0
1 2 2
2 3 5

I am not sure whether GitHub would have notified you of this, but I opened and accepted an instance of this pull request in my fork (which was originally made precisely to have a version with fixes from issues and PRs).
The fork has now been detached and released as its own library, altair-nx, because the original has been inactive since 2020 and because the fork diverged from it considerably after a full code-base rework and the implementation of new features (e.g. curved edges, self loops, and much greater customisability).


Move Console field from ContainerConfig to Cmd structure

A console path can be provided every time a new process is started, and we know we can start several processes on one container as long as the process on this container is still running.
That's why we have to move Console field to Cmd structure so that every process can be redirected to a different console.

Fixed by #209


Update pgx

Codecov Report

Merging #3 (e7fc06a) into main (51ed91c) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main       #3   +/-   ##
=======================================
  Coverage   79.83%   79.83%
=======================================
  Files           2        2
  Lines         248      248
=======================================
  Hits          198      198
  Misses         39       39
  Partials       11       11

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 51ed91c...e7fc06a. Read the comment docs.


Missing UI to enable XACML scope validator in Console

In the new IS console, there is no option in the UI to enable XACML scope validator for an application.
In previous IS versions, when configuring Oauth Inbound Authentication configurations for a Service Provider through the management console, there is the following field available to enable XACML scope validator.

This field should be added to the new console of IS 7.0.0 so that XACML based scope validation can be enabled for an application from the UI. As discussed with Malithi, it was suggested to have this option available by default or at least have a config to make this field visible in the UI of the new console.

Had a chat regarding this with @malithie and @madurangasiriwardena.
As we do not have anything related to XACML in new console UI, it will confuse users, if we show only this config. When XACML is on-boarded to new console, we can bring this config as well.
Until that we'll allow users to get it done through the API, and add it to the product documentation. cc: @ashensw


Allow for scoped plugins

What problem does this feature solve?
It allows for plugins to be scoped.
In my case I have my own eslint config so I was trying to publish a plugin for only my use. In this case @corbinu/vue-cli-plugin-lint. However none of the invoke commands were working. I believe that the regex for the hasPlugin function in PluginAPI.js simply needs to expanded slightly.
What does the proposed API look like?
The api would look the same it would simply also work for plugins in a private npm scope.

So this doesn't work?
vue invoke @corbinu/vue-cli-plugin-lint

because hasplugin() does also compare the id as-is:
https://github.com/vuejs/vue-cli/blob/dev/packages/%40vue/cli-service/lib/PluginAPI.js#L32

I think the runtime plugin auto-loading does not account for custom scoped packages at the moment.

Ah, I see.

This has been addressed in latest dev branch and will be out in next beta release.
You will be able to do vue add @corbinu/lint or vue invoke @corbinu/lint, and the plugin should also be auto-loaded by the service.

@yyx990803 Thanks trying it out now!

@yyx990803 Sorry but this still doesn't need to be working. I pulled the dev branch and linked it in.
vue add @corbinu/lint works great now however when I run npm run lint it still doesn't pick up on the service
npm run lint

><EMAIL_ADDRESS>lint /Users/corbinu/Developer/git/my-project
> vue-cli-service lint

 ERROR  command "lint" does not exist.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR<EMAIL_ADDRESS>lint: `vue-cli-service lint`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>lint script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR!      /Users/corbinu/.npm/_logs/2018-03-05T01_07_33_003Z-debug.log

@corbinu make sure your plugin is listed in package.json. Otherwise it won't be discovered.

@yyx990803 vue add @corbinu/lint added it to the package.json automatically.

Probably a symlink issue. You'll need to file a separate issue after the next release.

Ok thanks!

(base) ➜  components git:(privacy) ✗ vue add @corbinu/lint
📦  Installing @corbinu/vue-cli-plugin-lint...
npm ERR! code E404
npm ERR! 404 Not Found - GET https://registry.npmjs.org/@corbinu%2Fvue-cli-plugin-lint - Not found
npm ERR! 404
npm ERR! 404  '@corbinu/vue-cli-plugin-lint@latest' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.
npm ERR!      /Users/johndpope/.npm/_logs/2019-11-15T19_14_31_826Z-debug.log
ERROR  command failed: npm install --loglevel error -D @corbinu/vue-cli-plugin-lint

0 info it worked if it ends with ok
1 verbose cli [ '/Users/johndpope/.nvm/versions/node/v10.16.3/bin/node',
1 verbose cli   '/Users/johndpope/.nvm/versions/node/v10.16.3/bin/npm',
1 verbose cli   'install',
1 verbose cli   '--loglevel',
1 verbose cli   'error',
1 verbose cli   '-D',
1 verbose cli   '@corbinu/vue-cli-plugin-lint' ]
2 info using<EMAIL_ADDRESS>3 info using<EMAIL_ADDRESS>4 verbose npm-session 766cb8bca5f0afa0
5 silly install loadCurrentTree
6 silly install readLocalPackageData
7 http fetch GET 404 https://registry.npmjs.org/@corbinu%2fvue-cli-plugin-lint 1352ms
8 http fetch GET 404 https://registry.npmjs.org/@corbinu%2fvue-cli-plugin-lint 483ms
9 silly fetchPackageMetaData error for @corbinu/vue-cli-plugin-lint@latest 404 Not Found - GET https://registry.npmjs.org/@corbinu%2fvue-cli-plugin-lint - Not found
10 timing stage:rollbackFailedOptional Completed in 0ms
11 timing stage:runTopLevelLifecycles Completed in 3283ms
12 verbose stack Error: 404 Not Found - GET https://registry.npmjs.org/@corbinu%2fvue-cli-plugin-lint - Not found
12 verbose stack     at res.buffer.catch.then.body (/Users/johndpope/.nvm/versions/node/v10.16.3/lib/node_modules/npm/node_modules/npm-registry-fetch/check-response.js:104:15)
12 verbose stack     at process._tickCallback (internal/process/next_tick.js:68:7)
13 verbose statusCode 404
14 verbose pkgid @corbinu/vue-cli-plugin-lint@latest
15 verbose cwd /Users/johndpope/Documents/gitWorkspace/8secondz-contesthub/src/components
16 verbose Darwin 19.0.0
17 verbose argv "/Users/johndpope/.nvm/versions/node/v10.16.3/bin/node" "/Users/johndpope/.nvm/versions/node/v10.16.3/bin/npm" "install" "--loglevel" "error" "-D" "@corbinu/vue-cli-plugin-lint"
18 verbose node v10.16.3
19 verbose npm  v6.9.0
20 error code E404
21 error 404 Not Found - GET https://registry.npmjs.org/@corbinu%2fvue-cli-plugin-lint - Not found
22 error 404
23 error 404 '@corbinu/vue-cli-plugin-lint@latest' is not in the npm registry.
24 error 404 You should bug the author to publish it (or use the name yourself!)
25 error 404 Note that you can also install from a
26 error 404 tarball, folder, http url, or git url.
27 verbose exit [ 1, true ]


Stop duplicating TypeScript class helpers in every CJS file output

Currently, we're outputting the class helpers in ever CJS file we output, that means that anyone bundling them will end up having N copies of __extend methods in their bundle, where N in the number of our modules they import that use classes.
This is a particular problem for the Angular team.
cc/ @IgorMinar

Check issue https://github.com/ReactiveX/rxjs/issues/2436, I guess this is dupe.

this is done


Points being plot as Lines

Hi,
First of all thanks you for such a great library with so many examples.
I am trying to plot points from an array. However, the resulting pic is always a line for this specific datapoints.
from vtkplotter import show, Points
positions = array([[0.16621395, 0.28789101, 0.        ],
       [0.        , 0.        , 0.        ],
       [0.24386514, 0.        , 0.        ],
       [0.07767649, 0.04484654, 0.12684517],
       [0.        , 0.        , 0.        ],
       [0.02198013, 0.01269023, 0.0358934 ],
       [0.13108585, 0.00570134, 0.01612581],
       [0.36077809, 0.        , 0.        ],
       [0.22941974, 0.3399008 , 0.08126898],
       [0.15449964, 0.01249786, 0.03534928]])

plot_cba = Plotter()
points_cba = Points(positions, c='black', r=0.01)
plot_cba += points_cba
show(points_cba)

When I try different datapoints without 0 in x, y, z coordinates the points seem to be fine !.
Not sure its a bug or is there any parameter to be modified to draw points with 0 in any of the coordinates.
Thanks in advance for your help.

it's clearly a bug in the k3d interface! Thanks a lot for spotting it,
while I fix it you can either:

set a very small non-zero number like `array([0.00001, 0., 0.])
use the 'itkwidget' backend instead of k3d:

from vtkplotter import Points, embedWindow
import numpy as np

embedWindow('itk')

positions = np.array(
      [[0.16621395, 0.28789101, 0.        ],
       [0.        , 0.        , 0.        ],
       [0.24386514, 0.        , 0.        ],
       [0.07767649, 0.04484654, 0.12684517],
       [0.        , 0.        , 0.        ],
       [0.02198013, 0.01269023, 0.0358934 ],
       [0.13108585, 0.00570134, 0.01612581],
       [0.36077809, 0.        , 0.        ],
       [0.22941974, 0.3399008 , 0.08126898],
       [0.15449964, 0.01249786, 0.03534928]])

Points(positions, c='black').show(bg='white')

Thank you.

I just realized that you have a duplicated point in the list.. the k3d interface removes which causes the mismatch. I managed to fix that , the fix will be available in the next release.
If you use numpy.unique that also solves the problem:
from numpy import array, unique
from vtkplotter import show, Points, Plotter
positions = array([[0.16621395, 0.28789101, 0.        ],
       [0.        , 0.        , 0.        ],
       [0.24386514, 0.        , 0.        ],
       [0.07767649, 0.04484654, 0.12684517],
       [0.        , 0.        , 0.        ],
       [0.02198013, 0.01269023, 0.0358934 ],
       [0.13108585, 0.00570134, 0.01612581],
       [0.36077809, 0.        , 0.        ],
       [0.22941974, 0.3399008 , 0.08126898],
       [0.15449964, 0.01249786, 0.03534928]])

positions = unique(positions, axis=0)

plot_cba = Plotter()
points_cba = Points(positions, c='black', r=10)
plot_cba += points_cba
show(points_cba)

Thanks!
Marco


Problems using copyFieldGroup for customized OOTB fieldgroups

Expected Behaviour
I can copy all fieldgroups.
Actual Behaviour
Copy of fieldgroups fails for customized out-of-the-box fieldgroups.
Reproduce Scenario (including but not limited to)
Steps to Reproduce

create a profile schema
add "consent and preferences" fieldgroup
add a field to this fieldgroup (customize it)
try to execute code below

Platform and Version
latest aepp, Linux
Sample Code that illustrates the problem
import aepp
from aepp import schema
original_config = aepp.importConfigFile(path="credentials.json", connectInstance=True)
original_instance = schema.Schema(config=original_config)
fg_original = original_instance.getFieldGroup("_my.mixins.7dc518b25875a5562fd9aad33ca2fa0fd951c08c95faebd1")
fg_copy = original_instance.copyFieldGroup(fg_original, title="new", tenantId="_other")

Logs taken while reproducing problem
Traceback (most recent call last):
  File "/home/xxx/work/aepdeploy/xxx/../bug.py", line 9, in <module>
    fg_copy = original_instance.copyFieldGroup(fg_original, title="new", tenantId="other")
  File "/home/xxx/.local/lib/python3.9/site-packages/aepp/schema.py", line 1219, in copyFieldGroup
    obj["definitions"]["property"]["properties"][tenantId] = obj["definitions"]["property"]["properties"][oldTenant]
KeyError: '_my'

This is how the fieldgroup looks in the UI:

I made an attempt to fix the issue.
In my code above to reproduce there was a bug.
One needs to include full=false.
...
fg_original = original_instance.getFieldGroup("_my.mixins.7dc518b25875a5562fd9aad33ca2fa0fd951c08c95faebd1", full=False)
...

However, still changes to schema.py are needed I think.

I made an attempt to fix the issue.
In my code above to reproduce there was a bug.
One needs to include full=False:
...
fg_original = original_instance.getFieldGroup("_my.mixins.7dc518b25875a5562fd9aad33ca2fa0fd951c08c95faebd1", full=False)
...

However, still changes to schema.py are needed I think.

Hello @mdonke
Thanks or raising this.
Custom OOTB fieldgroups are quite hard to deal with.
I will see if I can find a way to apply that change but I would imagine it requires a special operation to clone this OOTB in the new sandbox / org.
I am not sure I would be able to support it to be honest.
For some other capability of Schema and Schema Manager, Field Group Manager, I am simply not supporting these OOTB field groups (for write operation), only supports reads.

Hello Julien,
we are currently testing my fix with the goal of cloning the modified OOTB fieldgroups to another sandbox/org.
Will let you know how it went asap.

hey @mdonke
Did it work ?

I'm still waiting for confirmation about the "different org" case.
I can confirm its working when creating such a modified OOTB fieldgroup in another sandbox in the same org.

I looked at the solution you provided, I think it is because the full=false will not return the custom part, so you can just return the default OOTB.
I am not sure.
In any case, OOTB field group should be found in any other sandbox with different ID anyway.
I am really curious to see what you did.

Have you seen the commit?
(Ignore the dateTime change, that was an accident)
Its hard to explain looking at code only. One needs to see the current json structure in every step to understand the loops. lookups and manipulation.
I just gave it a try with a modified tenant id (for cross orgid scenarious): Its working fine, I get a warning (?) though:
"The schema's meta:immutableTags array could not be found. Once this field is added to a schema, it cannot be removed."
We will actively use/test this code in the upcoming months. If you don't feel safe merging it yet, I'll keep it in my repo for now.


different results python <-> DIGITS

Hello,
I'm comparing the results in DIGITS and caffe using python ...
I trained the model using DIGITS, selecting the 'crop' option while composing the database.
This is my python code :

import numpy as np
import caffe
import scipy

MODEL_FILE = '...'
PRETRAINED = '...'
MEAN_FILE = '...'
LABEL_FILE = '...'

IMAGE_FILE = 'C:/.../.../orig-512_512.jpg'
IMAGE_FILE2 = 'C:/.../.../orig-256_256.jpg'

net = caffe.Net(MODEL_FILE, PRETRAINED, caffe.TEST)

transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})

blob = caffe.proto.caffe_pb2.BlobProto()
data = open(MEAN_FILE, 'rb' ).read()
blob.ParseFromString(data)
arr = np.array( caffe.io.blobproto_to_array(blob) )
transformer.set_mean('data', arr[0].mean(1).mean(1))

label_mapping = np.loadtxt(LABEL_FILE, str, delimiter='\t')

transformer.set_transpose('data', (2,0,1))
transformer.set_channel_swap('data', (2,1,0)) # if using RGB instead of BGR
transformer.set_raw_scale('data', 255.0)

net.blobs['data'].reshape(1,3,224,224)

img = caffe.io.load_image(IMAGE_FILE)

net.blobs['data'].data[...] = transformer.preprocess('data', img)

output = net.forward()
classi = output['softmax'].argmax()
print "{} {}".format(IMAGE_FILE, label_mapping[classi])
print net.blobs['softmax'].data[0].flatten()

When I use input images with dimensions [256 x 256], I get exactly the same results. If the input image has different dimensions (e.g. [256 x 340], [400 x 256], ...), than the result is different -> seems that it is correct in DIGITS, not in python. At first, I thought that the problem was related to cropping a different region in the input image, so I added following lines to my code :
img = caffe.io.load_image(IMAGE_FILE)
...
interp = 'bilinear'
if img.shape[0] != height or img.shape[1] != width:
    width_ratio = float(img.shape[1]) / width
    height_ratio = float(img.shape[0]) / height
    # resize to smallest of ratios (relatively larger image), keeping aspect ratio
    if width_ratio > height_ratio:
        resize_height = height
        resize_width = int(round(img.shape[1] / height_ratio))
    else:
        resize_width = width
        resize_height = int(round(img.shape[0] / width_ratio))
    img = scipy.misc.imresize(img, (resize_height, resize_width), interp=interp)
    # chop off ends of dimension that is still too long
    if width_ratio > height_ratio:
        start = int(round((resize_width-width)/2.0))
        img = img[:,start:start+width]
    else:
        start = int(round((resize_height-height)/2.0))
    img = img[start:start+height,:]
...
net.blobs['data'].data[...] = transformer.preprocess('data', img)

This didn't make any difference, still no correct classification in python.
Then I discovered that cropping isn't the problem. When I use image processing software, and double the dimensions of an [256 x 256] image to an [512 x 512] image, classification is correct in DIGITS, but not in python. So, I suppose cropping is not the problem, but resizing the image might be.
However, when I use matplotlib to visualize the resized images before calling transformer.preprocess, it seems to me that it looks exactly the same as the [256 x 256] image that produces a correct output. Very strange.
Anyone an idea what can be the problem?  So, using DIGITS gives me always the correct classification, but using the python-code produces only the same output if the input image has dimensions [256 x 256] ...

Located the problem :
img = caffe.io.load_image(IMAGE_FILE) produces pixel values in the range [0 1].
After rescaling the image with img = scipy.misc.imresize(img, (resize_height, resize_width), interp=interp) , pixel values are in the range [0 255].
So I guess -if resizing is necessary- the pixel values must divided by 255 before proceeding.

Image data is always be uint8 whenever DIGITS is in control (at least for now - we're also working on 16-bit data support). So all the models coming out of DIGITS are going to expect data in [0-255].


Is there a standard way to specify an iterable function parameter?

In the past I have defined function parameters like this:
/**
 * Foo...
 * @param {array.<number>} numbers
 */
function foo(numbers) { ... }

But what is the proper syntax for something that implements the iterable protocol?
This?
/**
 * Foo...
 * @param {iterable.<number>} numbers
 */
function foo(numbers) { ... }

Many thanks

in ESDoc it's @param {Generator<number>} numbers my numbers dunno about jsdocs

iterable.<number> is a totally appropriate way to document this.

Thank you for the quick response :)

Is this the same for generator functions?
/**
 * Example generator function
 * @return {Generator<number>}
 */
function *test(example){
}


Arbiter Staking Balance Always Reported as Zero

Describe the bug
Arbiter staking balance is 0 after staking on a private sidechain.
To Reproduce
Steps to reproduce the behavior:

Run arbiter stake from Cuckoo repos
Get 200's back from stake and transaction submission
Check  https://polyswarmd/balances/<eth addr>/staking/total
See 0

Expected behavior
Amount staked comes back in 4.

Working with cuckoo on this in slack, our arbiters seem to be staking properly and balances are being reported:
curl -H "Authorization: XXXXXXXXXXXXXXXXXXXX" https://gamma-polyswarmd.prod.polyswarm.network/balances/2e03565b735e2343f7f0501a7772a42b1c0e8893/staking/total
{"result":"10000000000000000000000000","status":"OK"}

Think transaction response isn't being handled by arbiter cuckoo (step 2 above) https://github.com/polyswarm/arbiter-cuckoo/blob/b498c2cb1d23c18fe15779762c47bb148287ec70/arbiter/polyswarm_api.py#L144
Will update ticket when we track this down.

Closed by https://github.com/polyswarm/arbiter-cuckoo/pull/2


TweenManager.frameBased not working as expected

https://github.com/photonstorm/phaser/issues/2178

However, in practice it seems like the only way to have tweens running for a fixed amount of time regardless of the device speed is setting frameBased to true.
There are a couple of threads on the forms about it:
http://www.html5gamedevs.com/topic/18183-tweenmanagerframebased-not-working-as-expected/
http://www.html5gamedevs.com/topic/18242-tweens-duration-different-on-different-machines/

v2.4.1 to v2.16.2
Will be fixed in v2.17.0, by removing frameBased!

Fixed in https://github.com/photonstorm/phaser-ce/releases/tag/v2.17.0


video recording crash (No active/enabled connections)

When I stop recording and tap again in the recording button it crashes.
[AVCaptureMovieFileOutput startRecordingToOutputFileURL:recordingDelegate:] No active/enabled connections"

I Have the same problem!
Does anyone have solutions?

@MarsXan and @damienissa,
are you using the Example App and the latest CameraManager version (5.1.3)?

Yes I'm using the last version

@MarsXan and @damienissa
I'm going to take a look at this. Can you share your CameraManager setup? It would help me replicate the issue.

@torrao I was running into this also, here is a gist of my code.
https://gist.github.com/KevinGlinski/9d1da23f81619661768fd07bcb16ce84
The strange thing is that setupCameraManager sets output mode to video, but then in startRecording when we call startRecordingVideo output mode is  set back to .stillImage.  If I uncomment line 82 to set output mode back to video then I get the no connection error.  This makes me think that something is losing/resetting state based on how the view/viewcontrollers are setup

@torrao Any update on this please? It's important for me and i am getting this crash.
Anyone found a solution for this?


References to class not resolved when exported

Godot version:

3.2.3rc3
OS/device including version:

Pop!_OS 20.04, GTX 1080, proprietary driver 440.100
Issue description:

Attempting to reference a class_name causes a parse error when exported. This issue is not present when the project is ran from the editor, the scene must be exported and ran from the produced executable. The project was exported from a Linux machine, but the error and crash occur with both the Windows and Linux exported executable file. Other operating systems were not tested.
The inheritance issue can be worked around by using the script path instead of the class_name. For example: use extends "base.gd" instead of extends base
Steps to reproduce:

Declare a class_name [class name] in a script
In another script reference the class, this includes:
a. extends [class name]
b. if x is [class name]
Download and install export templates from the Manage Export Templates menu
Export the project
Run the executable file
Run the project until the script is run, the game will crash and have this error printed to the terminal: SCRIPT ERROR: GDScript::load_byte_code: Parse Error: The identifier "[class name]" isn't declared in the current scope.

Minimal reproduction project:

godot_inheritance_issue.zip

Duplicate of https://github.com/godotengine/godot/issues/40991.


How to convert Hair Segmentation from Live Video to File (input/output)

Hi I am trying to run the hair segmentation on video files and hope someone can help.
I tried changing the hair_segmentation_desktop_live.pbtxt to have as input OpenCvVideoDecoderCalculator and as output
OpenCvVideoEncoderCalculator like this:
mediapipe/graphs/hair_segmentation/hair_segmentation_desktop_live.pbtxt:
max_queue_size: 1

# Decodes an input video file into images and a video header.
node {
  calculator: "OpenCvVideoDecoderCalculator"
  input_side_packet: "INPUT_FILE_PATH:input_video_path"
  output_stream: "VIDEO:input_video"
  output_stream: "VIDEO_PRESTREAM:input_video_header"
}

# Transforms the input image on CPU to a 512x512 image. To scale the image, by
# default it uses the STRETCH scale mode that maps the entire input image to the
# entire transformed image. As a result, image aspect ratio may be changed and
# objects in the image may be deformed (stretched or squeezed), but the hair
# segmentation model used in this graph is agnostic to that deformation.
node: {
  calculator: "ImageTransformationCalculator"
  input_stream: "IMAGE:input_video"
  output_stream: "IMAGE:transformed_input_video"
  node_options: {
    [type.googleapis.com/mediapipe.ImageTransformationCalculatorOptions] {
      output_width: 512
      output_height: 512
    }
  }
}

# Caches a mask fed back from the previous round of hair segmentation, and upon
# the arrival of the next input image sends out the cached mask with the
# timestamp replaced by that of the input image, essentially generating a packet
# that carries the previous mask. Note that upon the arrival of the very first
# input image, an empty packet is sent out to jump start the feedback loop.
node {
  calculator: "PreviousLoopbackCalculator"
  input_stream: "MAIN:input_video"
  input_stream: "LOOP:hair_mask"
  input_stream_info: {
    tag_index: "LOOP"
    back_edge: true
  }
  output_stream: "PREV_LOOP:previous_hair_mask"
}

# Embeds the hair mask generated from the previous round of hair segmentation
# as the alpha channel of the current input image.
node {
  calculator: "SetAlphaCalculator"
  input_stream: "IMAGE:transformed_input_video"
  input_stream: "ALPHA:previous_hair_mask"
  output_stream: "IMAGE:mask_embedded_input_video"
}

# Converts the transformed input image on CPU into an image tensor stored in
# TfLiteTensor. The zero_center option is set to false to normalize the
# pixel values to [0.f, 1.f] as opposed to [-1.f, 1.f]. With the
# max_num_channels option set to 4, all 4 RGBA channels are contained in the
# image tensor.
node {
  calculator: "TfLiteConverterCalculator"
  input_stream: "IMAGE:mask_embedded_input_video"
  output_stream: "TENSORS:image_tensor"
  node_options: {
    [type.googleapis.com/mediapipe.TfLiteConverterCalculatorOptions] {
      zero_center: false
      max_num_channels: 4
    }
  }
}

# Generates a single side packet containing a TensorFlow Lite op resolver that
# supports custom ops needed by the model used in this graph.
node {
  calculator: "TfLiteCustomOpResolverCalculator"
  output_side_packet: "op_resolver"
  node_options: {
    [type.googleapis.com/mediapipe.TfLiteCustomOpResolverCalculatorOptions] {
      use_gpu: false
    }
  }
}

# Runs a TensorFlow Lite model on CPU that takes an image tensor and outputs a
# tensor representing the hair segmentation, which has the same width and height
# as the input image tensor.
node {
  calculator: "TfLiteInferenceCalculator"
  input_stream: "TENSORS:image_tensor"
  output_stream: "TENSORS:segmentation_tensor"
  input_side_packet: "CUSTOM_OP_RESOLVER:op_resolver"
  node_options: {
    [type.googleapis.com/mediapipe.TfLiteInferenceCalculatorOptions] {
      model_path: "mediapipe/models/hair_segmentation.tflite"
      use_gpu: false
    }
  }
}

# Decodes the segmentation tensor generated by the TensorFlow Lite model into a
# mask of values in [0, 255], stored in a CPU buffer. It also
# takes the mask generated previously as another input to improve the temporal
# consistency.
node {
  calculator: "TfLiteTensorsToSegmentationCalculator"
  input_stream: "TENSORS:segmentation_tensor"
  input_stream: "PREV_MASK:previous_hair_mask"
  output_stream: "MASK:hair_mask"
  node_options: {
    [type.googleapis.com/mediapipe.TfLiteTensorsToSegmentationCalculatorOptions] {
      tensor_width: 512
      tensor_height: 512
      tensor_channels: 2
      combine_with_previous_ratio: 0.9
      output_layer_index: 1
    }
  }
}

# Colors the hair segmentation with the color specified in the option.
node {
  calculator: "RecolorCalculator"
  input_stream: "IMAGE:input_video"
  input_stream: "MASK:hair_mask"
  output_stream: "IMAGE:output_video"
  node_options: {
    [type.googleapis.com/mediapipe.RecolorCalculatorOptions] {
      color { r: 0 g: 0 b: 255 }
      mask_channel: RED
    }
  }
}

# Encodes the annotated images into a video file, adopting properties specified
# in the input video header, e.g., video framerate.
node {
  calculator: "OpenCvVideoEncoderCalculator"
  input_stream: "VIDEO:output_video"
  input_stream: "VIDEO_PRESTREAM:input_video_header"
  input_side_packet: "OUTPUT_FILE_PATH:output_video_path"
  node_options: {
    [type.googleapis.com/mediapipe.OpenCvVideoEncoderCalculatorOptions]: {
      codec: "avc1"
      video_format: "mp4"
    }
  }
}

And added the opencv_video_decoder_calculator and opencv_video_encoder_calculator to the build in
mediapipe/graphs/hair_segmentation/BUILD
...
cc_library(
    name = "desktop_calculators",
    deps = [
        "//mediapipe/calculators/core:flow_limiter_calculator",
        "//mediapipe/calculators/core:previous_loopback_calculator",
        "//mediapipe/calculators/image:image_transformation_calculator",
        "//mediapipe/calculators/image:recolor_calculator",
        "//mediapipe/calculators/image:set_alpha_calculator",
        "//mediapipe/calculators/tflite:tflite_converter_calculator",
        "//mediapipe/calculators/tflite:tflite_custom_op_resolver_calculator",
        "//mediapipe/calculators/tflite:tflite_inference_calculator",
        "//mediapipe/calculators/tflite:tflite_tensors_to_segmentation_calculator",
        "//mediapipe/calculators/video:opencv_video_decoder_calculator",
        "//mediapipe/calculators/video:opencv_video_encoder_calculator",
    ],
)

ran bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hair_segmentation:hair_segmentation_cpu (got INFO: Build completed successfully, 1 total action)
running
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/hair_segmentation/hair_segmentation_cpu    --calculator_graph_config_file=mediapipe/graphs/hair_segmentation/hair_segmentation_desktop_live.pbtxt  --input_video_path=test_video.mp4 --output_video_path=hair_out.mp4
Prints the graph then writes :
I20210414 10:12:47.522758 13534 demo_run_graph_main.cc:54] Initialize the calculator graph.
I20210414 10:12:47.523617 13534 demo_run_graph_main.cc:58] Initialize the camera or load the video.
I20210414 10:12:47.603744 13534 demo_run_graph_main.cc:79] Start running the calculator graph.
E20210414 10:12:47.611158 13534 demo_run_graph_main.cc:154] Failed to run the graph: ValidateRequiredSidePackets failed to validate:
; Side packet "input_video_path" is required but was not provided.
; Side packet "output_video_path" is required but was not provided.

the side packets should be grouped in a separate flag --side_packets=
try
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/hair_segmentation/hair_segmentation_cpu --calculator_graph_config_file=mediapipe/graphs/hair_segmentation/hair_segmentation_desktop_live.pbtxt --side_packets='input_video_path=test_video.mp4 output_video_path=hair_out.mp4'

Thanks @mcclanahoochie  but now I get ERROR: Unknown command line flag 'side_packets'

try changing        "//mediapipe/examples/desktop:demo_run_graph_main_gpu",
to                "//mediapipe/examples/desktop:simple_run_graph_main",

Thanks  @mcclanahoochie  🥇.
With simple_run_graph_main I could run the graph like so (btw simple_run_graph_main expects input_side_packets instead of side_packets)
This works :
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/hair_segmentation/hair_segmentation_cpu --calculator_graph_config_file=mediapipe/graphs/hair_segmentation/hair_segmentation_desktop_live.pbtxt --input_side_packets='input_video_path=test_video.mp4,output_video_path=hair_out.mp4'

Thanks again.
P.S. should I open a PR with hair_segmentation_desktop_file.pbtxt and build etc. into the main repo ?


Changing moisture threshold to flag

It looks like moisture levels may vary from system to system, so instead of
hardcoding the moisture threshold at which the pump starts running, we make
it a command-line flag so that it is easily configurable.

Coverage decreased (-0.1%) to 80.42% when pulling 7aef45e3c4c327fdfca2ecf73700b23557ec55e4 on mtlynch:threshold-as-flag into 1d3d41062a00b83050dcbdde525aa1fa154c292e on JeetShetty:master.


Show warning for permanent deletion; no warning otherwise

What feature or improvement do you think would benefit Files?
First off, love the app. Incredible work!
One thing I miss about Windows Explorer is its style of deletion warnings. When a file is deleted to the recycle bin, it does not provide a warning, but it does warn you for permanent deletions, such as 1) deleting a file from a network drive and 2) deleting a file with the shift+delete hotkey.
From what I can tell, Files seems to be all-or-nothing, warning in all cases when the option "Folders > Show confirmation dialog when deleting items" is enabled and never warning when the option is disabled.
Requirements
The "show confirmation dialog when deleting items" preference will have three options:

"Always warn": whenever a file is deleted, a confirm dialog will appear.
"Never warn": no confirmation dialog will be shown for file deletion.
"Warn for permanent deletions": in the case of permanent deletions (e.g., deleting a file from a network drive, or deleting a file with the shift+delete shortcut), a confirmation dialog will be shown. When files are deleted to the recycle bin, no confirmation dialog will be shown.

Files Version
<IP_ADDRESS>
Windows Version
Edition	Windows 11 Home Version	22H2 Installed on	9/30/2022 OS build	22621.1105 Experience	Windows Feature Experience Pack 1000.22638.1000.0
Comments
No response

Wow, really? I would have thought that would be the minority view. Is having three options as I suggested too complicated?

It would make sense to have it show for permeant delete except for the recycle bin since the user already knows that it will be permanent.

It seems that the current Files always brings up a confirmation dialog when emptying the trash. I think that should be left as it is.
Should we add a new setting to confirm permanent deletion?

It would make sense to have it show for permeant delete except for the recycle bin since the user already knows that it will be permanent.

We used to but users complained

It seems that the current Files always brings up a confirmation dialog when emptying the trash. I think that should be left as it is. Should we add a new setting to confirm permanent deletion? Or, should the dialog always appear regardless of the setting?

I agree that it makes sense to always warn when emptying the trash. However, this is inconsistent with the behavior where permanent deletions elsewhere are treated no differently.
One large reason I would find this useful is that I often work from a NAS with no recycle bin. When deleting files, it's nice to have the reminder that deletion will be permanent so that I am forced to stop and think whether I really should delete the file before I click okay. In contrast, I give little thought to deleting files locally as I know there will be a long period where they are accessible in my recycle bin (not to mention that anything important is backed up to cloud storage).

How about this?

Ok, I will make it later.

How about this?

That's exactly what I had in mind, looks great!


What is your pycuda version and python version?

I use a  pycuda-2018.1 and python 2.7, but when I run the code, I always get a error:
pycuda.driver.CompileError: nvcc compilation of /tmp/tmpY94Kcb/kernel.cu failed
[command: nvcc --cubin -arch sm_70 -I/usr/local/lib/python2.7/dist-packages/pycuda/cuda kernel.cu]
[stderr:
nvcc fatal   : Value 'sm_70' is not defined for option 'gpu-architecture'
].
And I can not solve this problem from google.

This is an issue should be posted in pycuda repository. I think the problem may be caused by a too old cuda version.


Is the data augmentation performed accurately?

Hi,
Is the following code in train.py correct?
for id in ids_train_batch.values:
img = cv2.imread('input/train/{}.jpg'.format(id))
img = cv2.resize(img, (input_size, input_size))
mask = cv2.imread('input/train_masks/{}_mask.png'.format(id), cv2.IMREAD_GRAYSCALE)
mask = cv2.resize(mask, (input_size, input_size))
img = randomHueSaturationValue(img,
hue_shift_limit=(-50, 50),
sat_shift_limit=(-5, 5),
val_shift_limit=(-15, 15))
img, mask = randomShiftScaleRotate(img, mask,
shift_limit=(-0.0625, 0.0625),
scale_limit=(-0.1, 0.1),
rotate_limit=(-0, 0))
img, mask = randomHorizontalFlip(img, mask)
mask = np.expand_dims(mask, axis=2)
x_batch.append(img)
y_batch.append(mask)
From what I understood so far about data augmentation, the idea is "adding" more training data but the code above "update" original image/mask, apply image processing algorithms on them in a series manner then use the final processed ones as training data. So, basically, we did not increase training data. Should we perform the following tasks instead?

Add original img/mask to x_batch/y_batch
Add every output of data augmentation algorithm to x_batch/y_batch

I know that It will increase training time a lot but looks like it is the right thing to do. Please correct me If I'm wrong.
Thanks,

The augmentation is performed on a random basis with a 0.5 threshold. That actually means that on average, each image will be augmented only in half of the training epochs, being slightly changed each time. So the number of augmentations will be big, keeping the single epoch training time the same. Most likely, every image from the original set will be shown to the network at least once.
Also, you can tune it to get a better performance. For example, you can decay the threshold each epoch in such a way, that eventually only originals will be fed to the network.

Got it, now I understand the meaning of random augmentation. Thank you guys alot.


Build issues on Windows

We're running into build issues on Windows (https://github.com/Brainsware/sealas/issues/12) with the appveyor CI.
The full log is here:
https://ci.appveyor.com/project/Brainsware/sealas/build/1.0.74
It actually builds

==> argon2_elixir
Microsoft (R) Program Maintenance Utility Version 14.11.25547.0
Copyright (C) Microsoft Corporation.  All rights reserved.
	erl -eval "io:format(\"~s~n\", [lists:concat([\"ERTS_INCLUDE_PATH=\", code:root_dir(), \"/erts-\", erlang:system_info(version), \"/include\"])])" -s init stop -noshell > Makefile.auto.win
	nmake /                   /F Makefile.win priv\argon2_nif.dll
Microsoft (R) Program Maintenance Utility Version 14.11.25547.0
Copyright (C) Microsoft Corporation.  All rights reserved.
'priv\argon2_nif.dll' is up-to-date
Compiling 3 files (.ex)
Generated argon2_elixir app

but then when it's being loaded it fails with the following error:
...07:26:38.773 [error] Process #PID<0.5627.0> raised an exception
** (RuntimeError) An error occurred when loading Argon2.
Make sure you have a C compiler and Erlang 20 installed.
If you are not using Erlang 20, either upgrade to Erlang 20 or
use bcrypt_elixir (version 0.12) or pbkdf2_elixir.
See the Comeonin wiki for more information.
    (argon2_elixir) lib/argon2/base.ex:16: Argon2.Base.init/0
    (kernel) code_server.erl:1347: anonymous fn/1 in :code_server.handle_on_load/5
07:26:38.773 [warn] The on_load function for module Elixir.Argon2.Base returned {%RuntimeError{message: "An error occurred when loading Argon2.\nMake sure you have a C compiler and Erlang 20 installed.\nIf you are not using Erlang 20, either upgrade to Erlang 20 or\nuse bcrypt_elixir (version 0.12) or pbkdf2_elixir.\nSee the Comeonin wiki for more information.\n"},
 [{Argon2.Base, :init, 0, [file: 'lib/argon2/base.ex', line: 16]},
  {:code_server, :"-handle_on_load/5-fun-0-", 1,
   [file: 'code_server.erl', line: 1347]}]}
  1) test registration register with an existing email (SealasSso.RegistrationControllerTest)
     test/sealas_sso/controllers/registration_controller_test.exs:20
     ** (UndefinedFunctionError) function Argon2.Base.hash_password/3 is undefined (module Argon2.Base is not available)
     code: |> User.create_test_changeset(@create_attrs)
     stacktrace:
       (argon2_elixir) Argon2.Base.hash_password("some password", <<243, 123, 130, 7, 67, 238, 196, 60, 221, 18, 6, 156, 0, 102, 142, 152>>, [])
       (sealas_sso) lib/sealas_sso/types/hashedpassword.ex:7: EctoHashedPassword.cast/1
       (ecto) lib/ecto/changeset.ex:509: Ecto.Changeset.cast_field/8
       (ecto) lib/ecto/changeset.ex:472: Ecto.Changeset.process_param/7
       (elixir) lib/enum.ex:1826: Enum."-reduce/3-lists^foldl/2-0-"/3
       (ecto) lib/ecto/changeset.ex:449: Ecto.Changeset.cast/6
       test/sealas_sso/controllers/registration_controller_test.exs:22: (test)

Also working on Windows, I got a similar problem about the Makefile. This post (at least the two last messages) helped me : https://github.com/riverrun/comeonin/issues/120#issuecomment-336847981
I got a new error now, but at least it compiles and Comeonin works.

For this issue, make sure you are using version 1.2.13.

That is the version that's used (but I also fixated it now in the mix file)
* Getting argon2_elixir (Hex package)
  Checking package (https://repo.hex.pm/tarballs/argon2_elixir-1.2.13.tar)

Ok. Does this issue only happen when using CI?

Yes, on my local machine (Win10x64) it works fine

I have made a couple of changes to the Makefile.win file in version 1.2.14.
Could you try it out and let me know if that works?

Sadly still the same: https://ci.appveyor.com/project/Brainsware/sealas/build/1.0.98

Ok. Thanks for letting me know. I'll have a closer look at the output and get back to you soon.

I see you are using mingw to build the dll file. Is that what you are using on your local machine?

No, I'm not, but we're also not using mingw to build anything on the CI. It was just included from a previous iteration. Took it out now (didn't change anything). We're using VS2015.

If you are running the tests async, can you try running it without async?

As far as I can see async is disabled by default - so it's disabled in our testsuite.

Ok. I'll have another look at the log and see if anything stands out.

Could you check that the vcvarsall.bat command is being run correctly?
Also, this issue might have some information related to the problems you are having.

Running file on those files reveals that the architecture is probably correct:
file deps\argon2_elixir\priv\argon2_nif.dll
deps\argon2_elixir\priv\argon2_nif.dll: PE32+ executable (DLL) (GUI) x86-64, for MS Windows
file "c:\program files/erl9.0/erts-9.0/bin/erl.exe"
c:\program files/erl9.0/erts-9.0/bin/erl.exe: PE32+ executable (console) x86-64, for MS Windows

Just to be safe I'm executing vcvarsall before every stage of the build process. Sadly, no change

I'm afraid to say I don't know what to suggest next :(
Just to clarify the situation, the on_load errors are normally caused by one of the following:

the so / dll file cannot be found
there is a version mismatch between the version of Erlang that built the so / dll and the version that is running it
(with Windows) the environment variables are not correctly set
(with argon2_elixir) lack of support for dirty schedulers (Erlang 20 supports them by default, so that does not appear to be the problem here)

Maybe you can contact the CI provider and see if they have any suggestions about how to solve this problem.

Will do that - thanks for the help!
One thing that I just noticed, when looking at the erlang versions: the build process seems to include "c:/Program Files/erl8.3/erts-8.3/include", not erl9.0. Could that be/do anything? How would I check for differences in erlang versions building and running the code?

OH GOD YES!
That was it. Erlang 19.3 was pre-installed by appveyor and got used to compile the DLL.
Removed it:

SET PATH=%PATH:C:\Program Files\erl8.3\bin;=%
And then went on to install Erlang 20 as usual.

Now it works!

Great to hear you got it fixed.

@DKhalil, just want to give a big thanks for this comment!


Fix typos

@robinharwood, @Xelu86
Can you review the proposed changes?
#label:"aq-pr-triaged"
@MicrosoftDocs/public-repo-pr-review-team


Handle transform functions

I'd like to dig up #68, because I'm using @fand's tool and I'm also stuck when it comes to using glslify. It still doesn't involve sourcemaps within its transform API. Yet I prefer to have error messages which state incorrect line numbers, than no errors at all. Therefore I propose to integrate transform functions as well.
It is meant for glslify but I don't want to force its usage, so it mimics its API. When glslify will work with sourcemaps, this patch should also evolve.
Expected usage: https://github.com/KoltesDigital/veda/commit/a4e6e27bcd22c57132b323a5de260fc1f03a3506

I agree on the principle, but I'm not sure whether it'd fit with Atom spirit. As the provide/consume API is only accessible by Atom packages, it'd mean that glslify would be a package, that anyone could install on its own, but this package would do nothing in itself. I'm not aware of any package that works like this. If you are, please let me know, it'd interesting to study from them and make a similar thing.
Well, you could also argue that we don't care about the spirit, as long as it's useful, and maybe the spirit will adapt :)

Hmm, I assumed glslify was another linter that produced "compatible" output to what glslangValidator does, but it looks to be more of an ecosystem than a linting tool.
You mention that the results are already wrong here, is there a reason you don't do these transformations on the results in whatever you would be pushing these transforms in from?


Lazy Loading react component get some warning

I am building a Vite react ts app. I wanted to code split my components by using React.lazy
I tried import the component like so
import { lazy } from "react";
const Login = lazy(() => import("./Login.tsx"));

Is this supported? or am I doing something wrong

No, it does not output
[vite] hmr invalidate /src/components/Login.tsx Could not Fast Refresh. Learn more at https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react#consistent-components-exports
HMR Fast Refresh actually works, but the eslint react-refresh gives a warning on my IDE
ESLint: Fast refresh only works when a file only exports components. Move your component(s) to a separate file.(react-refresh/only-export-components)
Should this be fix on this eslint plugin?

Can I have more code that trigger the issue. I don't think this two lines triggers a warning

Yeah this kind of a false warning, I will see what I can do.
There are two solutions:

Put a disable comment for this rule for all the file. This will not actually break fast refresh so this ok>
Instead of exporting the router, export a component that render the Router provider

The advantage of the second solution is that if react-rouder handle runtime change in the router config, you could HMR updates to the config

I'll try implementing the second solution first. Thanks for the quick feedback.

Second option works fine for me 👍
Example:
import {
  RouteObject,
  RouterProvider,
  createBrowserRouter,
} from 'react-router-dom'

const MyComponent = React.lazy(() => import('./MyComponent'))

const routes: RouteObject[] = [
  {
    element: <MyComponent />,
    path: 'example',
  },
]

const router = createBrowserRouter(routes)

export const Routes: React.FC = () => {
  return <RouterProvider router={router} />
}

I looked at it more carefully and both the Babel plugin and SWC are generating some registration code for const Login = lazy(() => import("./pages/Login"));, so actually the warning may not be wrong. I need to look at it in more details, I will comeback to it affer other issues but I think exporting a wrapper of the RouterProvider is a good way to fix the issue for now

Second option works for me also. Thanks

@netcoding87 thanks for the example.
I wonder how to export router then to do navigation outside of react components.
Are there any ideas?

@kurpav In that case you can have a lazy-routes.tsx which contains exports like const ViewA = React.lazy(() => import('./views/ViewA.tsx')) and then have a router.tsx which can import all components and export the router.
Be careful to where you import the router so it doesn't create circular imports, which are bad for HMR.

I want to implement option two. But what if I have two route files (public and protected) like React Bulletproof?
I can't create two browser routers. my route files are very similar to React bulletproof.

Same as the answer above, you need to put the the lazy wrappers into a separate file so that the router file doesn't contains any component and can safely be exported

I was able to get around this by using react's createElement() and changing the file extension from .tsx to .ts.
So the code went from this:
// routesPublic.tsx
import { lazy } from "react";
import { RouteObject } from "react-router-dom";

// Fast refresh warning!
const Login = lazy(() => import("@/pages/Login"));

const routesPublic: RouteObject[] = [
  {
    path: "/",
    element: <Login />,
  },
];

export default routesPublic;

to this:
// routesPublic.ts
import { createElement, lazy } from "react";
import { RouteObject } from "react-router-dom";

// No warning!
const Login = lazy(() => import("@/pages/Login"));

const routesPublic: RouteObject[] = [
  {
    path: "/",
    element: createElement(Login),
  },
];

export default routesPublic;

In my case, I'm using separate files for public and private routes. I  wrapped them in a routes.tsx file and used them normally in the router.
// routes.tsx
import { RouteObject } from "react-router-dom";
import { RouteAuthRequired } from "../components";

import routesPrivate from "./routesPrivate";
import routesPublic from "./routesPublic";

export const routes: RouteObject[] = [
  ...routesPublic,
  {
    element: <RouteAuthRequired />,
    children: routesPrivate,
  },
];

export default routes;

// router.ts
import { createBrowserRouter } from "react-router-dom";
import routes from ".";

export const router = createBrowserRouter(routes);

export default router;

any updates?

Maybe I should close the issue, I don't think I can do much than adding a section to the documentation explaining that const Login = lazy(() => import("./pages/Login.tsx")); is creating a component and so that this files should obey to the Fast refresh rules

I've pinned the issue because I think other people will run into it, but yeah the limitation is annoying here but necessary to get nice DX. You can choose to ignore the warning on this router file, but I think exporting the route provider is what will get the trade off between number of files and DX: https://github.com/ArnaudBarre/eslint-plugin-react-refresh/issues/25#issuecomment-1752110430


Fixup visuals

new logo
new masthead for Santa Monica
rename to Game Science

@wkirwin @jhemann new logo, Santa Monica mast head, rename to Game Science,


fix(dotcom-shell): remove padding top

Related Ticket(s)
#8703
Description
This removes the padding top above the Dotcom Shell in React Storybook.
Changelog
Removed

removed paddingTop from Dotcom shell react storybook

looks like there are some conflicts that need resolving


Zero downtime deployments

Dokku offers this with its CHECKS file. Today there's about at 20 second downtime between deployments

closed via https://github.com/sedouard/gittrack/pull/95


Render

This is a working but ugly node rendering addition.
For now: in order to build the site with the nodes present, one needs to clone the nodes repo thus before building :
git clone git@github.com:necx-org/nodes _nodes

Thanks @katyhuff - look forward to using this!


Make knives do extra melee damage against xenos

About the PR
CM13 parity
fixes #3616
Media
https://github.com/user-attachments/assets/c2f26a30-82ec-45c1-a630-14eaff17d581
Requirements

[X] I have read and I am following the Pull Request Guidelines. I understand that not doing so may get my pr closed at maintainer’s discretion
[X] I have added screenshots/videos to this PR showcasing its changes ingame, or this PR does not require an ingame showcase

:cl:

add: Melee weapons now do x1.5 extra damage against xenonids.

Does this also do on thrown hit? Because throwing knives also do extra damage if thrown.

No

added media

Lowered devour damage by 0.5% to match the correct values
doesnt lower throwing knife though because the devour damage is so low its basically useless


Comlink with serviceWorker

With version 2.0 I added support for serviceWorker via comlink.
I'm not shure if it is bug free (with SW-Updates...)  so please feel free to report bugs about it in this issue.

closing as v3 will not support it.


SP-2245 - Update PDF Service to Alpine 3.20 to get past some Rust vulns #minor

Update: this is rebased etc, still waiting on the business. I'll chase up this week.


A question of dynamic groups

Using the feature Dynamic Groups, can I change an old threshold configuration to any other threshold configuration while keeping the secret ? For example, change (3, 5) to (6, 7).
I don't find Dynamic Groups in paper GG18.  The implementation of dynamic groups comes from which paper?

Hi @lucky1024 ,
yes, Dynamic groups allows for old committee to assign a new committee with a new secret shares. The old committee should delete their keys but in case they are backed up I assume you can have both committees at the same time.
The protocol is indeed not part of GG18, however, it is a simple enough protocol that uses common cryptographic building blocks. I would make sure you are at peace with the security of the protocol (perhaps proving it yourself) before using it.
If you indeed decide to prove the protocol (or even write it as a spec) that would be a great contribution!

I‘m not familiar with these simple enough protocol 😭
I find there are many papers focus this topic:
[SLL08] David A. Schultz, Barbara Liskov, and Moses D. Liskov. Mobile proactive secret sharing. 2008.
[BDLO15] Joshua Baron, Karim El Defrawy, Joshua Lampkins, and Rafail Ostrovsky. Communication-optimal proactive secret sharing for dynamic groups. 2015.
[MZW+19] Sai Krishna Deepak Maram, Fan Zhang, Lun Wang, Andrew Low, Yupeng Zhang, Ari Juels, and Dawn Song. CHURP: dynamic-committee proactive secret sharing. 2019
Could you give me some clues about implementation detail in tss-lib?

Here is the analysis taken from https://eprint.iacr.org/2020/1052.pdf :

there is now an extra round at the end to verify all parties got correct messages and otherwise abort.
The protocol resembles a distributed key generation but instead of generating fresh random shares the parties secret share the existing shares and check that the public key remains the same.
Remember that the paper assumes that the protocol implementation is secure. I never tried to write down the security guarantees or prove security claims about this protocol. I suggest you do your own research

Thank you for sharing such useful information.


Release releasetool 2019.06.06

This pull request was generated using releasetool.

Release is at https://github.com/googleapis/releasetool/releases/tag/releasetool-2019.06.06

Published: https://pypi.org/project/gcp-releasetool/2019.6.6/