Installer fails with conflict of nodejs version even though it should succeed

el6:   Error: st2chatops conflicts with 2:nodejs-8.11.1-1nodesource.x86_64

Are you doing a manual install, following these instructions https://docs.stackstorm.com/install/rhel6.html ?
Looks like maybe you've added the NodeJS v8 repository, not the supported v6 one?
Could you provide the output of yum list nodejs?

Installed Packages
nodejs.x86_64                                                             2:8.11.1-1nodesource                                                              @nodesource
Available Packages
nodejs.i686                                                               0.10.48-3.el6                                                                     Cisco-EPEL-Repo

Fastest response ever, btw.  Thank you.  Btw, we need this version of node for other stuff we're integrating here. I would expect that it wouldn't conflict since it's version is > 6

The packaging specifically needs a v6 version right now (no solid reason why it can't work with v8, but that needs testing).
Are you running other things on that same server that require nodejs v8? Be cautious about running other stuff on the same VM. It's possible of course, but can run into conflicts...like this one.

This is the line in the spec file that explicitly calls out >= v7 as a conflict:
Conflicts:      nodejs < 6.0, nodejs >= 2:7.0

Closing this as it is working as designed. Installer should prevent install with newer nodejs versions.

This is expected behavior with Conflicts.
st2chatops should fail if there is unsupported version of nodejs already exists/installed in the system.


Auto hide testcase details after run on AC

Since I made it so you can show/hide testcase details at any point, this probably will only apply on newly added testcases

Fixed via 1f0792cbbd69133ad9e63048910ba68f8fc32338


Ellucian Live Conference

Now online only
https://www.ellucian.com/ellucianlive

This event is now on the list, you can go ahead and close the issue. :)


Setup wizard fails on executing Deployment Manager template: "KeyError: 'forseti-config'"

I got Deployment Manager error when using Setup Wizard:
ERROR: (gcloud.deployment-manager.deployments.create) Error in Operation [operation-1500303364297-5548499159129-08409941-9419cd52]: errors:
- code: MANIFEST_EXPANSION_USER_ERROR
  message: |
    Manifest expansion encountered the following errors: Exception in forseti-instance.py
    Traceback (most recent call last):
        return constructor[m](evaluation_context)
      File "<string>", line 46, in GenerateConfig
    KeyError: 'forseti-config'
     Resource: forseti-instance.py Resource: config

Below are the full logs. I'm using current Forseti version from master branch (i.e. 22647e0). I redacted project-id, org name and my email from the logs. My current user doesn't have admin rights on the org node, so this might be the problem.
+-------------------------------------------------------
|  Checking if gcloud is installed
+-------------------------------------------------------

gcloud already installed, continue...

+-------------------------------------------------------
|  Auth GCP account
+-------------------------------------------------------

Your browser has been opened to visit:

    https://accounts.google.com/o/oauth2/auth?redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&prompt=select_account&response_type=code&client_id=<redacted>.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&access_type=offline

WARNING: `gcloud auth login` no longer writes application default credentials.
If you need to use ADC, see:
  gcloud auth application-default --help

You are now logged in as [<redacted>].
Your current project is [<redacted>].  You can change this setting by running:
  $ gcloud config set project PROJECT_ID

+-------------------------------------------------------
|  Choose the organization where to deploy Forseti
+-------------------------------------------------------

Organizations:
[1] <redacted>.com (<redacted>)
Enter your choice: 1

+-------------------------------------------------------
|  Setup Forseti project
+-------------------------------------------------------

Which project do you want to use for Forseti Security?
[1] Create new project (recommended)
[2] Existing project
Enter your choice: 2

Be advised! We recommend using a project dedicated to running Forseti.

Enter a project id or press [enter] to cancel: my-project-id

Trying to activate configuration my-project-id...
ERROR: (gcloud.config.configurations.activate) Cannot activate configuration [my-project-id], it does not exist.
Creating a new configuration for my-project-id...
Created [my-project-id].
Activated [my-project-id].
Updated property [core/account].

+-------------------------------------------------------
|  Checking whether billing has been enabled
+-------------------------------------------------------

Billing has been enabled for this project, continue...

+-------------------------------------------------------
|  Enabling required APIs
+-------------------------------------------------------

Enabling the Cloud SQL API...
Done.
Enabling the Cloud SQL Admin API...
Done.
Enabling the Cloud Resource Manager API...
Done.
Enabling the Admin SDK API...
Done.
Enabling the Deployment Manager API...
Done.

+-------------------------------------------------------
|  Setup service accounts
+-------------------------------------------------------

Forseti requires a service account for accessing GCP.
[1] Use existing service account
[2] Create new service account
Enter your choice: 2
Enter the name for your new service account (default: forseti-gcp):

Created new service account<EMAIL_ADDRESS>
Forseti requires a service account for getting GSuite groups. This should be a different service account from the one you are using for accessing GCP.
[1] Use existing service account
[2] Create new service account
[3] Skip for now
Enter your choice: 3
Skipping service account creation.

+-------------------------------------------------------
|  Assigning roles to the GCP service account
+-------------------------------------------------------

Assigning roles/browser...
ERROR: (gcloud.organizations.add-iam-policy-binding) You do not have permission to access organization [<redacted>:getIamPolicy] (or it may not exist): The caller does not have permission

Assigning roles/compute.networkAdmin...
ERROR: (gcloud.organizations.add-iam-policy-binding) You do not have permission to access organization [<redacted>:getIamPolicy] (or it may not exist): The caller does not have permission

Assigning roles/editor...
ERROR: (gcloud.organizations.add-iam-policy-binding) You do not have permission to access organization [<redacted>:getIamPolicy] (or it may not exist): The caller does not have permission

Assigning roles/iam.securityReviewer...
ERROR: (gcloud.organizations.add-iam-policy-binding) You do not have permission to access organization [<redacted>:getIamPolicy] (or it may not exist): The caller does not have permission

Assigning roles/resourcemanager.folderAdmin...
ERROR: (gcloud.organizations.add-iam-policy-binding) You do not have permission to access organization [<redacted>:getIamPolicy] (or it may not exist): The caller does not have permission

Assigning roles/storage.admin...
ERROR: (gcloud.organizations.add-iam-policy-binding) You do not have permission to access organization [<redacted>:getIamPolicy] (or it may not exist): The caller does not have permission

+-------------------------------------------------------
|  Setup bucket name
+-------------------------------------------------------

Enter a bucket name (press [enter] to use the default: gs://my-project-id-forseti): gs://my-project-id
Choose a region in which to create your bucket:

Region: Multi-Region
--------------------------------
[1] Asia Pacific
[2] Europe
[3] United States

Region: Americas
--------------------------------
[4] Iowa
[5] South Carolina
[6] Northern Virginia
[7] Oregon

Region: Asia-Pacific
--------------------------------
[8] Taiwan
[9] Tokyo
[10] Singapore

Region: Europe
--------------------------------
[11] Belgium
[12] London
Enter the number of your choice: 12

+-------------------------------------------------------
|  Setup Cloud SQL name
+-------------------------------------------------------

Enter a name for the Forseti Cloud SQL instance (press [enter] to use the default: forseti-security)

Choose the region in which to host your Cloud SQL:

Region: Americas
--------------------------------
[1] Iowa
[2] South Carolina
[3] Northern Virginia
[4] Oregon

Region: Asia-Pacific
--------------------------------
[5] Taiwan
[6] Tokyo

Region: Europe
--------------------------------
[7] Belgium
[8] London
Enter the number of your choice: 8
Enter the sql user name of your choice (press [enter] to use the default: forseti_user)

+-------------------------------------------------------
|  Generate Deployment Manager templates
+-------------------------------------------------------

What is your SendGrid API key? (press [enter] to leave blank)
What is the sender email address for your notifications? (press [enter] to leave blank)
At what email address do you want to receive notifications? (press [enter] to leave blank)
What is your GSuite super admin's email? (press [enter] to leave blank)

Created a deployment template:
    <redacted>/forseti-security/deployment-templates/deploy-forseti-79444.yaml

Create a GCP deployment? (y/N) y
The fingerprint of the deployment is WORFgTvGRd90-AvXPhvoJA==
Waiting for create [operation-1500303364297-5548499159129-08409941-9419cd52]...failed.
ERROR: (gcloud.deployment-manager.deployments.create) Error in Operation [operation-1500303364297-5548499159129-08409941-9419cd52]: errors:
- code: MANIFEST_EXPANSION_USER_ERROR
  message: |
    Manifest expansion encountered the following errors: Exception in forseti-instance.py
    Traceback (most recent call last):
        return constructor[m](evaluation_context)
      File "<string>", line 46, in GenerateConfig
    KeyError: 'forseti-config'
     Resource: forseti-instance.py Resource: config

+-------------------------------------------------------
|  Post-setup instructions
+-------------------------------------------------------

Congratulations! You've completed the Forseti prerequisite setup.

Since you chose to create a deployment via Deployment Manager, you can check out the details in the Cloud Console:

    https://console.cloud.google.com/deployments?project=my-project-id

deploy-forseti-79444.yaml contents:
# Copyright 2017 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# The toplevel deployment script for Forseti Security.

imports:
- path: cloudsql/cloudsql-instance.py
  name: cloudsql-instance.py
- path: cloudsql/cloudsql-database.py
  name: cloudsql-database.py
- path: storage/bucket.py
  name: bucket.py
- path: compute-engine/forseti-instance.py
  name: forseti-instance.py

resources:

# Cloud SQL
- name: cloudsql-instance
  type: cloudsql-instance.py
  properties:
    region: europe-west2
    instance-name: forseti-security
- name: forseti_security
  type: cloudsql-database.py

# Cloud Storage
- name: my-project-id
  type: bucket.py
  properties:
    region: europe-west2

# Compute Engine
- name: forseti-instance
  type: forseti-instance.py
  properties:
    # GCE instance properties
    image-project: ubuntu-os-cloud
    image-family: ubuntu-1604-lts
    instance-type: n1-standard-2
    zone: $(ref.cloudsql-instance.region)-b

    service-account<EMAIL_ADDRESS>    service-account-scopes:
      - https://www.googleapis.com/auth/cloud-platform
    scanner-bucket: my-project-id
    database-name: forseti_security
    organization-id: <redacted>

    # --- Forseti version
    # Use either branch-name or release-version, but NOT both.
    #
    # "release-version": A Forseti release.
    # See https://github.com/GoogleCloudPlatform/forseti-security/releases
    #
    # "branch-name": A git branch of Forseti.
    #
    # e.g. "I want to deploy Forseti Security's master branch"
    #    branch-name: "master"
    #    # release-version: ... <-- COMMENT OUT
    #
    # e.g. "I want to deploy release 1.0"
    #    # branch-name: "master" <-- COMMENT OUT
    #    release-version: "1.0"
    branch-name: "master"
    src-path: https://github.com/GoogleCloudPlatform/forseti-security
    # --- end Forseti version

    # Cloud SQL
    cloudsqlproxy-os-arch: linux.amd64
    db-port: 3306

    # Remove or comment out the email properties if you do not want Forseti to
    # send email notifications.
    sendgrid-api-key: ""
    email-sender: ""
    email-recipient: ""

    # Flags for Inventory to collect GSuite Google Groups information.
    inventory-groups: False
    groups-domain-super-admin-email: ""
    groups-service-account-key-file: "/home/ubuntu/service-account-key.json"

#465 might be the cause here.

The manifest problem is due to setup wizard not properly configuring the forseti_config value that forseti-instance.py expects.

Thanks for quick response. It's working fine after switching to version 1.0.3-pre, i.e.:
git checkout v1.0.2
python setup_forseti.py --version 1.0.3-pre

I found only small issue related to cloud storage bucket, but I reported it separately under #476.

Weird, how did you checkout v1.0.2 and run the setup_forseti.py? I am not seeing that.

I copy pasted wrong tag :), obviously it should be:
git checkout v1.0.3-pre
python setup_forseti.py --version 1.0.3-pre

