Cannot exit OTA when disconnect with wifi hostpot (IDFGH-2916)

Environment

Module or chip used:  ESP32-WROOM-32D
IDF version: v4.1-dev-2055-gf5b82c5b1
Build System: Make
Compiler version: xtensa-esp32-elf-gcc.exe (crosstool-NG esp-2019r2) 8.2.0
Operating System: Windows
(Windows only) environment type: MSYS2 mingw32
Using an IDE: NO
Power Supply: external 5V

Problem Description
When tried to FOTA my ESP32 device via a HTTP server, i tested to turn off my wifi hostpot (from my pc). And it seem like ESP32 stucked in this error

E (53821) TRANS_TCP: tcp_poll_read select error 0, errno = Success, fd = 55
E (53831) TRANS_TCP: tcp_poll_read select error 0, errno = Success, fd = 55
E (53831) TRANS_TCP: tcp_poll_read select error 0, errno = Success, fd = 55
E (53841) TRANS_TCP: tcp_poll_read select error 0, errno = Success, fd = 55
E (53851) TRANS_TCP: tcp_poll_read select error 0, errno = Success, fd = 55
E (53861) TRANS_TCP: tcp_poll_read select error 0, errno = Success, fd = 55
E (53861) TRANS_TCP: tcp_poll_read select error 0, errno = Success, fd = 55

any idea, and how to fix this. I dont want to have reset the ESP32 by reset button or turn off the device
Steps to reproduce

step1: running native ota example with your wifi hostpot or router ssid/pass
step2: turn off your hostpot or router

@binhla Thanks for reporting. Would you please help provide more details as suggested in the issue template? Information like elf, sdk configuration, backtrace, log outputs, commit ID, hardware and etc. would help us debug further. Thanks.

@binhla Thanks for reporting. Would you please help provide more details as suggested in the issue template? Information like elf, sdk configuration, backtrace, log outputs, commit ID, hardware and etc. would help us debug further. Thanks.

@binhla Thanks for reporting. Would you please help provide more details as suggested in the issue template? Information like elf, sdk configuration, backtrace, log outputs, commit ID, hardware and etc. would help us debug further. Thanks.

Dears, thanks for replying, i added some information, sorry that i cannot share my code

@binhla Thanks for reporting, we have a fix internally under reviewing now, will update once it is available on GitHub. Thanks.


Add wallet type to agent runners, other fixes

Add wallet-type to alice, faber, performance agents
Enable basic logger for execution errors
Check revocation option and tails-server-base option are consistent in performance demo
In the performance demo, fetch the credential definition on alice's side before starting the credential exchange to reduce the initial delay (more accurate numbers)

Codecov Report

Merging #831 (3d792ed) into master (93c1360) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #831   +/-   ##
=======================================
  Coverage   98.73%   98.73%
=======================================
  Files         271      271
  Lines       15158    15158
=======================================
  Hits        14967    14967
  Misses        191      191

I get an error (Faber) when Alice responds with the initial invitation:
Faber      | 2020-12-09 18:35:27,177 aries_cloudagent.core.dispatcher ERROR Handler error: Dispatcher.handle_message
Faber      | Traceback (most recent call last):
Faber      |   File "/home/indy/aries_cloudagent/core/dispatcher.py", line 181, in handle_message
Faber      |     await handler(context, responder)
Faber      |   File "/home/indy/aries_cloudagent/protocols/didexchange/v1_0/handlers/request_handler.py", line 28, in handle
Faber      |     await mgr.receive_request(context.message, context.message_receipt)
Faber      |   File "/home/indy/aries_cloudagent/protocols/didexchange/v1_0/manager.py", line 247, in receive_request
Faber      |     tag_filter={"invi_msg_id": request._thread.pthid},
Faber      |   File "/home/indy/aries_cloudagent/messaging/models/base_record.py", line 238, in retrieve_by_tag_filter
Faber      |     found = cls.from_storage(record.id, vals)
Faber      |   File "/home/indy/aries_cloudagent/messaging/models/base_record.py", line 103, in from_storage
Faber      |     return cls(**params)
Faber      |   File "/home/indy/aries_cloudagent/protocols/out_of_band/v1_0/models/invitation.py", line 43, in __init__
Faber      |     super().__init__(invitation_id, state, trace=trace, **kwargs)
Faber      |   File "/home/indy/aries_cloudagent/messaging/models/base_record.py", line 458, in __init__
Faber      |     super().__init__(id, state, **kwargs)
Faber      | TypeError: __init__() got an unexpected keyword argument 'invitation_url'

@ianco I think that must be related to the last change adding outbound invitation URLs.

@ianco I think that must be related to the last change adding outbound invitation URLs.

Yep this is also broken in the master branch


The list is basically the same which should be used for service worker cache

So why not allow to output the format that platinum-sw-cache expects as well?
@addyosmani

It is already quite easy to use:
20 let Manifest = require('http2-push-manifest/lib/manifest');
21
22 var DIST = '.';
23
24 var dist = function(subpath) {
25   return !subpath ? DIST : path.join(DIST, subpath);
26 };
27
28 gulp.task('cache-config', function(callback) {
29   var dir = dist();
30   var config = {
31     cacheId: packageJson.name || path.basename(__dirname),
32     disabled: false
33   };
34
35   let f = 'index.html';
36
37   // Make a path if one wasn't given. e.g. basic.html -> ./basic.html
38   if (f.indexOf(path.sep) === -1) {
39     f = `.${path.sep}${f}`;
40   }
41
42   let basePath = f.slice(0, f.lastIndexOf(path.sep))
43   let inputPath = f.slice(f.lastIndexOf(path.sep) + 1);
44
45   let manifest = new Manifest({basePath, inputPath, name: 'cache-config.json'});
46   manifest.generate().then(output => {
47     config.precache = output.urls.map((url) => {
48       return url.startsWith('/') ? url.slice(1) : url;
49     });
50     config.precache.push('./');
51
52     let md5 = crypto.createHash('md5');
53     md5.update(JSON.stringify(config.precache));
54     config.precacheFingerprint = md5.digest('hex');
55
56     var configPath = path.join(dir, 'cache-config.json');
57     fs.writeFile(configPath, JSON.stringify(config), callback);
58   })
59 });

So with small changes this would fit well for usage by the Polymer Starter Kit.

What happens when you have multiple files? e.g. /index.html, /another.html, and /third.html.

