Remove MP quickstart GreetApplication#getClasses method for auto-discovery

Addresses #1380
Removing the getClasses method from an app class allows auto-discovery to find resources automatically. This change showcases this feature in the quickstart (and stand-alone quickstart) MP apps.

I don't think this change is good.

Application class is present to show how to list resources that belong to the app
When you remove getClasses, the Application class does not serve any purpose in this example, so you could just remove it

I liked the way the quickstart was explicit - you create an app that has resources (and you can add an additional app, that has different resources).
Now you have a set of classes that "automagically" end up in the application you define by that class? I know this is the way people from app servers expect this to work, but it is not nice (IMHO).
Please let's talk about it before merging.

@tomas-langer Adding multiple apps is not the norm. Developers with experience in JAX-RS would not normally do that. Now adding libraries with resources and expecting those to be part of your app is more common, in fact this is how this whole discussion started, from a developer question. Other MP implementations seem to favor scanning as well.

One concrete use case that came up in the slack channel is the MP extension openapi-ui. For this to work if getClasses is present, the developer has to modify that method after inspecting the source code for openapi-ui to find out what the service classes are.
I do not think we do want to force developers to do dive into the internals of external JARs to make them work with our example code.

In light of this discussion, I propose to remove the GreetApplication class from the MP quickstart and MP stand-alone quickstart.
@tomas-langer Are you OK with this approach?

Tomas reports he is OK with removing the application class.


Modus Content Tree: adding  right slot  to modus tree view item

Description

adding  group-right slot
adding  group-left slot

the purpose for each group is to have content in both sides, currently we only have room to place a label and that slot has an specific role for this. The group-left slot would be for components with its own role in order to not generate confusion with the screen reader if we use the label slot as a content on the left.
There's a label slot to the left already but for accessibility purposes if I use that slot and add another component
for example:
a button. it will place a Role as a label instead of a role as a button and if I place a role in the button component it will tab navigate twice (first the label slot container and then the Button component with the other role).
and that's why we have included the group-left where the responsability to place a correct role for tab navigation will be in the component that we're adding not the slot container
References #1963
Type of change

[ ] Bug fix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[x] Documentation update

How Has This Been Tested?

Checklist

[x] My code follows the style guidelines of this project
[x] I have performed a self-review of my own code
[x] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[x] My changes generate no new warnings
[x] I have added tests that prove my fix is effective or that my feature works
[x] New and existing unit tests pass locally with my changes
[ ] Any dependent changes have been merged and published in downstream modules
[ ] I have checked my code and corrected any misspellings

@Roliver-Javier @yohernandez I'm going to add comments to the the Issue so we can discuss the goal of this there.

@cjwinsor what's the status of the review for this PR?

@cjwinsor what's the status of the review for this PR?

I have been pulled off this PR multiple times due to other requests to help with other PRs from e-Builder, but I was able to spend some time late last night to formulate a plan.  I will be adding additional comments this afternoon.  We will not be moving forward with the left slot unless justified as a need.  The right slot will need to be replaced with an actual action menu component which I have started the work on in order to assist e-Builder in a more timely resolution to this PR.

2 main points

We shouldn't be adding a left slot. Please provide the exact usage scenario that we can address in another issue if valid.
Instead of a slot on the right side, it needs to be a proper component.  The guidelines for this component do mention action buttons on the right side, so this is good to become an actual prop on the item.

The end result should look as shown in the screenshot on the issue