Just a heads up, we cut a new release, which you might be interested in - https://github.com/GoogleCloudPlatform/forseti-security/releases/tag/v1.1.0
You can get it with the same steps you included above
git checkout v1.1.0
python setup_forseti.py --version 1.1.0


Restarts at booting into Mac os

I have a T460p and I installed mac os big sure with a different config. With this config the system restarts when booting into mac os (again and again).

same

when i use monterey, it will make system restart. after use ventura. it can boot, but no wlan driver installed

when i use monterey, it will make system restart. after use ventura. it can boot, but no wlan driver installed

How did you upgrade? directly from the system or via USB?

I solved the problem installing Ventura :)


Replace node-semver with compare-version to reduce minified bundle size by 20kb

[x] This only affects the JavaScript OpenTelemetry library
[ ] This may affect other libraries, but I would like to get opinions here first

Bundle size is important for web projects and serverless functions.
Currently opentelemetry-js uses the semver package in instrumentation-http, sdk-trace-node and instrumentation.
For its purpose it is a surprisingly large dependency and a much smaller alternative exists compare-versions
The api is comparable
import { compare } from 'compare-versions';
compare('10.1.1', '10.2.2', '>='); // false

Would add 2kb to the build<EMAIL_ADDRESS>vs
import * as semver from 'semver'
semver.gte('10.1.1', '10.2.2'); // false

Adds 30kb to the build<EMAIL_ADDRESS>(only 21kb for my webpack build but still significant)
I'd be happy to make a PR implementing this if people are okay with it

Seems like a good option since only satisfies, lt, gte are used in the codebase.

Are you still interested in working on this?

I can pick this up if you don't mind @Ankcorn

Thanks @legendecas
And if you want to @imranismail 😊 let me know if you need a hand

Actually we have a implementation close the semver for the API, we might be able to re-use it ? https://github.com/open-telemetry/opentelemetry-js/blob/main/api/src/internal/semver.ts


feat(ui/collapse-menu): var-collapse-menu complete

Checklist

[ ] Fix linting errors
[ ] Tests have been added / updated (or snapshots)

Change information

Codecov Report

Merging #231 (b907c27) into dev (3189225) will decrease coverage by 0.04%.
The diff coverage is 85.00%.

@@            Coverage Diff             @@
##              dev     #231      +/-   ##
==========================================
- Coverage   96.31%   96.27%   -0.05%
==========================================
  Files         209      218       +9
  Lines        4728     4748      +20
  Branches      963      963
==========================================
+ Hits         4554     4571      +17
- Misses        172      175       +3
  Partials        2        2

Impacted Files
Coverage Δ

...ackages/varlet-ui/src/collapse-menu-group/props.ts
0.00% <0.00%> (ø)

packages/varlet-ui/src/collapse-menu-item/props.ts
0.00% <0.00%> (ø)

packages/varlet-ui/src/collapse-menu/props.ts
66.66% <66.66%> (ø)

...t-ui/src/collapse-menu-group/CollapseMenuGroup.vue
100.00% <100.00%> (ø)

...ackages/varlet-ui/src/collapse-menu-group/index.ts
100.00% <100.00%> (ø)

...let-ui/src/collapse-menu-item/CollapseMenuItem.vue
100.00% <100.00%> (ø)

packages/varlet-ui/src/collapse-menu-item/index.ts
100.00% <100.00%> (ø)

...kages/varlet-ui/src/collapse-menu/CollapseMenu.tsx
100.00% <100.00%> (ø)

packages/varlet-ui/src/collapse-menu/index.ts
100.00% <100.00%> (ø)

Continue to review full report at Codecov.

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


ModuleNotFoundError: No module named 'tmdbsimple'

I'm getting this error:
Traceback (most recent call last):
File "/scripts/SABPostProcess.py", line 8, in
from resources.mediaprocessor import MediaProcessor
File "/scripts/resources/mediaprocessor.py", line 12, in
from resources.metadata import Metadata, MediaType
File "/scripts/resources/metadata.py", line 8, in
import tmdbsimple as tmdb
ModuleNotFoundError: No module named 'tmdbsimple'
I'm running binhex-sabnzbd on unraid, which comes without this script. I've added a path for the script like this:

And it is accessible within inside the docker. As I can select the folder and "SABPostProcess.py".
I opened the console for the docker, and installed the requierments with pip install -r setup/requirements.txt
This is what happens if I try to install the "tmdbsimple" module by itself

When I run python --version it comes back as 3.10.6
Anything I'm missing ???

You must have different environments and whatever environment SAB is using does not have the requirements installed
https://github.com/mdhiggins/sickbeard_mp4_automator/issues/1445
Essentially this is the issue even though you're not on docker
Easy fix if you can't figure out what environment SAB is using is to just tell it which environment to use by wrapping a small bash script and pointing to your python environment
#!/usr/bin/env bash

/usr/local/bin/python3 /path/to/SMA/SABPostProcess.py "$@"


ooo-dev-tool kills already opened non-headless ooo

Just running my usual reproducer:
import logging

from ooodev.loader.inst.options import Options as LoOptions
from ooodev.loader.lo import Lo

def main():
    with Lo.Loader(
        Lo.ConnectSocket(headless=True), opt=LoOptions(log_level=logging.DEBUG)
    ):
        pass

main()

but this time I first start OOO manually to edit some unrelated file, then start the script and boom it kills my OOO ☹

This issue is resolved in the next release.

Okay, the next release 0.47.19 is available. But there is a little more to this.
Lets assume for this discussion that you Already have an instance of LibreOffice running.
If connect to LibreOffice using default settings
def main():
    with Lo.Loader(Lo.ConnectSocket(headless=True)):
        pass

Then it will connect to the current running instance of LibreOffice.
The trick is to tell the Loader that you want to connect a fresh instance with a copy of your current LibreOffice user profile.
This configuration Starts LibreOffice in headles mode. It also copies an instance of the users current LibreOffice Profile to a temp directory for the duration of the session.
Two instances can run at the same time this way. Now When this session stops your previously opened LibreOffice will remain open due to the different Profiles.
from ooodev.conn.cache import Cache

def main():
    with Lo.Loader(Lo.ConnectSocket(headless=True), cache_obj=Cache()):
        pass

See more details in Cache Option online documentation.

BTW The Cache object and the Connection objects now writes debug info to the Log.
Because these  objects are created before Lo sets the logging level you would need to set the logging first to logger.set_log_level(logging.DEBUG) as this example demonstrates.
import logging

from ooodev.loader.inst.options import Options as LoOptions
from ooodev.loader.lo import Lo
from ooodev.conn.cache import Cache
from ooodev.calc import CalcDoc
from ooodev.io.log import logging as logger

def main():
    logger.set_log_level(logging.DEBUG)
    options = LoOptions(log_level=logging.DEBUG)
    with Lo.Loader(
        Lo.ConnectPipe(headless=False),
        opt=options,
        cache_obj=Cache(profile_path="", no_shared_ext=True),
    ) as loader:
        doc = CalcDoc.create_doc()
        sheet = doc.sheets[0]
        sheet["A1"].value = 10
        doc.close()

if __name__ == "__main__":
    main()


Pre-Backup Custom Scripts

Description of the feature
Ability to add custom scripts to execute before a backup runs, in the same way the existing functionality allows custom scripts to execute after a backup.
Benefits of feature
I use healthchecks.io to monitor the status of my backup jobs. They have a feature to measure/display the execution time of tasks if you send a request before the task starts, and it would be nice to be able to integrate with that. See: https://healthchecks.io/docs/measuring_script_run_time/. It would be nice to be able to integrate with this feature.
Additional context
N/A

Hi there this has been added to version 3.4.0 . Changelog - Please read the README for the location to load Pre scripts from and let me know if you encounter any issues.

Wow, thanks for the fast turnaround! I'll let you know how it goes once I get a chance to update.