You would have to iterate over a list of these files and join the results. The http2-push-manifest binary does similar (which I didn't do above - but should be a simple change)

Not sure I understand this issue. Is it about partially merging two independent libraries or aligning the format?
If it's the latter, what happens if either sw-cache or http2-push need to add a new feature touching on file format. The two seem to be quite distant in how they deliver desired functionality, it's just so happens that their file formats are similar today. Doesn't mean it won't change. In fact there's a good chance as both are very young and unpolished techniques.

In other words: you unlikely would want to push everything you'd like to pre-cache.

OK, the Polymer Starter Kit has some gulp task which allows to generate the cache json file for the platinum-sw polymer element. It is not very smart though and basically relies on you using vulcanize to merge all the polymer elements into one file. Now if you don't want to do that and instead want to use http2 you will most probably use http2-push-manifest to generate the file list.
That brings the problem that you need to generate the cache list differently which is exactly what http2-push-cache does and it has nice code for finding the list of files (tracking imports etc) in the project which can either be pushed and/or cached.
Of course you don't need to track the same files for push and cache, but the code for tracking the files (through imports) is the same and would be good to reuse. You would probably want both as separate gulp tasks or similar.

I see the point but your last comment makes me feel like this issue simply belongs to PSK with a title similar to "Improve precache file generation gulp task" and has nothing in common with http2-push-manifest generator except for code pattern re-usage.
What stops you from just using http2-push-manifest in PSK as is, and improve on that PSK cache gulp task independently.

Nothing really, I didn't know it was that easy to reuse the code before I tried :)

I think https://github.com/GoogleChrome/http2-push-manifest/issues/5#issuecomment-197419250 is the key point. What you push will almost always be a subset of things things you cache. This makes me believe the tasks in PSK could be updated to consume/modify the format from this script. Keeping the two separate still feels like a good idea.


403 when multipart/form-data is added as content-type

What version of Hono are you using?
4.5.8
What runtime/platform is your app running on? (with version if possible)
Cloudflare workers
What steps can reproduce the bug?
So when i try to upload files on my upload endpoint and i make the content-type of the request to be multipart/form-data a 403 status code is thrown
This the code snippet for cors
app.use("*", cors({
  origin: "*",
  credentials: true,
  allowHeaders: ["Content-Type", "Authorization"],
  allowMethods: ['GET', 'POST', 'OPTIONS', 'PUT', 'DELETE'],
}))

This is the code snippet for the upload route
productRoutes.post(
  "/upload-image",
  async (c) => {
   // Use the formData() method to parse the form data
    const body = await c.req.parseBody();
    const file = body["file"]

    // Access the uploaded file (assuming form field is named "file")
    //if (!file) return c.json({error: "No file uploaded!"}, 400)

    // File metadata
    console.log(file);
    return c.json({})
 }
)

What is the expected behavior?
the expected behaviour is to allow my api to upload the file and give status code based on the success of the file upload
What do you see instead?
No response
Additional information
No response

The list of middleware that returns 403 on Hono, but you do not appear to be using it, so I think it does not seem to be Hono problem.
https://github.com/search?q=repo%3Ahonojs%2Fhono 403&type=code

Same issue
https://github.com/honojs/hono/issues/3265
https://github.com/honojs/hono/issues/2226

@adex-codez Can you share a minimal project to produce it? If you can't, I'll close this issue.

I'll close this since there has not been a reaction.


chore: add multiformats tutorial

License: MIT
Signed-off-by: Vaibhav Saini<EMAIL_ADDRESS>What kind of change is it?

[x] Addition
[ ] Removal
[ ] Edit
[ ] Other

Checklist

[x] I edited the /data directory instead of the README.md.
[x] This PR includes only one addition/removal/edit.
[x] I ran the make build command following my edits to the /data directory.
[x] I have followed the CONTRIBUTING.md guidelines.

Details
Added an article on Multiformats

@hacdias I have multiple articles that I want to add. How should I do that? Do the Contributing guidelines allow that? I am not sure about them.

@vasa-develop please make a PR for each one so they can be approved sepparatly! How many are they?

@hacdias  8 more

@vasa-develop perhaps you could bundle the most related ones in single PRs

@hacdias  Ok, I will batch the articles in 2 PRs.


Epic: on-demand S3 downloads

On-Demand Download
This epic tracks the effort to get Heikki's https://github.com/neondatabase/neon/pull/2595 shipped.
Roadmap
(Dates in this list is time of merge into main)

Nov 22 -> Nov 25 -> Nov 28: Land storage_sync2 PR #2785

[x] root out flaky tests
[x] port relevant unresolved conversations in original PR https://github.com/neondatabase/neon/pull/2785#issuecomment-1324041213
[x] scan for TODO / FIXME and convert into follow-up issues

on Nov 23, @problame opened corresponding review comments for all FIXMEs. Will need another pass once those are addressed.

[x] update storage_sync doc comment https://github.com/neondatabase/neon/pull/2903
[x] test coverage for retrying uploads https://github.com/neondatabase/neon/pull/2892

not needed for downloads at this point because

Tenant::attach() can be retried manually, and it will resume attach correctly
once on-demand download lands, we'll have retries in there

[x] address FIXMEs regarding race conditions around setting tenant state, e..g, concurrent attach & detach #2910
[x] handle & regress-test race condition between timeline delete & layer file upload https://github.com/neondatabase/neon/pull/2921

After storage_sync2 lands in staging: exercise storage_sync2 attach code — @LizardWizzard, possibly, can be affected by these changes with the migration. Nevertheless, he will touch these parts during the migration.

kill a PS and create a new one
manual detach & attach of individual tenants
together with Kirill / SRE / on-call people
make sure existing tools work (neonadmin)

Nov 25 -> Dec 1 : Follow-up changes to storage_sync2

[x] #2977 Blocker for production

[x] #3006 Blocker for production

[x] bring back metrics (measure_remote_op) https://github.com/neondatabase/neon/pull/2892

[x] #2928

[x] #2946

[x] #2930

[x] #3018

[x] #2907

[x] Make sure tenant reload can be used to resolve clogged upload queue #2537 Duplicates #2977

Dec 16 -> Dec 21: Port On-Demand Download https://github.com/neondatabase/neon/pull/3013

Dec 20 -> Dec 31: Refactor code to reflect new separation of concerns & reduce source-level conflicts in the future.

[ ] https://github.com/neondatabase/neon/issues/3208

Move storage sync to hypotetical timeline/ module inside tenant.
Move tenant_* files inside this module.
Split storage_sync.rs into upload_queue and remote_timeline_client
Split big tenant/timeline files.
One candidate for separate module is initialization logic. Consider accumulating it in separate structures like TimelineBuilder, TimelineLoader etc.
We do this after porting on-demand download as it might add new perspectives to initialization lifecycle.
#3210

Dec 31: Stop/delete/start the project on stage to test the on-demand download

[ ] Observability for downloads while attaching tenants. Might punt this if on-demand download arrives quickly. But right now we don't have any observability, not even scoping to task_mgr
[ ] Download queue size

Related Future Work
HIGH PRIORITY Eviction of cold layer files  to S3. (#2476)
This requires on-demand download, to fill back in evicted pages.
But needs further design, e.g., eviction policy, heuristics, ...

#3172

LOWER PRIORITY Figure out how to do tenant size computation without downloading remote layers (logical more tricky than physical, we don't have the metadata in index_part.json).
If we don't do this, currnent logical size on-demand download will redownload layers, defeating the point of layer file eviction to S3.

Original description from @kelvich
Right now we download all the history from the S3 during tenant attach. Way better to do that on-demand.
As we will have on-demand load we can think of cold data eviction (probably as a separate issue).

[x] https://github.com/neondatabase/neon/issues/2035
[x] https://github.com/neondatabase/neon/pull/2376
[x] https://github.com/neondatabase/neon/pull/2231
[x] https://github.com/neondatabase/neon/issues/2456

Follow-up epic: #3208 this one can be closed?

Add your Issue to be part of this Epic


Add SynonymToken

Example:
TextType["Adjective"]~~SynonymToken["music"]

Which would replace SynonymToken with Alternatives[<synonyms_for_music>].
Could also do AntonymToken[...]

Or could be TextType["Synonym", "music"]

There is a Synonyms function. I can use that when expanding the LexicalPattern.


Error when adopting the ESP32-S3-BOX-3B into Esphome

Hello,
I've been trying to adopt my new ESP32-S3-BOX-3B into  Esphome, but when I click on Install, I face the following error. I think this happened due to a rate limit on Github, and since then I alway face this error.
I tried removing folders inside the container with no luck.

Please, would it be possible to receive some guidance/hint on what should I do to "cleanup" the Esphome config (without losing all data)? And, did you see this error before? I didn't found anything on the Internet 😢
Many thanks in advance! 🙏

I've no solution, but asked the same question here: https://community.home-assistant.io/t/compiling-esp32-s3-box-3-fails-and-gives-failed-config-font-is-missing-791-glyphs/797536

This is fixed in #34

I'm seeing this following #34 - here's my yaml:
substitutions:
  name: esp32-s3-box-3
  friendly_name: somename
packages:
  esphome.voice-assistant: github://esphome/wake-word-voice-assistants/esp32-s3-box-3/esp32-s3-box-3.yaml@main
esphome:
  name: ${name}
  name_add_mac_suffix: false
  friendly_name: ${friendly_name}
api:
  encryption:
    key: somekey

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

I am still seeing this as well

It seems like it caches the file locally somewhere. I worked around this by removing the add-on from Home Assistant and re-installing it, but this isn't an elegant solution.

It seems like it caches the file locally somewhere. I worked around this by removing the add-on from Home Assistant and re-installing it, but this isn't an elegant solution.

It seemed like this to me too.  I did a clean build files but it didn't appear to make any difference.

The package is cached for 24 hours from the last successful grab from github.
You can change:
packages:
  esphome.voice-assistant: github://esphome/wake-word-voice-assistants/esp32-s3-box-3/esp32-s3-box-3.yaml@main

to
packages:
  esphome.voice-assistant:
    url: https://github.com/esphome/wake-word-voice-assistants
    file: esp32-s3-box-3/esp32-s3-box-3.yaml
    ref: main
    refresh: 0s

and it should get the new file right away

Many thanks!!! Seems it is fixed 😄
I have a different error now, so there is some advance.
I guess this thread can be closed then.


Update licensing text

Minor tweaks to licensing stuff.
Fixed cut off LICENSE file.
Adding license boilerplate to all source files.

@jjasghar here it is

@mattcousens it looks like it broke the compile?
Step 9/11 : RUN cd /src && cobc -free -x -o helloworld-exe helloworld.cobol

 ---> Running in 0dc4aad4597d

helloworld.cobol:5: Error: syntax error, unexpected OF, expecting TOKEN

The command '/bin/sh -c cd /src && cobc -free -x -o helloworld-exe helloworld.cobol' returned a non-zero code: 1

The command "docker build -t cobol_test ." failed and exited with 1 during .

Which is weird just adding the comments?

Trying this again using a *> for the comments

Awesome, thanks for this :)


Notify Contributors when List Completes Processing

Overview
The length of time the system takes to process a list upload varies
dependent on multiple factors. To save users having to repeatedly check
back to see if their upload has finished processing, and to prompt them
to complete the Confirm / Reject process, we send an automated email
notification letting users know when their upload has been processed.
Connects #928
Demo

Notes
We intend to later adjust this to send a different message to contributors who have additional lists already in the database.
Testing Instructions

In vagrant, run ./scripts/manage batch_process -l 7 -a "notify_complete"

[ ] An email should print with the correct contributor email (list admin).
[ ] The email text should match provided text

Checklist

[ ] fixup! commits have been squashed
[ ] CI passes after rebase
[ ] CHANGELOG.md updated with summary of features or fixes, following Keep a Changelog guidelines

Looking at this now.

Code looks good. I am going to push up a temporary commit to test the Batch behavior in staging.

If you would like to pair on figuring out the additional Terraform statements required send me a calendar invitation. I would like us to attempt to fix it before bringing in ops and if we are successful, having them review our changes.
Since we have this branch deployed to staging, I think we can iteratively make changes and run terraform plan in development (pointed at staging).

I paired on this with @TaiWilkin and thought that the change below may be sufficient to get the email permission applied correctly. We tried manually planning and applying this to staging from development but due to what I believe is user error, did not have a successful test.
diff --git a/deployment/terraform/iam.tf b/deployment/terraform/iam.tf
index 8f04892..dfaa782 100644
--- a/deployment/terraform/iam.tf
+++ b/deployment/terraform/iam.tf
@@ -46,6 +46,12 @@ resource "aws_iam_role_policy" "ses_send_email" {
   policy = "${data.aws_iam_policy_document.ses_send_email.json}"
 }
+resource "aws_iam_role_policy" "ses_send_email_from_batch" {
+  name   = "SESSendEmailFromBatch"
+  role   = "${aws_iam_role.container_instance_batch.name}"
+  policy = "${data.aws_iam_policy_document.ses_send_email.json}"
+}
+
 data "aws_iam_policy_document" "batch_describe_and_submit" {
   statement {
     effect = "Allow"

(Apologies for the force push, realized I had an intermediate commit in there, not something I would typically do on somebody else's PR)


References to complementary extensions

https://github.com/brettz9/jump-to-anchor/commit/b0495e22c391dfed8555362f9b589feb6c62fb7c#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5R28
https://addons.mozilla.org/addon/show-anchors-2/ is no longer available.
For what it's worth, two alternative complementary extensions are mentioned by me at https://forums.FreeBSD.org/threads/81963/post-530203

Side note
Non-localised AMO URLs, for example https://addons.mozilla.org/addon/jump-to-anchor/, will be more useful to readers whose preferred language is not English.

Thanks for the report!

Thanks for the fix!


enable  python logger package by default when compiling

optional feature request,
Users sometimes having issue creating env variables, feel free to ignore request if rational to have it off by default is justified.

Hi @shah0237
Thank you for your comment.
There is a way to turn on the logger programmatically.
See https://github.com/CheckPointSW/harmony-endpoint-management-py-sdk/blob/669dcb64e493ef172f1dc8e0e7735c9471c0fcc0/README.md?plain=1#L179-L184
You don't have to use env variables to use the logger.
We do not want to open it by default since it's an SDK library meant to be part of other systems.
Feel free to re-open the issue if you have a suggestion for another way to enable it.


organization_id, billing_id, folder_id fill/unfill script for parameter automation and commit obfuscation - in leu of templating

In leu of terragrunt or helm like templating - add a script to write/unwrite all the IDs specific to the customer
fill replaces <ORGAINIZATION_ID>....
unfill resets - in prep of commit obfuscation
targets
	modified:   environments/bootstrap/bootstrap.auto.tfvars
	modified:   environments/bootstrap/organization-config.auto.tfvars
	modified:   environments/common/common.auto.tfvars
	modified:   environments/nonprod/nonp-network.auto.tfvars
	modified:   environments/prod/perimeter-network.auto.tfvars
	modified:   environments/prod/prod-network.auto.tfvars

diff --git a/environments/bootstrap/bootstrap.auto.tfvars b/environments/bootstrap/bootstrap.auto.tfvars
index 4524b35..e7e3d48 100644
--- a/environments/bootstrap/bootstrap.auto.tfvars
+++ b/environments/bootstrap/bootstrap.auto.tfvars
@@ -14,8 +14,10 @@
 bootstrap = {
   userDefinedString           = "" # REQUIRED EDIT Appended to project name/id
   additionalUserDefinedString = "" # OPTIONAL EDIT Additional appended string
-  billingAccount              = "" # REQUIRED EDIT Billing Account in the format of ######-######-######
-  parent                      = "" # REQUIRED EDIT Node in format "organizations/#############" or "folders/#############"
+  billingAccount              = "REPLACE_WITH_BILLING_ID" # REQUIRED EDIT Billing Account in the format of ######-######-######
+  # switch out root_node depending on whether you are running directly off the organization or a folder
+  #parent                      = "organizations/REPLACE_ORGANIZATION_ID" # REQUIRED EDIT Node in format "organizations/#############" or "folders/#############"
+  parent                      = "folders/REPLACE_FOLDER_ID" # REQUIRED EDIT Node in format "organizations/#############" or "folders/#############"
   terraformDeploymentAccount  = "" # REQUIRED EDIT Name of a service account to be created (alphanumeric before the at sign) used to deploy the terraform code
   bootstrapEmail              = "user:" # REQUIRED EDIT In the form of<EMAIL_ADDRESS>   region                      = "" # REQUIRED EDIT Region name. northamerica-northeast1
diff --git a/environments/bootstrap/organization-config.auto.tfvars b/environments/bootstrap/organization-config.auto.tfvars
index c30ba19..50c7cb8 100644
--- a/environments/bootstrap/organization-config.auto.tfvars
+++ b/environments/bootstrap/organization-config.auto.tfvars
@@ -5,17 +5,19 @@
 */

 organization_config = {
-  org_id          = "" # REQUIRED EDIT Numeric portion only '#############'"
+  org_id          = "REPLACE_ORGANIZATION_ID" # REQUIRED EDIT Numeric portion only '#############'"
   default_region  = "" # REQUIRED EDIT Cloudbuild Region
   department_code = "" # REQUIRED EDIT Two Characters. Capitol and then lowercase
   owner           = "" # REQUIRED EDIT Used in naming standard
   environment     = "" # REQUIRED EDIT S-Sandbox P-Production Q-Quality D-development
   location        = "" # REQUIRED EDIT Location used for resources. Currently northamerica-northeast1 is available
   labels          = {} # REQUIRED EDIT Object used for resource labels
-  root_node       = "" # REQUIRED EDIT format "organizations/#############" or "folders/#############"
+  #root_node       = "organizations/REPLACE_ORGANIZATION_ID" # REQUIRED EDIT format "organizations/#############" or "folders/#############"
+  root_node       = "folders/REPLACE_FOLDER_ID" # REQUIRED EDIT format "organizations/#############" or "folders/#############"
+
   contacts = {
<EMAIL_ADDRESS>= ["ALL"] # REQUIRED EDIT Essential Contacts for notifications. Must be in the form EMAIL -> [NOTIFICATION_TYPES]
   }
-  billing_account = "" # REQUIRED EDIT Format of ######-######-######
+  billing_account = "REPLACE_WITH_BILLING_ID" # REQUIRED EDIT Format of ######-######-######
 }

diff --git a/environments/common/common.auto.tfvars b/environments/common/common.auto.tfvars
index de95cde..8bce00f 100644
--- a/environments/common/common.auto.tfvars
+++ b/environments/common/common.auto.tfvars
@@ -17,7 +17,9 @@ org_policies = {
   ]
 }
 folders = {
-  parent = "" #REQUIRED Edit, format "organizations/#############" or "folders/#############"
+   # switch out parent depending on whether you are running directly off the organization or a folder
+  #parent = "organizations/REPLACE_ORGANIZATION_ID" #REQUIRED Edit, format "organizations/#############" or "folders/#############"
+  parent = "folders/REPLACE_FOLDER_ID" #REQUIRED Edit, format "organizations/#############" or "folders/#############"
   names  = ["Infrastructure", "Sandbox", "Workloads", "Audit and Security", "Automation", "Shared Services"] # Production, NonProduction and Platform are included in the module
   subfolders_1 = {
     SharedInfrastructure = "Infrastructure"
@@ -45,7 +47,7 @@ access_context_manager = { # REQUIRED OBJECT. VPC Service Controls object.
 audit = {                                  # REQUIRED OBJECT. Must include an audit object.
   user_defined_string            = "audit" # REQUIRED EDIT. Must be globally unique, used for the audit project
   additional_user_defined_string = ""      # OPTIONAL EDIT. Optionally append a value to the end of the user defined string.
-  billing_account                = ""      # REQUIRED EDIT. Define the audit billing account
+  billing_account                = "REPLACE_WITH_BILLING_ID"      # REQUIRED EDIT. Define the audit billing account
   audit_streams = {
     prod = {
       bucket_name          = ""                     # REQUIRED EDIT. Must be globally unique, used for the audit bucket
@@ -96,7 +98,7 @@ folder_iam = [
 organization_iam = [
   {
     member       =<EMAIL_ADDRESS># REQUIRED EDIT<EMAIL_ADDRESS>group:users<EMAIL_ADDRESS>-    organization = "" #Insert your Ord ID here, format ############
+    organization = "REPLACE_ORGANIZATION_ID" #Insert your Ord ID here, format ############
     roles = [
       "roles/viewer",
     ]
@@ -105,7 +107,7 @@ organization_iam = [

 guardrails = {
   user_defined_string = "guardrails" # Optional EDIT. Must be unique. Defines the guardrails project
-  billing_account     = "" # REQUIRED EDIT. Billing Account in the format of ######-######-######
+  billing_account     = "REPLACE_WITH_BILLING_ID" # REQUIRED EDIT. Billing Account in the format of ######-######-######
   org_id_scan_list = [     # REQUIRED EDIT. Organization Id list for service account to have cloud asset viewer permission
   ]
   org_client = false #Set to true if deploying remote client landing zone.  Otherwise set to false if deploying for core organization landing zone.
diff --git a/environments/nonprod/nonp-network.auto.tfvars b/environments/nonprod/nonp-network.auto.tfvars
index ec4da8d..e36ada8 100644
--- a/environments/nonprod/nonp-network.auto.tfvars
+++ b/environments/nonprod/nonp-network.auto.tfvars
@@ -7,7 +7,7 @@
 nonprod_host_net = {
   user_defined_string            = "" # Must be globally unique. Used to create project name
   additional_user_defined_string = ""
-  billing_account                = "######-######-######"
+  billing_account                = "REPLACE_WITH_BILLING_ID" #"######-######-######"
   services                       = ["logging.googleapis.com" , "dns.googleapis.com"]
   networks = [
     {
diff --git a/environments/prod/perimeter-network.auto.tfvars b/environments/prod/perimeter-network.auto.tfvars
index c8a26a9..f4beffb 100644
--- a/environments/prod/perimeter-network.auto.tfvars
+++ b/environments/prod/perimeter-network.auto.tfvars
@@ -6,8 +6,8 @@

 public_perimeter_net = {
   user_defined_string            = "prod" # must be globally unique
-  additional_user_defined_string = "perimeter"
-  billing_account                = "" #####-#####-#####
+  additional_user_defined_string = "perim" # check 61 char aggregate limit
+  billing_account                = "REPLACE_WITH_BILLING_ID" #####-#####-#####
   services                       = ["logging.googleapis.com"]
   labels                         = {}
   networks = [
@@ -42,8 +42,8 @@ public_perimeter_net = {
 }
 private_perimeter_net = {
   user_defined_string            = "prod" # must be globally unique
-  additional_user_defined_string = "perimeter"
-  billing_account                = "" #####-#####-#####
+  additional_user_defined_string = "perim" # check 61 char aggregate limit
+  billing_account                = "REPLACE_WITH_BILLING_ID" #####-#####-#####
   services                       = ["logging.googleapis.com"]
   networks = [
     {
@@ -77,8 +77,8 @@ private_perimeter_net = {

 ha_perimeter_net = {
   user_defined_string            = "prod" # must be globally unique
-  additional_user_defined_string = "perimeter"
-  billing_account                = "" #####-#####-#####
+  additional_user_defined_string = "perim" # check 61 char agreggate limit
+  billing_account                = "REPLACE_WITH_BILLING_ID" #####-#####-#####
   services                       = ["logging.googleapis.com"]
   networks = [
     {
@@ -113,8 +113,8 @@ ha_perimeter_net = {

 management_perimeter_net = {
   user_defined_string            = "prod" # must be globally unique
-  additional_user_defined_string = "perimeter"
-  billing_account                = "" #####-#####-#####
+  additional_user_defined_string = "perim" # check 61 char aggregate limit
+  billing_account                = "REPLACE_WITH_BILLING_ID" #####-#####-#####
   services                       = ["logging.googleapis.com"]
   networks = [
     {
diff --git a/environments/prod/prod-network.auto.tfvars b/environments/prod/prod-network.auto.tfvars
index e40b1b6..ac274be 100644
--- a/environments/prod/prod-network.auto.tfvars
+++ b/environments/prod/prod-network.auto.tfvars
@@ -7,7 +7,7 @@
 prod_host_net = {
   user_defined_string            = "" # Must be globally unique. Used to create project name
   additional_user_defined_string = ""
-  billing_account                = "######-######-######"
+  billing_account                = "REPLACE_WITH_BILLING_ID" ######-######-######"
   services                       = ["logging.googleapis.com"]
   networks = [
     {

TESTING
fmichaelobrien-macbookpro:pbmm-on-gcp-onboarding fmichaelobrien$ ./writeids.sh -c fill -b 1111-2222-3333 -o 4444-5555-9999 -f<PHONE_NUMBER>01
replacing IDs: billing: 1111-2222-3333 organization: 4444-5555-9999 folder:<PHONE_NUMBER>01 from placeholders
environments/bootstrap/bootstrap.auto.tfvars pass - fill:true
environments/bootstrap/organization-config.auto.tfvars pass - fill:true
environments/common/common.auto.tfvars pass - fill:true
environments/nonprod/nonp-network.auto.tfvars pass - fill:true
environments/prod/perimeter-network.auto.tfvars pass - fill:true
environments/prod/prod-network.auto.tfvars pass - fill:true

  (use "git restore <file>..." to discard changes in working directory)
	modified:   environments/bootstrap/bootstrap.auto.tfvars
	modified:   environments/bootstrap/organization-config.auto.tfvars
	modified:   environments/common/common.auto.tfvars
	modified:   environments/nonprod/nonp-network.auto.tfvars
	modified:   environments/prod/perimeter-network.auto.tfvars
	modified:   environments/prod/prod-network.auto.tfvars

fmichaelobrien-macbookpro:pbmm-on-gcp-onboarding fmichaelobrien$ git diff
diff --git a/environments/bootstrap/bootstrap.auto.tfvars b/environments/bootstrap/bootstrap.auto.tfvars
index e7e3d48..adecc6c 100644
--- a/environments/bootstrap/bootstrap.auto.tfvars
+++ b/environments/bootstrap/bootstrap.auto.tfvars
@@ -14,10 +14,10 @@
 bootstrap = {
   userDefinedString           = "" # REQUIRED EDIT Appended to project name/id
   additionalUserDefinedString = "" # OPTIONAL EDIT Additional appended string
-  billingAccount              = "REPLACE_WITH_BILLING_ID" # REQUIRED EDIT Billing Account in the format of ######-######-######
+  billingAccount              = "1111-2222-3333" # REQUIRED EDIT Billing Account in the format of ######-######-######
   # switch out root_node depending on whether you are running directly off the organization or a folder
-  #parent                      = "organizations/REPLACE_ORGANIZATION_ID" # REQUIRED EDIT Node in format "organizations/#############" or "folders/#############"
-  parent                      = "folders/REPLACE_FOLDER_ID" # REQUIRED EDIT Node in format "organizations/#############" or "folders/#############"
+  #parent                      = "organizations/4444-5555-9999" # REQUIRED EDIT Node in format "organizations/#############" or "folders/#############"
+  parent                      = "folders/012345678901" # REQUIRED EDIT Node in format "organizations/#############" or "folders/#############"
   terraformDeploymentAccount  = "" # REQUIRED EDIT Name of a service account to be created (alphanumeric before the at sign) used to deploy the terraform code
   bootstrapEmail              = "user:" # REQUIRED EDIT In the form of<EMAIL_ADDRESS>   region                      = "" # REQUIRED EDIT Region name. northamerica-northeast1
diff --git a/environments/bootstrap/organization-config.auto.tfvars b/environments/bootstrap/organization-config.auto.tfvars
index 50c7cb8..f342e9b 100644
--- a/environments/bootstrap/organization-config.auto.tfvars
+++ b/environments/bootstrap/organization-config.auto.tfvars
@@ -5,19 +5,19 @@
 */

 organization_config = {
-  org_id          = "REPLACE_ORGANIZATION_ID" # REQUIRED EDIT Numeric portion only '#############'"
+  org_id          = "4444-5555-9999" # REQUIRED EDIT Numeric portion only '#############'"
   default_region  = "" # REQUIRED EDIT Cloudbuild Region
   department_code = "" # REQUIRED EDIT Two Characters. Capitol and then lowercase
   owner           = "" # REQUIRED EDIT Used in naming standard
   environment     = "" # REQUIRED EDIT S-Sandbox P-Production Q-Quality D-development
   location        = "" # REQUIRED EDIT Location used for resources. Currently northamerica-northeast1 is available
   labels          = {} # REQUIRED EDIT Object used for resource labels
-  #root_node       = "organizations/REPLACE_ORGANIZATION_ID" # REQUIRED EDIT format "organizations/#############" or "folders/#############"
-  root_node       = "folders/REPLACE_FOLDER_ID" # REQUIRED EDIT format "organizations/#############" or "folders/#############"
+  #root_node       = "organizations/4444-5555-9999" # REQUIRED EDIT format "organizations/#############" or "folders/#############"
+  root_node       = "folders/012345678901" # REQUIRED EDIT format "organizations/#############" or "folders/#############"

   contacts = {
<EMAIL_ADDRESS>= ["ALL"] # REQUIRED EDIT Essential Contacts for notifications. Must be in the form EMAIL -> [NOTIFICATION_TYPES]
   }
-  billing_account = "REPLACE_WITH_BILLING_ID" # REQUIRED EDIT Format of ######-######-######
+  billing_account = "1111-2222-3333" # REQUIRED EDIT Format of ######-######-######
 }

diff --git a/environments/common/common.auto.tfvars b/environments/common/common.auto.tfvars
index 8bce00f..4abc63f 100644
--- a/environments/common/common.auto.tfvars
+++ b/environments/common/common.auto.tfvars
@@ -18,8 +18,8 @@ org_policies = {
 }
 folders = {
    # switch out parent depending on whether you are running directly off the organization or a folder
-  #parent = "organizations/REPLACE_ORGANIZATION_ID" #REQUIRED Edit, format "organizations/#############" or "folders/#############"
-  parent = "folders/REPLACE_FOLDER_ID" #REQUIRED Edit, format "organizations/#############" or "folders/#############"
+  #parent = "organizations/4444-5555-9999" #REQUIRED Edit, format "organizations/#############" or "folders/#############"
+  parent = "folders/012345678901" #REQUIRED Edit, format "organizations/#############" or "folders/#############"
   names  = ["Infrastructure", "Sandbox", "Workloads", "Audit and Security", "Automation", "Shared Services"] # Production, NonProduction and Platform are included in the module
   subfolders_1 = {
     SharedInfrastructure = "Infrastructure"
@@ -47,7 +47,7 @@ access_context_manager = { # REQUIRED OBJECT. VPC Service Controls object.
 audit = {                                  # REQUIRED OBJECT. Must include an audit object.
   user_defined_string            = "audit" # REQUIRED EDIT. Must be globally unique, used for the audit project
   additional_user_defined_string = ""      # OPTIONAL EDIT. Optionally append a value to the end of the user defined string.
-  billing_account                = "REPLACE_WITH_BILLING_ID"      # REQUIRED EDIT. Define the audit billing account
+  billing_account                = "1111-2222-3333"      # REQUIRED EDIT. Define the audit billing account
   audit_streams = {
     prod = {
       bucket_name          = ""                     # REQUIRED EDIT. Must be globally unique, used for the audit bucket
@@ -98,7 +98,7 @@ folder_iam = [
 organization_iam = [
   {
     member       =<EMAIL_ADDRESS># REQUIRED EDIT<EMAIL_ADDRESS>group:users<EMAIL_ADDRESS>-    organization = "REPLACE_ORGANIZATION_ID" #Insert your Ord ID here, format ############
+    organization = "4444-5555-9999" #Insert your Ord ID here, format ############
     roles = [
       "roles/viewer",
     ]
@@ -107,7 +107,7 @@ organization_iam = [

 guardrails = {
   user_defined_string = "guardrails" # Optional EDIT. Must be unique. Defines the guardrails project
-  billing_account     = "REPLACE_WITH_BILLING_ID" # REQUIRED EDIT. Billing Account in the format of ######-######-######
+  billing_account     = "1111-2222-3333" # REQUIRED EDIT. Billing Account in the format of ######-######-######
   org_id_scan_list = [     # REQUIRED EDIT. Organization Id list for service account to have cloud asset viewer permission
   ]
   org_client = false #Set to true if deploying remote client landing zone.  Otherwise set to false if deploying for core organization landing zone.
diff --git a/environments/nonprod/nonp-network.auto.tfvars b/environments/nonprod/nonp-network.auto.tfvars
index e36ada8..dd9ed34 100644
--- a/environments/nonprod/nonp-network.auto.tfvars
+++ b/environments/nonprod/nonp-network.auto.tfvars
@@ -7,7 +7,7 @@
 nonprod_host_net = {
   user_defined_string            = "" # Must be globally unique. Used to create project name
   additional_user_defined_string = ""
-  billing_account                = "REPLACE_WITH_BILLING_ID" #"######-######-######"
+  billing_account                = "1111-2222-3333" #"######-######-######"
   services                       = ["logging.googleapis.com" , "dns.googleapis.com"]
   networks = [
     {
diff --git a/environments/prod/perimeter-network.auto.tfvars b/environments/prod/perimeter-network.auto.tfvars
index f4beffb..4462577 100644
--- a/environments/prod/perimeter-network.auto.tfvars
+++ b/environments/prod/perimeter-network.auto.tfvars
@@ -7,7 +7,7 @@
 public_perimeter_net = {
   user_defined_string            = "prod" # must be globally unique
   additional_user_defined_string = "perim" # check 61 char aggregate limit
-  billing_account                = "REPLACE_WITH_BILLING_ID" #####-#####-#####
+  billing_account                = "1111-2222-3333" #####-#####-#####
   services                       = ["logging.googleapis.com"]
   labels                         = {}
   networks = [
@@ -43,7 +43,7 @@ public_perimeter_net = {
 private_perimeter_net = {
   user_defined_string            = "prod" # must be globally unique
   additional_user_defined_string = "perim" # check 61 char aggregate limit
-  billing_account                = "REPLACE_WITH_BILLING_ID" #####-#####-#####
+  billing_account                = "1111-2222-3333" #####-#####-#####
   services                       = ["logging.googleapis.com"]
   networks = [
     {
@@ -78,7 +78,7 @@ private_perimeter_net = {
 ha_perimeter_net = {
   user_defined_string            = "prod" # must be globally unique
   additional_user_defined_string = "perim" # check 61 char agreggate limit
-  billing_account                = "REPLACE_WITH_BILLING_ID" #####-#####-#####
+  billing_account                = "1111-2222-3333" #####-#####-#####
   services                       = ["logging.googleapis.com"]
   networks = [
     {
@@ -114,7 +114,7 @@ ha_perimeter_net = {
 management_perimeter_net = {
   user_defined_string            = "prod" # must be globally unique
   additional_user_defined_string = "perim" # check 61 char aggregate limit
-  billing_account                = "REPLACE_WITH_BILLING_ID" #####-#####-#####
+  billing_account                = "1111-2222-3333" #####-#####-#####
   services                       = ["logging.googleapis.com"]
   networks = [
     {
diff --git a/environments/prod/prod-network.auto.tfvars b/environments/prod/prod-network.auto.tfvars
index ac274be..de75ecd 100644
--- a/environments/prod/prod-network.auto.tfvars
+++ b/environments/prod/prod-network.auto.tfvars
@@ -7,7 +7,7 @@
 prod_host_net = {
   user_defined_string            = "" # Must be globally unique. Used to create project name
   additional_user_defined_string = ""
-  billing_account                = "REPLACE_WITH_BILLING_ID" ######-######-######"
+  billing_account                = "1111-2222-3333" ######-######-######"
   services                       = ["logging.googleapis.com"]
   networks = [
     {

undo
fmichaelobrien-macbookpro:pbmm-on-gcp-onboarding fmichaelobrien$ ./writeids.sh -c unfill -b 1111-2222-3333 -o 4444-5555-9999 -f<PHONE_NUMBER>01
reverting IDs: billing: 1111-2222-3333 organization: 4444-5555-9999 folder:<PHONE_NUMBER>01 to placeholders
environments/bootstrap/bootstrap.auto.tfvars pass - fill:false
environments/bootstrap/organization-config.auto.tfvars pass - fill:false
environments/common/common.auto.tfvars pass - fill:false
environments/nonprod/nonp-network.auto.tfvars pass - fill:false
environments/prod/perimeter-network.auto.tfvars pass - fill:false
environments/prod/prod-network.auto.tfvars pass - fill:false
fmichaelobrien-macbookpro:pbmm-on-gcp-onboarding fmichaelobrien$ git status
On branch fmichaelobrien
Your branch is up to date with 'origin/fmichaelobrien'.

Untracked files:

Additional testing
 without a default project
  if [[ -z "$PROJECT_ID" ]]
  then
      PROJECT_ID=$(gcloud config list --format 'value(core.project)')
      if [[ -z "$PROJECT_ID" ]]
      then
          echo "Run the following before starting the script so we can derive the org/billing ids from the project:"
          echo "gcloud config set project <project_id>"
          exit 1

fmichaelobrien-macbookpro:pbmm-on-gcp-onboarding fmichaelobrien$ ./writeids.sh -c fill -b 1111-2222-3333 -o 4444-5555-9999 -f<PHONE_NUMBER>01
Run the following before starting the script so we can derive the org/billing ids from the project:
gcloud config set project <project_id>

Testing on alternate org on local gcloud cli (not shell.cloud.google.com yet)
michaelobrien@mbp7 pbmm-on-gcp-onboarding % ./writeids.sh -c fill -f<PHONE_NUMBER>01
Derived organization_id: 8.....40
You do not currently have this command group installed.  Using it
requires the installation of components: [alpha]

Your current Google Cloud CLI version is: 378.0.0
Installing components from version: 378.0.0

┌──────────────────────────────────────────────┐
│     These components will be installed.      │
├───────────────────────┬────────────┬─────────┤
│          Name         │  Version   │   Size  │
├───────────────────────┼────────────┼─────────┤
│ gcloud Alpha Commands │ 2022.03.18 │ < 1 MiB │
└───────────────────────┴────────────┴─────────┘

For the latest full release notes, please visit:
  https://cloud.google.com/sdk/release_notes

Do you want to continue (Y/n)?  y

╔════════════════════════════════════════════════════════════╗
╠═ Creating update staging area                             ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Installing: gcloud Alpha Commands                        ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Creating backup and activating new installation          ═╣
╚════════════════════════════════════════════════════════════╝

Performing post processing steps...done.

Update done!

Restarting command:
  $ gcloud alpha billing projects describe landingzone-stg --format=value(billingAccountName)

Derived billing_id: 0...B
replacing IDs: billing: 0.....B organization: 84...0 folder:<PHONE_NUMBER>01 from placeholders
environments/bootstrap/bootstrap.auto.tfvars pass - fill:true
environments/bootstrap/organization-config.auto.tfvars pass - fill:true
environments/common/common.auto.tfvars pass - fill:true
environments/nonprod/nonp-network.auto.tfvars pass - fill:true
environments/prod/perimeter-network.auto.tfvars pass - fill:true
environments/prod/prod-network.auto.tfvars pass - fill:true
michaelobrien@mbp7 pbmm-on-gcp-onboarding % git status
On branch fmichaelobrien
Your branch is up to date with 'origin/fmichaelobrien'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   environments/bootstrap/bootstrap.auto.tfvars
	modified:   environments/bootstrap/organization-config.auto.tfvars
	modified:   environments/common/common.auto.tfvars
	modified:   environments/nonprod/nonp-network.auto.tfvars
	modified:   environments/prod/perimeter-network.auto.tfvars
	modified:   environments/prod/prod-network.auto.tfvars

no changes added to commit (use "git add" and/or "git commit -a")
michaelobrien@mbp7 pbmm-on-gcp-onboarding % git diff
diff --git a/environments/bootstrap/bootstrap.auto.tfvars b/environments/bootstrap/bootstrap.auto.tfvars
index e7e3d48..fa0da4b 100644
--- a/environments/bootstrap/bootstrap.auto.tfvars
+++ b/environments/bootstrap/bootstrap.auto.tfvars
@@ -14,10 +14,10 @@
 bootstrap = {
   userDefinedString           = "" # REQUIRED EDIT Appended to project name/id
   additionalUserDefinedString = "" # OPTIONAL EDIT Additional appended string
-  billingAccount              = "REPLACE_WITH_BILLING_ID" # REQUIRED EDIT Billing Account in the format of ######-######-######
+  billingAccount              = "01....B" # REQUIRED EDIT Billing Account in the format of ######-######-######
   # switch out root_node depending on whether you are running directly off the organization or a folder
-  #parent                      = "organizations/REPLACE_ORGANIZATION_ID" # REQUIRED EDIT Node in format "organizations/#############" or "folders/#############"
-  parent                      = "folders/REPLACE_FOLDER_ID" # REQUIRED EDIT Node in format "organizations/#############" or "folders/#############"
+  #parent                      = "organizations/84...40" # REQUIRED EDIT Node in format "organizations/#############" or "folders/#############"
+  parent                      = "folders/012345678901" # REQUIRED EDIT Node in format "organizations/#############" or "folders/#############"
   terraformDeploymentAccount  = "" # REQUIRED EDIT Name of a service account to be created (alphanumeric before the at sign) used to deploy the terraform code
   bootstrapEmail              = "user:" # REQUIRED EDIT In the form of<EMAIL_ADDRESS>....

Try to move the options to a combo yaml/derivation

20240406: Closing issue during retrofit/rebase of this TEF V1 based/modified repo to TEF V4 standards
This issue may participate in the LZ refactor after rebase
Query on all issues related to the older V1 version via the tag
https://github.com/GoogleCloudPlatform/pbmm-on-gcp-onboarding/labels/2024-pre-tef-v4


"Example of ensuring team lead approval prior to active work" not working

I am very interested in the paragraph "Example of ensuring team lead approval prior to active work".
Trying the funcionality I found out there is a bug and I would like to know if there is a way on ensuring team lead approval prior to active work.
This is what I have done:

created the configuration as the documentation says.
I created a user story
as a team lead member I move the card from "New" to "Active". It is mandatory to fill the field "Approved By".
As a member of the team (not member of the team lead security group) I move the user story back to "new". The field is not cleared. Looks like the rule "Approved By cleared when New" is not applied. It is applied only if the user story is moved by a member of the Team Lead security group.
Is there a way to ensure the approval of a member of the team lead security group?

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

ID: dbe3c173-e8cc-7172-7331-11c3fc0f9724
Version Independent ID: ee6e18ae-8ec3-613d-3644-35f1f2199e77
Content: Restrict workflow transitions, apply rules to workflow states - Azure DevOps Services
Content Source: docs/organizations/settings/work/apply-rules-to-workflow-states.md
Service: azure-devops-boards
GitHub Login: @KathrynEE
Microsoft Alias: kaelli

@gt97 -- thank you for your thorough feedback and question.  Please consider these resources:

Azure DevOps Services
Azure DevOps on Stack Overflow

If you feel this is a product issue, please add it here:

Developer Community

@KathrynEE -- please look into this potential documentation issue.

@gt97 - Thank you for your inquiry. It is hard to diagnose what is going on without seeing the process configuration rules. However, my first suggestion is to see if disabling the New Boards Hub preview feature changes the behavior. This feature has been known to cause changes in the way the UI works.  I recommend you disable it, refresh your browser, and see if the rules work as expected. If so, please file a bug on the Developer Community page  and report back here on your findings.

I'm closing this issue. Please @mention me if there's a specific article update necessary, @gt97.

@chcomley I didn't answer immediately because I opened an issue in the developer community. The issue is https://developercommunity.visualstudio.com/t/Issue-releated-with-rules-on-Process/10230570.
Mainly the answer is that there is a conflict in the rules so the field is not cleared. There are no workaround.
For me it is difficult to say if it is an issue on the documentation or on the behaviour of Azure Devops. I can say that following the documentation and trying it it doesn't " ensur team lead approval prior to active work"


Re-Implementing billing trigger on ZOS to prevent overbilling during downtime

Issue https://github.com/threefoldtech/tfchain/issues/801 was created with the question that "why am I getting billed when my workload or Node is down?"
Tfchain initially was designed in a way that the billing would be triggered by the node, this came with some issues and that is why we implemented the trigger to bill contracts here https://github.com/threefoldtech/tfchain/blob/development/docs/architecture/0002-smart-contract-billing-changed.md
I think there is another solution to make sure contracts are being billed appropriatly. What if we re-implement the trigger to bill contracts back on the node. This would make sure that contracts are only getting billed when the workload is live.
Some important things to take into account before we can achieve this:

Public IP management and assignment to contracts need to be taken off-chain. Otherwise anyone can lock up all public ips and not pay for them if the trigger is implemented off-chain. I think this could be a great addition for the farmerbot to take care of.
Zos needs to implement the trigger for all workloads that are live on the node. The report needs to consist of:

total resources (cu/su and ipu)
total window of used resources (this could be the total uptime of the vm)
..

An important note here is that the report of resources and the window of the used resources need to be limited so some malicious users cannot exploit this functionality. Also some previous reported state need to be tracked to make sure the reports are "valid"
When implementing this trigger back on the node we can solve getting billed whilst a node is down or a workload is not functioning.

We initially took the billing trigger back on chain since we didn't found a way to manage public IP's. With the coming of the farmerbot this could now be back on the table.

This also enabled following features:

Nodes can implement billing frequency (days, months, ..)
Farmers can make contracts free (not let the node charge anything)
Farmers can potentially block contracts / workloads from being ran on their farm
...

I like the idea! This would be a good step towards decentralization. I have two questions:

For the management of public IP's: not all farmers use the farmerbot, how do we handle the farms that don't have one running?
What did you have in mind for keeping some previous reported state? Would that happen on chain?

For the management of public IP's: not all farmers use the farmerbot, how do we handle the farms that don't have one running?

If the farmer wants to provide public IP's to the public we make him use the farmerbot.

What did you have in mind for keeping some previous reported state? Would that happen on chain?

The thing here is that the node could easily "overbill" a user it not implemented correctly. The node needs to send the recorded time for some used resources, the chain needs to check that this report is valid based on some previous report (keep in storage what time the previous report was sent and do some sanity checks)

Just to be sure I get it.
The idea is to create a bill_contract() extrinsic callable by the node (ZOS) that would take a contract (user to bill / resources used / ... ) and some elapsed time as arguments.
Correct?

@renauter something in that sense yes

The bill_contract() is already a public method but it relies on the validators to call it
Some additional information needs to be passed (to be specced)
The billing on chain would completely be removed (not sure if possible for name contracts, maybe these can also be triggered by gateway nodes when they are used)


Unable to load audio from file when using Angular 8

When using Angular 8.0.3 and wavesurfer.js 3.0.0, while trying to load a local audio file, I get a Uncaught (in promise) TypeError: Failed to fetch error in the console.  This error is definitely from Angular.  I do not see this error in wavesurfer.js 2.2.1 or if I try to load a file from a web url in
wavesurfer.js 3.0.0, it works fine.  I think it has something to do with replacing the old util.ajax calls with util.fetchFile, as that uses the fetch API.
To re-create this issue, I just created a vanilla Angular 8 project using Angular CLI, added wavesurfer.js 3.0.0 as a dependency, and created a wavesurfer container and loaded a local mp3 file.  I have confirmed the exact same setup works when using wavesurfer 2.2.1.
Wavesurfer.js version(s):
Wavesurfer.js version: 3.0.0
Browser and operating system version(s):
Ubuntu 18.04.3 LTS
Chrome 68.0344
Let me know if you need more information, thanks.

loaded a local mp3 file.

from a local webserver? can you give the full stacktrace, the error is very vague.

The full stack trace is from Angular, so I don't think it will be of much help.

Unfortunately this was for a company that I no longer work for so I am unable to provide more troubleshooting.

I am unable to provide more troubleshooting.

Closing then. Please comment or re-open if anyone still has issues here.


Upgrade ruff dependency to "^0.1"

ruff 0.1.x has been released, and is no longer in the alpha status (https://astral.sh/blog/the-ruff-formatter). Can ruff be updated to keep in line with the latest ruff?

Let me know if I can contribute or help with this in any way.

Hi, thanks,
I've been busy recently and unable to maintain the repo. If you want to
upgrade the automatic bump script (which I'm not sure was ever
automatically triggered as planned), it'll be great
On Sat, 4 Nov 2023, 15:17 George Thomas, @.***> wrote:

Let me know if I can contribute or help with this in any way.
—
Reply to this email directly, view it on GitHub
https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_dorschw_riff_issues_86-23issuecomment-2D1793441092&d=DwMCaQ&c=V9IgWpI5PvzTw83UyHGVSoW3Uc1MFWe5J8PTfkrzVSo&r=yVpoacgquRa80sDj11vBTUsyh7q3ru1eNsTamHkhepM&m=fizomn27P5pWXBlw51lYYokU4WJ-qP0QA9wUcsqkTirdfXW2CbTJK3C5aK8ONk9u&s=7gVGJCzXiAJstgpw3PQULlZp2RMa5lGQx6mVDoTzGss&e=,
or unsubscribe
https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_notifications_unsubscribe-2Dauth_ATKUQ7TICBBPAGAEEHFTSI3YCY54ZAVCNFSM6AAAAAA65SPBUOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTOOJTGQ2DCMBZGI&d=DwMCaQ&c=V9IgWpI5PvzTw83UyHGVSoW3Uc1MFWe5J8PTfkrzVSo&r=yVpoacgquRa80sDj11vBTUsyh7q3ru1eNsTamHkhepM&m=fizomn27P5pWXBlw51lYYokU4WJ-qP0QA9wUcsqkTirdfXW2CbTJK3C5aK8ONk9u&s=A-GPGAB1-Icdi9GICjLy73JOUkx_VTrx4gG1Y1oS3Vc&e=
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

That's awesome. I'll take a look at the bump automation and open a PR as necessary.


Can we change Cantonese command to lowercase?

Can we change Cantonese to cantonese? There are UNIX commands that have capital letters, but most commands are lowercase.

@StepfenShawn, I see you changed it to lowercase. Thanks for changing it.
I wonder if it's still possible and worth lower-casing the package name as well.
What I mean is having pip install cantonese instead of Cantonese in the docs. Note that this already works since pip is case-insensitive.
And for the package page to be cantonese. It might already be too late since it already has been published on PyPI though.


After adapting Prometheus to IPv6, the file auto-discovery feature becomes invalid.

What did you do?
Everything was normal before adapting to IPv6.After adapting Prometheus to IPv6, the file auto-discovery feature becomes invalid.Restarting Prometheus has no effect. The configuration file of Prometheus cannot be recognized, resulting in the failure to recognize monitoring targets and alert rules.

What did you expect to see?
After adapting to IPv6, alert rules, monitoring targets, and configuration files can all be recognized.
What did you see instead? Under which circumstances?
The configuration file of Prometheus cannot be recognized, resulting in the failure to recognize monitoring targets and alert rules
System information
Linux 4.19.113-300.el7.x86_64 x86_64
Prometheus version
Version	2.51.0
Revision	c05c15512acb675e3f6cd662a6727854e93fc024
Branch	HEAD
BuildUser	root@b5723e458358
BuildDate	20240319-10:54:45
GoVersion	go1.22.1

Prometheus configuration file
No response
Alertmanager version
No response
Alertmanager configuration file
No response
Logs
No response

node-exporter.json：

@roidelapluie Sorry, it was an environmental issue, and I accessed another Prometheus address. After modification, Prometheus can normally discover monitoring objects and alerting rules, but there is a problem: the automatically discovered pod objects generate new instance scraping addresses by rewriting label rules. How can I write a regular expression to adapt to both IPv4 and IPv6 addresses? The current label rewriting rules are as follows:

@roidelapluie prometheus targets unormal


sunburst plotly with dropdown or button to change dataset

Is it possible to get a plotly 'type=sunburst' to switch between datasets using a button or dropdown menu?
Here is a simple dataset I am using:
list1 <- (dplyr::tibble(
  labels = c("Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"),
  parents = c("", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve"),
  values = c(65, 14, 12, 10, 2, 6, 6, 4, 4),
))

nest1 <- list1 %>%
  tidyr::nest(data = everything()) %>%
  dplyr::mutate(name = "bible")

list2 <- (dplyr::tibble(
  labels = c("Abraham", "Herb", "Homer", "Bart", "Lisa", "Maggie"),
  parents = c("", "Abraham", "Abraham", "Homer", "Homer", "Homer"),
  values = c(100, 25, 75, 25, 25, 25),
))

nest2 <- list2 %>%
  tidyr::nest(data = everything()) %>%
  dplyr::mutate(name = "simpsons")

fam_tree <- dplyr::bind_rows(nest1, nest2)`

Then, by just changing just one number I can make two different plots:
plotly::plot_ly(fam_tree[[1]][[1]], labels = ~labels, parents = ~parents, values = ~values, type = 'sunburst', branchvalues = 'total')
plotly::plot_ly(fam_tree[[1]][[2]], labels = ~labels, parents = ~parents, values = ~values, type = 'sunburst', branchvalues = 'total')

But I can't find any good online resources showing how to make the dropdown or button approach work for a sunburst plot?

I went down a few different paths with this, and there's not a ton we can do to change the dataset shown while still being able to see the full dataset (all groups) in a single plot without it being broken down by group. If we add an additional "grouping" level to the sunburst plot though, we can use the sunburst plot or a crosstalk dropdown to look at one or more groups at a time. I added this next to the original plot, since the original plot is still needed to see the overall numbers (not broken down by group). It's not a perfect solution, and worth continuing to pursue other options (maybe a different type of plot next to the overall sunburst, or vice versa?), but hopefully it's helpful!


Multi-GPU usage support?

The server I'm running this on has 2 GPUs, but only seems to be utilizing one of them. Since they are older GPUs (GTX1070), they only have 8gb of vram, so using the GPU enabled version of this model results in an out of memory error. Is there currently any way to implement multi-gpu support in this app?

I will try and check tomorrow if we can remove this:
https://github.com/cloud-py-api/ai_image_generator_bot/blob/2084081a4d877b3254a894b90aeef9b3afa6ec8f/lib/main.py#L86-L89
and just do
pipe = pipeline(...., device_map="auto")

Do not promise if it will help, but worth a try.

Thanks! I'm not a dev, so I'm not sure how long that will take to implement, but I will keep an eye out for the new commits.


bug: calling open_tags with global scope throws error

Did you check docs and existing issues?

[X] I have read the Grapple docs
[X] I have searched the existing issues of Grapple

Neovim version (nvim -v)
0.9.5
Operating system/version
MacOS Sonoma 14.4.1
Describe the bug

upon calling open_tags with global scope, i get this error
Steps To Reproduce
open global tags, i am using named tags..
Expected Behavior
no thrown error
Repro
-- DO NOT change the paths and don't remove the colorscheme
local root = vim.fn.fnamemodify("./.repro", ":p")

-- set stdpaths to use .repro
for _, name in ipairs({ "config", "data", "state", "cache" }) do
  vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name
end

-- bootstrap lazy
local lazypath = root .. "/plugins/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", lazypath, })
end
vim.opt.runtimepath:prepend(lazypath)

-- install plugins
local plugins = {
  "cbochs/grapple.nvim"
  -- add any other plugins here
}

require("lazy").setup(plugins, {
  root = root .. "/plugins",
})

Hi @bheadwhite, thanks for bringing this up. Taking a look, I may have accidentally used a v0.10.0 feature (inline extmarks) in one of the more recent commits. With v0.10.0 recently released, this should be fixed by updating to that version.
Please let me know if updating doesn't resolve the issue!

@cbochs hey, after upping to latest neovim version its now working as expected. thanks so much!


Stream preview

Hello Pedro,
i use this library to take photo and video (https://github.com/natario1/CameraView) and it has two functions: takephoto (takevideo) and takephotosnapshot (takevideosnapshot); the snapshot functions are used to save what it is shown on the opengl preview with a center crop proportion (so what i see on the preview is equal to what i see on the picture/video saved file).
Can i find a similar function inside your library to stream what i see in the preview?

This is normal.
The quality is the same in both cases but by default stream result isn't scaled. In your case you are doing a scale so you need increase quality to get same quality.

ok, thank you again

ok, thank you again

Hi, can you give some tips(about how to set glViewport) or show some code(crop filter) about keeping image same in preview and streaming/recording file?
Thanks.


[Feature Request]: [Feature Request]: LeetCode Q: 1823

Is there an existing issue for this?

[X] I have searched the existing issues

Feature Description
Solution to leetcode problem no 1823
Use Case
Helpful for user visiting the website for searching solutions
Benefits
Helpful for user visiting the website for searching solutions
Add ScreenShots
No response
Priority
High
Record

[X] I have read the Contributing Guidelines
[X] I'm a GSSOC'24 contributor
[X] I have starred the repository

@sanjay-kv check out @vansh-codes issue is large


Update deploying-to-azure-kubernetes-service.md

Why:
Extra '-', this causes the above name to look like it has no use or run step.
Also Bumped the versions of all the actions used
Closes:

N/A
What's being changed (if available, include any code snippets, screenshots, or gifs):

N/A
Check off the following:

[ ] I have reviewed my changes in staging, available via the View deployment link in this PR's timeline.

For content changes, you will also see an automatically generated comment with links directly to pages you've modified. The comment won't appear if your PR only edits files in the data directory.

[ x ] For content changes, I have completed the self-review checklist.

@leonardoacosta Thanks for the PR! I'll get it up for review ⚡
In the mean time, would you mind expanding a bit more on your change to line 115? Updating AZURE_CONTAINER_REGISTRY

Thank you, yea!
AZURE_CONTAINER_REGISTRY should look like: contoso, while REGISTRY_URL looks like contoso.azurecr.io
Line 115 used to look like this:
 {% raw %}${{ env.AZURE_CONTAINER_REGISTRY }}{% endraw %}.azurecr.io/{% raw %}${{ env.PROJECT_NAME }}{% endraw %}:{% raw %}${{ github.sha }}{% endraw %}

Where there's the extra '.azurecr.io' so I thought why not just use the variable with the full URL, REGISTRY_URL:
Update:
{% raw %}${{ env.REGISTRY_URL }}{% endraw %}/{% raw %}${{ env.PROJECT_NAME }}{% endraw %}:{% raw %}${{ github.sha }}{% endraw %}


[DNM] feat: Authentication settings cannot be disabled if there will be no administrator user available to log in

Issue
https://youtrack.weseek.co.jp/issue/GW-7958

Can disable authentication method without admin access so no admin can login

Fix

Get a user with admin access from an external account
Leave at least one authentication method that has admin access
Checks all authentication methods that have admin access when disabling an authentication method. If there is still an authentication method with admin access, then the authentication method can be disabled. If not, then there must be 1 auth method with admin access so it can't be disabled

have an administrative user with ID/Pass
enable GitHub authentication
Login as a GitHub user and make this user an administrator
Remove admin rights for the admin user in ID/Pass
Make sure you can disable ID/Pass authentication
Re-enable and update ID/Pass authentication
Disable GitHub Authentication

Symptoms
Github authentication can be disable even though they are the only github administrative user.

Github 認証でログインするとエラーがでるのでそれが解消してから


Question about compiling sample-mail

I cannot run sample-mail example with some error message

I tried "clear project" and "rebuild project" but fail to run, Is my setting problem? Thanks.

+1

Hm, not sure why it doesn't compile. On my machine it compiles just fine and also on Travis CI.
could you try to build it from command line:
./gradlew clean build

It should build successfully. Then you can try to run the app from android studio (green play button).
Let me know if this helps.

I tried the previous command line, but got the same error as that from android studio. FYI
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':sample-mail:compileDebugJavaWithJavac'.
> java.lang.NoSuchFieldError: MAP

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

hm, compiles on my machine from command line.

Have you changed some code or gradle plugin version?

Ok, I'm now finally able to reproduce this issue on circle ci
https://circleci.com/gh/sockeqwe/mosby/1
I hope to find some time to fix this issue in August

@sockeqwe any general idea on what could be causing this issue?

not really, but I will replace the annotation processor that causes this issue


Unify stackblitz and github samples

Apart from a sprinkling of bootstrap, they're mostly the same, so makes sense to unify them. Ideally they'd be sourced from the same place, as opposed to having to manually copy the samples.

Ideally the StackBlitz samples would have a polished appearance (font, color, layout) as Wood's other samples...  because in spite of the adage "don't judge a book by its cover", statistically everyone does.

Agreed.


conan package

Any chances this can be packaged to Conan?
It's a handy-dandy tool to manage c++ libraries https://conan.io/.

Thank you for the suggestion.
Unfortunately I don't have time for it right now,
but I am grateful for any help.

I'm strapped for time as well but I'd be able to give this a shot in a month or so (possibly add vcpkg support, too). If anyone else is impatient and wants to try it themselves: https://docs.conan.io/en/latest/creating_packages.html

Had some free time (or rather procrastination time) and gave it a try 🤠
https://github.com/pezcode/conan-liblava
Tested on Win 10 with MSVC (v142 and clang-cl) and Ubuntu WSL with GCC 8 and Clang 9.
For now, there is no shared option, you can only build as a static library. This would require changes to liblava's CMakeLists.txt.
Integration into conan-center-index would be nice but requires a few changes. I tried following their guidelines as closely as possible, but using conandata.yml to specify sources seems impossible since github's zip/tar.gz link doesn't include subrepositories.
Would appreciate some feedback, especially from @markusgod. I'm not much of a Conan user so I might have missed something important.

Looks perfect to me. But i'm far from packaging expert. I believe if you just send pull request to cci, guys will point out what need to be fixed.

Thanks for the feedback 👌
I just noticed a mistake with the library order. Didn't notice until I actually called some useful functions in test_package. Going to fix that in a bit.

Looks perfect to me. But i'm far from packaging expert. I believe if you just send pull request to cci, guys will point out what need to be fixed.
I'll tackle that a little later once I have access there (if that's still a thing with their early access).

🚀 I'm also waiting for EAP

I forked and cloned https://github.com/liblava/conan-center-index
But still figuring out how to config conandata.yml and conanfile.py because of missing git submodules in source releases. 🤔

One way to do this is to specify every single submodule, at which point you can only hope that the submodules don't have submodules themselves. Also a pain to maintain for each release.
The 'official' way to do this (and I suppose the first comment you'll get on a PR at CCI) is to use existing conan packages for every dependency. For some dependencies that's probably not too problematic, but some fast-moving ones (imgui, Vulkan headers) could be a bit of a pain because you have to wait for the packages to update before integrating into lava. Add a vcpkg port to this and you have to watch two places. This also would require changes to how dependencies are found and linked in CMakeLists.txt, but that should be comparably straight-forward.

Thanks for your summary of the two ways, but how about just releasing source files with checked out submodules? okay that will break the whole packaging idea and some submodules could be not ready for official release. Like you said, I'm guessing it doesn't go through either. And as you already mentioned, adding other ports (like vcpkg) can take much more effort than desired. A script will help a lot, no matter what way we go. I'm curious what conan would suggest to do. ❔

i think the best and simplest solution is to stick with the current recipe. I always want to keep liblava up to date and the effort involved with CCI is too great. If anyone has a better suggestion, please let me know here.

i think the best and simplest solution is to stick with the current recipe. I always want to keep liblava up to date and the effort involved with CCI is too great. If anyone has a better suggestion, please let me know here.


Do not trigger completion on operators

I noticed this when I mistyped |. the other day.  I threw this together quickly and must now leave for the office on the ferry, so I likely won't be able to address feedback until tomorrow.  I installed it into my VS and things seemed to work.

Considering the problem mentioned in the review, I am very surprised the tests passed. Perhaps we should provide a test for that case.

@TIHan BTW, there are no tests for ShouldTriggerCompletion at all (because it was triggered by dot only in pre-2017 era).

@vasily-kirichenko I made an issue regarding that then: https://github.com/Microsoft/visualfsharp/issues/4069
Will be good to have tests against it. :)

@dotnet-bot test Ubuntu14.04 Release_fcs Build please


Add "props" to IResponseDetail

And add the value and types actants to into entities.
Linked to #677

entities map processing is based on this currently:
  getEntitiesIds(): string[] {
    const actantsIds: Record<string, null> = {};

    this.props.forEach((p) => {
      actantsIds[p.type.id] = null;
      actantsIds[p.value.id] = null;

      p.children.forEach((p2) => {
        actantsIds[p2.type.id] = null;
        actantsIds[p2.value.id] = null;
      });
    });

    return Object.keys(actantsIds);
  }

I assume that this is enough for actant.props.
For statements (usedInStatement and usedInStatementProps) i will search for props elements in both statement arrays. Is it correct like this?
fixStatementProps(): []string {
  let out = [];
  this.usedInStatement.forEach(s => {
    out = out.concat(s.getEntitiesIds())
  })
  this.usedInStatementProps.forEach(s => {
    out = out.concat(s.getEntitiesIds())
  })
  return out
}

entities in IResponseDetail should now be obsolete - can i remove them?
Updated the type with generic interface
export interface IResponseDetail extends IResponseActant {
  entities: { [key: string]: IActant }; // all entities (IActant) from props.type/value and from all statements from usedInStatement, and usedInStatementProps
  usedInStatementAction: IResponseUsedStatement<"action">[]; // find all statements, where the actant is used as action, actant, or tag
  usedInStatementActant: IResponseUsedStatement<Position>[]; // find all statements, where the actant is used as action, actant, or tag
  usedInStatementProps: IResponseUsedStatement<PositionContext>[]; // find all statements, where the actant is used anywhere in any statement prop
}

export interface IResponseUsedStatement<PositionEnum> {
  statement: IResponseStatement;
  position: PositionEnum;
}

Updated version
export interface IResponseDetail extends IResponseActant {
  entities: { [key: string]: IActant }; // all entities from IStatement and entityIds...
  usedInStatement: IResponseUsedInStatement<Position>[];
  usedInStatementProps: IResponseUsedInStatementProp<PositionContext>[];
  usedInMetaProps: IResponseUsedInMetaProp<>[]
}

// this returns all statements, where the detail id is used as an actant, action, or tag
export interface IResponseUsedInStatement<PositionEnum> {
  statement: IStatement;
  position: PositionEnum;
}

// here, you are looking at all props of all statements  in db, and check whether there is the detail id used at the position of value or type
export interface IResponseUsedInStatementProp<PositionEnum> {
  statement: IStatement;
  originId: string; // what entity is the detail id used for
  position: PositionEnum; // type | value
}

// here, you are looking at all entities in db, into their props and check whether there is the detail id used at the position of value or type
export interface IResponseUsedInMetaProp<PositionEnum> {
  entityId: string; // IActant(later IEntity) will be placed in IResponseDetail.entities
  position: PositionEnum; // type | value
}


Playback of some static MPD doesn't automatically start in Chrome, possibly due to floating point error in MSE interface

Have you read the FAQ and checked for duplicate open issues?: Yes
What version of Shaka Player are you using?: v2.3.2
Can you reproduce the issue with our latest release version?: Yes
Can you reproduce the issue with the latest code from master?: Yes
Are you using the demo app or your own custom app?: Demo app
What browser and OS are you using?: Chrome, Windows or Linux
What are the manifest and license server URIs?: Attached manifest
What did you do? Load static asset
What did you expect to happen? Playback automatically start after load
What actually happened? Need manual seek to start playback
I loaded a static MPD in Shaka player in Chrome and expect it to automatically start playing.
But the loading indicator keep spinning, and console logs showed that it keep attempting gap-jumping to 0.062633s.

I need to do a manual seek on the seek bar to get the MPD playing.
Chrome's media-internal page showed that the seek_target was at 0.062632s, instead of 0.062633s

The issue can only be reproduced in Chrome, but not Firefox, and happenens on both Windows and Linux.
I tried adding a small number to the gap-jumping code in "playhead.js", and the problem seems resolved:
this.movePlayhead_(currentTime, jumpTo);
to this.movePlayhead_(currentTime, jumpTo + Number.EPSILON);
So I think the issue is likely due to floating-point precision in the MSE interface of Chrome.

Here is a sample asset:
DASH.zip

Hi @albertcsm, thanks for the investigative work you put into this!
@TheModMaker could I ask you to take a quick look and say whether you think there might be more to this in terms of our gap-jumping logic? If not, I'll be happy to follow the floating-point precision lead.

It seems weird that the browser would says that 0.062633 is buffered, but when we seek to it, it puts us at 0.062632.  Maybe this is a browser bug.  You may want to file a bug on Chrome.
But we should still not get stuck in infinite loops like this.

Cherry-picked for v2.3.3.


Check if REST API benchmark at phpbenchmarks.com is correct

Need to check if everything is OK with the benchmark:
http://www.phpbenchmarks.com/en/comparator/framework
https://github.com/phpbenchmarks/benchmark-kit

https://github.com/phpbenchmarks/yii
https://github.com/phpbenchmarks/yii-common

I can imagine a problem with UrlManager using cache as default. The FileCache configured in the configuration is not sure it will produce better results than simply running with CPU time all the time.
https://github.com/phpbenchmarks/yii/blob/ecfe4744711d796ac792ff1dcbed85ca0e476b90/config/web.php#L11-L13

should add optimization flags to composer.json
https://getcomposer.org/doc/articles/autoloader-optimization.md
maybe phpbenchmark does that already?

does not look optimal to use controllermap for this and alias. why not just use proper pathes which match defaults.
https://github.com/phpbenchmarks/yii-common/blob/yii_2_hello-world/config/controller-map.php

@kamarton I would rather try ApcCache with disabled serializer. deserialize() may be really slow for big collections and deserialization of 500 objects may be a bottleneck here.

This might not pass since

To have equals chances for each tools, default installation is done.

and we've got FileCache as default everywhere.
Unfortunately we can not recreate the benchmarking process. I really don't like the way JSON is returned for Yii (via Users and Service) in this benchmark but I'm not sure if this causes the problem.

@bizley having 500 rules in Yii app is clearly wrong - URL manager in Yii is flexible enough to handle such scenarios with fewer rules, since you can handle more advanced logic in one rule. If cache is really a problem, then benchmark is testing performance of using Yii in incorrect way. If adjusting config for this pathological usage is not allowed, then this benchmark is completely unreliable ("look how slow/fast is this framework when you use it in a wrong way").

I fully agree.
I'll check the Symfony case and see how it's done there.

Looking through code of Symfony test case and ours I must admit I can not find anything that could help us, we are beaten fair and square. Symfony is also taking the 500 routes (which is no surprise since the test conditions say so) so we really can not call the argument of "misusing the framework" here because other frameworks are tested the same way. Symfony route matching is simply superior to ours and the benchmark is unfortunately created to test the route matching speed. This should rather open up the discussion how to improve our route matcher like they did.
So to summarize - the way it's tested is wrong but it's wrong for all testing subjects.

Thanks for looking into it, everyone.

So to summarize - the way it's tested is wrong but it's wrong for all testing subjects.

No it's not. The problem with this test is that it does not define a problem ("handle this 500 routes") but proposes a solution ("create 500 rules to handle this 500 routes"). And this solution promotes specific approach - solutions based on many simple rules will get better results than solutions preferring fewer but more flexible/heavier rules.

and the benchmark is unfortunately created to test the route matching speed

Not really. In benchmark you always have match on first rule. So it is not even testing matching speed, but bootstrap overhead.

This should rather open up the discussion how to improve our route matcher like they did.

That's the point.

@rob006 this arguing is pointless unless you can convince them to change the benchmarking methodology for all the frameworks.

@bizley I'm arguing that at least we should try APC cache to check if deserialization is the problem. If this is true, it makes perfect sense to optimize app config, especially if test is using inefficient approach. It is not like we're cheating here - there still will be 500 rules, and we're still using standard cache driver. This change does not even require writing any custom code.

I'm looking forward to see the results of this. If they go with the change I'll be very happy.

OK, I've done some tests, and the results are:

As I suspected, the main problem is with deserialization of 500 rules in cache - initialization of URL Manager took about 60% of execution time.
Disabling cache makes it slightly slower.
Using APCu doesn't change anything - it seems that APCu needs to serialize and deserialize object anyway. :/
I was able to avoid the whole deserialization overhead by replacing standard cache driver by custom logic based on var_export() and __set_state(). Over 50% performance boost.

So this is not an easy pick, but there is a room for improvement here. Cache driver based on var_export() may be interesting concept worth implementing in core, but it may be more tricky in practice (not all object can be serialized in this way).
Some reading:
https://medium.com/@dylanwenzlau/500x-faster-caching-than-redis-memcache-apc-in-php-hhvm-dcd26e8447ad
https://gist.github.com/Ocramius/2028520

That is definitely something to consider for Yii 3 cache.

Looking through code of Symfony test case and ours I must admit I can not find anything that could help us, we are beaten fair and square. Symfony is also taking the 500 routes (which is no surprise since the test conditions say so) so we really can not call the argument of "misusing the framework" here because other frameworks are tested the same way. Symfony route matching is simply superior to ours and the benchmark is unfortunately created to test the route matching speed. This should rather open up the discussion how to improve our route matcher like they did.
So to summarize - the way it's tested is wrong but it's wrong for all testing subjects.

Symfony does not use the 500 rules directly. It compiles out of the rules a php class, I don't see how this is a fair comparision. While Yii cannot automatically compile a class out of it.. it still seems to me no fair comparision.
https://symfony.com/blog/new-in-symfony-4-1-fastest-php-router

In order to speed up the application, during the compilation phase Symfony generates a PHP class called "matcher" which contains all the route definitions optimized to match incoming URLs.

The rules can be found here:
https://github.com/phpbenchmarks/symfony-common/blob/symfony_4_rest-api/Resources/config/routing.yml
https://github.com/phpbenchmarks/symfony/blob/symfony_4.3_rest-api/config/routes.yaml
The 500 URL rule is a problematic by default, because a developer doesn't use that much rules. Organizes it into modules and controllers.
If want a good result, you should modify the UrlManager component to interpret the rules on-the-fly. Since the test is always run on the first rule, a good result can be achieved.

Hi Guys,
Do you think this would speed things up? The main idea is not to build all the rules and then cache, but to store them in a class (I guess similar concept in Symphony) and then build rules as required. Havn't tested this.

add new  rulesClass property in urlManager

'urlManager' => [
            'rulesClass' => 'config\Rules',
            'enablePrettyUrl' => true,
            'rules' => [
                'rest/objects/\w+/\w+' => 'rest/objects',
            ],
        ],

Add RulesClass.php.

<?php

namespace frontend\config;

use Yii;
use yii\base\InvalidConfigException;
use yii\web\UrlRule;
use yii\web\UrlRuleInterface;

class Rules {

    private $verbs = 'GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS';

    public function getRules() {
        return [
            ['rest/objects/\w+/\w+' => 'rest/objects'],
            ['rest/objects/\w+/\w+' => 'rest/objects']
        ];
    }

    public function createUrlRule($ruleConfig, $ruleArray){
        $key=$ruleArray[0];
        $rule=$ruleArray[1];
        if (is_string($rule)) {
            $rule = ['route' => $rule];
            if (preg_match("/^((?:($this->verbs),)*($this->verbs))\\s+(.*)$/", $key, $matches)) {
                $rule['verb'] = explode(',', $matches[1]);
                // rules that are not applicable for GET requests should not be used to create URLs
                if (!in_array('GET', $rule['verb'], true)) {
                    $rule['mode'] = UrlRule::PARSING_ONLY;
                }
                $key = $matches[4];
            }
            $rule['pattern'] = $key;
        }
        if (is_array($rule)) {
            $rule = Yii::createObject(array_merge($ruleConfig, $rule));
        }
        if (!$rule instanceof UrlRuleInterface) {
            throw new InvalidConfigException('URL rule class must implement UrlRuleInterface.');
        }
        return $rule;
    }
}

Step 3 - Add rulesClass field to UrlManager and create class on init , if present.
Step 4 - Update UrlManager buildRules
protected function buildRules($ruleDeclarations)
{
   // if not set then ignore and work as per normal
    if (isset($this->rulesClass)){
        return $this->rulesClass->getRules();
    }

Step 5 - Update UrlManager parseRequest
     // add this point $this->rules is an array of urlRules or strings. Once a rule is matched
        // then drop out of loop.
         foreach ($this->rules as $rule) {
             /* @var $rule UrlRule */
            $rule = isset($this->rulesClass) ?? $this->rulesClass->createUrlRule($this->ruleConfig, $rule) ; $rule;
            $result = $rule->parseRequest($this, $request);

If rules are arranged in most accessed order then you could potentially get away with one create command :)

The 500 URL rule is a problematic by default, because a developer doesn't use that much rules. Organizes it into modules and controllers.

After meeting with SEO guys, your routing will never look like
'<controller>/<action>’ => ’<controller>/<action>’, but more like 'gorenie/oops' => 'burning/unexpected', 'ohlazhdenie' => 'cooling/index'.
Well, yii2 has GroupUrlRule that allowed me to recombine our 170 rules into 90 ones. I don’t think our application is huge.
Well, even 100 rules is a lot when you have to generate dozens or hundreds of urls, so optimizations are appreciated not only for benchmark purposes.

I've made a first cut and unit test results result are fine. Next step is to check performance running a load test comparing "cached" versus "non cached" URLRule usage in URLManager. I'm pretty sure we will have some good results. Do we have something similar to phpbenchmarks?

No, we don't have a test like that. phpbench could be used to achieve good enough measurements like it was done for Yii 3 DI package: https://github.com/yiisoft/di/blob/master/phpbench.json

Presented benchmarks are academic, not practical, serving to present Nikic's fast route implementation - a very specific scenario. I don't remember using more than 10-15 URL rules during last few years in any application. It's a great PR for anyone who implements it, but unfortunately also misleading the community. If the benchmark scenario would be more practical (e.g. crawling randomly 100 - 500 pages, where not every page is redirected), there would be no such a difference. That, of course, does not imply, that there is no room for optimization :-) Most likely it can only be done in the next major version - Yii.3 - due to BC breaks.

Yii3 currently runs on top of Nikic fastroute as default routing driver btw.

Yii3 currently runs on top of Nikic fastroute as default routing driver btw.

Oh really? Are there any bench results against either scenario above or against routing in Yii2?

None yet. Busy with other things.

OK, found it.
Honestly, I am not really fond of too-complex implementations.
Code legibility & maintainability are also important aspects, along with the performance.
Yii2's routing is very simple and yet flexible & performant, in spite of bench tests above.


labels can be off screen for elements at the top of the viewport

setting some logic to never let this go under 19 works on macOS, but I dont think that'll work across platforms, need something intrinsic or calculated


\dv, \odv, \pdv support from derivatives package

These two commands speed up significantly the insertion of derivatives and partial derivatives.
Link to or name of a (La)TeX package that provides the same feature:
They are included in the physics package in LaTeX, and documented at page 5 of https://ctan.mirror.garr.it/mirrors/ctan/macros/latex/contrib/physics/physics.pdf

As mentioned in #3184:

I wouldn't recommend using any of the genfrac code. Instead, I would recommend using the macro system; see src/macros.js. You can return a sequence of tokens that calls \frac instead of redefining \frac.

I second this. The macro system is able to handel the various use-cases. As an example, in the Derivatives LaTeX package, there are various cases for partial and ordinary derivatives, given the \pdv and \odv commands respectively.
As an example (see page 4 of the Derivatives documentation):
\odv{x}          % Basically \dfac{d}{dx}
\odv{f}{x}      % Basically \dfrac{df}{dx}
\odv{f}{x,y}   % Basically \dfrac{d^{2}f}{dxdy}

As an important note to title rename, I would like to suggest \odv rather than \dv, or both. Thanks :)

How would you recommend implementing this feature? My JS is limited, but I'm happy to help with any latex related problems, where able, on this feature.
I have located macros.js, and wonder if you plan on implementing it purely via latex, or by some other means involving JS?
I've done a little looking into it, but the package is pretty dense with Expl syntax, and am interested as to the approach.
Thanks.

I tried to make a minimal working version of \odv and \pdv. As I discovered working on this, arguments are referenced as #1, #2, ... So it recognizes only two parameters, numerator and denominator.
It is possible in theory to make it recognize higher order derivatives, adjusting the exponent of the differential at the numerator accordingly, like in the original derivative package, but I must admit my JS-fu is too weak for that, and my break from studying is over :)
It should have something to do with arglist's lenght and some if statements sprinkled here and there.


Feature/Mava launcher

What?
Add a Mava launcher that can be used to construct and launch distributed (and in the future single process) runs.
Why?
This launcher simplifies the Launchpad code setup and also paves the way for a future single process implementation of the launcher.
How?
Added a Mava launcher class here. This launcher is only used by MADDPG/MAD4PG for now.
Extra
.

Only going to implement this in the redesigned version of Mava.


Update fstab.yaml

Please always provide the GitHub issue(s) your PR is for, as well as test URLs where your change can be observed (before and after):
Fix #
Test URLs:

Before: https://main--Demo--kaviya0404k.hlx.live/
After: https://--Demo--kaviya0404k.hlx.live/

replaced url


Expose more resources through the API (Jarbas)

It is more like a question than an actual issue but here it goes. Are you guys planning on exposing more resources through the API? The reason I am asking this is because as of right now the only method available is /api/document which lists Document objects. The thing is, each of the documents listed have attributes that could be referred to by their id's, state and party are examples of such. Then we could have both /api/states and /api/parties, respectively, to list the states and the parties.
The reason I am asking this is because I am planning on writing a wrapper in either objective-c or java to consume this information. By doing this someone else (or even me) could use it to write an app similar to 'Meu deputado' that could list the expenses, and its details, for any given congressperson.
Here are my suggestions for new methods:
/api/states
/api/parties
/api/congresspeople
With at least these new methods I could start working on something more meaningful.
Let me know what you guys think. I really appreciate what you guys are doing and would like to contribute somehow.

Hi @rphlfc
You can have all these filters right now, just use conhressperson_id, party and state keywords
in the URL of /api/document/ endpoint as mentioned in the README.md — does that make sense or did I get you wrong?

@cuducos is still possible search by state? I tried something like https://jarbas.serenatadeamor.org/api/reimbursement/?subquota_id=13&state=ce But didn't work

@cuducos is still possible search by state?

No, state is not listed as a filtering field; but no special reason for that — feel free to implement if you like.
Alternativelly use the Dashboard, it's way better for searching ; )


Icon: Fix cog icon rotation

Before

After

Note to approvers - feel free to merge yourselves ones approved

Deploy preview for gestalt ready!
Built with commit f4413624b4a2b6a286b372f690b56f972e059896
https://deploy-preview-308--gestalt.netlify.com

Filename
Size Diff
Gzip Diff
Prev Size
Current Size
Prev Gzip
Current Gzip

gestalt.js
:small_red_triangle_down: 0.0%
:small_red_triangle_down: 0.0%
261.37 KB
261.35 KB
58.72 KB
58.72 KB

gestalt.es.js
:small_red_triangle_down: 0.0%
:small_red_triangle_down: 0.0%
258.7 KB
258.68 KB
58.35 KB
58.35 KB

  Generated by :no_entry_sign: dangerJS

Fix cog icon rotation implies something was obviously broken with the old icon. Why exactly was this change made?