To achieve this, I recommend creating a ModusActionBar component that takes a property for number of visible items, size (small, medium, large), the array of actions (id, icon, label) and emits an event when an action is clicked.
This component should not go into storybook at this time, though we may decide to elevate its status in the future.
Utilize popperjs to position the modus-list in the overflow menu.
Message me directly when you are ready to work on this as I have created an action bar component which could serve as a basis to this work.  Its very POC, but illustrates everything mentioned above.
This is a screenshot of my current POC (borders added around the modus-action-bar for clarity, and updated list items to have a leftIcon property so the list item has an icon... just a part of lists that hasn't been added yet but is in the guidelines.)

There are a few UX considerations that would ultimately need addressed but I will approve this PR once we can define actions per modus-tree-view-item which get passed into the modus-action-bar which handles creating the action bar.
The modus-tree-view-item would hard code the number of visible items to 3 (3 actions or 2 actions + overflow menu) so that only 3 icons total can appear.

As discussed with @Roliver-Javier this PR will be closed. A new PR will be opened to address the comments from this PR as the changes were significant.

As discussed with @Roliver-Javier this PR will be closed. A new PR will be opened to address the comments from this PR as the changes were significant.


nil panic

When running the tests (or when using golibrsync as a library), there is a panic within the library.
I could give the whole stack trace, but it's very easy to reproduce. I have tested it with go 1.3 and 1.5, using librsync 0.9.7.

The actual issue was with not checking whether recover() was actually called while panicking. But there was a much bigger issue needing to be fixed, which I've done now.


Promote Virtual Service Delegation to Alpha

Virtual Service Delegation was introduced in release 1.6 with https://github.com/istio/istio/pull/22118. It was never placed in the Feature List. This issue is based on the Alpha Feature Requirements.
Alpha Feature Requirements
This page lists the requirements for promoting a feature to alpha. Please check off and document the steps as they are completed.
Feature Name:  Virtual Service Delegation
RFC: Design doc listed next
Design doc: https://docs.google.com/document/d/1TzXjvbEqeRKHQ7FonAY_yS1zHa8rVH2DIq4EM5BuDQ4/edit#
Relevant Documentation: https://istio.io/latest/docs/reference/config/networking/virtual-service/#Delegate

Requirements:
Design

[ ] RFC has been approved describing the intention of the feature as well as the user stories behind the feature.
_The Design Doc is still in review, but implementation was released in 1.6. _

Config

[x] Explicit user action is required to enable this feature (e.g. a config field, config resource, or installation action).
_The usage is controlled by use of Delegate. _

Link to instructions for enabling
_https://istio.io/latest/docs/reference/config/networking/virtual-service/#Delegate_

Docs

[x] Reference docs are published to preliminary.istio.io or the Istio wiki.
[ ] Basic feature docs are published on preliminary.istio.io describing what the feature does, how to use it, and any caveats.
[x] Release notes entries added as appropriate
[na] Upgrade notes entries added as appropriate

Tests

[ ] Automated integration tests cover core use cases with the feature enabled.
[x] When disabled, the feature does not affect system stability or performance.

API

[x] Initial API review.  https://github.com/istio/api/pull/1209

Approvals

[ ] The appropriate work group(s) have reviewed and approved promotion of the feature.
[ ] The TOC has reviewed and approved promotion of the feature as part of the
roadmap for a release.

I thought these issues would go in istio/enhancements?

Good point John. I can't transfer there, but will close, open a new one.


Some phones don't draw models if indicesComponentType=5125-GL_UNSIGNED_INT. But they draw fine if indicesComponentType=5123-GL_UNSIGNED_SHORT. I think it may be related to the support on the phone OpenGLES3+. Or are there other reasons?

Some phones don't draw models if indicesComponentType=5125-GL_UNSIGNED_INT. But they draw fine if indicesComponentType=5123-GL_UNSIGNED_SHORT. I think it may be related to the support on the phone OpenGLES3+.
Or are there other reasons?

That's almost certainly the (only) reason.
GLES 2.0: https://registry.khronos.org/OpenGL-Refpages/es2.0/xhtml/glDrawElements.xml

type: Specifies the type of the values in indices. Must be GL_UNSIGNED_BYTE or GL_UNSIGNED_SHORT.

GLES 3.0: https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glDrawElements.xhtml

type: Specifies the type of the values in indices. Must be one of GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, or GL_UNSIGNED_INT.

(There are extensions for supporting GL_UNSIGNED_INT in 2.0, but I don't know how widely these are supported)

For OpenGL ES 2.0, check for the GL_OES_element_index_uint extension string presence.
For WebGL 1.0, enable the OES_element_index_uint extension.

thank


Add ability to create multiple datacenters

Another ticket to be CassKop compatible. We need to support multiple datacenters, for instance having on the same site one datacenter for regular workload and one for spark jobs. We had that discussion in the past and @jsanda made some proposals that could be used as a starting point or maybe a solution.

Okay I think we can close the ticket as the ability is already available at https://docs.datastax.com/en/cass-operator/doc/cass-operator/cassOperatorUsing.html?hl=multi#Establishingamulti-datacentercluster. I also tested it using the same object and replacing its name.

👍  I think we could still make multi-DC-in-one-k8s-cluster more automated, but we do support it with a rather long procedure to get it working.


Use the gatway not the main site in the example

@okket ah thanks. we'll eventually move the gateways to ipfs.io but we have some limiting factors still. will merge this until that happens


clean the jfsCache dir before fio test.

Codecov Report

Merging #1757 (eb8904e) into main (f342a98) will increase coverage by 0.07%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##             main    #1757      +/-   ##
==========================================
+ Coverage   61.56%   61.64%   +0.07%
==========================================
  Files         135      135
  Lines       22924    22924
==========================================
+ Hits        14114    14131      +17
+ Misses       7210     7196      -14
+ Partials     1600     1597       -3

Impacted Files
Coverage Δ

pkg/chunk/utils_unix.go
73.33% <0.00%> (-20.00%)
:arrow_down:

pkg/meta/sql.go
67.23% <0.00%> (ø)

pkg/chunk/cached_store.go
77.44% <0.00%> (+0.55%)
:arrow_up:

pkg/vfs/reader.go
80.29% <0.00%> (+3.10%)
:arrow_up:

Continue to review full report at Codecov.

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


Increment versions for core releases

Increment package versions for core releases

API change check
API changes are not detected in this pull request.

This PR should not have trigger azure - monitor - ci and azure - maps - ci pipelines as only pom.xml files were updated. Created a PR to ignore these changes in the future - https://github.com/Azure/azure-sdk-for-java/pull/33286

Hi @srnagar , there's a pipeline failure.
It's due to azure-core version conflict between your PR and this PR. Seems they simultaneously passed CI and that PR merged after this one, resulting in version inconsistency.
I've created an issue for it: https://github.com/Azure/azure-sdk-for-java/pull/33296
also a PR: https://github.com/Azure/azure-sdk-for-java/pull/33296 but I'm not able to trigger CI...


There is no obvious way to import an external object to Editor

Summary: what are the recommended practices for importing foreign objects into IPFS or other web storage and then getting them into the "inline" storage (in the A-Frame sense of "inline")?
This MIGHT only be a documentation request.
Steps to reproduce the UX problem:

Open editor, new or existing scene
In the DCL Editor scenegraph panel on left, click on Add... - .obj
// see a selection tool appear at the origin
// optionally move this to somewhere you want the object to initially appear.
Scroll to bottom of the Components panel on right
// observe a place to enter paths for .mtl and .obj
// If you look at the paths for the DCL logo disk object, you see paths that are relative to some root which is nowhwere documented what it is.
// /obj/Decentral_2.mtl
// /obj/Decentral_2.obj
Wonder how to get objects and materials uploaded in a way that they can then be used with paths like this
Tried putting the .obj and .mtl into the A-Frame Asset Uploader (UploadCare) https://cdn.aframe.io/
Tried putting the full paths with domain names of the uploaded files into the scene.
The object appeared (the mtl didn't, but that may be a different issue)

Right now @bnolan is working on an object uploading features (.obj+.mtl) and I think it should be finalized in few days. We'll be using IPFS for storing textures. His progress so far: https://github.com/decentraland/editor/tree/feature/image-upload

FYI,
I was able to get external object to at least partially work, if I uploaded it to a content delivery network, like cdn.aframe.io, and then using the full path to the uploaded URL in the DCL Editor's component panel at the bottom. The Object did appear in the scene. The material didn't, but that might be a problem with my material. But getting the content into IPFS and then having an appropriate scene-relative or land-relative or owner-relative path to use in the Editor is unclear or not yet supported.

This is resolved with the latest Editor build.
Lite documentation is now in the Wiki page on creating content.

11/12/17 Tested and verified fix on editor.decentraland.org


contrib: publish pg_smtp_client 0.1.0

I think this install_command will work, but I don't see any other extensions doing it this way (except for jsonschema which does it via a Makefile).
If not, I can change to copy files from the target directories manually.

Is there anything preventing this from merging?

Is there anything preventing this from merging?

From my perspective, it is ready to merge.
I don't know if there is anything else that needs to happen in the process.

I tested this out using the tembo-local docker instance, and it isn't working. :disappointed:
trunk install pg_smtp_client runs sucessfully, but the extension is not really installed.
postgres@f50bf8202acd:/postgresql-15.3$ trunk install pg_smtp_client
Using pg_config: /usr/lib/postgresql/15/bin/pg_config
Using pkglibdir: "/var/lib/postgresql/data/tembo/15/lib"
Using sharedir: "/var/lib/postgresql/data/tembo"
Downloading from: https://cdb-plat-use1-prod-pgtrunkio.s3.amazonaws.com/extensions/pg_smtp_client/pg_smtp_client-pg15-0.1.0.tar.gz
Dependent extensions to be installed: []
Installing pg_smtp_client 0.1.0
Skipping license file licenses/LICENSE

***************************
* POST INSTALLATION STEPS *
***************************

Enable the extension with:
CREATE EXTENSION IF NOT EXISTS pg_smtp_client CASCADE;

And when I do this, I get this error about the control file missing:
postgres> CREATE EXTENSION IF NOT EXISTS pg_smtp_client CASCADE
[2024-07-31 11:16:14] [0A000] ERROR: extension "pg_smtp_client" is not available
[2024-07-31 11:16:14] Detail: Could not open extension control file "/var/lib/postgresql/data/tembo/extension/pg_smtp_client.control": No such file or directory.
[2024-07-31 11:16:14] Hint: The extension must first be installed on the system where PostgreSQL is running.

I downloaded the archive from the s3 bucket, and indeed, it only has a manifest.json and license file.
I think this must be because I was trying to make cargo pgrx install work (as mentioned here), but most extensions simply mv the build output to the appropriate directory, which is what I think I should probably do.
@ChuckHend I need to update my Trunk.toml. What is the best way forward? Should I open another PR with the change, or should this PR be reverted first?

@brianpursley, no need to revert that PR. Just open a new one patching whatever needs to be fixed :)


Add unit tests for kmyth getkey application

Unit tests must be written and integrated into the kmyth unit testing framework for the top-level (main()) implementation of the TPM 2.0 based kmyth-getkey application in tpm2/src/main/getkey.c.

I don't think there's anything to unit test here. The only functionality that's not contained in main is check_string_arg. While we could write tests for it I'm not sure it really buys us anything.

I don't think there's anything to unit test here. The only functionality that's not contained in main is check_string_arg. While we could write tests for it I'm not sure it really buys us anything.

I agree with @b-carr. This test is a little different from seal/unseal because of the TLS connection, but it is best suited for a different testing framework.


FIx error with resolve Psr\Http\Server\MiddlewareInterface

Zend Expressive 3 throw error Service Service "Zend\Expressive\Flash\FlashMessageMiddleware" did not to resolve to a Psr\Http\Server\MiddlewareInterface instance; resolved to "Zend\Expressive\Flash\FlashMessageMiddleware".
This PR will fix this problem.

@popovserhii please use release-1.0.0 branch instead when trying it. It already there: https://github.com/zendframework/zend-expressive-flash/blob/release-1.0.0/src/Exception/MissingSessionException.php
If you want to try it, use :
composer require zendframework/zend-expressive-flash:^1.0.0alpha1

Same, use the release-1.0.0 branch and 1.0.0alpha1.


Improve GitHub Actions for pull requests

See https://github.com/Senzing/community-roadmap/issues/71

Pull requests:

https://github.com/Senzing/senzingapi-runtime/pull/19


[Web] Safari with reanimated value doesn't work

Describe the bug
Using useReanimatedKeyboardAnimation (and possibly other APIs) on Safari seems to not work
Code snippet
import { Text, TextInput, View, TouchableOpacity } from 'react-native'
import { useReanimatedKeyboardAnimation } from 'react-native-keyboard-controller'
import Animated, { useAnimatedStyle } from 'react-native-reanimated'

export default () => {
  const { height } = useReanimatedKeyboardAnimation()
  const animatedSpacingBelowButton = useAnimatedStyle(() => {
    return { height: -height.value + 24 }
  })

  return (
    <View
      style={{
        paddingTop: 50,
        paddingBottom: 24,
        paddingHorizontal: 16,
        flex: 1,
      }}
    >
      <TextInput
        placeholder="Text Input"
        style={{
          height: 48,
          width: '100%',
          backgroundColor: 'gray',
          fontSize: 16,
        }}
      />
      <View style={{ flex: 1 }} />
      <TouchableOpacity
        style={{
          backgroundColor: 'orange',
          height: 50,
          borderRadius: 50,
          alignItems: 'center',
          justifyContent: 'center',
        }}
      >
        <Text>Button</Text>
      </TouchableOpacity>
      <Animated.View style={animatedSpacingBelowButton} />
    </View>
  )
}

To Reproduce
Tap on the TextInput to display the keyboard.
Expected behavior
The reanimated value should be updated when the keyboard appears and the button should moves up
Screenshots
https://github.com/user-attachments/assets/dea8cf4b-62ef-4346-82af-530e4513cc90
https://github.com/user-attachments/assets/5bd62b13-b56b-4ffb-a603-4806ede86698
Smartphone (please complete the following information):

Desktop OS: [e.g. Windows 10, MacOS 10.15.5]
Device: iPhone 13 mini
OS: iOS 18.1
RN version: 0.76.1
RN architecture: New
JS engine: Hermes
Library version: 1.14.4

@kirillzyusko other than that, I take this issue as an opportunity to tell you thanks a lot for this awesome library @kirillzyusko 🙏 🙏 🙏


Analyze the tests

The tests have to analyzed in order to answer the following questions:

What are the tests?
Do the tests cover the requirements?
Does your refactoring introduce anything that requires more tests?

Hostile take over


Support for all CSS output styles

Since libsass now supports all CSS outputs, would we see a future release for gulp-sass that supports it using { style: 'expanded' }?
See commit: https://github.com/sass/libsass/commit/7877cfa872b036d55344db5d12ea908bb70f3705

gulp-sass is a wrapper around node-sass which uses libsass.
As soon as node-sass updates the version of libsass it uses you will be able to use it by reinstalling gulp-sass

@Keats, thank you for the update. I'll reference this in node-sass.


Feature/bump node to v16.13.x

Following https://github.com/Vizzuality/marxan-cloud/pull/782/ and since we are in an upgrading mood, why not do it the cool way?

superseded by #1319


Improve packaging and set up the CI

Fixes https://github.com/Doodleverse/doodler_engine/issues/1
Hi @dbuscombe-usgs, this PR:

adds a generic .gitignore file
moves the project to using the relatively newer pyproject.toml file format that is now fully supported by setuptools. Since this is a new and simple package I thought that was a good opportunity.
swaps versioneer for setuptools-git-versioning. I found versioneer a pain to set up and didn't like much to see it was adding files to the repo. Apparently setuptools-git-versioning doesn't and seemed to work seamlessly. This is by the way what Bokeh uses. As with versioneer - I believe - the package version is taken from git tag (e.g. 0.0.1).
The runtime dependencies and dev dependencies are declared in two requirements.txt files that are referenced in the pyproject.toml file. This allows installing the dependencies from conda with conda install --file requirements.txt which is quite handy in this case as we really want to use conda as I believe it's the way you recommend users to install the package. And pydensecrf is a pain to install. Note that conda install --file requirements.txt works under the condition that the packages doodler_engine depend on have the same name both on PyPI and conda-forge, which is the case for the current set of dependencies. If that were no longer to be true, you'd probably just declare the PyPI dependencies directly in the pyprojec.toml file and you would maintain a separate environment.yml file with the right conda names. In the HoloViz group we use an internal tool called pyctdev that deals with this sort of thing but we don't recommend anyone else using it, it's really tailored to our workflow and is a bit of a pain to deal with.
sets up testing with pytest and a dummy test example, feel free to add as many tests as you want :)
sets up CI to run the tests on every pull request and commit to the main branche
sets up CI to build a source distribution and a wheel (with the build module) and deploys it to PyPI, this happens whenever you push a tag (e.g. 0.0.1) to the repo, I've added some notes in the README

What is up to you now is to follow the instructions provided at the end of this section to create an API Token and add it as to your repository secrets. If getting the token is too much of a pain (I've never done it), you could instead setup your PyPI username and password as secrets and update the last step of the build workflow accordingly.
EDIT: I forgot mentioning the most important part, compared to before the package now has runtime dependencies (requirements.txt). I explored the code base and added then whenever I saw an import referencing an external package. The pins come from the environment.yml file referenced in Doodler. I also setup the minimum Python version to be 3.8. It seems that it's what you recommend on Doodler now and 3.6 is "old" in the scientific Python ecosystem.

Thanks @maximlt ! Make sense (I think!) - I'm slammed until Thurs, but I will for sure try this out then and report back. More soon....

Thank you for setting up things to make the doodler_engine an official package. I appreciate the template for automatically building the PyPI package since we have a few packages in the works currently. Do you recommend setting the build workflow set to run on push to a particular branch? @maximlt

I looked at the files of this PR. I guess the only question I have at the moment is the requirements.txt, which lists a bunch of dependencies. I thought that there were a lot of advantages to declare zero dependencies, for the doodler-engine, because downstream applications (currently, DashDoodler and HoloDoodler and others in progress) work with their own respective conda environments. Sorry if I miscommunicated this before. Re-reading your original issue https://github.com/Doodleverse/doodler_engine/issues/1 , I guess I thought you would be creating updating separate packaging and CI for DashDoodler and HoloDoodler
I guess that this current PR is a necessary first-step, but the requirements.txt seems like it should still be blank. I really appreciate your taking the effort to do this @maximlt !

Do you recommend setting the build workflow set to run on push to a particular branch?

Not particularly no. There are certain scenarios - rare usually - where you want to build a new version from a branch. Say you're between v1 and v2, at v1.5 and decided your next version would be v2. You're adding features but someone reports a critical bug in v1.5, except it's too early to release v2. You can then create a branch off v1.5, patch it and release v.1.5.1 from that non-main branch.

I thought that there were a lot of advantages to declare zero dependencies, for the doodler-engine, because downstream applications (currently, DashDoodler and HoloDoodler and others in progress) work with their own respective conda environments. Sorry if I miscommunicated this before.

Listing the dependencies of doodler_engine was all I meant to do really, everything else was optional and to make releasing easier :) The plan I have in mind is the following:

list the dependencies in doodler_engine: done in this PR
release doodler_engine on PyPI: I have no control over that
release doodler_engine on conda-forge: I can set up the recipe and add you as a maintainer for you to take care of the next ones
add doodler_engine as a dependency to the downstream applications: I'll take care of updating HoloDoodler

doodler_engine is meant to be a library depended upon by other libraries/applications. As such it should declare the dependencies it needs, other wise other libraries/applications would have to find out by themselves what dependencies it needs, what versions it supports, etc. This is what I've done in this PR :) Usually the standard practice is to pin the minimum version of the libraries you depend on (e.g. numpy>=1.x).
There's a difference between libraries (python packages) and applications (like HoloDoodler). Applications should pin exactly all their dependencies (e.g. numpy==1.5.0) so that they don't break when a new version (e.g. numpy 2) is released. Without pinning (we also say locking) them all, there's 100% chance sooner or later the application will break 🙃 So the role of a library developer is slightly different from the role of an application developer. As a library developer you want your library to be able to be used in many different environment configurations (e.g. different Python versions), you've got to test them the best you can. When a library you depend on (e.g. numpy) releases a breaking change to your library you either have to adapt it so that it works with the old and new version, or pin the offending dependency to the newest version. As an application developer you work in a context with fixed dependency, yet you have to make the effort to update your dependencies "regularly" as the libraries you depend on can get deprecated, it also avoids build up too much technical debt.

@maximlt thanks for the detailed explanation. I do understand what you are saying, however it is still not clear to me what advantage listing the doodler-engine dependencies are, if all we need to do is pip-install it into a conda environment that has its dependencies locked. I thought the lack of dependencies was the main feature, and I continue to think that. doodler-engine itself, not technically but in practice, has no dependencies outside of those already listed in the conda environments of the downstream applications. Otherwise, aren't we simply listing dependencies twice?
As for your plan to set up the conda recipe HoloDoodler, that would be greatly appreciated, thank you

Also please note that, for dash-doodler, we abandoned python 3.6 a while ago, in favour of a recipe listed here that works more reliable. We tested this on a number of platforms and conda installs, so we should probably remove the yml file now. Its a hangup from the bad days before you helped us get the pydensecrf conda-forge package and has been left merely as a fallback. But, as I say, we should probably now remove it

I chatted with @2320sharon about this, and based on our discussion I wanted to clarify a couple of things here to help with the confusion

doodler-engine purposefully has no dependencies because, currently, pip installs the code into an existing conda env. It literally just copies the functions into an environment that has already been established with the requisite dependencies. Its quite elegant because it means that we are relying solely on conda to provide a solution for downstream applications HoloDoodler and DashDoodler, not pip, and codes from doodler-engine do not need to be duplicated. It does mean, however, that the onus is on the downstream applications to maintain current API calls to existing dependencies
I understand that individual dependencies can change in the future, which is why we are pursuing a locked version of the conda environments. If we lock in the current dependencies, then as far as I can tell, the current versions of doodler-engine codes need not change.
I understand that it means the downstream applications are beholden to the locked versions of libraries, as specified by the locked conda environments
If we lock the conda environments of the two downstream applications, the only reasons why I can think of for declaring the dependencies are as follows:
a. to document the versions of dependencies that we used for completeness/posterity. That is most efficiently taken care of in the README or a requirements.txt that is not actually used to install anything into the conda env
b. if conda REQUIRES you to create a requirements.txt file in doodler-engine to create the locked conda env (I cant see how this could be true, if you dont declare any dependencies, it won't know, right?)

So, it makes perfect sense (or at least I thought it did) for holodoodler and dash-doodler to have toml files, CI, tests, and lists of dependencies. It also makes sense to lock the conda environments of those applications.
The old 'yml' file in dash-doodler references python 3.6 is no longer used since the pydensecrf library was added to conda forge, as I explain here. In the light (or dark :grin: ) of the above, does it still make sense to make this PR as-is? I guess I'm worried about declaring the requirements twice, once here, and again in each conda environment. It makes me question what the purpose of the locked conda environment is at all. Thanks again for your help on this, apologies if I am completely not getting it. It is my memory that we moved the doodler-engine to pip exactly to avoid having to declare dependencies twice, and it has worked well so far. My expectation was to lock the conda environments and this would be a done-deal.

Thanks @maximlt , very clear. I guess the piece of information I was looking for was "Libraries declare their dependencies in a loose way, applications declare their dependencies in a fixed way."
I will go ahead and merge this PR and see how to set up an API token (new to me). I will work with @2320sharon to eventually create some more tests
Note that we're still working on HoloDoodler on a new fork (https://github.com/Doodleverse/holodoodler) that has implemented some small changes and we'll continue to work on it. If you create the anaconda-project and lock the dependencies for your original pyviz implementation, we'll be hopefully behind you in a couple of months :nerd_face:
Thanks again

Okay, I thank you for the efforts here and detailed discussions. I am well aware of the issues you raise but have decided against merging this PR at this time
I understand the goal was to make it so one set of commands could install the entire package. However, since some of the dependencies are only installable via conda, it seems more fruitful to make a conda package and skip pip altogether.
This package is never intended to be installed into an empty conda env, only existing ones (separate for Dash- and Holo-doodlers). Not all the packages listed are available through pip
The requirements.txt file list pydensecrf as a dependency. The pip package for it has not been updated since 2018, so we can't install the latest version with pip and because of this limitation we have to use conda to install the latest version of the package. If we use this code in pyproject.toml that reads the requirements.txt file into the doodler engine's dependencies [tool.setuptools.dynamic]  dependencies = {file = ["requirements.txt"]} it will always fail to install the doodler_engine via pip because the pydensecrf pypi package is out of date. It is one of the major reasons why we adopted the workflow we have
@2320sharon suggests an alternative workflow. We can keep the requirements.txt file for users who want to install with conda and in the pyproject.toml file's dependencies, we can list all the pip installable dependencies. The downside is it does require users to run the command conda install pydensecrf in their environment , but it does allow for the pip and conda dependencies to all live in the same environment.
So we come back to the existing solution (which I admit is non-standard, but it works): we just tell the user to pip install the doodler-engine in their environment then install any conda-only dependencies like pydensecrf. This is exactly what the Dash- and Holo-doodler workflows are now.
If we want to declare the dependencies for the pip package, we can list the pip installable packages in the pyproject.toml's dependencies section and leave a section on the readme that tells the user to install the conda dependencies. But the latter is not necessary because we already have conda solutions that do this
In the readme we should declare this package is meant to serve two specific projects and that they need to run the following commands to install the dependencies manually. This package intentionally does not declare any dependencies, even though we are aware this is bad practice in software development. I've never been afraid to bend rules when I need to :wink:
We are considering major changes to the code so we no longer have the headache of relying on pydensecrf in the future. So, these are still actively being developed and it doesnt make sense to package at this time
The demo pyviz holodoodler is now being worked on further (on our Doodleverse fork). Its dependencies are not set in stone; there will likely be further changes as we incorporate the ability to work with geotiffs and add necessary functionality like doodle editing
Again, I appreciate the hard work and fruitful discussion @maximlt

Hi @dbuscombe-usgs!

I am well aware of the issues you raise but have decided against merging this PR at this time

That's alright :)
Just a few comments:

Happy to hear you have plans to get rid of pydensecrf as a dependency. Alternatively, if it's too hard to get rid of it, at this point forking it would be the best option, since its maintainer is clearly no longer paying attention to it.
This PR wasn't only defining the runtime dependencies, it was setting up the CI for automatically deploying doodler_engine to PyPI and for running a potential test suite (by the way I encourage you to write a test suite for doodler_engine alone), and was updating how doodler_engine was being packaged. Feel free to re-use that if you like, to make it dependency-less I think you'd just have to remove this from pyproject.toml:

[tool.setuptools.dynamic]
dependencies = {file = ["requirements.txt"]}

[tool.setuptools.dynamic.optional-dependencies.dev]
file = ["requirements-dev.txt"]

I'm happy to see you're working on a fork of HoloDoodler. Don't hesitate to ping me there if you have any question. I guess it means that I could archive pyviz-topics/holodoodler (after locking the dependencies!).


publish hub changes

Proposed changes

Unreleased project version (optional)

Related issues (optional)

Deploy preview for docsdocker ready!
Built with commit 71c38918772a31554d50a03e98ef723d942e1359
https://deploy-preview-9385--docsdocker.netlify.com


Prototype Sprite Animator

DO NOT MERGE, Prototype Only

Working on adding a play mode for forward, reverse and ping pong, as well as optional repeat.

What is the plan for this going forward? I could see it being small enough to warrant a rewrite leveraging bevy_animation or something like that, but I could also see just editing this.

I'm going to close this as inactive.


Update CSB installation instructions

This is to add instructions for CSB installation.

@sunway513 Somewhat unrelated to this PR but do you know when ROCm will be fully upstreamed in Google's official Tensorflow builds ?


TLS Support in EspHttpServer?

I see that there's a feature esp_idf_esp_https_server_enable to enable serving over HTTPS; is there a reason this appears inaccessible to downstream consumers? I'd like to serve content over HTTPS, and it's not clear why it's restricted (or I'm being dumb about how to enable it).

You need to enable HTTPS support for ESP IDF itself first, from within yoursdkconfig.defaults. Check the ESP IDF documentation for the exact CONFIG_ name. Once you do that, all Rust HTTPS code will become magically enabled.


Intel report tab show nothing if the game language is Simplified Chinese

Hello,my game language is Simplified Chinese, the Inter Report : Gossip page show nothing. Whatever I change the language to English or start the game without CQUI,there is no problem in  Inter Report : Gossip page.

There's indeed a bug here, I'll work on it

Should be solved in the next update on steam 👍


python3.pkgs.imageio-ffmpeg: patch out pip requirement

Description of changes
This package includes pip>19 in its setup_requires. Upstream does this to help users who install with pip, but it is not needed to build the package, so let's patch it out.
Closes https://github.com/NixOS/nixpkgs/issues/249637. (I mistakenly thought it required wheel but it just requires pip.)
Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[x] aarch64-darwin

[x] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
23.11 Release Notes (or backporting 23.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

@ofborg build python310Packages.imageio-ffmpeg python311Packages.imageio-ffmpeg


⚠ ClamAV has degraded performance

In 4d23191, ClamAV (https://spamassassin.apache.org/) experienced degraded performance:

HTTP code: 200
Response time: 42 ms

Resolved: ClamAV performance has improved in 8029a78.


Roadmap and todos

See also the discussion on https://github.com/riot/riot/issues/1063.
v2.0.0

[x] move router to this separated submodule from riot
[x] make it UMD comatible
[x] drop IE8 support
[x] 100% coverage
[ ] solve the naming conflict (riot-router or riot-route or...?)
[ ] publish to npm
[ ] publish to bower

v2.3.0

[ ] support HTML5 history API

Any feedback is appreciated :smile:

Basically I believe this module should be minimal. But in practical use, better to support these?

URL matching: /foo then function() {...} and /bar/:id then function(id) {...} ...
Queries: ?keyword=foo&offset=2

Current API just support a single function as an argument:
router(function(collection, id, action) {
  ...
})

I think we can safely extend API like this:
router('/foo', function() { ... })
router('/bar/*', function(id) { ... })
router(function() { /* default action */ })

And we could use the last argument for the URL query:
router(function(collection, id, action, query) {
  console.log('keyword:' + query.keyword)
})

I think the purpose of Riot router is precisely that: to be minimal. Should be safe to add to any project without adding extra bytes to the stack. If users need more elaborate routing they can pick from the wild array of other routers.
I think we don't want to be just another router without any difference and for me the API has been enough so far.
Thoughts?

Yeah, agreed. Thanks for your feedback. I don't want to make another router without any difference, too. Hmm.. but this feels too small, and others seems too big for me.
Anyway, in your point of view, do we need the support of history API?

@cognitom you have done a good job!
For the API I would like to support at least all the routing patterns supported by pagejs avoiding the bloat of the useless features ( like automatic link listeners )
This could mean that probably we need to add the regex to the riot-observable and this is something I wanted always to do but I never had time to implement it

Anyway, in your point of view, do we need the support of history API?

I would use only the history api, and we could add a note to our doc, that if you need to support old browsers you need to use a polyfill

solve the naming conflict (riot-router or riot-route or...?)

You can open a new issue on the @gabrielmoreira's repo asking him if he would like to free the npm domain like a did for riot-observable
If he will not, we will find out

@GianlucaGuarini page.js is in mind, too :smile_cat:
I think we can find the way, simple enough, consistent with original router and mixing the best part of page.js API.
I've created an issue on his repo. I'm not sure my English... I hope we get a good answer.

@cognitom well done!

How will riot-router differ from page.js?

I'd like to add only these functionality to our router:

pushState (history API)
base url option: router.base('/foo')
click event override: avoid page reloading
url match: router('/bar/*', function(id) { ... }) (allow only wild card)

I've found that the second and third are needed for pushState.
Compared to page.js, there's no context, no plugin, no complex match (url variable), no redirect and less code, I think. And of course it has consistency from the original riot.router. How about...?

Okay. Sounds good. I guess it's fairly easy to make 2-4x smaller implementation and stay lean. Currently page.js has 922 lines of code.

Yes, we can. Let's keep it small! :smile_cat:

Maybe worth taking a look at the existing micro routers and make sure Riot router is something that doesn't already exist.

@tipiirai good information. I'll check these well later. Replacable-parser feature seems one of our advantage.

Almost done! Now it's 2,258 bytes if minified.
https://github.com/riot/route/blob/v2.3/lib/index.js
I'll add some tests and document.

@cognitom awesome job!
@aMarCruz what's the status of the riot-compiler and riot-tmpl? May I help you on anything?
I think the next riot release will be really hot!

The documentation updated.
https://github.com/riot/route/tree/v2.3/doc
New APIs here:

route(filter, callback)
route.base(base)
route.create()
route.query()

route.create() is needed to handle the routing in deferent context. For example, we could use this router in multiple tags, but we can't control the order of routing over the tags. route.query() is a simple helper to get query from the current url. Useful, but it could be removed for the sake of minimalism.
#11 has not merged here, but the discussion with @kfreiman has been landed on route.base() function, thanks.

any  example update  to the new riot-observable ?

Just wanted to mention, that switching over to HTML5 PushState worked like a charm for us, once 2.3(.1) was released!
Only minor adjustments, and now the URLs are really slick. Thanks for the good work :+1:

:heart:

Next roadmap is here #39


Add support for handling sensistive data on pgcat.toml and dynamically adding users to pools

Is your feature request related to a problem? Please describe.
Every user connecting through PgCat must be specified with their username and password on the pgcat.toml configuration file. This approach has two problems: 1) we are storing the username/password information in a plain text file which is insecure, and 2) To add a user, one must manually need to update the pgcat.toml and rebuild the PgCat Image.
Describe the solution you'd like
A way to dynamically set users without modifying the pgcat.toml configuration file. Also, leverage exisiting security practices like docker secrets or Kubernetes secrets to get the sensitive data and dynamically change the pgcat.toml.
Describe alternatives you've considered
I considered a temporary solution for feature (2). I could load the users using Python's toml library and take each user and password from environments. How this works is each environment that starts with US_ will be added a user with the corresponding PW_ password to the pgcat.toml. This allows us to pass the environment as secrets, and let the image inside add users and passwords.
Additional context
None

Although it's no blocker on deploying PgCat, being able to inject some configurations by environment variables would still be great. In our deployment, we are storing the whole pgcat.toml as a Kubernetes secret, as you mentioned. Still, it would be better to version the configuration on Git (we are using GitOps) as a ConfigMap and only sensitive data as a database password as secrets.


Slim down the role embed

#441 Implemented a role info command, but it's a bit fat.
This issue proposes we put the role embed on a diet:
Old

New

Edited now that !mention is no longer relevant

Looks cool to me

I'm a fan of the slimmer design you demonstrated for the role command. Including an image of the colour is a good call.
That being said, I believe all the mention stuff is irrelevant due to the new feature Discord rolled out. I'm not too familiar with it, but I think it allows server admins to configure who can mention a given role.
@scragly Any updates on this?

It does indeed, so the unlock and lock featureset is mostly useless. But the rest we can do still.

I'll try get it implemented today. I should have some time :)

Feel free to remove the mention command while you're at it, if that's all obsolete now.

I've edited this issue now since !mention is no longer relevant to us - I still think we want this slimming down of the role embed, it looks great.

Good to know. I'll put it on the todo immediately after the site admin pages which I'm working on atm. Thanks lemon.

Sounds good, @scragly. Looks like maybe you already have this solved and it just needs to be a pull request, so I think you're exactly the right person to handle it.

@scragly Do you still plan on working on this?

@scragly are you still looking to implement this, I could implement this if not.


[ZenYandex}: Unable to extract metadata

DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

[X] I understand that I will be blocked if I intentionally remove or skip any mandatory* field

Checklist

[X] I'm reporting that yt-dlp is broken on a supported site
[X] I've verified that I have updated yt-dlp to nightly or master (update instructions)
[X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
[X] I've checked that all URLs and arguments with special characters are properly quoted or escaped
[X] I've searched known issues and the bugtracker for similar issues including closed ones. DO NOT post duplicates
[X] I've read the guidelines for opening an issue
[X] I've read about sharing account credentials and I'm willing to share it if required

Region
Russian Federation
Provide a description that is worded well enough to be understood
Broken since circa 2024-11-01
Provide verbose output that clearly demonstrates the problem

[X] Run your yt-dlp command with -vU flag added (yt-dlp -vU <your command line>)
[ ] If using API, add 'verbose': True to YoutubeDL params instead
[X] Copy the WHOLE output (starting with [debug] Command-line config) and insert it below

Complete Verbose Output
# F:\Downloads>yt-dlp.exe -vU --ffmpeg-location D:\ToolsEx\FFmpeg\bin  "https://dzen.ru/video/watch/672df7a5fa702269e82bebe2"
[debug] Command-line config: ['-vU', '--ffmpeg-location', 'D:\\ToolsEx\\FFmpeg\\bin', 'https://dzen.ru/video/watch/672df7a5fa702269e82bebe2']
[debug] Encodings: locale cp1251, fs utf-8, pref cp1251, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version<EMAIL_ADDRESS>from yt-dlp/yt-dlp [7ea278792] (win_exe)
[debug] Python 3.10.11 (CPython AMD64 64bit) - Windows-10-10.0.19045-SP0 (OpenSSL 1.1.1t  7 Feb 2023)
[debug] exe versions: ffmpeg 7.1-full_build-www.gyan.dev (setts), ffprobe 7.1-full_build-www.gyan.dev
[debug] Optional libraries: Cryptodome-3.21.0, brotli-1.1.0, certifi-2024.08.30, curl_cffi-0.5.10, mutagen-1.47.0, requests-2.32.3, sqlite3-3.40.1, urllib3-2.2.3, websockets-13.1
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests, websockets, curl_cffi
[debug] Loaded 1837 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version<EMAIL_ADDRESS>from yt-dlp/yt-dlp
yt-dlp is up to date<EMAIL_ADDRESS>from yt-dlp/yt-dlp)
[ZenYandex] Extracting URL: https://dzen.ru/video/watch/672df7a5fa702269e82bebe2
[ZenYandex] 672df7a5fa702269e82bebe2: Downloading webpage
[ZenYandex] 672df7a5fa702269e82bebe2: Redirecting
ERROR: [ZenYandex] 672df7a5fa702269e82bebe2: Unable to extract metadata; please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U
  File "yt_dlp\extractor\common.py", line 742, in extract
  File "yt_dlp\extractor\yandexvideo.py", line 260, in _real_extract
  File "yt_dlp\extractor\common.py", line 1360, in _search_json
  File "yt_dlp\extractor\common.py", line 1346, in _search_regex

Duplicate of #11385


Improved flush algorithm, so now when a RigidBody goes into sleeping mode, it's flush is not executed (as should have be).
Added pre flush list, used by areas, so their notifications arrives to RigidBody before those get flushed.
Make sure to correctly fetch gravity when the integrate_forces function is used
Lazy reload body when layer and mask changes
Shapes are reloaded just before the physics step starts.
Improved some other parts of the code.
Removed std::vector and Vector in favour of the recently added LocalVector.

Check this PR: https://github.com/godotengine/godot/pull/40186
Improves this: https://github.com/godotengine/godot/issues/40127
Fixes #40508
Fixes #40311
Fixes #40506

The old solution was really bad because all the rigid bodies are processed, even the one that are not needed. Instead, the queue allows to only process the bodys that need to. Exactly like the Godot nodes are processed.
The solution of single queue, has the big disadvantage that before its use it must be sorted. This is acceptable when each element can have N priorities. For this use case, we have just 2 priorities (and this is unlikely to change), so use two separate queues is much more convenient.
Regarding the std::vector: Back when I've implemented it, the Vector was not using COW and it was perfect for this use case. However, later COW got implemented and that added a significant overhead for this use case.
Since avoid the Vector copy on write makes the code more complex, and since as far as I know is fine use std::vector into modules, I preferred use the std version.

Update: Rebased and fixed few bugs.

Removed std::vector and Vector in favour of the recently added LocalVector.

Force push: Removed invalid comment, It was no more valid since std::vector is gone.

All fixed

Thanks!

Two apparent regressions from this PR: #40840 #40848.


Write a permisson test and validators for certificate module

Check

[ ] user can delete certificate
[ ] user can add certificate
[ ] user can get only his

United with another issue


[beta] Completed challenges don't display proper data on profile page

ref #9954

Closing as duplicate of the former.


Fix build on AArch64

Execution platform: @local_execution_config_platform//:platform
external/llvm-project/llvm/lib/Target/AArch64/GISel/AArch64O0PreLegalizerCombiner.cpp:45:10: fatal error: AArch64GenO0PreLegalizeGICombiner.inc: No such file or directory
45 | #include "AArch64GenO0PreLegalizeGICombiner.inc"
|          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
Closes #49136

Thanks for the PR but I don't think to have the visibility on https://github.com/tensorflow/tensorflow/blob/3fd3ae1fbb10961dd1aa6805280674c781fd4609/third_party/llvm/llvm.autogenerated.BUILD#L3

That's noticed. Just not found yet how to regenerate it.
TF takes hours to build so this is first fix which had to check is this working fix. Next step is do it right.

commit 04b415a8669e9c26cfefa4663113d8f857bfd8ae did the same.

/cc @hawkinsp


add on_pull_request ci that builds, scans, and tests modified rocks

Adds calls to a shared workflow for building, scanning, and testing rocks on all pull request updates.

This ci can be seen working as expected here (note that failure is expected at the test stage because the PR did not yet have tests added)


Unable to set Compression config when using AvroWriter

Hi
I would like to add more on this because I check it now
The problem is that Avro doesn't support Gzip compression by default.
The problem is that Avro and the message writer both use the same configuration params:
secor.compression.codec
So if you put org.apache.hadoop.io.compress.GzipCodec you get an exception because Avro writer try to use it and fail
If you put null (no compression) so the MessageWriter fail with an exception because it try to instance a class with that
If put empty it fails because there you must put value
So I don't know what to put here because I try to Big query to read the files and don't thing it support something else than Gzip or uncompressed. and you can't set neither !!
Originally posted by @richiesgr in https://github.com/pinterest/secor/issues/482#issuecomment-735748818

Richard,
If you need to set those two params separately, you can modify the secor
code to introduce two separate params.
On Mon, Nov 30, 2020 at 4:14 AM Richard Grossman<EMAIL_ADDRESS>wrote:

Hi
I would like to add more on this because I check it now
The problem is that Avro doesn't support Gzip compression by default.
The problem is that Avro and the message writer both use the same
configuration params:
secor.compression.codec
So if you put org.apache.hadoop.io.compress.GzipCodec you get an exception
because Avro writer try to use it and fail
If you put null (no compression) so the MessageWriter fail with an
exception because it try to instance a class with that
If put empty it fails because there you must put value
So I don't know what to put here because I try to Big query to read the
files and don't thing it support something else than Gzip or uncompressed.
and you can't set neither !!
Originally posted by @richiesgr https://github.com/richiesgr in #482
(comment)
https://github.com/pinterest/secor/issues/482#issuecomment-735748818
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/pinterest/secor/issues/1725, or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABYJP74PTN7GEZNZSGCGKXTSSOECVANCNFSM4UHPPU4Q
.

Hi
Yes I've already made the modification.
Don't know if it's something that can interest someone for a PR
If yes I can push a PR

I don't think it will hurt to introduce that parameter, feel free to submit
a PR.
On Tue, Dec 1, 2020 at 1:01 AM Richard Grossman<EMAIL_ADDRESS>wrote:

Hi
Yes I've already made the modification.
Don't know if it's something that can interest someone for a PR
If yes I can push a PR
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/pinterest/secor/issues/1725#issuecomment-736326329,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABYJP74AZISWO3HE2JTZGR3SSSWINANCNFSM4UHPPU4Q
.


Feature Request: Validate that .info.yml contains modules from which classes or functions are used

In larger projects it's possible that modules are already enabled and thus that a class exists. However, it's possible that when the module being worked on is installed in a different project that the dependency isn't actually there.
It would be great since PHPStan knows what classes and functions are used and where they come from that it can check based on the namespace or path that the module to which the class or function belongs is in the .info.yml file of the module that's using it.

@Kingdutch what level are you running PHPStan at? Because this should "just work" if running at higher levels. If you're only doing deprecation checks (drupal-check, upgrade_status) that isn't even level: 0. It is a custom runner.

We're running PHPStan at level 8, although we do have an extensive baseline. I didn't see any of the warnings I'd expect in the baseline.
I'm not sure I explained correctly. If the feature is implemented I would, using Open Social as example, a use of a class from social_core in social_user to emit an error if social_core is not listed as dependency. Such error is not currently part of PHPStan Drupal as far as I could find.

@Kingdutch oh! so try to report that you're accessing namespaces which may not actually be available at runtime.
I think this got up before. Because right now this projects consumes all possible namespaces. So an idea would be to allow configuring what modules should be scanned – either manually or scanning the core.extensions.yml.
It sounds like that is what you need. I think it's smarter to try and parse core.extensions.yml than to make someone manually track in phpstan.neon and equally dangerous to become out of date

Not entirely! I think that's what I saw in #4 ?
I don't want to change the PHPStan configuration. What I want PHPStan to tell me is "Hey this module A is using code from this other module B, but the module A doesn't tell Drupal (using A's .info.yml file) that B is a dependency, that's an error".

Ah, now I understand! Detecting if a dependent namespace is not available because its dependency on it is not declared.
I think that might be feasible but also very complex.
The first step would be https://github.com/mglaman/phpstan-drupal/issues/249, so we can easily get information about the current extension. The Extension object should have the dependencies list.
Then we need to determine what nodes to listen on

MethodCall
StaticCall
StaticPropertyFetch
New_

BUT! What about when modules have a ModuleHandlerInterface::moduleExists check? That might be hard to determine.
See this JSON:API module dynamic injection from content_moderation, which it exists:
https://git.drupalcode.org/project/drupal/-/blob/9.3.x/core/modules/jsonapi/jsonapi.services.yml#L154
  # Access Control
  jsonapi.entity_access_checker:
    class: Drupal\jsonapi\Access\EntityAccessChecker
    public: false
    arguments<EMAIL_ADDRESS><EMAIL_ADDRESS>'@current_user', <EMAIL_ADDRESS>    calls:
      # This is a temporary measure. JSON:API should not need to be aware of the Content Moderation module.
      - [setLatestRevisionCheck, ['@?access_check.latest_revision']] # This is only injected when the service is available.

So when setLatestRevisionCheck is checked, it'll throw an error when it shouldn't.
In all honestly, I think it would be worth adding and folks can ignore those errors when relevant and then maybe we can find a way to be smart about it.

This PR appears to be related – checking cross-namespace usage: https://github.com/mglaman/phpstan-drupal/pull/248. It checks if something is marked @internal, but lays a good groundwork.

We may need this to be a feature flag as it could cause problems due to Drupal's ability to have checks to see if a module is installed. For example, Commerce Log adds EventSubscribers for various Commerce modules if they exist.
See https://git.drupalcode.org/project/commerce/-/blob/8.x-2.x/modules/log/src/CommerceLogServiceProvider.php

I just thought about one interesting problem. What about dependencies from a dependency? It's not common for a module to be extremely verbose about it's dependencies, especially for ones inferred by its own dependencies.
Example:
foobar module relies on editor which ensures filter exists. This could cause errors if foobar doesn't also define a dependency onfilter.
Unless we rebuilt the dependency graph.

We may need this to be a feature flag as it could cause problems due to Drupal's ability to have checks to see if a module is installed. For example, Commerce Log adds EventSubscribers for various Commerce modules if they exist.
See https://git.drupalcode.org/project/commerce/-/blob/8.x-2.x/modules/log/src/CommerceLogServiceProvider.php

Ah this example tripped my up a bit. The issue is not actually in ComemrceLogServceProvider. That code will work just fine :D I suppose the analytical issue is in e.g. CartEventSubscriber itself, or more generally in plugins and event subscribers.
What you're rightly saying is that those classes use code from modules that may be optional but the code will only be executed (e.g. plugins loaded) if the optional modules are enabled. That's a tricky one indeed.

I just thought about one interesting problem. What about dependencies from a dependency? It's not common for a module to be extremely verbose about it's dependencies, especially for ones inferred by its own dependencies.

I think this is actually something that phpstan-drupal could improve in the ecosystem. Though that would certainly be a point for debate.
I know that indirect dependencies can cause problems. For example should it be a breaking change of module A when it removes a module B used for internal purposes just because module C depended only on A while actually also using code from B? I think it shouldn't be. So not declaring a dependency on B from C is actually the issue -- a bug (that this change could catch).
In larger projects we've also seen that not declaring all dependencies can easily lead to hidden cyclic dependencies which listing everything would've made explicit.
I thought Drupal core was quite good at listing all their dependencies but it seems that that is also not (or no longer) true.
One place where you must provide all modules you depend on is in a Kernel test. This is actually non-trivial for higher up modules that rely on a lot of transient dependencies. Those usually don't just allow copy pasting the info.yml dependencies but require actively diving into all the dependencies and also extracting their dependencies. This can make setting up initial tests quite difficult.

@Kingdutch good find on Drupal core. I think it is worth pursuing, but not a Rule that is enabled by default.


Cant change formatting for binary

Hello, It seems i cannot change the formatting for binary. i've tried by clicking over the column -> View As ->
^ that shows only Default, UUID, UUID ordered. I don't have the option to "hex" encode the binary in the result set.

hi @vekexasia ,
what database and data type do you use?

there is no update on the issue for more than a month.
additional info is needed to reproduce an issue.
ticket will be closed. feel free to reopen an issue and add info that could help to investigate it.


Attribute not showing on the creating new configurable product page

Bug report
Title
Attribute not showing on the creating new configurable product page
Issue Description
When I create new attribute and set the "Use To Create Configurable Product" option

It does not show when I try to create new configurable product

Preconditions
1. Version v1.1.2

Hi @IvalinV
create select type attribute to create configurable options, then it will be showing on configurable product page.

Hi @vaishaliwebkul that is exactly what I'm doing, I can use already created attributes and they indeed  are showed on the create product page, when I create new select type attribute and choose the option  "Use To Create Configurable Product" it did not show up on the products page when I creating it.

@IvalinV
have you added that select type attribute in attribute family??

@vaishaliwebkul  No, I did not added and that was the one thing I was missing, it is working properly now, thank you for your help !

Did you add that attribute to attribute family?

@jitendra-webkul Yes and now is working as expected


How to support time zone specific expression?

It seems that ccronexpr treats cron-expression as UTC based. How to make it support time-zone? It will be more human readable.

Fixed by enabling 'CRON_USE_LOCAL_TIME'. Cheers!


Publish with ~ versions for packages does not work.

When we install the package, latest version of its dependencies are not installed.

~ was excepted instead of ^ in the package.json

This part of the code is responsible for it:
https://github.com/deep-foundation/npm-packager/blob/a9dbe93fd049b1019fa05211e5078f82c20de9ce/handlers/publish-code.ts#L133
Turns out it does not work as excepted:

And there is a solution to this problem:
https://stackoverflow.com/questions/60864514/npm-install-ignores-tilde-in-version-number
And it works:

We have a test package:

After the changes are made to the code, I will try to republish this package.
If ^ will be replaced with ~ then these changes work as excepted.

Tested, it works:

words-demo package also now installs all dependencies as expected.

words-demo package also now installs all dependencies as expected.


Select blanks for time and day.

As a user who has just enabled back-ups, on the back-up settings page, I should see two drop down's who's options indicate "Choose a time" and "Choose a day" for my back-up settings.
Default State

Updated State

Closes #2804

Coverage increased (+0.5%) to 38.575% when pulling 96055a73003d8df9b35c43bf661030e449737b30 on rjstires:bug-2804 into 8ff6448850d94db33585dafdf4bd71988a0e5c09 on linode:develop-transitional.

"scheduling" is the API's internal value of "unset" so it shouldn't be a problem, but I don't disagree.

Coverage increased (+1.2%) to 39.302% when pulling f7b3c64cf86299c4da9f9732774a53b4a9eb0901 on rjstires:bug-2804 into 2fe8d383eeb843d3a71f753cd228022d23893428 on linode:develop-transitional.


feat(lang): update Chinese translations

Add new translations for goal, idea, experiment, notify, code, and danger
Update existing translation for info from "简介" to "信息"

Thanks for the update. As I don't understand Chinese could you point out  what was wrong with the old translations? Then I am happy to merge.

The previous translation of "info" was incorrect:

"简介" means "introduction".
"信息" means "information".

The meanings of these two words are very different.


Access to "protocol" in Response

In the Chrome DevTools Protocol, a "protocol" property is available on the response object.
This should in my opinion be exposed to the puppeteer response object, such that we will be able to verify if a request is sent over h2 or http/1.1.

+1

can you please reopen this? to be able to check the protocol would be useful


WatchOS: missing framework QuartzCore

I just ran into this issue compiling for WatchOS2.  Everything works fine on the simulator, but on there's a compile error for an actual device.  The issue is in the QuartzCore subspec (which is included by default):
  s.subspec 'QuartzCore' do |ss|
    ss.ios.source_files = 'Categories/QuartzCore/*'
        ss.osx.source_files = 'Categories/QuartzCore/*'
    ss.dependency 'PromiseKit/CorePromise'
    ss.frameworks = 'QuartzCore'  # <-- Issue here: we add framework to all targets
  end

The issue is that QuartzCore is available for builds targeting the simulator (it's leaking in from either the iOS Simulator or OS X itself, not sure which), but really shouldn't be (as it's not available on actual WatchOS devices).
I forked and changed the last line to:
    ss.ios.frameworks = ss.osx.frameworks =  'QuartzCore'

And everything builds fine.  I'll send a PR for the change here shortly.

I'll push 3.4.2 presently.

Thanks for the quick turnaround!  3.4.2 works perfectly for me.


Refactor

Hello @nabobalis! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

In the file radiospectra/tests/test_util.py:

Line 6:101: E501 line too long (104 > 100 characters)

In the file radiospectra/util.py:

Line 199:5: E731 do not assign a lambda expression, use a def


Make the chain id configurable

Description
The chain id is a constant for now, make it configurable.
Acceptance criteria

The chain id is configurable

I would like to take this.


Rich Select's required prop not working properly

I used  with fetch-options to get options from servers. I put it inside a form so that the required prop can be used.
However, the required prop doesn't do anything when I try to submit. the form simply bypassed .
Here is my example:
<form method="post" @submit.prevent="submit">
..
<t-input-group
            label="Nationality"
            class="w-1/6"
        >
          <t-rich-select
                :fetch-options="fetchOptions"
                v-model="shareHolder.nationality"
                :minimum-input-length="3"
                clearable
                :required="true"
                :name="`shareHolders[${index}][nationality]`"
                placeholder="Select a nationality..."
                text-attribute="name"
                value-attribute="id"
            >
              <template
                  slot="label"
                  slot-scope="{ className, option, query }"
              >

                    {{ option.raw.name }}
                    {{ option.raw.country }}

              </template>
            </t-rich-select>
        </t-input-group>
..
</form>

@KimangKhenng can yo share the fetch options method?

Thanks for your reply,
This is my fetch-optons function.
fetchOptions (q) {       return fetch(${this.$config.baseURL + apiHead}miscellaneous/nationalities/search?name=${q})           .then((response) => response.json())           .then((data) => ({ results: data.items }))     },

@KimangKhenng cannot find any issue with the method so maybe the result from your API doesn't is being properly formated, what do you see if you console.log(data.items) for example?

Hi @alfonsobries ,
Once again, thanks for your attention!
this is the console output when I search with keyword : cam
[
    {
        "id": "14e4783b-0ba3-44f1-adfa-6ddf09c2212b",
        "name": "Camarinense",
        "country": "Camarines Sur",
        "createdDate": "2021-07-12T16:02:24.244Z",
        "updatedDate": "2021-07-12T16:02:24.244Z"
    },
    {
        "id": "da3d5512-b948-48ed-aa3e-a5b6022a009a",
        "name": "Cambodian",
        "country": "Cambodia",
        "createdDate": "2021-07-12T16:02:24.244Z",
        "updatedDate": "2021-07-12T16:02:24.244Z"
    },
    {
        "id": "6164cc49-b551-4ebf-8af8-d0633f7f5dfc",
        "name": "Cameroonian",
        "country": "Cameroon",
        "createdDate": "2021-07-12T16:02:24.244Z",
        "updatedDate": "2021-07-12T16:02:24.244Z"
    },
    {
        "id": "c138225c-35a1-4946-b19e-a836f1c949c4",
        "name": "Camiguin",
        "country": "Camiguin",
        "createdDate": "2021-07-12T16:02:24.244Z",
        "updatedDate": "2021-07-12T16:02:24.244Z"
    },
    {
        "id": "bf3351bf-c0eb-44f7-b104-8d77622c0e90",
        "name": "Campanian",
        "country": "Campania",
        "createdDate": "2021-07-12T16:02:24.244Z",
        "updatedDate": "2021-07-12T16:02:24.244Z"
    },
    {
        "id": "3caf75db-dc27-4f4f-adcc-211216ff4227",
        "name": "Campechan",
        "country": "Campeche",
        "createdDate": "2021-07-12T16:02:24.244Z",
        "updatedDate": "2021-07-12T16:02:24.244Z"
    },
    {
        "id": "07f8758e-045d-47d0-b6ab-b341de3cf131",
        "name": "Campechano",
        "country": "Campeche",
        "createdDate": "2021-07-12T16:02:24.244Z",
        "updatedDate": "2021-07-12T16:02:24.244Z"
    },
    {
        "id": "71828606-c6bb-4f92-8fef-2cbeeb118cc7",
        "name": "Campineiro",
        "country": "Campinas",
        "createdDate": "2021-07-12T16:02:24.244Z",
        "updatedDate": "2021-07-12T16:02:24.244Z"
    },
    {
        "id": "1e0d5e2e-26c7-49de-a8df-6e7d990493f9",
        "name": "Maccam",
        "country": "Sunderland",
        "createdDate": "2021-07-12T16:02:24.244Z",
        "updatedDate": "2021-07-12T16:02:24.244Z"
    },
    {
        "id": "303a86c4-b4d7-4c42-8b05-664c044df3ad",
        "name": "North Camarinean",
        "country": "Camarines Norte",
        "createdDate": "2021-07-12T16:02:24.244Z",
        "updatedDate": "2021-07-12T16:02:24.244Z"
    },
    {
        "id": "21906c18-ab06-4825-947e-dd6b809af79a",
        "name": "South Camarinean",
        "country": "Camarines Sur",
        "createdDate": "2021-07-12T16:02:24.244Z",
        "updatedDate": "2021-07-12T16:02:24.244Z"
    }
]

It doesn't work with a regular rich select either (options supplied from an array for example). Even though the required prop is set, you can just submit anyway without any problems. So I believe the required prop doesn't do anything just in general.

I've also noticed this. Seems "required" was forgotten in the renderer.
https://github.com/alfonsobries/vue-tailwind/blob/7abbabc859ce33e13306959bc492607e9d01f721/src/renderers/TRichSelectRenderer.ts#L149.


Protocol: include aliases in |queryresponse|rooms|

The server now includes a map of room aliases in the response to /cmd
rooms so the client can properly resolve them to their IDs on join/leave.

I literally spent like five days telling you not to do this.

O-oh. I didn't realize it was that big of an issue. My bad


Downloaded apk parsing error

Version: 0.10.5
async downloadBinary() {
        const android = RNFetchBlob.android;
        RNFetchBlob
            .config({
            fileCache: true,
        })
            .fetch('GET', "http://www.apkmirror.com/wp-content/uploads/uploaded/5937e1ac2dc69/com.android.c" +
                    "hrome_59.0.3071.92-307109200_minAPI16(armeabi-v7a)(nodpi)_apkmirror.com.apk")
            .progress((received, total) => {
                let currentProgress = received / total;

                this.setState({
                    progressViewProps: {
                        visible: true,
                        progress: currentProgress,
                        title: `Downloading Update...\n${Math.round(currentProgress * 100)}%`,
                        indeterminate: currentProgress !== 1
                    }
                });
            })
            .then((res) => {
                android.actionViewIntent(res.path(), 'application/vnd.android.package-archive')
            })
    }

Tried to download an apk file and opening it, it shows parsing error
I have tried using download manager and it works.

@booker-laputa , perhaps you can try to use path and give a path containing expansion .apk instead, because fileCache would store the response data into a file without extension.

@wkh237 I have tried but it is not working.
I found it very interesting that if I pull that downloaded apk and install it by adb, it seems working flawlessly.

Same on Android 7, it's fine on Android 5 and 6.
Exactly as the following code from README.
const android = RNFetchBlob.android

RNFetchBlob.config({
    addAndroidDownloads : {
      useDownloadManager : true,
      title : 'awesome.apk',
      description : 'An APK that will be installed',
      mime : 'application/vnd.android.package-archive',
      mediaScannable : true,
      notification : true,
    }
  })
  .fetch('GET', `http://www.example.com/awesome.apk`)
  .then((res) => {
      android.actionViewIntent(res.path(), 'application/vnd.android.package-archive')
  })

Right now, it's not working on Android 5 & 6 both:)

I'm seeing this as well; has anyone worked around it?

I have diffed the downloaded APK against the source and I've verified they're exactly the same, including the same SHA1 sum. So this isn't an issue of downloading incorrectly.


Supervised graph classification with GCN

Hi,
this is an implementation of a supervised graph classification model based on GCN layers. It is based on the model presented in [1], with the main exception being that the model in [1] uses attention whereas the one here does not. For your reference, the demo notebook includes a picture of the architecture. This work is not an attempt at replicating [1] but a similar model that we can use as baseline moving forward.
Everything is experimental as unit tests are missing and the demo notebook is a basic demonstration of how to perform supervised graph classification.
Note: Minimum requirements for this are tensorflow > 2.0.1. #1045 will tackle this problem but for now please be aware that anything less and this code will not run.
Other related tickets: #1042 and #1043.
Also, this pull request covers #928.
P.
References:

Fake News Detection on Social Media using Geometric Deep Learning, F. Monti, F. Frasca, D. Eynard, and D. Mannion, ICLR 2019, https://arxiv.org/pdf/1902.06673.pdf

Quite a few of the small things I noted should only take a minute or two to fix, but if they're more complicated or more awkward than it looks on the surface, it's ok to leave them for later and they can be cleaned-up separately as part of the final de-@experimentalising.

@huonw I have updated the implementation based on your last review comments so I have re-requested a review.
P.

@huonw I have done another round of updates that you can review. However, the notebook fails on CI and I'm not sure why. It doesn't finish training so I suspect that it runs out of time? I don't know how the CI is configured so let me know if you have any suggestions.
P.

It doesn't finish training so I suspect that it runs out of time?

Yep; the training cell takes too long (> 600s).
https://buildkite.com/stellar/stellargraph-public/builds/2350#e1c064fc-78be-4a5e-a235-78f6dfabc199/429-1353

I don't know how the CI is configured so let me know if you have any suggestions.

The best way to handle this is to use our papermill-based parameterisation. This involves reducing some of the (hyper)parameters that make the notebook slow to run by:

choosing which parameters will be reduced; in this case the number of epochs, number of restarts and/or even the number of folds seem like good candidates?
adding a cell that defines them (with their real values), and adding the parameters tag to that cell (see the linked docs above for how to do it in the Jupyter Notebook and Jupyter Lab interfaces). For instance, if we go with the first two it might be placed just before train_fold is defined and containepochs = 500

# For each fold, ...
num_restarts = 5

updating .buildkite/notebook-parameters.yml with any new parameters and their reduced amount, e.g. for that code above, we'd have to add something like the following to the end of the file# fewer models per fold for demos/graph-classification/supervised-graph-classification.ipynb
num_restarts: 2

When running on CI, Papermill will insert an extra cell that overrides the default values, and so hopefully make the notebook run quickly.
The important thing with these is to make sure all code paths are executed (hence num_restarts != 1 to ensure execution of implicit code path of running the restart loop multiple times), without needing to get good model performance, since it's just run transiently on CI.

I have created #1090 for a tutorial on graph classification that is more basic that the demo notebook associated with this ticket.

Looks fine, with the main remaining concern being the image in the notebook still not behaving quite right (#1053 (comment)).

It renders correctly in github (checked on a couple of different machines and web browsers) and I have updated the text as suggested. Hopefully, it will not confuse anyone if not rendered.

Ah, yeah, it does for me on develop too 👍
I don't know why I couldn't (and still can't) see it in the link in that comment, even though the linked commit does seem to have the notebook using the ![]() markdown form with the image adjacent 🤷♂


The default Firebase app has not yet been configured

When I run my app in IOS, I have the following error:
The default Firebase app has not yet been configured. Add [FIRApp configure]; (FirebaseApp.configure() in Swift) to your application initialization.
The plugin.swift code:
    public override func load() {
        if FirebaseApp.app() == nil {
            FirebaseApp.configure()
        }
    }

Theoretically you don't have to do any Code in the iOS version of the app, did you put your GoogleService-Info.plist in the correct folder?

Yes, I put the GoogleService-Info.plist. It's plugins code.

What Code are you editing exactly?
In my case i used the Push Notifications and added those lines https://github.com/markxoe/ich-bin-eine-biene-mobile/blob/master/ios/App/App/AppDelegate.swift#L14 according to this: https://capacitorjs.com/docs/guides/push-notifications-firebase#add-initialization-code


Add "Return largest number in array" whiteboard question

ISSUE TYPE

[ ] Typo
[ ] Bug
[x] Feature

WHERE / WHAT

This is a question that comes up often (or ones like it) in interviews. It would be good to add this to our collection
EXPECTED BEHAVIOR

We should add this page (follow the guide in the README) to the application

Let me take a look at this! :D


Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked

Bug Report
When using the Quickstart code for the td-layout-manage-list I get this error below:
ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '[object Object]'. Current value: 'side'.
<td-layout-manage-list #manageList                         [opened]="media.registerQuery('gt-sm') | async"                         [mode]="(media.registerQuery('gt-sm') | async) ? 'side' : 'push'">
Screenshots or link to CodePen/Plunker/JSfiddle
Screenshot - https://ibb.co/mnBw05
What is the expected behavior?
No error
Which version of Angular and Material, and which browser and OS does this issue affect?
I am running "@covalent/core": "^1.0.0-beta.5-1",
os: darwin x64
angular/core: 4.2.2
covalent/core: 1.0.0-beta.5-1
angular/material: 2.0.0-beta.6

Check the changelog, there are changes in change detection for angular 4.2.0
https://github.com/Teradata/covalent/blob/develop/docs/CHANGELOG.md#100-beta5-1-2017-06-12
So we updated the documentation with the necessary steps

Closing this since we already updated the documentation with the necessary steps to avoid this angular issue.


Fix #43 Added alternate cut, copy, paste shortcuts

This pull request adds support for the following shortcuts that are missing ( #43 ):

CTRL+INS (copy)
SHIFT+DEL (cut)
SHIFT+INS (paste)

Note: since the Insert key was intercepted early for toggling Overstrike mode, I had to move it from OnPreviewKeyDown() and make it work as a normal editing command.

I fixed what you suggested, thank you.
In creating key bindings, I used CreateFrozenKeyBinding(), I hope it's correct.

I just tried this; and it seems that Ctrl+Insert etc. already work without this patch! (but only if AllowToggleOverstrike=false)
Remember that there are default key gestures associated with ApplicationCommands.Copy (etc.).
AvalonEdit isn't explicitly registering Ctrl+C, so I don't see why it should register Ctrl+Insert.
I'll merge only the ToggleOverstrike bugfix.


Prototype solutions for mask-aware operations

Enough to know how much work it would be to get Iris using dask for masked calculations
As dask.array does not support masked arrays.

Code ideas (untested !!) for doing masked stats calculations without available masked operations
import numpy as np
import numpy.ma as ma

def ma_masked_mean(a, axis=axis):
    return ma.mean(a, axis=axis)

def masked_mean(a, axis=axis):
    a = a[:]
    a = ma.masked_array(a)
    a, m = a.data, ma.getmaskarray(a)
    a[~m] = 0.0
    counts = np.count_nonzero(m, axis)
    validmask = m & counts > 0
    fixedcounts = counts[:]
    fixedcounts[~validmask] = 1
    return np.ma.masked_array(np.sum(a, axis=axis) / fixedcounts,
                              mask=validmask)

def masked_var(a, axis=axis, ddof=0):
    a = a[:]
    a = ma.masked_array(a)
    a, m = a.data, ma.getmaskarray(a)
    a[~m] = 0.0
    counts = np.count_nonzero(m, axis=axis)
    fixedcounts = counts[:] - ddof
    validmask = m & fixedcounts > 0
    fixedcounts[~validmask] = 1
    means = np.sum(a, axis=axis) / fixedcounts
    deviations = a - means
    sqdevs = deviations * deviations
    results = np.sum(deviations, axis=axis) / fixedcounts
    return results

Also worth bearing in mind the discussion on whether to use masked arrays at all, or just use nan to represent missing values in normal arrays (like xarray).

just use  nan  to represent missing values

That might work, but it's not clear to me whether it can be relied on for any particular statistics function I want.
Do you have some idea that there is a standard handling of NaNs in numpy statistics functions, and even that it is mirrored in dask ?
<RANT/>
The real problem with this stuff is that the support for masked operations is so poorly documented in numpy, especially for statistics calculations, so it needs sorting on a case-by-case basis, and you wind up "trying" things to see what works (!)
So it seems I have no real way of trusting whether NaNs will solve a problem in numpy, let alone dask, or whether the resulting solution will keep working in future.
Likewise, it seems that dask itself makes no explicit mention of masked arrays, but just throws weird errors if you try it.  For example:
>>> dask.array.from_array(np.ma.array([1,2], mask=False), 1e6)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/data/local/itpp/miniconda/envs/iris_dask/lib/python2.7/site-packages/dask/array/core.py", line 1806, in from_array
    token = tokenize(x, chunks)
  File "/data/local/itpp/miniconda/envs/iris_dask/lib/python2.7/site-packages/dask/base.py", line 368, in tokenize
    return md5(str(tuple(map(normalize_token, args))).encode()).hexdigest()
  File "/data/local/itpp/miniconda/envs/iris_dask/lib/python2.7/site-packages/dask/utils.py", line 558, in __call__
    return self(arg)  # recurse
  File "/data/local/itpp/miniconda/envs/iris_dask/lib/python2.7/site-packages/dask/utils.py", line 563, in __call__
    return lk[cls](arg)
  File "/data/local/itpp/miniconda/envs/iris_dask/lib/python2.7/site-packages/dask/base.py", line 350, in normalize_array
    data = md5(x.copy().ravel().view('i1').data).hexdigest()
  File "/data/local/itpp/miniconda/envs/iris_dask/lib/python2.7/site-packages/numpy/ma/core.py", line 3047, in view
    output = ndarray.view(self, dtype)
  File "/data/local/itpp/miniconda/envs/iris_dask/lib/python2.7/site-packages/numpy/ma/core.py", line 3236, in __setattr__
    self._mask.shape = self.shape
ValueError: total size of new array must be unchanged
>>>

This makes me uncomfortable !!
</RANT>

P.S.

whether to use masked arrays at all

Well that decision is pretty much made for iris, though I suppose we could review.
I think the oceans people are needing it, and of course matplotlib likes it.
The numpy 'separate mask array' solution has a more reliable interpretation than the alternatives. and of course it's the only completely flexible solution for integral types.
It does surprise me though that so much of the rest of the community is maybe not that bothered, hence no support in pandas or dask, even though they are explicitly based on numpy.

just use  nan  to represent missing values

Doesn't actually seem to work, at least  in the most obvious way ?
>>> nanarray = np.array([1.0, 1.0, np.nan])
>>> nanarray
array([  1.,   1.,  nan])
>>> dan = dask.array.from_array(nanarray, 1e6)
>>> dan.compute()
array([  1.,   1.,  nan])
>>> nanarray.std()
nan
>>> nanarray.mean()
nan
>>> dan.mean().compute()
nan
>>> dan.std().compute()
nan
>>>

You'd want to use nanmean, nanstd etc.

Excuse my ignorance.
I see what you mean now ...
>>> da.nanmean(dan).compute()
1.5
>>> da.nanstd(dan).compute()
0.5
>>> da.sum(~da.isnan(dan)).compute()
2

This: #2323 dips a toe in the waters of a more radical approach ...

NOTE: there is more to this than just stats
E.G. cube arithmetic also uses masks.

dask has masks... yay!


add CD2H.png

add CD2H logo image

Is the logo to be used anywhere on the site?

I think we want it at the bottom of the page, with a funding statement. See #116


fix: ion longform did creator uses jwk for all key types

Signed-off-by: Filip Burlacu<EMAIL_ADDRESS>

Codecov Report
Base: 90.83% // Head: 90.96% // Increases project coverage by +0.13% :tada:

Coverage data is based on head (c4bb52f) compared to base (10ce876).
Patch coverage: 90.90% of modified lines in pull request are covered.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #122      +/-   ##
==========================================
+ Coverage   90.83%   90.96%   +0.13%
==========================================
  Files          36       36
  Lines        1167     1173       +6
==========================================
+ Hits         1060     1067       +7
+ Misses         66       64       -2
- Partials       41       42       +1

Impacted Files
Coverage Δ

pkg/did/creator/creator.go
94.80% <88.88%> (+1.56%)
:arrow_up:

cmd/wallet-sdk-gomobile/did/creator.go
82.35% <100.00%> (+1.70%)
:arrow_up:

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


Where is the source code of the live-demo and how its javascript bundled?

As the title, do you use the rollup.js to output a commonJs style https://markdown-it.github.io/index.js

Where is the source code of the live-demo

It's on a branch of this repo here.

See https://github.com/markdown-it/markdown-it/blob/3353462142d519dfe5b613e4d9e79fa29601ff98/Makefile#L15

Thx!!! @Martii @puzrin


Tool does not generate project

Tool produces the following error when trying to generate a project:
Exception in Tkinter callback
Traceback (most recent call last):
  File "c:\users\mlaze\appdata\local\programs\python\python38-32\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "c:\users\mlaze\appdata\local\programs\python\python38-32\lib\site-packages\frc_characterization\newproject\__init__.py", line 142, in genProject
    config = ast.literal_eval(self.config.get())
  File "c:\users\mlaze\appdata\local\programs\python\python38-32\lib\ast.py", line 96, in literal_eval
    return _convert(node_or_string)
  File "c:\users\mlaze\appdata\local\programs\python\python38-32\lib\ast.py", line 85, in _convert
    return dict(zip(map(_convert, node.keys),
  File "c:\users\mlaze\appdata\local\programs\python\python38-32\lib\ast.py", line 81, in _convert
    return list(map(_convert, node.elts))
  File "c:\users\mlaze\appdata\local\programs\python\python38-32\lib\ast.py", line 95, in _convert
    return _convert_signed_num(node)
  File "c:\users\mlaze\appdata\local\programs\python\python38-32\lib\ast.py", line 74, in _convert_signed_num
    return _convert_num(node)
  File "c:\users\mlaze\appdata\local\programs\python\python38-32\lib\ast.py", line 66, in _convert_num
    raise ValueError('malformed node or string: ' + repr(node))
ValueError: malformed node or string: <_ast.Name object at 0x2352BF88>

Your robot config file is malformed. Could you post it?

You could also try using Python 3.7.

Here you go.
robotconfig.txt

There's some missing some controller types and motors inverted. Also, there needs to be quotes around the controllerType names.
For future reference, if you pass in two values for motorPorts, you need to have two values for controllerTypes and motorsInverted.
Here's what your config file should resemble:
{
    # Ports for motors
    # If doing drive test, treat this as the left side of the drivetrain
    "motorPorts": [0, 1],
    # Only if you are doing drive (leave empty "[]" if not)
    "rightMotorPorts": [2, 3],
    # Class names of motor controllers used.
    # 'WPI_TalonSRX'
    # 'WPI_VictorSPX'
    # 'WPI_TalonFX'
    # If doing drive test, treat this as the left side of the drivetrain
    "controllerTypes": ['WPI_TalonFX', 'WPI_TalonFX'],
    # Only if you are doing drive (leave empty "[]" if not)
    "rightControllerTypes": ['WPI_TalonFX', 'WPI_TalonFX'],
    # Set motors to inverted or not
    # If doing drive test, treat this as the left side of the drivetrain
    "motorsInverted": [False, False],
    # Only if you are doing drive (leave empty "[]" if not)
    "rightMotorsInverted": [False, False],
    # Encoder edges-per-revolution (*NOT* cycles per revolution!)
    # For the CTRE Mag Encoder, use 16384 (4 * 4096 = 16384)
    "encoderEPR": 16384,
    # Gearing accounts for the gearing between the encoder and the output shaft
    "gearing": 1,
    # Encoder ports (leave empty "[]" if not needed)
    # Specifying encoder ports indicates you want to use Rio-side encoders
    # If doing drive test, treat this as the left side of the drivetrain
    "encoderPorts": [],
    # Only if you are doing drive (leave empty "[]" if not)
    "rightEncoderPorts": [],
    # Set to True if encoders need to be inverted
    # If doing drive test, treat this as the left side of the drivetrain
    "encoderInverted": False,
    # Only if you are doing drive (set to False if not needed)
    "rightEncoderInverted": False,
    # ** The following is only if you are using a gyro for the DriveTrain test**
    # Gyro type (one of "NavX", "Pigeon", "ADXRS450", "AnalogGyro", or "None")
    "gyroType": "NavX",
    # Whatever you put into the constructor of your gyro
    # Could be:
    # "SPI.Port.kMXP" (MXP SPI port for NavX or ADXRS450),
    # "SerialPort.Port.kMXP" (MXP Serial port for NavX),
    # "I2C.Port.kOnboard" (Onboard I2C port for NavX),
    # "0" (Pigeon CAN ID or AnalogGyro channel),
    # "new WPI_TalonSRX(3)" (Pigeon on a Talon SRX),
    # "" (NavX using default SPI, ADXRS450 using onboard CS0, or no gyro)
    "gyroPort": "SerialPort.Port.kMXP",
}

The EncoderCPR you need to use for Falcon 500s is 8192.
Here's the characterization project we used for our 4 Falcon 500 drivetrain. Obviously you'll need to fix gearing, Can IDs, and gyro settings.
https://github.com/FRC-Sonic-Squirrels/2021-characterization-project/blob/main/robotconfig.py
frc-characterization will report one side of your robot driving in the wrong direction. That is "normal."

The EncoderCPR you need to use for Falcon 500s is 8192.
Here's the characterization project we used for our 4 Falcon 500 drivetrain. Obviously you'll need to fix gearing, Can IDs, and gyro settings.
https://github.com/FRC-Sonic-Squirrels/2021-characterization-project/blob/main/robotconfig.py
frc-characterization will report one side of your robot driving in the wrong direction. That is "normal."

I was having a similar error to @viggy96 . I tried your config, modified it with the new Falcon 500 IDs, and to use the NavX, however, I'm getting a list index out of range. Most likely due to no Encoder Ports in "encoderPorts": [], and "rightEncoderPorts":[] . Am I missing a value to specify that I am using Falcon 500s? Is there something else that I'm not doing correctly?

Your config file looks good to me except for the fact that you have a Pigeon specified as the Gyro Type and I think you're using port 43 on the right and left ports. But these wouldn't explain the list error.
Did you fill out the config under the CTRE selector?
From your reply it seems like you pasted the majority of the config from somewhere else. If you did that under the Simple config setup, the generator would want the encoder port fields filled out which isn't your case.


Check LZO index file existence when check splitability of LZO files

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