It looks like the pre-backup scripts are executed both at the start and end of the backup, which isn't good.
The path for pre-backup scripts (/assets/custom-scripts/pre) is a sub-folder of the one for post-backup scripts (/assets/custom-scripts), which is what causes this. Perhaps the find arguments for the post-backup scripts can be altered to exclude this sub-folder?
I also noticed that the documentation in the README isn't quite right for the pre-backup scripts. Here's what I would change it to (I can open a PR to update this documentation if you'd like, or feel free to just take this change and commit it yourself):
#### Pre Backup
If you want to execute a custom script before a backup starts, you can drop bash scripts with the extension of `.sh` in `/assets/custom-scripts/pre`. See the following example to utilize:

````bash
$ cat pre-script.sh
##!/bin/bash

# #### Example Pre Script
# #### $1=DB_TYPE (Type of Backup)
# #### $2=DB_HOST (Backup Host)
# #### $3=DB_NAME (Name of Database backed up
# #### $4=BACKUP START TIME (Seconds since Epoch)
# #### $5=BACKUP FILENAME (Filename)

echo "${1} Backup Starting on ${2} for ${3} at ${4}. Filename: ${5}"
````

    ## script DB_TYPE DB_HOST DB_NAME STARTEPOCH BACKUP_FILENAME
    ${f} "${dbtype}" "${dbhost}" "${dbname}" "${backup_start_time}" "${target}"

Outputs the following on the console:

`mysql Backup Starting on example-db for example at<PHONE_NUMBER>. Filename: mysql_example_example-db_202200315-000000.sql.bz2

Thanks for the feedback. I'm going to push a new version shortly and add environment variables to support changing the locations on where the post and pre scripts reside while also keeping the old /assets/custom-scripts.
Should be less than 30 minutes here.

Alright. 3.4.1 contains the fix there.
I've introduced the following two environment variables:

Parameter
Description
Default

SCRIPT_LOCATION_PRE
Location on filesystem inside container to execute bash scripts pre backup
/assets/scripts/pre/

SCRIPT_LOCATION_POST
Location on filesystem inside container to execute bash scripts post backup
/assets/scripts/post/

I've added some routines to print a warning to allow people to migrate their post scripts to environment path they choose or the defaults. It will automatically copy the files from /assets/custom-scripts/ into SCRIPT_LOCATION_POST and execute them.
Can you let me know how this one works? Just as a reminder you can type backup-now in a running container without having to wait for the timer to fire.

Just tested and it looks good to me!
I opened PR #158 to add some explicit migration instructions for the new script paths.

Great! Glad its worked out and sorry on the first release confusion!


Attempt to disconnect a nonexistent connection from '@ConfirmationDialog@16952:<ConfirmationDialog#1125499591109>'. Signal: 'confirmed', callable: 'Delegate::Invoke' (and similar) errors when closing editor after building C# project

Godot version
v4.1.dev2
System information
Windows
Issue description
Closing the editor after building a C# project prints these errors:
ERROR: Attempt to disconnect a nonexistent connection from '@ConfirmationDialog@16952:<ConfirmationDialog#1125499591109>'. Signal: 'confirmed', callable: 'Delegate::Invoke'.
   at: (core\object\object.cpp:1353)
ERROR: Attempt to disconnect a nonexistent connection from '<VBoxContainer#1125902244315>'. Signal: 'ready', callable: 'Delegate::Invoke'.
   at: (core\object\object.cpp:1353)
ERROR: Attempt to disconnect a nonexistent connection from '@Button@16961:<Button#1126405560822>'. Signal: 'pressed', callable: 'Delegate::Invoke'.
   at: (core\object\object.cpp:1353)
ERROR: Attempt to disconnect a nonexistent connection from '@PopupMenu@16960:<PopupMenu#1126036462051>'. Signal: 'id_pressed', callable: 'Delegate::Invoke'.
   at: (core\object\object.cpp:1353)
ERROR: Attempt to disconnect a nonexistent connection from '<EditorSettings#-9223372008903932771>'. Signal: 'settings_changed', callable: 'Delegate::Invoke'.
   at: (core\object\object.cpp:1353)

Causes and possible fixes
Reloading the managed assemblies causes the hash of ManagedCallable instances to change, corrupting the hash map of signals and causing these issues on cleanup.
https://github.com/godotengine/godot/pull/75533 prevents the GodotTools assembly from being reloaded and thus prevents these errors in particular, but these errors will still trigger when using custom editor plugins.
Steps to reproduce

Take any C# project (the project must have the solution, but no C# code is required)
Rebuild the solution
Exit the editor

Minimal reproduction project
It's an empty project: Test_1.zip

I found https://github.com/godotengine/godot/pull/52189#pullrequestreview-741050562 with the same symptoms but the discussion is just I'll open an issue, which apparently never actually happened
The error message is wrong, the signal did not somehow stop existing, but I already fixed the mesasge and just forgot about it again https://github.com/godotengine/godot/pull/75465
What appear to be happening is that on node deletion it tries to cleanup all its signals, but when for some reason disconnecting one fail it tries again and again forever.

I've had this happen as well, and at the end it crashed with a stack overflow iirc, so it might be getting into a circular dependency cleanup loop, fwiw.

https://github.com/godotengine/godot/pull/73904 introduced the use of the signal but that did not cause the issue.
What appears to happen is that when assemblies are rebuilt, they also have to be reloaded, which means that the delegate type for the lambda the connects to the signal changes. Now because the hash of a ManagedCallable is based on that it changes when assemblies are reloaded, corrupting the hashmap used to store signals and the callable can no longer be retrieved.
This is only an issue since #72421 since previously signals where stored in a VMap (a sorted dictionary) and the hash was not used. (Tho looking at the less than implementation I am pretty sure that it doesn't really work correctly either and that similar situations where an equal, tho not the same c++ object, callable could not be found in the ap)

Also I actually already fixed the hash of that particular Callable changing in https://github.com/godotengine/godot/pull/75533, but that does not fix the issue in general.

For me in 4.1 dev 2, it raises these errors, but doesn't spam infinitely:
ERROR: Disconnecting nonexistent signal 'confirmed', callable: Delegate::Invoke.
   at: _disconnect (core/object/object.cpp:1340)
ERROR: Disconnecting nonexistent signal 'ready', callable: Delegate::Invoke.
   at: _disconnect (core/object/object.cpp:1340)
ERROR: Disconnecting nonexistent signal 'pressed', callable: Delegate::Invoke.
   at: _disconnect (core/object/object.cpp:1340)
ERROR: Disconnecting nonexistent signal 'id_pressed', callable: Delegate::Invoke.
   at: _disconnect (core/object/object.cpp:1340)
ERROR: Disconnecting nonexistent signal 'settings_changed', callable: Delegate::Invoke.
   at: _disconnect (core/object/object.cpp:1340)
ERROR: Condition "!EditorSettings::get_singleton() || !EditorSettings::get_singleton()->has_setting(p_setting)" is true. Returning: Variant()
   at: _EDITOR_GET (editor/editor_settings.cpp:1110)

Is this still an issue in 4.2? There used to be some problems with how dialogs were handled around build errors and whatnot, maybe this was related and so is now fixed?

This issue is caused by signals (specifically the ManagedCallable we use when connecting to signals in C#), not really related to dialogs, and the error message in the original post shows other occurrences with other non-dialog types.
I think the issue reported originally was fixed by https://github.com/godotengine/godot/pull/75533 and https://github.com/godotengine/godot/pull/77199, but the general issue should still exist (e.g.: when using custom editor plugins). It needs a new MRP though.

On my project this triggers after closing the editor only if I had connected a signal to the following C# custom RichTextEffect:
[GlobalClass]
[Tool]
public partial class BBCodeWaitCS : RichTextEffect
{
	[Signal]
    public delegate void WaitFinishedEventHandler();

I connect the signal via script using:
bbcodeWait.Connect("WaitFinished", Callable.From(showOptions));


Refactor/SK-936 | Clean up certs and remove /add_combiner logic

This PR cleans up the old cert managment of sending certs via REST from controller to combiner and clients. Certs for gRPC clients can now fully be controlled via environment variables FEDN_GRPC_CERT_PATH which will be read and included as ssl credential in gRPC channels. To control different certs for mutiple combiners one can use FEDN_GRPC_CERT_PATH_"COMBINER NAME" where COMBINER NAME is as stored in the statestore.
Certs (and the private key) is no longer stored in the statestore (risky), and is not sent over http(s). The server (combiner) can setup certs via "cert_path" and "key_path" which can be provided in the config file. Obs that this is only for gRPC and not REST.
The logic for adding a combiner to the network has changed. Previously, the combiner had to post to the endpoint /add_combiner of the REST API which then returns statestore and modelstore configs (inluding password/access secrets, which is very risky) and added the combiner to statestore. This logic has been removed and instead the combiner requires configs (file) from admin at server start, the combiner will then directly communicate with the statestore server to add the combiner. The combiner in the state does no longer store the certs. However, storage(model) configs is still stored in the statestore (inluding password). This should be removed in a future PR.
Additional:

unpinned torch in mnist-pytorch (had problems installing 2.3.1, unsure why)
Added native config files so that only mongo and minio is required to run via compose. Controller, combiner and clients can run in native mode over localhost network.
Added typed dict ServerConfig for gRPC server
setting/downloading the package and saving to file path was hard coded to /app/config (related to docker image) which made it impossibe to use controller in native mode. All /app/config in API has been changed to os.getcwd().
Client does no longer expect "package" config from controller (if it should be remote or local), the client decide if it want to download a package or use local.
init of statestore client and modelstore clients on the server side (combiner) has been removed to shared.py for ease of readbility and decrease redudancy.

Note to self: not good that mongo client starts on import from shared.py

I guess you need to obtain an admin token to post to /add_combiner?

I guess you need to obtain an admin token to post to /add_combiner?

In what scenario? This is something the user can configure. JWT tokens are not enabled by default.

I guess you need to obtain an admin token to post to /add_combiner?

In what scenario? This is something the user can configure. JWT tokens are not enabled by default.

I was thinking about Studio - it seems like adding a combiner should be the project admin  / API token privilege?


bug(menu): nested menu issues with recursive ng-template

Bug, feature request, or proposal:
I've tested with the latest changes from #6766, but this is still not fixed.
What is the expected behavior?
It should be possible to create a nested menu from a JSON object without knowing the menu's depth in advance.
What is the current behavior?
You can't, because the recursive templates seem to cause issues with the nested menu.
What are the steps to reproduce?
Had to use StackBlitz instead of Plunkr, because Plunkr's having issues.
StackBlitz: https://stackblitz.com/edit/angular-material2-issue-7p1tik
Note: Since StackBlitz is using the NPM version, and not the snapshot build, even the non-recursive version requires you to click to expand sub-menus rather than hover.
What is the use-case or motivation for changing an existing behavior?
It'd be nice to be able to define a single JSON object describing a nested menu structure.
Which versions of Angular, Material, OS, TypeScript, browsers are affected?
All.
Is there anything else we should know?

It looks like this is working as of beta.12 as seen here
Are you still seeing this issue?

Closing as it appears this issue is no longer occuring

@josephperrott It does not work in the provided example. Even with the latest version

I think the goal is to keep the previous menus on screen, to provide visual guidance to the user about where in the menu they've come from, and also to provide them with the opportunity to go back up the menu hierarchy without closing the menu to reopen at the top-most level.
In the provided example by josephperrott on Oct 31 2017, the "nested template" behavior is not the desired behavior, they should both function as the "without nested template" variant does.

This hack helped me, I didn't spend much time on this answer(have low), but still it may help you if you dig in
<ng-container
  *ngFor="let routeWithItems of routeWithItemsListOrderedFromLeafsBS$ | async"
>
  <mat-menu
    #matMenu="matMenu"
    [classList]="'mat-menu--overflow-hidden'"
  >
    <ng-template matMenuContent>
      <ng-container
        *ngFor="let route of routeWithItems.items"
      >
        <button
          *ngIf="route.items; else withoutItems"
          [matMenuTriggerFor]="matMenuDataSource | getPure:route"
          [ngClass]="{ active: route.hasChildrenThatMatchUrlBS$ | async }"
          mat-menu-item
        >{{ route.text }}</button>
        <ng-template #withoutItems>
          <a
            [ngClass]="{ active: route.matchesUrlBS$ | async }"
            [routerLink]="route.action"
            mat-menu-item
          >{{ route.text }}</a>
        </ng-template>
      </ng-container>
    </ng-template>
  </mat-menu>
  {{ matMenuDataSource | setPure:routeWithItems:matMenu }}
</ng-container>

private _appendRouteToRouteWithItemsListOrderedFromLeafs(
    route: MainMenuExtended,
    routeWithItemsListOrderedFromLeafs: MainMenuExtended[],
  ) {
    const items = route.items;
    if (items) {
      for (const childRoute of items) {
        this._appendRouteToRouteWithItemsListOrderedFromLeafs(childRoute, routeWithItemsListOrderedFromLeafs);
      }
      routeWithItemsListOrderedFromLeafs.push(route);
    }
  }

  private _getRouteWithItemsListOrderedFromLeafs(
    routeList: Array<MainMenuExtended>,
  ): MainMenuExtended[] {
    const routeWithItemsListOrderedFromLeafs: MainMenuExtended[] = [];

    for (const route of routeList) {
      this._appendRouteToRouteWithItemsListOrderedFromLeafs(route, routeWithItemsListOrderedFromLeafs);
    }

    return routeWithItemsListOrderedFromLeafs;
  }

export class GetPurePipe<RouteType> implements PipeTransform {
  transform(
    matMenuDataSource: MatMenuDataSource<RouteType>,
    route: RouteType,
  ): any {
    return matMenuDataSource.get(route);
  }
}

export class SetPurePipe<RouteType> implements PipeTransform {
  transform(
    matMenuDataSource: MatMenuDataSource<RouteType>,
    route: RouteType,
    matMenu: MatMenu,
  ): any {
    matMenuDataSource.set(route, matMenu);
  }
}


Update warning on missing ast flag

When running kontrol in a previously used repo with Foundry project that doesn't have ast = true flag in foundry.toml - just adding a flag doesn't work, the user also needs to re-build the project so forge clean is necessary. We need to update the error message to reflect that

Thanks @drinkius! We're working on some changes to allow CI runs on PRs authored by external contributors, will get it merged asap.


hotfix/utf8-decoding

Fixed a error that was being caused by the way we were  decoding the messages coming in from Figma. Instead of manually decoding each message, I delegated that into a tranformer function with the use of a utf8 decoder.

I noticed that this hotfix is going to feat/responsive-ui. Should we instead merge this to stable so we can get the fix now? 🤔


make chat area / display area ratio changeable at startup

In the current version of slurk, it is possible to drag the divider between the chat area and the display area to change their relative sizes. Apparently it is not possible to make it so that when a user enters a task room, this ratio is automatically set.
It would be good if that were possible. (The chat area doesn't really need a lot of horizontal space, but sometimes the display area does. It would be good if that could be achieved without having to tell the user that they need to do something, like dragging the divider, manually.)

This issue was addressed in this pull request.
Each bot that inherits from the abstract class can now resize the chat and task area based on percentage values.


aliases changing to character like [0_ giving error in SQL Server

Hi I'm trying to implement Thrace data grid through SQL server. Upon running it, the dev.log as well as SQL Server Profiler gives me this.
[2015-05-06 21:38:40] request.CRITICAL: Uncaught PHP Exception Doctrine\DBAL\DBALException: "An exception occurred while executing 'SELECT COUNT() AS dctrn_count FROM (SELECT DISTINCT id3 FROM (SELECT [0_.id AS id0, [0_.firstName AS firstName1, [0_.lastName AS lastName2, [0_.id AS id3, [0_.firstName AS firstName4, [0_.lastName AS lastName5 FROM [TSOFT_LEARN].[dbo].[User] [0_) dctrn_result) dctrn_table':  SQLSTATE[42000]: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]The identifier that starts with '0_.id AS id0, [0_.firstName AS firstName1, [0_.lastName AS lastName2, [0_.id AS id3, [0_.firstName AS firstName4, [0_.lastName A' is too long. Maximum length is 128."  Maximum length is 128. at C:\wamp\www\trillsoft\vendor\doctrine\dbal\lib\Doctrine\DBAL\DBALException.php:91, PDOException(code: 42000): SQLSTATE[42000]: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]The identifier that starts with '0_.id AS id0, [0_.firstName AS firstName1, [0_.lastName AS lastName2, [0_.id AS id3, [0_.firstName AS firstName4, [0_.lastName A' is too long. Maximum length is 128. at C:\wamp\www\trillsoft\vendor\doctrine\dbal\lib\Doctrine\DBAL\Connection.php:699)"} []
I have tried this on both Windows and nix machines. Also I tried this on PostgreSQL and it worked just fine. Is there an issue with SQL server or some bug in Thrace?

This was a SQL Server issue and it has been resolved. Thanks.


Remove the 'Coming soon' related functionality

Working from the description in the ComingSoonPresenter, this was a
workaround for issues with caching in the wider publishing
platform. Now, the publishing platform handles cache invalidation, so
this shouldn't be a problem any more.
The functionality in Whitehall sits both around the scheduling, and
unscheduling, so I've removed the coming soon part of both actions.

I've tested this on staging, and it seems to work. I'm not sure how well tested scheduled publishing is in Whitehall, as some of the feature tests seem to be missing, I've found some that were removed, and I'm trying to add them back here https://github.com/alphagov/whitehall/pull/4395


Create a timeline

Add a list of all your activities, achievements, work experience. Add as much info as you can remember. In case you don't have working experience tell about your pet-projects or student projects. Don't be shy :)

Could this block be a job profile?


Compile typescript to esnext.

Compile typescript to esnext.

@tonybaloney this pull request is ready for review 😺

@Harry-Hopkinson can you resolve the merge conflicts please (I'll merge these PRs in order?)


[feature] 'move' TAS tool

This has been suggested before, but I hope to quantify the requirements.
>>move [nocam|veccam] [xdeg] [xups] [nopitchlock] [nojump] [letspeedlock]

Veccam camera by default (I still think smoothing is better than giving up when you reach a straight line) unless of course you're on speed gel
Camera should initially move with constant speed angular velocity? to reach vel angle instead of instantly
Absmov on ground until strafe is faster
Take into account duckstate
Autojump w duck when it is faster, unless nojump
Apply pitchlock whenever moving in air, not just strafing
Switch to ang strafing on speed gel
Avoid the 150-150 cap when possible, using the same letspeedlock optional arg
If above target velocity, decel w no autojump until under, then return to regular behaviour

lmk if ive forgotten stuff or are being unreasonable

As it was discussed in a TASing Discord server once, majority of points is an attempt to simplify a case, which not always would benefit from being generalized. I'll call it a finish game tool syndrome - tools should be simplified to allow the easiest user experience, but on the other hand discouraging users from having control can lead to unoptimized runs.
Here are some additional points:

maybe an additional camera mode for interpolating into current vel would be useful sometimes. But considering that it'd be used only to make TASes more visually pleasing (which you can already do by just adding a quick setang a few ticks before strafing), and there isn't that high demand for it, I don't find it necessary.
not sure what you mean by "taking duckstate into account". Strafing already detects you being grounded and adjusts calculations to that.
autostrafer was already programmed to just move towards desired angles if velocity is too low, but that behaviour never functioned properly. Version 6 hopefully fixes it.

Closing the issue.


Update building-and-testing-net.md

Why:
Missing a '$'. Build will fail with The workflow is not valid. .github/workflows/pipeline.yml (Line: 16, Col: 25): A mapping was not expected
What's being changed:
single character missing in sample
Check off the following:

[x] I have reviewed my changes in staging. (look for the deploy-to-heroku link in your pull request, then click View deployment)
[x] For content changes, I have reviewed the localization checklist
[x] For content changes, I have reviewed the Content style guide for GitHub Docs.

@patrickhuber Thanks so much for opening a PR! I'll get this triaged for review ✨

@patrickhuber Thanks so much for opening a PR! I'll get this triaged for review ✨


Add okolors to Scoop Extras

Scoop is a command-line installer for Windows. I would like to add the following manifest to the Scoop's Extras bucket so that one can install okolors by running scoop install extras/okolors:
{
    "version": "0.8.0",
    "description": "Generate a color palette from an image using k-means clustering in the Oklab color space.",
    "homepage": "https://github.com/Ivordir/Okolors",
    "license": "MIT",
    "architecture": {
        "64bit": {
            "url": "https://github.com/Ivordir/Okolors/releases/download/v0.8.0/okolors-v0.8.0-x86_64-pc-windows-msvc.zip",
            "hash": "8caaae55302c9754ab2b9337ad1e5f9dc07916fcaed160a40dd8600c08b4de4c"
        }
    },
    "bin": "okolors.exe",
    "checkver": "github",
    "autoupdate": {
        "architecture": {
            "64bit": {
                "url": "https://github.com/Ivordir/Okolors/releases/download/v$version/okolors-v$version-x86_64-pc-windows-msvc.zip"
            }
        }
    }
}

This issue was written to get confirmation prior to actually making PR on the bucket.

Sure, feel free to add it to Scoop extras! Let me know if there's issues with the installer, etc.

Recently, I noticed the following criteria written in the auto-generated issue template:

Criteria
Reasonably well-known and widely used (e.g. if it's a GitHub project, it should have at least 100 stars and/or 50 forks)

Sorry, my bad! I will close this issue for now, maybe I could re-open this when enough number of stars has been achieved.


Support for Kotlin Multiplatform: Android/iOS/JS

Curious, has anyone assessed the effort involved in this?

Multiplatform support should be possible. I already started an effort to support Desktop compose by moving out any Android references from the core module https://github.com/DanielMartinus/Konfetti/pull/321
I've successfully built a desktop compose app using the new core module and implementing a wrapper for KonfettiView and DrawShapes using that core module.
If you want to play with it, all you need to do is import the new core module that I made available as a beta: implementation("nl.dionsegijn:konfetti-core:2.1.0-beta01")
It's basically a copy of what's inside the xml or compose module here but then using the api's of that platform.

Any timeline on the support for Compose Multiplatform? Is there a way we could help?

Hey @DanielMartinus,
I like your library a lot. Great iead! We used it already 3-4 years ago in some production apps. As now compose multiplatform is official supported by google, I started yesterday to migrate Konfetti to kmp. As you already wrote desktop was a fast one and I think ios & wasm should now be also possible.
Here is my fork:
https://github.com/nilsjr/Konfetti/tree/feature/kmp
Maybe we can find some synergies with your approach.
Current state: Work in progress but tests & all samples are running :D

Hi @nilsjr, how can I use your library?

Hey @bmilovanovic,
you can checkout my fork and build it locally with publishToMavenLocal. After that you can use it in your project by adding mavenLocal() to your repositories.
There is no multiplatform artifact yet because these changes are not merged.
Still waiting for feedback

Hi @nilsjr, I have tried that but when I try to publish an error pops up:
Cannot perform signing task ':konfetti:compose:signReleasePublication' because it has no configured signatory
Do I need to modify the code somehow?
Thanks in advance

@nilsjr Previous was error on the main branch. After I switched to feature/kmp, a new error appeared when running publishToMavenLocal:
Cannot locate tasks that match ':konfetti:publishToMavenLocal' as task 'publishToMavenLocal' not found in project ':konfetti'.

@bmilovanovic Yeah I will take a look

I was also not able to get your branch working in my project @nilsjr , had a similar issue as the one above.
It would be great to have Multiplatform support, but it looks like @DanielMartinus is not really active anymore on this repository

+1 for KMP support


Fixing equality test for shorthand ++ and --.

Hi!
I noticed when someone writes dan++ and then someone after that just writes ++, nothing happens. I checked this out and ran it locally, and it looks like when someone writes ++ we get name equal to an empty string (''). Looking at the code, this happens because  unless name? doesn't catch empty strings (? only check for definedness, not emptiness).
This PR updates the check to also check if the string is empty.

:+1:

Will deploy a new version after I merge another currently open PR. (https://github.com/ajacksified/hubot-plusplus/pull/41)

And done, 1.1.5

Thanks for merging and redeploying so fast!


typescript support

I am trying to use it in react with typescript, but I am getting an error

+1


Update aws-java-sdk-dynamodb to 1.12.734

About this PR
📦 Updates com.amazonaws:aws-java-sdk-dynamodb from 1.11.1034 to 1.12.734
Usage
✅ Please merge!
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

⚙ Adjust future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "com.amazonaws", artifactId = "aws-java-sdk-dynamodb" } ]

Or, add this to slow down future updates of this dependency:
dependencyOverrides = [{
  pullRequests = { frequency = "30 days" },
  dependency = { groupId = "com.amazonaws", artifactId = "aws-java-sdk-dynamodb" }
}]

labels: library-update, early-semver-minor, semver-spec-minor, commit-count:1

Superseded by #577.


Prebuilt Removal: Investigate release/3.1 prebuilts for roslyn

The following prebuilts are being reported in roslyn in release/3.1. These need to be investigated and removed.

[ ]   Microsoft.CodeAnalysis.CSharp.CodeStyle - 3.3.1-beta3-19454-05
[ ]   Microsoft.CodeAnalysis.VisualBasic.CodeStyle - 3.3.1-beta3-19454-05
[ ]   Microsoft.NETFramework.ReferenceAssemblies.net472 - 1.0.0-alpha-004

#1382 takes care of Microsoft.NETFramework.ReferenceAssemblies.net472 - 1.0.0-alpha-004


Add tips for plugin authors for debugging to docs

Summary
I would like this VS Code launch.json configuration added to the Plugin docs so that plugin authors and developers diagnosing issues can step through the plugin data load code during execution.
{
    "version": "0.2.0",
    "configurations": [{
        "type": "node",
        "request": "launch",
        "name": "Launch Program",
        "program": "${workspaceRoot}\\node_modules\\gridsome\\bin\\gridsome.js",
        "runtimeArgs": [
            "--inspect-brk=9229",
        ],
        "args": [
            "develop"
        ],
        "port": 9229
    }]
}

Basic example
I'm working with a plugin that seems to have issues in some corner cases of content from a cloud CMS service.
I'm trying to diagnose these issues and better understand how the plugin works.
I wanted to step through the process execution of gridsome develop so that I could debug the plugin.
The above launch.json lets me put breakpoints in both Gridsome and the plugin package code under node_modules and see where some of the issues were occurring.
Motivation
I'm using VS Code (as I imagine a lot of developers are) to build my Gridsome app and I wanted to debug using VS Code as well.
I thought some more information around how to diagnose issues with plugins would be helpful.

This was a fantastic help and would be a great addition to the docs.

Fantastic, thanks @seangwright

Awesome! Thx!


Add a basic buildkite pipeline to build contracts

The pipeline builds a docker image that contains an install of eos as well as the eosio.cdt binaries.  The built contracts are attached to the final step as an artifact (contracts.tar.gz).
A couple of things to note about its limitations and future improvements:

The versions of these are currently limited to HEAD of a specific branch for eos and a tagged release version of eosio.cdt, controlled in Dockerfile.  Later, we can make this configurable to the specific commit of each repo.

Most of the build time is spent in building eos into the docker image.  There are artifacts created during the build and install process that are missing from the released binary packages, so a simple install of those packages on a base ubuntu image does not work at the moment.  We will need to fix the eos packaging (or the eos Docker image) in order to speed up the building of this repo.

Often we will be building redundant base images (e.g. any commit to eosio.contracts that does not change the versions of eos and cdt in the Dockerfile will spend time building the same base image).  We could potentially speed up the pipeline by detecting changes to that file.

This pull request has become stale and, under zreyn's direction, I have made a new and improved Buildkite pipeline based on these changes and using our new process. GH-188 has been merged into develop so I am closing this PR.


Animation | Idle animations

We need animations in standby mode when input is not being processed.

Main Idle approved.


feat(parser): RFC for concurrent assertions

This commit adds initial experiemental support for concurrent SVA in the
open source parser
Signed-off-by: Tianrui Wei<EMAIL_ADDRESS>

Hi,
This is an RFC PR for collecting feedback in adding concurrent SVA assertion support for the open source verilog parser, as well as performing transformations for the backend formal tools/synthesis targeting FPGAs. It'd be great if people could share how/what things should be added, as well as their opinion on coding style etc in general.
Thanks,
Tianrui

I think you should remove your Makefile changes from the commit; if you need to make local changes to your Makefile, put them in Makefile.conf instead.

Thank you @Ravenslofty for reviewing! I've already reverted changes to Makefile :)

You should amend the original commit instead of making a new commit.

@Ravenslofty Thanks for the feedback! Already fixed!

Hi All,
I was trying the PR locally and it seems to be working reasonably well for the intended use case, I was wondering if you could review and hopefully merge this PR in preparation for implementing a larger subset?
Thanks,
Tianrui


Breaks in Python3.6

This may not be a big issue yet, but when I tried to run my tests in Travis it broke in DRF on Python3.6.
  The command "(cd inventory/settings/; ln -s travis.py local.py)" exited with 0.
  1.07s$ python manage.py makemigrations accounts categories invoices locations projects regions suppliers
  Traceback (most recent call last):
    File "/home/travis/virtualenv/python3.6.0/lib/python3.6/site-packages/rest_framework/settings.py", line 177, in import_from_string module = importlib.import_module(module_path)
    File "/home/travis/virtualenv/python3.6.0/lib/python3.6/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level)
    File "<frozen importlib._bootstrap>", line 978, in _gcd_import
    File "<frozen importlib._bootstrap>", line 961, in _find_and_load
    File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
    File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
    File "<frozen importlib._bootstrap_external>", line 678, in exec_module
    File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
    File "/home/travis/virtualenv/python3.6.0/lib/python3.6/site-packages/rest_framework_xml/parsers.py", line 13, in <module>
      from .compat import etree
    File "/home/travis/virtualenv/python3.6.0/lib/python3.6/site-packages/rest_framework_xml/compat.py", line 9, in <module>
      import defusedxml.ElementTree as etree
    File "/home/travis/virtualenv/python3.6.0/lib/python3.6/site-packages/defusedxml/ElementTree.py", line 62, in <module>
      _XMLParser, _iterparse, _IterParseIterator, ParseError = _get_py3_cls()
    File "/home/travis/virtualenv/python3.6.0/lib/python3.6/site-packages/defusedxml/ElementTree.py", line 56, in _get_py3_cls
      _IterParseIterator = pure_pymod._IterParseIterator
  AttributeError: module 'xml.etree.ElementTree' has no attribute '_IterParseIterator'

This seems to be an issue with defusedxml https://github.com/tiran/defusedxml/pull/4

This issue will be fixed in the next version of defusedxml. You can try temporary adding defusedxml==0.5.0.rc1 to your requirements.txt until the final release. Support for Python 2.6, 3.1, 3.2 and 3.3 will be dropped however.

@jpadilla - since there is no deliverable here, should we close this? Or leave it open and rerun travis tests when the next version of defusedxml is released?

defusedxml==0.5.0 was released but like @yennicks they're dropping support for a couple of Python versions. We still care about Python 3.3
We might be able to get around this by installing defusedxml<0.5 by default and defusedxml>=0.5 for Python 3.6.

Django 1.11 will drop support for python 3.3 in a month and python 3.3 is EOL in September 2017. You could also bump to this lib to 1.4 with defusedxml==0.5.0 and drop support for 3.3.
Potentially at the same time than the support for Django 1.10 and maybe 1.11 (see issue #19 )

Looking for some clarification: if I use defusedxml5.0, can I use REST Framework XML with Python 3.6? Documentation explicitly states 3.4 not 3.6 as a requirement (https://jpadilla.github.io/django-rest-framework-xml/).

Looks like this can be closed off. The support matrix was updated in https://github.com/jpadilla/django-rest-framework-xml/pull/32 and this no longer appears to be an issue.

@kevin-brown thank you!


Change proptypes intended for rendering react elements to node

From https://reactjs.org/docs/typechecking-with-proptypes.html#proptypes
// Anything that can be rendered: numbers, strings, elements or an array
// (or fragment) containing these types.
optionalNode: PropTypes.node,

It seems like node would be a better proptype.

Hi, what's the process for getting this merged in? I don't see a contributing.md file

Thanks! 👍


[Bug] Bookkeeper failed to execute simpletest

Search before asking

[X] I searched in the issues and found nothing similar.

Version
pulsar: 2.10.5 or 3.2.0
os: centos7.9
Minimal reproduce step
I use the following configuration
https://github.com/apache/pulsar/issues/21998
When I tried to use a simple test to verify if the bookkeeper cluster was working, it encountered an error
1、./bin/bookkeeper shell bookiesanity
2024-03-11T10:12:34,332+0800 [main] WARN  org.apache.bookkeeper.client.BookKeeper - The mainWorkerPool did not shutdown cleanly
2024-03-11T10:12:34,458+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Session: 0x20019f7f5f00015 closed
2024-03-11T10:12:34,459+0800 [main] INFO  org.apache.bookkeeper.tools.cli.commands.bookie.SanityTestCommand - Bookie sanity test succeeded
2024-03-11T10:12:34,459+0800 [main-EventThread] INFO  org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x20019f7f5f00015

2、bin/bookkeeper shell simpletest --ensemble 3 --writeQuorum 3 --ackQuorum 3 --numEntries 1000
2024-03-11T10:13:46,438+0800 [main] INFO  org.apache.bookkeeper.tools.cli.commands.client.SimpleTestCommand - 192 entries written
2024-03-11T10:13:48,449+0800 [main] INFO  org.apache.bookkeeper.tools.cli.commands.client.SimpleTestCommand - 405 entries written
2024-03-11T10:13:50,453+0800 [main] INFO  org.apache.bookkeeper.tools.cli.commands.client.SimpleTestCommand - 619 entries written
2024-03-11T10:13:52,459+0800 [main] INFO  org.apache.bookkeeper.tools.cli.commands.client.SimpleTestCommand - 855 entries written
2024-03-11T10:13:53,711+0800 [main] INFO  org.apache.bookkeeper.tools.cli.commands.client.SimpleTestCommand - 1000 entries written to ledger 369
2024-03-11T10:13:53,776+0800 [main] ERROR org.apache.bookkeeper.client.LedgerHandle - ReadAsync exception on ledgerId:369 firstEntry:0 lastEntry:1000 lastAddConfirmed:998
2024-03-11T10:13:53,835+0800 [main] INFO  org.apache.bookkeeper.proto.PerChannelBookieClient - Closing the per channel bookie client for <IP_ADDRESS>:3181
2024-03-11T10:13:53,842+0800 [main] INFO  org.apache.bookkeeper.proto.PerChannelBookieClient - Closing the per channel bookie client for <IP_ADDRESS>:3181
2024-03-11T10:13:53,842+0800 [bookkeeper-io-3-3] INFO  org.apache.bookkeeper.proto.PerChannelBookieClient - Disconnected from bookie channel [id: 0x7adb7bf2, L:/<IP_ADDRESS>:53672 ! R:<IP_ADDRESS>/<IP_ADDRESS>:3181]
2024-03-11T10:13:53,842+0800 [main] INFO  org.apache.bookkeeper.proto.PerChannelBookieClient - Closing the per channel bookie client for <IP_ADDRESS>:3181
2024-03-11T10:13:53,843+0800 [bookkeeper-io-3-1] INFO  org.apache.bookkeeper.proto.PerChannelBookieClient - Disconnected from bookie channel [id: 0x345880f5, L:/<IP_ADDRESS>:34250 ! R:<IP_ADDRESS>/<IP_ADDRESS>:3181]
2024-03-11T10:13:53,843+0800 [main] INFO  org.apache.bookkeeper.proto.PerChannelBookieClient - Closing the per channel bookie client for <IP_ADDRESS>:3181
2024-03-11T10:13:53,843+0800 [main] INFO  org.apache.bookkeeper.proto.PerChannelBookieClient - Closing the per channel bookie client for <IP_ADDRESS>:3181
2024-03-11T10:13:53,844+0800 [bookkeeper-io-3-2] INFO  org.apache.bookkeeper.proto.PerChannelBookieClient - Disconnected from bookie channel [id: 0x341a0059, L:/<IP_ADDRESS>:41502 ! R:<IP_ADDRESS>/<IP_ADDRESS>:3181]
2024-03-11T10:13:53,844+0800 [main] INFO  org.apache.bookkeeper.proto.PerChannelBookieClient - Closing the per channel bookie client for <IP_ADDRESS>:3181
2024-03-11T10:13:53,848+0800 [main] WARN  org.apache.bookkeeper.client.BookKeeper - The mainWorkerPool did not shutdown cleanly
2024-03-11T10:13:53,975+0800 [main] INFO  org.apache.zookeeper.ZooKeeper - Session: 0x10014b110c70009 closed
2024-03-11T10:13:53,978+0800 [main-EventThread] INFO  org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x10014b110c70009
2024-03-11T10:13:53,975+0800 [main] ERROR org.apache.bookkeeper.tools.cli.helpers.ClientCommand - Failed to process command 'simpletest'
org.apache.bookkeeper.client.BKException$BKReadException: Error while reading ledger
        at org.apache.bookkeeper.client.LedgerHandle.readAsync(LedgerHandle.java:754) ~[org.apache.bookkeeper-bookkeeper-server-4.16.3.jar:4.16.3]
        at org.apache.bookkeeper.client.api.ReadHandle.read(ReadHandle.java:58) ~[org.apache.bookkeeper-bookkeeper-server-4.16.3.jar:4.16.3]
        at org.apache.bookkeeper.tools.cli.commands.client.SimpleTestCommand.run(SimpleTestCommand.java:115) ~[org.apache.bookkeeper-bookkeeper-server-4.16.3.jar:4.16.3]
        at org.apache.bookkeeper.tools.cli.commands.client.SimpleTestCommand.run(SimpleTestCommand.java:48) ~[org.apache.bookkeeper-bookkeeper-server-4.16.3.jar:4.16.3]
        at org.apache.bookkeeper.tools.cli.helpers.ClientCommand.apply(ClientCommand.java:66) ~[org.apache.bookkeeper-bookkeeper-server-4.16.3.jar:4.16.3]
        at org.apache.bookkeeper.tools.cli.helpers.ClientCommand.apply(ClientCommand.java:60) ~[org.apache.bookkeeper-bookkeeper-server-4.16.3.jar:4.16.3]
        at org.apache.bookkeeper.bookie.BookieShell$SimpleTestCmd.runCmd(BookieShell.java:914) ~[org.apache.bookkeeper-bookkeeper-server-4.16.3.jar:4.16.3]
        at org.apache.bookkeeper.bookie.BookieShell$MyCommand.runCmd(BookieShell.java:248) ~[org.apache.bookkeeper-bookkeeper-server-4.16.3.jar:4.16.3]
        at org.apache.bookkeeper.bookie.BookieShell.run(BookieShell.java:2349) ~[org.apache.bookkeeper-bookkeeper-server-4.16.3.jar:4.16.3]
        at org.apache.bookkeeper.bookie.BookieShell.main(BookieShell.java:2446) ~[org.apache.bookkeeper-bookkeeper-server-4.16.3.jar:4.16.3]

What did you expect to see?
Bookie sanity test succeeded
What did you see instead?
As above
Anything else?
No response
Are you willing to submit a PR?

[ ] I'm willing to submit a PR!

@horizonzy Could you help take a look ?

@horizonzy Could you help take a look ?

@Technoboy- I have fixed this in Bookkeeper. simpletest was broken. The fix was part of https://github.com/apache/bookkeeper/pull/4197/files#diff-67a4811fdce2ed6838425537a195b28d454f789f9dcf2a617ff5b09dbf12a8a6L111 . More details in https://lists.apache.org/thread/9ly956ss15jo6y2155jwcdq9vzn6tjfd .


Indicate focused panel

I'm using the builtin dark theme. From my personal experiences, it is difficult to tell which panel is currently focused on. So it is easy to accidentally type into files when trying to execute commands in a terminal, or vice versa. I'd like to have a setting to enables some sort of indication, e.g. highlighting the bounds or using a slightly different shade as background,  of the current focus.

We you open the panel, we do have our focus indicator that highlights the area:

And when you are focused on an item in there, the item will be highlighted:

And when your focus is in the editor, the selected item turns a different color:

Are you not seeing this?

I'm having problems seeing the indicator on consoles and text editors. I'm away from keyboard now, so I'll provide a screenshot tomorrow. Searching in the settings doesn't turn up anything useful.

In the console when you are focused you'll see the cursor indicator:

and when focus moves out:

I see. Is it possible to add the blue border as in the Problems panel? It makes the focus indication more uniform.

Since the focus is on the input, it does not make sense to place the blue focus on the entire panel. I'll close this as as-designed since this is by-design.


pre-build before wasm-pack publish

Closes #438

@ashleygwilliams that's great, so I'll expand the features soon as you wrote.

@ashleygwilliams

@ashleygwilliams

it may also be nice to list the defaults/options for out dir and target options when prompting

it already does, default options indicated within [...] as the demo shows(I just Enter to choose the default). but for clarifying, I'll add "default" keyword to the prompt.

done

@ashleygwilliams btw, may I still have your invitation of rustwasm-org as we talked in twitter several months ago?

oh yes! i'll take care of that today :)


fix(deps): Change prop-types to a dependency

Changes prop-types from a devDependency to a dependency

Closes https://github.com/plaid/react-plaid-link/issues/58 and https://github.com/plaid/react-plaid-link/issues/74

This bug prevents the use of this package with yarn v2. Merging this would be wonderful.

This should be fixed now in https://github.com/plaid/react-plaid-link/pull/81/
v2.0.0 was just released, so please test it out by checking the updated README and let me know!
There's also a storybook to test using Hooks and the Component wrapper:
https://plaid.github.io/react-plaid-link


Default-label in CredhubEnviornmentRepository should be used only if label is not provided

Unlike default application name and profile, default label should only be used  if provided label is null or empty.
I've added a second variation of normalize method  which accepts only comma-delimited string without default item.

@ryanjbaxter  This was a regression by #2568


User-created ancestor of the error-causing widget was:

Steps to Reproduce

...
...
...

Logs

Hello @minhhoang1007 !
Thank you for posting.
However, without any additional information, such as the description of the problem, code to reproduce the issue and flutter doctor -v command output, your case cannot be investigated. Due to that, closing this issue.
But feel free to open a new issue and fill the information requested in the template.
Thank you.

I got the same message and the solution was the Router didn't find any route and return to MaterialApp empty Widget.


Erratic behavior of between

I have data which is basically a matrix and I want to read portions of rows.  I do the following:
var grid = [];
$(function() {
x1 = 10;
x2 = 110;
db.chart.where("[patno+row+col]").between([1, 1, x1], [1, 1, x2], true, true).each(function(cell) {
grid.push(cell.sym);
console.log(cell);
}).then(function() {
console.log("range " + x1 + "-" + x2 + " found " + grid.length);
});
});
[patno+row+col] is the primary key.  This doesn't work (i.e. each returns nothing) when a power of 10 is part of the range, unless the lower bound is a power of 10 (including 10**0).
Examples:
x1-x2
1-100 works
99-110 doesn't work
70-100 doesn't work
1-99 works
2-100 doesn't work
10-100 works
20-100 doesn't work
20-30 works
100-110 works
250-350 works
95-130 doesn't work
101-110 works
11-100 doesn't work
1-101 works
2-101 doesn't work
10-110 works
2-15 doesn't work
10-15 works
However, 0-2 does retrieve the 2 columns that exist (1 and 2; there is no column 0).  All the other referenced columns are populated.
I can get the data reliably by doing individual gets but I thought between would be more efficient.  Is that true?

Sounds nasty. Could you post a snippet from a to b that reproduces the error? (Declare db, schema and populate the db and then reproduce the error?)

Here you go:
test.txt
Both test.js and test.html are in that one file.  The console outputs: range 91-130 found 0

Thanks. I converted the code to a unit test and corrected all the use of global vars and it results as expected. It finds 40 cells from the query:
asyncTest("Erratic behavior of between #190", ()=>{
	db.transaction("rw", db.chart, function() {
		for (var r=1; r<=20; r++) {
			for (var c=1; c<=150; c++) {
				db.chart.add({patno: 1,
							  row: r,
							  col: c,
							  sym: 1});
			}
		}
	}).then(function () {
        var grid = [],
		    x1 = 91,
		    x2 = 130;
		return db.chart.where("[patno+row+col]").between([1, 1, x1], [1, 1, x2], true, true).each(cell => {
			grid.push(cell.sym);
		}).then(function() {
            equal(grid.length, 40, "Should find 40 cells");
			//console.log("range " + x1 + "-" + x2 + " found " + grid.length);
		});
	}).catch(e => {
        ok(false, "Error: " + e + " (Will fail in IE and Edge due to lack of compound primary keys)");
    }).finally(start);
});

If you want to run it outside qunit, remove the call to asyncTest, equal, and start and uncomment the console.log part and you'll see that it outputs 40.
I've tested with Chrome and Firefox. Note that it wouldn't work in IE or Edge beacause they lack support for compound indices and primary keys.

Sorry for the false alarm.  Unfortunately it still doesn't work for me (standalone; I don't know how to run your test) and I can't see what is wrong.  I am testing in Chrome and Firefox.  My code after the db is open is the same as yours, I think:
$(function() { 	var grid = [], 	x1 = 91, 	x2 = 130; 	return db.chart.where("[patno+row+col]").between([1, 1, x1], [1, 1, x2], true, true).each(cell => { 		grid.push(cell.sym); 	}).then(function() { 		console.log("range " + x1 + "-" + x2 + " found " + grid.length); 	}); });
What is the issue with global variables? (I can see that you wouldn't want them in a unit test, but is there another problem?)  Also, I don't understand the notation you used.  What is returned from return db.chart...?  I guess cell => { } is shorthand for a function call but I've never seen that before.  Is it specific to Dexie?  I haven't run into either of these things in the documentation.  Sorry if these are naive questions.
Also, is "between" going to perform significantly better than individual gets?  I'm wondering if it's worth continuing to struggle with this.
Thanks for your help and for this wonderful library.  I may be struggling but it's nothing compared to what I would be going through without Dexie.

@qoregexp He's using typescript or ES6 - javascript vnext (possibly node 5.x), that's why you see the "arrow functions" - sometimes referred to as lambdas in languages like c#.

Don't know whether it was due to the global vars or not that your sample doesnt work. I've generally avoid using vars without declaring them because otherwise bad things typically happen (which could be the case here).
The arrow functions are indeed ES6 but you can already use them with Edge, Chrome, Opera and Firefox (dont know about safari) so they're tempting to start using.
Good question why I return the promise. It's a way you can chain promises to prohibit the typical "christmas tree" look of the code. Read more about them in the following articles:

http://www.html5rocks.com/en/tutorials/es6/promises/
http://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html

Here's a snippet that you could use with no dependencies what so ever except Dexie. It's your code after I rewrote it. Please test it and see if it solves the problem.
<!DOCTYPE html>
<html>
<head>
    <script<EMAIL_ADDRESS>    <script>
        function log(txt) {
            document.getElementById('log').value += txt + "\n";
        }
    </script>
</head>
<body>
    <textarea id="log" style="width:100%;height:1000px;"></textarea>
    <script>
        // Declare DB
        var db = new Dexie("test");
        db.version(1).stores({
	        chart: '[patno+row+col], patno',
        });

        // Delete previous DB if any (for multiple runs to work)
        log("Deleting database...");
        Dexie.delete("test").then(() => {
            var cells = [];
            for (var r = 1; r <= 20; r++) {
                for (var c = 1; c <= 150; c++) {
                    cells.push({
                        patno: 1,
                        row: r,
                        col: c,
                        sym: 1
                    });
                }
            }

            log("Populating data..");
            return db.chart.bulkAdd(cells);

        }).then(() => {

            log("Querying...");
            var grid = [],
                x1 = 91,
                x2 = 130;

            return db.chart
                .where("[patno+row+col]").between([1, 1, x1], [1, 1, x2], true, true)
                .each(cell => {
                    grid.push(cell.sym);
                }).then(() => {
                    log("range " + x1 + "-" + x2 + " found " + grid.length);
                });

        }).then(() => {
            log("Done.");
        }).catch(e => {
            log("Error: " + e + " (Will fail in IE and Edge due to lack of compound primary keys)");
        });

    </script>

</body>
</html>

dexie-issue190.html.txt

As pointed out in this article by @nolanlawson, promises can be tricky to fully understand. So if your app targets only late versions of chrome/opera/firefox/edge, you can consume promises easier with the use of Dexie.spawn() and yield. See the attached and run-ready HTML page of your sample that uses yield instead. Just rename it to html and open it in your browser. When you look at the code you'll notice that it looks like if the Dexie API was synchronous.
dexie-issue190-with-yield.html.txt
<!DOCTYPE html>
<html>
<head>
    <script<EMAIL_ADDRESS>    <script>
        function log(txt) {
            document.getElementById('log').value += txt + "\n";
        }
    </script>
</head>
<body>
    <textarea id="log" style="width:100%;height:1000px;"></textarea>
    <script>
        "use strict";

        // Declare DB
        var db = new Dexie("test");
        db.version(1).stores({
	        chart: '[patno+row+col], patno',
        });

        // Spawn a generator function to consume promises with yield instead...
        Dexie.spawn(function*() {
            // Delete previous DB if any (for multiple runs to work)
            log("Deleting database...");
            yield Dexie.delete("test");

            // Setup cells in a large array to bulkAdd later
            var cells = [];
            for (var r = 1; r <= 20; r++) {
                for (var c = 1; c <= 150; c++) {
                    cells.push({
                        patno: 1,
                        row: r,
                        col: c,
                        sym: 1
                    });
                }
            }

            log("Populating data..");
            yield db.chart.bulkAdd(cells);

            log("Querying...");
            var x1 = 91,
                x2 = 130;

            var count = yield db.chart
                .where("[patno+row+col]").between([1, 1, x1], [1, 1, x2], true, true)
                .count();

            log("range " +x1 + "-" + x2 + " found " + count);

        }).catch(e => {
            log("Error: " +e);
        });

    </script>
</body>
</html>

Just saw all these new comments.  Thanks @oising and @dfahlander for the information, explanations, and examples.  I will digest it and do more testing and get back to you.  Much appreciated.

I replaced the reference to my copy of dexie.min.js with<EMAIL_ADDRESS>and made no other changes and it started working.  I'm sorry it didn't occur to me there might be a newer version.  I think I had 1.2.

Aha, that explains it. When you say it, I recall there was a sorting bug when array keys were used. Thanks for sharing!


Change disposal of CancellationTokenSource to after task is complete

The previous implementation was allowing the disposal of the CancellationTokenSource to occur before the lifeCycleTask was actually complete.  I moved the disposal to the completeTask continuation so it would only be disposed when the task was complete.
Also included is a test that can detect this in the future and also verifies that the token is disposed after the call.
I also ran through the memory leak test in pull request #2128 and (assuming I had my CLI commands correct for dotMemoryUnit) it passed.

I forgot to mention, this is to fix issue #2141

There is a PR where the async await stuff is cleaned up for .net 4.5 : https://github.com/NancyFx/Nancy/pull/2105/files#diff-3711e290f8f06e8bd6ce86e1e6ce7dbfR102
I don't think I need to do any special here?

The async/await implementation looks correct to me too

Thanks @jeffthiele-iq

@jeffthiele-iq appreciate your feedback on async/await !

Version 1.4.3 was just pushed to NuGet.


[pointer][invariant] Move to separate file

This prepares us for future changes which will significantly increase the amount of code in the invariant module.
Also merge aliasing_safety into this new file.

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 87.65%. Comparing base (b43c510) to head (6e8def9).

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #1906   +/-   ##
=======================================
  Coverage   87.65%   87.65%
=======================================
  Files          17       17
  Lines        5964     5964
=======================================
  Hits         5228     5228
  Misses        736      736

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Documentation Website is difficult to read

It's exciting to see the full website for Angular Material 2 finally take shape. Unfortunately the new design has a very low text contrast ratio that makes the site content noticeably hard to read. Obviously there are stylistic considerations at play here, but since this site is primarily a working resource for developers it seems that readability should be given increased priority.

Second it!

@diminutivesloop can you describe the specific parts of the site where this is an issue?

I think it's most noticeable on the component documentation and guide pages. It also seems to be dependent on display quality as the pages appeared more readable on my personal MacBook (non-retina) than on my work PC. Also I haven't noticed the same readability issues on the main Angular website.

In https://material.angular.io/components/component/snack-bar I see:

The text color is Black 54%
Material design guidelines recommends Black 87%
https://material.io/guidelines/style/typography.html#typography-other-typographic-guidelines

Will be fixed with https://github.com/angular/material.angular.io/pull/91

Text still at .54

I'm glad I'm not the only one who is bothered by this.


Transaction names based on JAX-RS annotations

Duplicates: https://github.com/elastic/apm-agent-java/issues/67


sliderepl fail to run

When I follow the Readme commands and run
sliderepl 01_engine_usage.py

I get the following error message regardless of which command I enter. Thank you
% presentation mode is now ON
% SQL echo is now ON
%%
%% Running Deck: slides/00_talking.py
%%
%% This is an interactive Python prompt.
%% Enter "?" for command list.
%% Commands always begin with a ! symbol
%% Advance slides by pressing "enter",
%% or entering the "!n" or "!next" command.
%% Quit out of this deck by entering the "!q" or "!quit" command.

>>>
Traceback (most recent call last):
  File "/home/zeynep/repos/github/python_web_conf_2023/.venv/bin/sliderepl", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/home/zeynep/repos/github/python_web_conf_2023/.venv/lib/python3.11/site-packages/sliderepl/main.py", line 93, in main
    deck.run(options.script, **vars(options))
  File "/home/zeynep/repos/github/python_web_conf_2023/.venv/lib/python3.11/site-packages/sliderepl/core.py", line 535, in run
    console.interact(deck.banner if _goto is None else "")
  File "/usr/lib/python3.11/code.py", line 227, in interact
    line = self.raw_input(prompt)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/zeynep/repos/github/python_web_conf_2023/.venv/lib/python3.11/site-packages/sliderepl/core.py", line 674, in readfunc
    if len(tokens) != len(inspect.getargspec(fn)[0]):
                          ^^^^^^^^^^^^^^^^^^
AttributeError: module 'inspect' has no attribute 'getargspec'. Did you mean: 'getargs'?% presentation mode is now ON
% SQL echo is now ON
%%
%% Running Deck: slides/00_talking.py
%%
%% This is an interactive Python prompt.
%% Enter "?" for command list.
%% Commands always begin with a ! symbol
%% Advance slides by pressing "enter",
%% or entering the "!n" or "!next" command.
%% Quit out of this deck by entering the "!q" or "!quit" command.

>>>
Traceback (most recent call last):
  File "/home/zeynep/repos/github/python_web_conf_2023/.venv/bin/sliderepl", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/home/zeynep/repos/github/python_web_conf_2023/.venv/lib/python3.11/site-packages/sliderepl/main.py", line 93, in main
    deck.run(options.script, **vars(options))
  File "/home/zeynep/repos/github/python_web_conf_2023/.venv/lib/python3.11/site-packages/sliderepl/core.py", line 535, in run
    console.interact(deck.banner if _goto is None else "")
  File "/usr/lib/python3.11/code.py", line 227, in interact
    line = self.raw_input(prompt)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/zeynep/repos/github/python_web_conf_2023/.venv/lib/python3.11/site-packages/sliderepl/core.py", line 674, in readfunc
    if len(tokens) != len(inspect.getargspec(fn)[0]):
                          ^^^^^^^^^^^^^^^^^^
AttributeError: module 'inspect' has no attribute 'getargspec'. Did you mean: 'getargs'?

refresh sliderepl


When running something that outputs something non-stdout, nothing gets fetched

https://github.com/filecoin-project/bacalhau/tree/main/examples
export file_path=./high_quality_picture.jpg
cid=$(IPFS_PATH=/tmp/bacalhau-ipfs3163549147 ipfs add -q $file_path)
sudo apt-get -y update && sudo apt-get install -y graphicsmagick && \
    gm convert high_quality_picture.jpg -quality 20% -colorspace Gray gray_scale.jpg

how exactly are you instantiating the bacalhau submit command? what's the exact commandline?


Streaming query should evaluate all events from streaming listener, but should update efficiently

Currently, we only evaluate streaming event only once for each query runId. This is like a "must-have" thing since otherwise we end up with evaluating plans and updating to Atlas every time.
But I've also found the case where the micro-batch is not pulling data from entire sources (e.g. the query is configured to pull from 3 topics but the specific batch only pulls from 1 topics which ends up exposing one topics in physical plan).
So unfortunately, we should evaluate all events to have aggregated sources (which is actually not guaranteed to be whole entity), but update the entities efficiently. (Likewise only updating when there's any update in inputs or outputs.)

Other approach is also leveraging logical plan, but need to be really careful not to bring regression.


Nbabel again: Julia ~30% faster than Pythran (Julia using 4D points instead of 3D points)

I get a new PR in the project https://github.com/paugier/nbabel for a more efficient Julia implementation. It's now 30% faster to what we get with Pythran. 30% is of course not that big and for real codes it would not matter. However, since I started to write a reply to the original paper that should be published somewhere, in term of communication, 30% is a bit too much. Moreover, it would be interesting to understand.
Of course, all the time is spent is one function (compute_acceleration). I wrote a small microbenchmark to show the performance issue (see https://github.com/paugier/nbabel/blob/master/py/microbench/microbench_ju_tuple.jl and https://github.com/paugier/nbabel/blob/master/py/microbench/microbench_pythran.py).
The particularity of the Julia implementation is to use a Tuple{Float64, Float64, Float64, Float64} to represent a point in 3D (a Julia Tuple is immutable). More SIMD instructions can be used which makes the function 20% faster than with Tuple of 3 floats.
$ make julia_tuple
julia microbench_ju_tuple.jl
With Tuple{Float64, Float64, Float64}:
  2.344 ms (0 allocations: 0 bytes)
With Tuple{Float64, Float64, Float64, Float64}:
  1.855 ms (0 allocations: 0 bytes)

With Pythran, it gives with dim = 3 (30% slower than Julia with 4 floats):
make pythran
python microbench_pythran.py
shape= (1024, 3)
compute                          :     1 * norm
norm = 0.00277 s
compute_opt                      :     1 * norm

(There are 2 slightly different implementations to ease experiments.)
And with dim = 4 (this value has to be modified directly in the file), Pythran is slower (40% slower than Julia with 4 floats):
make pythran
python microbench_pythran.py
shape= (1024, 4)
compute                          :     1 * norm
norm = 0.00308 s
compute_opt                      :  1.18 * norm

@serge-sans-paille do you understand why Pythran is a bit slower? Do we face a case where Python-Numpy is really not enough expressive?
A remark that I guess is not the problem but still, I was surprised by the fact that pythran -P gives something like:
coef = (1.0 / (np.square(math.sqrt(builtins.sum(np.square(vector)))) * math.sqrt(builtins.sum(np.square(vector)))))

I guess the C++ compiler is smart enough to simplify that, but it's a bit strange...

Are you sure it is simd instructions? At least removing the @simd from the julia loop does not make a difference (does julia use simd instructions on broadcasting?). Similarly compiling with or without -DUSE_XSIMD does not seem to make a difference for the pythran code.
One thing I notice is when I change:
for i in range(dim):
    vector[i] = position0[i] - positions[index_p1, i]
...
for i in range(dim):
    accelerations[index_p0, i] -= coef * mass1 *vector[i]
    accelerations[index_p1, i] += coef *mass0*vector[i]

to
vector = position0 - positions[index_p1]
...
accelerations[index_p0] -= coef * mass1 * vector
accelerations[index_p1] += coef*mass0*vector

I see a 10x slowdown.

Are you sure it is simd instructions? At least removing the @simd from the julia loop does not make a difference (does julia use simd instructions on broadcasting?). Similarly compiling with or without -DUSE_XSIMD does not seem to make a difference for the pythran code.
One thing I notice is when I change:
for i in range(dim):
    vector[i] = position0[i] - positions[index_p1, i]
...
for i in range(dim):
    accelerations[index_p0, i] -= coef * mass1 *vector[i]
    accelerations[index_p1, i] += coef *mass0*vector[i]

to
vector = position0 - positions[index_p1]
...
accelerations[index_p0] -= coef * mass1 * vector
accelerations[index_p1] += coef*mass0*vector

I see a 10x slowdown.

Can you give a try to the following code (both _opt and the base one) compiled with clang, using that branch https://github.com/serge-sans-paille/pythran/pull/1712 and the -mfma flag?
from math import sqrt
import numpy as np

dim = 3

#pythran export compute(float[:,3], float[:], float[:,3])
def compute(accelerations, masses, positions):
    nb_particules = masses.size
    vector = np.empty_like(positions[0])
    acc0 = np.empty_like(accelerations[0])
    for index_p0 in range(nb_particules - 1):
        np.copyto(acc0, accelerations[index_p0])
        for index_p1 in range(index_p0 + 1, nb_particules):
            np.copyto(vector, positions[index_p0] - positions[index_p1])
            distance = sqrt(np.sum(vector ** 2))
            coef = np.power(distance, -3)
            np.copyto(acc0, acc0 + coef * masses[index_p1] * vector)
            accelerations[index_p1] += coef * masses[index_p0] * vector
        accelerations[index_p0] = -acc0

#pythran export compute_opt(float[:,:], float[:], float[:,:])
def compute_opt(accelerations, masses, positions):
    nb_particules = masses.size
    vector = np.empty(dim)
    accs = np.empty(dim)
    for index_p0 in range(nb_particules - 1):
        position0 = positions[index_p0]
        mass0 = masses[index_p0]
        accs.fill(0)
        for index_p1 in range(index_p0 + 1, nb_particules):
            for i in range(dim):
                vector[i] = position0[i] - positions[index_p1, i]
            d2 = 0.
            for i in range(dim):
                d2 = d2 + vector[i] * vector[i]
            distance3 = d2 * sqrt(d2)
            coef1 = masses[index_p1] / distance3
            coef0 = mass0 / distance3
            for i in range(dim):
                accs[i] = accs[i] + coef1 * vector[i]
                accelerations[index_p1, i] = accelerations[index_p1, i] + coef0 * vector[i]
        accelerations[index_p0] -= accs

Can you give a try to the following code (both _opt and the base one) compiled with clang, using that branch https://github.com/serge-sans-paille/pythran/pull/1712 and the -mfma flag?
from math import sqrt
import numpy as np

dim = 3

#pythran export compute(float[:,3], float[:], float[:,3])
def compute(accelerations, masses, positions):
    nb_particules = masses.size
    vector = np.empty_like(positions[0])
    acc0 = np.empty_like(accelerations[0])
    for index_p0 in range(nb_particules - 1):
        np.copyto(acc0, accelerations[index_p0])
        for index_p1 in range(index_p0 + 1, nb_particules):
            np.copyto(vector, positions[index_p0] - positions[index_p1])
            distance = sqrt(np.sum(vector ** 2))
            coef = np.power(distance, -3)
            np.copyto(acc0, acc0 + coef * masses[index_p1] * vector)
            accelerations[index_p1] += coef * masses[index_p0] * vector
        accelerations[index_p0] = -acc0

#pythran export compute_opt(float[:,:], float[:], float[:,:])
def compute_opt(accelerations, masses, positions):
    nb_particules = masses.size
    vector = np.empty(dim)
    accs = np.empty(dim)
    for index_p0 in range(nb_particules - 1):
        position0 = positions[index_p0]
        mass0 = masses[index_p0]
        accs.fill(0)
        for index_p1 in range(index_p0 + 1, nb_particules):
            for i in range(dim):
                vector[i] = position0[i] - positions[index_p1, i]
            d2 = 0.
            for i in range(dim):
                d2 = d2 + vector[i] * vector[i]
            distance3 = d2 * sqrt(d2)
            coef1 = masses[index_p1] / distance3
            coef0 = mass0 / distance3
            for i in range(dim):
                accs[i] = accs[i] + coef1 * vector[i]
                accelerations[index_p1, i] = accelerations[index_p1, i] + coef0 * vector[i]
        accelerations[index_p0] -= accs

Not faster at home :-( (opt1 and opt2 are the functions in your previous message)
shape= (1024, 3)
compute                          :     1 * norm
norm = 0.00301 s
compute_opt                      : 0.998 * norm
compute_opt1                     :  2.63 * norm
compute_opt2                     :  1.02 * norm

Not faster at home :-( (opt1 and opt2 are the functions in your previous message)
shape= (1024, 3)
compute                          :     1 * norm
norm = 0.00301 s
compute_opt                      : 0.998 * norm
compute_opt1                     :  2.63 * norm
compute_opt2                     :  1.02 * norm

Same here
shape= (1024, 3)
compute                          :     1 * norm
norm = 0.0029 s
compute_opt                      :     1 * norm
compute2                         :  6.85 * norm
compute3                         :  2.41 * norm
compute_opt3                     :     1 * norm

(2 is the compute where I changed the  loop over vector to vector operations, 3 are the functions from your message).

Same here
shape= (1024, 3)
compute                          :     1 * norm
norm = 0.0029 s
compute_opt                      :     1 * norm
compute2                         :  6.85 * norm
compute3                         :  2.41 * norm
compute_opt3                     :     1 * norm

(2 is the compute where I changed the  loop over vector to vector operations, 3 are the functions from your message).

@cycomanic / @paugier even with -mfma ?

@cycomanic / @paugier even with -mfma ?

@serge-sans-paille yes, -mfma did not make a difference (neither with gcc nor clang). Could it be an alignment issue, so that simd instructions are not used. Is there a way to check?

@serge-sans-paille yes, -mfma did not make a difference (neither with gcc nor clang). Could it be an alignment issue, so that simd instructions are not used. Is there a way to check?

I confirm again. -mfma has no effect.
$ pythran -Ofast -march=native -mfma -vv microbench_pythran.py
INFO:      sys file exists: /home/pierre/Dev/pythran/pythran/pythran.cfg
INFO: platform file exists: /home/pierre/Dev/pythran/pythran/pythran-linux.cfg
INFO:     user file exists: /home/pierre/.pythranrc
INFO: pythranrc section [pythran] is valid and options are correct
INFO: pythranrc section [typing] is valid and options are correct
INFO: pythranrc section [compiler] is valid and options are correct
running build_ext
new_compiler returns <class 'distutils.unixccompiler.UnixCCompiler'>
building 'microbench_pythran' extension
C compiler: clang++-10 -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC

creating /tmp/tmp6jf_ia_m/tmp
compile options: '-DENABLE_PYTHON_MODULE -D__PYTHRAN__=3 -DPYTHRAN_BLAS_OPENBLAS -I/home/pierre/Dev/pythran/pythran -I/home/pierre/Dev/pythran/pythran/pythonic/patch -I/home/pierre/.pyenv/versions/3.8.2/lib/python3.8/site-packages/numpy/core/include -I/home/pierre/.pyenv/versions/3.8.2/include/python3.8 -c'
extra options: '-std=c++11 -fno-math-errno -w -fvisibility=hidden -fno-wrapv -Ofast -march=native -mfma'
clang++-10: /tmp/tmpu_itryoy.cpp
clang++-10 -pthread -shared -L/home/pierre/.pyenv/versions/3.8.2/lib -L/home/pierre/.pyenv/versions/3.8.2/lib /tmp/tmp6jf_ia_m/tmp/tmpu_itryoy.o -L/usr/lib/x86_64-linux-gnu -lopenblas -lopenblas -o /tmp/tmpuddb59eb/microbench_pythran.cpython-38-x86_64-linux-gnu.so -fvisibility=hidden -Wl,-strip-all -Ofast -march=native -mfma
INFO: Generated module: microbench_pythran
INFO: Output: /home/pierre/Dev/nbabel/py/microbench/__pythran__/microbench_pythran.cpython-38-x86_64-linux-gnu.so

I confirm again. -mfma has no effect.
$ pythran -Ofast -march=native -mfma -vv microbench_pythran.py
INFO:      sys file exists: /home/pierre/Dev/pythran/pythran/pythran.cfg
INFO: platform file exists: /home/pierre/Dev/pythran/pythran/pythran-linux.cfg
INFO:     user file exists: /home/pierre/.pythranrc
INFO: pythranrc section [pythran] is valid and options are correct
INFO: pythranrc section [typing] is valid and options are correct
INFO: pythranrc section [compiler] is valid and options are correct
running build_ext
new_compiler returns <class 'distutils.unixccompiler.UnixCCompiler'>
building 'microbench_pythran' extension
C compiler: clang++-10 -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC

creating /tmp/tmp6jf_ia_m/tmp
compile options: '-DENABLE_PYTHON_MODULE -D__PYTHRAN__=3 -DPYTHRAN_BLAS_OPENBLAS -I/home/pierre/Dev/pythran/pythran -I/home/pierre/Dev/pythran/pythran/pythonic/patch -I/home/pierre/.pyenv/versions/3.8.2/lib/python3.8/site-packages/numpy/core/include -I/home/pierre/.pyenv/versions/3.8.2/include/python3.8 -c'
extra options: '-std=c++11 -fno-math-errno -w -fvisibility=hidden -fno-wrapv -Ofast -march=native -mfma'
clang++-10: /tmp/tmpu_itryoy.cpp
clang++-10 -pthread -shared -L/home/pierre/.pyenv/versions/3.8.2/lib -L/home/pierre/.pyenv/versions/3.8.2/lib /tmp/tmp6jf_ia_m/tmp/tmpu_itryoy.o -L/usr/lib/x86_64-linux-gnu -lopenblas -lopenblas -o /tmp/tmpuddb59eb/microbench_pythran.cpython-38-x86_64-linux-gnu.so -fvisibility=hidden -Wl,-strip-all -Ofast -march=native -mfma
INFO: Generated module: microbench_pythran
INFO: Output: /home/pierre/Dev/nbabel/py/microbench/__pythran__/microbench_pythran.cpython-38-x86_64-linux-gnu.so

Looking at the discussion of the julia folks about optimising this here should the arrays be transposed for better simd access? They discuss that they get significant benefit from laying the arrays out as Nx4, does that not mean the python code should be layed out as 4xN?

Looking at the discussion of the julia folks about optimising this here should the arrays be transposed for better simd access? They discuss that they get significant benefit from laying the arrays out as Nx4, does that not mean the python code should be layed out as 4xN?

As a follow-up on my home desktop (Ryzen 3600) compared to my laptop (i7) pythran fares slightly better, but also no difference with and without -mfma
julia microbench_ju_tuple.jl
With Tuple{Float64, Float64, Float64}:
  2.669 ms (0 allocations: 0 bytes)
With Tuple{Float64, Float64, Float64, Float64}:
  2.125 ms (0 allocations: 0 bytes)

transonic microbench_pythran.py -af "-march=native -Ofast"
1 files created or updated needs to be pythranized
python microbench_pythran.py
shape= (1024, 3)
compute                          :     1 * norm
norm = 0.00288 s
compute_opt                      :     1 * norm
compute_opt1                     :  4.34 * norm
compute_opt2                     :     1 * norm

transonic microbench_pythran.py -af "-march=native -Ofast"
1 files created or updated needs to be pythranized
python microbench_pythran.py
shape= (1024, 3)
compute                          :     1 * norm
norm = 0.00304 s
compute_opt                      :  1.01 * norm
compute_opt1                     :  3.61 * norm
compute_opt2                     :  1.05 * norm