Home handler fix

small and nice PR)

What is the problem you are trying to solve and why is this the minimal solution to it?

Also, tests :sunglasses:

even better fix ) since poll results are not used anywhere but logs, and all the lines look like:
[D 2016-03-19 02:45:51.412 Everware home_handler:136] The container is None
[D 2016-03-19 02:45:57.545 Everware home_handler:136] The container is None
[D 2016-03-19 02:46:03.079 Everware home_handler:136] The container is None
[D 2016-03-19 02:46:08.509 Everware home_handler:136] The container is ''
[D 2016-03-19 02:46:13.835 Everware home_handler:136] The container is ''
[D 2016-03-19 02:46:19.214 Everware home_handler:136] The container is ''
[D 2016-03-19 02:46:24.732 Everware home_handler:136] The container is ''
[D 2016-03-19 02:46:30.233 Everware home_handler:136] The container is ''
[D 2016-03-19 02:46:35.596 Everware home_handler:136] The container is ''

@ibab do you agree?

I'm agree :)

LGTM
Rebase needed

rebased


Putting the installation method of scala-cli in an environment variable or a metadata file

Related to issue #543  currently, if a user forgets the previous method they used for installing scala-cli on their system, they might use another one for reinstalling. This creates a duplicate in PATH; therefore, even when a newer version is installed later, through a second method, this would be the old version that might show up first on PATH and get executed.
How it should behave:
The user types scala-cli —version or scala-cli about or scala-cli update.
Then the user receives information about the method with which they have installed scala-cli, for example Homebrew; and  instructions get shown to them about how they should update scala-cli using this installation method, such as Homebrew.
How it can get Implemented :
We create a hidden command for scala-cli such as installMethod which then gets run by the installation tool, post installation. Upon receiving a command like scala-cli installMethod brew, Scala CLI creates an environment variable called $SCALA_CLI_INSTALLATION_METHOD and assigns the value brew to it.
This way, each time the about, version, or update commands are called; scala-cli can just read the value of this environment variable for knowing how it is installed, or even update itself through the same method.
Alternatively, the installation method can be written by the installation method to a metadata file put in the same directory as the executable file of scala-cli. Then scala-cli can read the contents of this file for responding to the above mentioned commands. The downside of this method is that the metadata file would get lost upon an installation directory change.

using Java Properties is another alternative for creating the metadata file:
https://docs.oracle.com/javase/tutorial/essential/environment/properties.html
Determining the location of this file remains an issue.

About this, I think a hackish way of doing could consist in appending a zip file at the end of the binaries right before putting them in packages. That zip file could contain an entry, like META-INF/scala-cli/source.json say, with a few metadata, like the package type, the typical command to update it, etc. Then the update command could try to open the binary path as a zip file, and check for that entry.

Given the number of installation methods and platforms we support, I do not believe it likely for us to have the resources necessary to hack this in a stable manner.
If anyone has a sane idea on how to implement this, then by all means, feel free to reopen.
Otherwise, closing for now, we won't fix this.


Adding Mitochondrial Allele Frequencies

When a curator selects a Mitochondrial variant to work on in the VCI, then the population tab should show only mitochondrial allele frequency data. There are two sources:

MitoSeqDr
gnomAD (see paper:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8896463/ )

Look into bringing in these data via the gnomAD API


Events gets missed in case when node goes to suspended  mode or goes down

Environment info
NooBaa Version: 4.18
Platform: standalone
Actual behavior
NOTIFICATION_LOG_DIR is configurable if it is configured to local node then if that particular node goes down/suspended then the events will be lost. or incase if the events gets triggered then also events will be lost before it reaches the destination
NOTIFICATION_LOG_DIR; /usr/local/noobaa-core/node/bin/node /usr/local/noobaa-core/src/cmd/manage_nsfs.js notification
Expected behavior

In case of HA the events should be available on the other node without missing the events

Steps to reproduce
More information - Screenshots / Logs / Other output

I'm sorry, but this scenario does not make sense.
A node does not send notifications.
The notificator, which is a manage_nsfs cli action, sends the notifications.
The notificator will process all of the available files in the given NOTIFICATION_LOG_DIR.


Added codecov.io custom reporter

Hey friends! We are a startup in Beta and have build a connector using this great product called simplecov :+1:
Thanks!

@stevepeak Merged and moved to a separate, new document alongside some other hosted services: https://github.com/colszowka/simplecov/blob/master/doc/commercial-services.md
@bf4 Let's keep this within the source code. I created a new doc/ dir and moved the open source formatters there too, with a reference from the main readme. Maybe we can move out some more specific problem solutions from the readme over there, too.
Why the doc dir? This way we can bundle the docs with the gem package, and also I think it's easier to maintain the normal PR -> Merge flow for edits instead of having another thing to watch and review by having the Wiki enabled.

Thanks you :)


Window drag-n-drop icon

Describe the bug
It seems the icons aren't updating when the docking status changes.  Drag-n-dropping a docked window to another location keeps the "window" icon and doesn't toggle to an up/down/left/right at another window's edge.
Environment (please complete the following information):
Ghidra Version: 11.2
Ghidra Release: PUBLIC
Ghidra Build Date: 2024-Sep-26 1444 EDT
Ghidra Revision: 7e6daf45e1c6a541bddeb8733eb21c4baa354c08
Ghidra Development Mode: false
OS Name: Linux
OS Arch: amd64
OS Version: 6.8.0-45-generic
OS Pretty Name: Ubuntu 24.04.1 LTS
Java Vendor: Ubuntu
Java Version: 21.0.4

I feel like this has been happening to me for years.

I think when i brought it up in the past it was blamed on a JDK limitation, but we can revisit it.

More info:  This has been happening to me on Windows for years, which i remote into.  I shared my screen to show @ghidragon the problem, and he said what are you talking about, it's working perfectly.  So it's something about the remote view messing with the icon.  Are you using a remote display here @mumbel?


rebuild with new base image

Signed-off-by: Subbarao Meduri<EMAIL_ADDRESS>

/lgtm

Only required on dev release.Closing.


[BUG] Post index "locked-by" tooltip not initialized on original load.

Steps to reproduce

Load the Posts index page in admin
Hover over a lock
Tooltip is not enabled

(However, If you change a filter it is enabled)
Expected behaviour
You should see a tooltip
Actual behaviour
You don't see a tooltip

 Post index "locked by" tooltip doesn't work until filters are applied


Can't run app - Issues regarding camera_platform_interface and camera.

What
Cant get the app to run. Issues regarding camera_platform_interface and camera.
Steps to reproduce the behavior

Clone GitHub repo to local, on develop branch
Manually run flutter pub get . in packages folder.
17K problems in project (VSCode bottombar section)

Expected behavior
No errors in project.
Why

<Issues regarding fetching camera_platform_interface and camera is what I suspect.

Logs
Running "flutter pub get" in smooth_app...
Because smooth_app depends on camera from git which depends on camera_platform_interface ^2.1.0, camera_platform_interface from hosted is required.
So, because smooth_app depends on camera_platform_interface from git, version solving failed.
pub get failed (1; So, because smooth_app depends on camera_platform_interface from git, version solving failed.)
exit code 1

Flutter Doctor
[√] Flutter (Channel unknown, 3.0.5, on Microsoft Windows [Version 10.0.19045.2604], locale en-US)
    • Flutter version 3.0.5 at C:\src\flutter
    • Upstream repository unknown
    • Framework revision f1875d570e (8 months ago), 2022-07-13 11:24:16 -0700
    • Engine revision e85ea0e79c
    • Dart version 2.17.6
    • DevTools version 2.12.2

[√] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
    • Android SDK at C:\src\Android\SDK
    • Platform android-33, build-tools 33.0.1
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[√] Visual Studio - develop for Windows (Visual Studio Build Tools 2022 17.4.0)
    • Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools
    • Visual Studio Build Tools 2022 version 17.4.33103.184
    • Windows 10 SDK version 10.0.22621.0

[√] Android Studio (version 2022.1)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)

[√] Connected device (3 available)
    • Windows (desktop) • windows • windows-x64    • Microsoft Windows [Version 10.0.19045.2604]
    • Chrome (web)      • chrome  • web-javascript • Google Chrome 109.0.5414.120
    • Edge (web)        • edge    • web-javascript • Microsoft Edge 110.0.1587.50

[!] HTTP Host Availability
    X HTTP host "https://cocoapods.org/" is not reachable. Reason: Failed to connect to host in 10
      seconds

! Doctor found issues in 1 category.

Screenshot/Mockup/Before-After
Project images

This happens for all 3 files in scanner directory.

check the flutter version (we need 3.0.5 to this project)
look at trouble shooting section of the readme

My flutter version is 3.0.5, check Flutter Doctor logs above.
These logs for troubleshooting in readme
PS C:\Code Projects\gsoc\smooth-app\smooth-app\packages\smooth_app> flutter pub cache clean
This will remove everything inside C:\Users\delu8\AppData\Local\Pub\Cache.
You will have to run `flutter pub get` again in each project.
Are you sure? (y/N)? y
Removing pub cache directory C:\Users\delu8\AppData\Local\Pub\Cache.
PS C:\Code Projects\gsoc\smooth-app\smooth-app\packages\smooth_app> flutter pub get .
Running "flutter pub get" in flutter_tools...                      23.7s
Warning: You are using these overridden dependencies:
! meta 1.7.0 (1.9.0 available)
! path 1.8.0 (1.8.3 available)
! typed_data 1.3.0 (1.3.1 available)
Git error. Command: `git clone C:\Users\delu8\AppData\Local\Pub\Cache\git\cache\smooth_app_plugins_fork-b050311fd172a0345156238b30968ad1526625f4 C:\Users\delu8\AppData\Local\Pub\Cache\git\smooth_app_plugins_fork-2fe0f6e0c7043a9cb855b299315566187827b2a2`
stdout:
stderr: Cloning into 'C:\Users\delu8\AppData\Local\Pub\Cache\git\smooth_app_plugins_fork-2fe0f6e0c7043a9cb855b299315566187827b2a2'...
done.
error: unable to create file packages/flutter_plugin_android_lifecycle/example/android/app/src/androidTest/java/io/flutter/plugins/flutter_plugin_android_lifecycle/MainActivityTest.java: Filename too long
error: unable to create file packages/flutter_plugin_android_lifecycle/example/android/app/src/main/java/io/flutter/plugins/flutter_plugin_android_lifecycle_example/MainActivity.java: Filename too long
Updating files:  27% (1073/3927)
Updating files:  28% (1100/3927)
Updating files:  29% (1139/3927)
Updating files:  30% (1179/3927)
Updating files:  31% (1218/3927)
Updating files:  32% (1257/3927)
Updating files:  33% (1296/3927)
Updating files:  34% (1336/3927)
Updating files:  35% (1375/3927)
Updating files:  36% (1414/3927)
Updating files:  37% (1453/3927)
Updating files:  38% (1493/3927)
Updating files:  39% (1532/3927)
error: unable to create file packages/in_app_purchase/in_app_purchase_android/example/android/app/src/androidTest/java/io/flutter/plugins/inapppurchaseexample/FlutterActivityTest.java: Filename too long
Updating files:  40% (1571/3927)
Updating files:  41% (1611/3927)
Updating files:  42% (1650/3927)
Updating files:  43% (1689/3927)
Updating files:  44% (1728/3927)
Updating files:  45% (1768/3927)
Updating files:  46% (1807/3927)
Updating files:  47% (1846/3927)
Updating files:  48% (1885/3927)
Updating files:  49% (1925/3927)
Updating files:  50% (1964/3927)
Updating files:  51% (2003/3927)
Updating files:  51% (2024/3927)
Updating files:  52% (2043/3927)
Updating files:  53% (2082/3927)
Updating files:  54% (2121/3927)
Updating files:  55% (2160/3927)
Updating files:  56% (2200/3927)
Updating files:  57% (2239/3927)
Updating files:  58% (2278/3927)
Updating files:  59% (2317/3927)
Updating files:  60% (2357/3927)
Updating files:  61% (2396/3927)
Updating files:  62% (2435/3927)
Updating files:  63% (2475/3927)
error: unable to create file packages/shared_preferences/shared_preferences/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/FlutterActivityTest.java: Filename too long
error: unable to create file packages/shared_preferences/shared_preferences/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java: Filename too long
Updating files:  64% (2514/3927)
Updating files:  65% (2553/3927)
Updating files:  66% (2592/3927)
warning: unable to access 'packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/.gitattributes': Filename too long
error: unable to create file packages/shared_preferences/shared_preferences_android/example/android/app/src/androidTest/java/io/flutter/plugins/sharedpreferencesexample/MainActivityTest.java: Filename too long
Updating files:  67% (2632/3927)
Updating files:  68% (2671/3927)
Updating files:  69% (2710/3927)
Updating files:  70% (2749/3927)
Updating files:  71% (2789/3927)
Updating files:  72% (2828/3927)
Updating files:  73% (2867/3927)
Updating files:  74% (2906/3927)
Updating files:  75% (2946/3927)
Updating files:  76% (2985/3927)
Updating files:  77% (3024/3927)
Updating files:  78% (3064/3927)
Updating files:  79% (3103/3927)
Updating files:  79% (3111/3927)
Updating files:  80% (3142/3927)
Updating files:  81% (3181/3927)
Updating files:  82% (3221/3927)
Updating files:  83% (3260/3927)
Updating files:  84% (3299/3927)
Updating files:  85% (3338/3927)
Updating files:  86% (3378/3927)
Updating files:  87% (3417/3927)
Updating files:  88% (3456/3927)
Updating files:  89% (3496/3927)
Updating files:  90% (3535/3927)
error: unable to create file packages/webview_flutter/webview_flutter_android/example/android/app/src/androidTest/java/io/flutter/plugins/webviewflutterexample/BackgroundColorTest.java: Filename too long
error: unable to create file packages/webview_flutter/webview_flutter_android/example/android/app/src/androidTest/java/io/flutter/plugins/webviewflutterexample/MainActivityTest.java: Filename too long
error: unable to create file packages/webview_flutter/webview_flutter_android/example/android/app/src/main/java/io/flutter/plugins/webviewflutterexample/DriverExtensionActivity.java: Filename too long
Updating files:  91% (3574/3927)
Updating files:  92% (3613/3927)
Updating files:  93% (3653/3927)
Updating files:  94% (3692/3927)
Updating files:  95% (3731/3927)
Updating files:  96% (3770/3927)
Updating files:  97% (3810/3927)
Updating files:  98% (3849/3927)
Updating files:  99% (3888/3927)
Updating files: 100% (3927/3927)
Updating files: 100% (3927/3927), done.
fatal: unable to checkout working tree
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry with 'git restore --source=HEAD :/'

exit code: 128
pub get failed (server unavailable) -- attempting retry 1 in 1 second...
Because smooth_app depends on camera from git which depends on camera_platform_interface ^2.1.0, camera_platform_interface from hosted is required.
So, because smooth_app depends on camera_platform_interface from git, version solving failed.
Running "flutter pub get" in ....
pub get failed (1; So, because smooth_app depends on camera_platform_interface from git, version solving
failed.)

I was able to fix most problem by using camera_platform_interface: ^2.4.1and camera: ^0.10.3+1 from pub.dev
I still cannot use custom implementation of the above packages

I got it working by changing url for custom packages (camera_platform_interface and camera) to https://github.com/g123k/plugins.git
Full change here (both in smooth_app and scanner/shared)
  camera:
    git:
      url: 'https://github.com/g123k/plugins.git'
      ref: 'smooth_camera'
      path: 'packages/camera/camera'
  camera_platform_interface:
    git:
      url: 'https://github.com/g123k/plugins.git'
      ref: 'smooth_camera'
      path: 'packages/camera/camera_platform_interface'


Chapter 3 / Login page and Nprogress - file name typo

We can add the Nprogress bar to our Header component or withLayout HOC. Some of our pages may not have Header, also we may create another Header component for some of the pages. Thus, we're better off adding the loading bar to our withLayout HOC that will wrap all pages in our application.
Go to lib/withLayout.js and add two new imports to the imports section:
components/Header.js :

There should be no last line.

@YuriGor Thanks again. I removed that unnecessary line from the book content.


hacs?

isn't this right in the community store? :thinking:

Closed with 110bcfbc0317a345e3eed299f4c5065c5d6eccce and added to default hacs store with https://github.com/hacs/default/pull/228


Clear top

Is there any ways to clear top when navigating to screen?
For example: A -> B -> C => D
When we navigate D,  it must clear all A, B, C screens

Hi, you can combine:
- cleanRouter + addScreen(D)

- backTo A + replaceScreen(D)

But in next version this feature will be added.


[RFC] "Extension" node role to support extensible workload

Is your feature request related to a problem? Please describe.
Currently OpenSearch nodes are used for multiple jobs in a cluster. They can be used for indexing, searching, managing cluster state, running ingest pipelines and more. Users running OpenSearch at scale will partition these roles into different node types: data nodes get used for indexing, searching, and running custom plugin logic, master nodes get used for cluster state management, and ingest nodes are used for preprocessing documents before the data nodes index them. This model works well in many situations. However, when running custom plugins that consume significant resources (i.e. ML models and other data analysis plugins), data nodes can see resource contention as memory and CPU pressure increases. In addition to the resource contention risks,  custom plugins are run inside the same JVM context as the data node. By running in the same context, the custom plugins have full access to the data in the data node and they have the same permission level as the OpenSearch executable. Some users  may want more codified sandboxing when running custom code.
As a potential solution to this problem my team is exploring the concept of dedicated extension nodes that are built specifically to run custom plugin logic and provide both resource and security isolation from data nodes. Additionally, decoupling these workloads will provide implicit benefits such as independent scaling, fault isolation and independent deployment. We are looking for feedback and to discuss this potential solution.
Describe the solution you'd like
This document proposes a new node role in OpenSearch - “extension node”. This proposal is applicable for plugins or other use-cases where dependency on cluster state is minimal and limited to pulling the latest value of some user config or settings. It will have following properties -

They are not directly part of the OpenSearch cluster and thus the full cluster state will not be synced on these nodes.
The jobs running on these nodes can subscribe to set of fields in cluster state. The master  will asynchronously sync the latest values of these fields to all extension nodes.
They will have access to all TransportActions available in the cluster (both default and added by other plugins).
These nodes will not be connected to each other.
Each node will be bootstrapped with the featureTags of the extension plugins which can run on it. So if there are multiple extension nodes connected to the cluster, each of them can serve different extension plugins. This heterogenous model provides flexibility in scaling the extension node fleet depending on the workloads and their resource consumption.
They cannot behave as a coordinator node of opensearch cluster and will not directly host the RestController and API handlers. In case these jobs are introducing a new Rest APIs, they will be registered on regular cluster nodes and request would be forwarded to corresponding TransportAction hosted on “extensions” node.
These nodes are not supposed to handle authentication. They can handle authorization and can be integrated with security plugin as far as the user info in passed to them while calling any transport action.

Plugins breakdown in OpenSearch
Plugins in opensearch can be categorized, on the basis of their role in the system, into following categories -

Core plugins: One which enrich the capabilities of core opensearch services. Usually, these plugins are required to setup the opensearch cluster in a desired way and enrich the behavior of core opensearch services. E.g. Analyzers, Network, Auth, Mapper, Search, Repository plugins.
Peripheral plugins: One which use these core opensearch services to provide additional capabilities. These plugins are never required to setup clusters or impact the behavior of any core opensearch services. E.g. Alerting, Index Management, AnomalyDetection etc.
Hybrid plugins: Some plugin packages may contain both category of plugins. These can be broken down into Core and Peripheral plugins components.

There is a subtle difference in 1 & 2,  the former is an integral part of the system and is a dependency for cluster setup or desired behavior of core services. Whereas, latter behaves more like a positive parasites in the body, they use the internal services of the system and provide enhancements, but are not a necessity to the system.
Architecture
Tenets

OpenSearch cluster availability shouldn’t depend on availability of plugins node.
Only lightweight state transfer between OpenSearch cluster and extensions node, to execute any transport action or event payload transferred to extension nodes. Full cluster state should not be synced onto the these node. If the extension plugin is dependent on some index metadata/cluster setting, its size should be minimal and should not change frequently.
All features offered by the new framework should be optional in OpenSearch i.e. the same extension plugin should run without extension nodes attached to the cluster.
Migration of existing plugins should not require any business logic change.
These nodes are not directly exposed to end user and should not act as a coordinator node of OpenSearch cluster.

New Components
ExtensionClient (on extension node)

Behaves as a proxy NodeClient, redirects all the requests to the cluster nodes. Uses connections from ExtensionTransportService to redirect requests and execute TransportActions available in the cluster.

ExtensionState
Extension plugins can configure this class and subscribe to required part of cluster state which will be synced by the ClusterApplierService (running on master node) asynchronously whenever there is a change in subscribed cluster state.

FeatureTag: A plugin can have a feature tag associated with it. And cluster admins can choose which features should run on which extension nodes as part of its .yml settings.
Subscribed indices: Name of the indices which a plugin wish to subscribe, to consume its metadata. Usually plugins may want to refer the latest metadata of their system indices and that’s when they can make use of it.
New ClusterSettings: Plugins may introduce new cluster settings and settings consumer, so consumers must be notified with the new value whenever there is a change in corresponding cluster setting.
Custom Metadata in ClusterSetting: Plugins can also introduce and subscribe to changes in custom metadata they wish to consume.

Note: State is not final, depending on the use-cases we can add more fields to it.
ExtensionState doesn’t needs to be persisted separately on cluster nodes as it can be generated from the cluster state.
ExtensionTransport Service (on both extension and cluster node)
This service will have following responsibilities when running -
On cluster node -

Maintain connection to all joined extension nodes.
With each connection also maintain attributes - supported featureTags, last extensionState committed version.
Call TransportActions on a given connection only when the version of extensionState associated with it is latest. Latest committed extensionState version for a feature will be present in the clusterstate. Executing TransportAction business logic on extension nodes having stale extension state can lead to inconsistencies in result, thus maintaining the version is required.
It will also keep pinging the connections periodically and remove all dead connections from its pool.

On extension node -

Send join request to the cluster node. Join request payload must contain the featureTags supported on the node.
Maintain connection to set of cluster nodes. These connections will be used by the ExtensionClient to execute any transport action.

ExtensionStateSynchronizer Service (on master node)
Whenever there is a change in the ExtensionState of a given featureTag, ExtensionStateSynchronizer will publish the diff in the ExtensionState to all the nodes registered in the ExtensionTransportService for a given featureTag. Once published, it will also update the cluster state with the Latest committed extensionState version.
ExtensionEvent Service (on extension node)
It processes all diffs received in the ExtensionState and calls all consumer listening to changes in metadata of cluster settings (existing or new ones introduced by extension plugin).
Bootstrapping process

Green  denotes new services
Yellow denotes existing services
ExtensionNode
The extension node will only bootstrap minimal set of services required to support extension plugins. It will not start Index, Search, Cluster or any other services which are dependent on them. It will also bootstrap new services described above and will come up with ExtensionClient as the NodeClient for the node. It will only load the plugins which are associated with the featureTags configured in the .yml
PluginService:
PluginService will install all plugins which are installed on the cluster but will only load and use the essential components from these plugins which are needed by the services running on extension node like - ScriptPlugin, CircuitBreaker Plugin etc. And the ExtensionClient will need XContentRegistry, NamedWritables etc to call transport actions added by other plugins. Since, there will be no RestHandlers hosted on the extension nodes, the ActionModule will just register the TransportActions from extension plugins using PluginService.
ExtensionTransportService will be bootstrapped first in order to send a JoinRequest to the cluster. Once connected, ExtensionClient will be usable and it can proxy all TransportActions to the cluster nodes. Also, it will start receiving updates on ExtensionState for all featureTags. Once the extensionState is available, extension plugin will become fully functional.
Cluster Node
All RestHandlers from extension plugins will be registered in the ActionModule of cluster nodes just like other RestHandlers. Cluster nodes should also be aware of all new TransportAction Request and Response classes. TransportAction execute() will just simply forward the request to one of the extension node using ExtensionTransportService.
ExtensionTransportService will keep adding connection to extensionNode dynamically as it will receive updates in the cluster state about new extension node.
Master Node
Master node will come up with 2 new service - ExtensionStateSynchronizer **** and ExtensionTransport service. It will also receive JoinRequest from extensionNodes. It will also maintain the state of connection in cluster state and publish it to other nodes in the cluster.
ExtensionStateSynchronizer will be bootstrapped and will keep checking the diff in the extensionState against each of the featureTags, and will publish the diff to the extension nodes asynchronously and will update the extensionState version in clusterState.
Discovery

Request flow
Diagram shows the request flow of new APIs added by the extension plugin and it also shows how ExtensionSynchronizerService would be listening and synchronizing the ExtensionState.

red → denotes flow for extension state updates and events
black → denotes REST APIs request flow
Limitations

Extension nodes cannot support core plugin described above. So plugins like analyzers, mapper, search, repository cannot explicitly run on these nodes (check [Future enhancements section]).
They cannot support any workloads which depend on or require full cluster state transfer.
Migrating any workloads from regular cluster nodes to these nodes, if results in significant increase in state/data transfer between nodes, should be avoided. E.g. listening on indexing events which contains document as the payload of the event, is not a good use-case for extension nodes. Whereas, if its shard query results transfer, which happens even today between coordinator and other nodes of the cluster handing shard request, is good to have on extension nodes.

Existing plugins which can be migrated to this model
Alerting: https://github.com/opensearch-project/alerting
Alerting doesn’t depends on the cluster state heavily and just uses it to fetch the metadata associated with system index it creates. It uses NodeClient to perform search and indexing. And adds new cluster settings and APIs in the cluster. This makes alerting plugin a perfect use-case to migrate onto this model.
TODO - evaluate feasibility of -
Anomaly detection: https://github.com/opensearch-project/anomaly-detection
Index Management: https://github.com/opensearch-project/index-management
SQL: https://github.com/opensearch-project/sql
Reporting: https://github.com/opensearch-project/dashboards-reports
Open questions in implementation

Since publishing of extensionState onto extensionNodes will not be a blocking call unlike publishing of cluster state to cluster nodes, so if extensionState is synchronized asynchronously at the time of API call, it can add to the latency of extensionPlugins API OR it can lead to availability issue if the request is getting rejected because of extensionState not being latest on the destination extension node and state is synchronized asynchronously by some background service.

The problems above may not be too prominent as we are not expecting changes in plugin specific system indices metadata frequently.
Future enhancements
Network call could be expensive for some of the use-cases - like Analyzers, where a TokenStream is created for each document to be indexed or a search query, transitioning them to a separate node and a network call, with payload as big as document size, in critical path of indexing/search could be too expensive. Thus core plugins like Analyzer plugins are not good use-cases for this model. Since these processes can run on the same node as opensearch process as its just a logical separation with communication happening via TransportChannel of opensearch, so instead of depending on the TransportChannel for communication, can an optimized IPC be replaced with TransportChannel? Communication channel can be abstracted in opensearch depending on whether other node is present locally or a remote connection is needed. If remote, regular TransportChannel would be used, otherwise IPC such as shared memory can be used to optimize on latency for use-cases such as Analyzers. This way even core plugins can be moved onto this model with lesser impact on the latency. It may require some code changes in the way analyzer registries are created and analyzer factories are initialized and directly used, instead a new Action has to be defined for anything to be migrated onto this model.
Appendix

How are these nodes different from the coordinating only nodein elasticsearch? Coordinating only nodes are part of the cluster and master syncs the full cluster state onto them. They also run most of the services which runs on other nodes of the cluster. “Adding too many coordinating only nodes to a cluster can increase the burden on the entire cluster because the elected master node must await acknowledgement of cluster state updates from every node! The benefit of coordinating only nodes should not be overstated — data nodes can happily serve the same purpose.”
Why do we need these nodes and not just use TransportClient to run such extensible workloads? Extension nodes are capable of much more than just being a client and executing APIs. They can add listeners for part of cluster state and can consume these events. Also, extension plugins can add new APIs to the cluster.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.

One open question:
How did you define the solution? This doc only confirmed that the Alerting plugin can be migrated to the extension model. Probably it’s better to define the solution after checking the behavior/architecture of other peripheral plugins, and make sure the solution could support most of the peripheral plugins.

Several more questions:

How much effort does it need to migrate an existing plugin to this extension feature?
Would this extension feature manage the workload balance across the extension nodes?
More specific numbers on the limitation would be very helpful. (e.g. If the extension plugin is dependent on some index metadata/cluster setting, its size should be minimal and should not change frequently.   minimal = ?, frequently = ?)

One open question:
How did you define the solution? This doc only confirmed that the Alerting plugin can be migrated to the extension model. Probably it’s better to define the solution after checking the behavior/architecture of other peripheral plugins, and make sure the solution could support most of the peripheral plugins.

 But we are ready to have an open discussion on what it takes to make changes to this model to support most of the use-cases. Let's list all constraints which are too strict here and are preventing migration of any peripheral plugin and discuss ways to support them.

I have a few questions particularly related to plugins like Notebooks:

Notebooks uses it's own index for storing documents, it's not just using some metadata. Hence, it will need full access(create, read, write) over the subscribed index. How is this handled by extension node?
I understand the transport APIs are taken care by transport action handler in extension node. But, Is there any effect on REST APIs provided by dashboard-plugins?
Notebooks plugin uses the OpenSearch Dashboard Status API to check if the reporting plugin is available, Will this API endpoint be still accessible?
For a plugin like SQL/PPL which needs access to mostly all indices, how is the subscribed indices part handled?

1.They are not directly part of the OpenSearch cluster and thus the full cluster state will not be synced on these nodes.
4.These nodes will not be connected to each other.

For AD plugin, we need to distribute load between multiple nodes. Currently we depends on cluster change event to build hash ring and distribute load. After moving AD to extension node, AD needs to get similar change event for all extension nodes, like new extension node joins, node left cluster. These nodes should be able to connect to each other, so we can choose one extension node as coordinating node and distribute models/tasks to different extension nodes with AD feature tag.
Several plugins (Alerting/AD/IndexManagement) have periodical job built on top of JobScheduler plugin and JobScheduler plugin rely on job index event to schedule/de-schedule job. So I guess JobScheduler will be core plugin? Currently JobScheduler starts job on data nodes which has shard of job index which means job can only start on regular cluster data node rather than extension nodes. Do we have plan to migrate all such jobs to extension node?

5.Each node will be bootstrapped with the featureTags of the extension plugins which can run on it. So if there are multiple extension nodes connected to the cluster, each of them can serve different extension plugins. This heterogenous model provides flexibility in scaling the extension node fleet depending on the workloads and their resource consumption.

This model can shift memory/CPU load from regular cluster node, but seems it can’t shift the load on searching/writing index, right?

For AD plugin, we need to distribute load between multiple nodes. Currently we depends on cluster change event to build hash ring and distribute load. After moving AD to extension node, AD needs to get similar change event for all extension nodes, like new extension node joins, node left cluster. These nodes should be able to connect to each other, so we can choose one extension node as coordinating node and distribute models/tasks to different extension nodes with AD feature tag.
I have been thinking about this use-case and thanks for bringing this up. Extension nodes not talking to each other shouldn't be a hard constraint, they should be allowed to establish connection to desired extension node as required. Also, the global extension state, which is maintained by opensearch cluster leader, contains list of active extension nodes reachable from leader. So ExtensionEventService running on each extension node will be notified of any membership changes in extension nodes.
ExtensionTransportService can keep long-lived connections with desired extension node and will maintain list of all active and faulty ones, just like TransportService in opensearch cluster.

Several plugins (Alerting/AD/IndexManagement) have periodical job built on top of JobScheduler plugin and JobScheduler plugin rely on job index event to schedule/de-schedule job. So I guess JobScheduler will be core plugin? Currently JobScheduler starts job on data nodes which has shard of job index which means job can only start on regular cluster data node rather than extension nodes. Do we have plan to migrate all such jobs to extension node?
Yes, there will be a different version of jobscheduler running on candidate/leader nodes of opensearch cluster and will be scheduling jobs on extension nodes. It will ensure jobs are distributed uniformly and will be backward compatible in case there are no extension nodes attached to the cluster.

This model can shift memory/CPU load from regular cluster node, but seems it can’t shift the load on searching/writing index, right?
You're right. Although, we can use them for post-processing of queries, like running aggregations. This is contrary to the fact that they will maintain the full cluster state and thus index metadata/mapping, routing information for shards to nodes mapping will not be present, which would make it challenging to support such use-cases. This is something we need to brainstorm more, I'll be adding more details on it on our possible options which will not increase the data transfer magnitude in order to solve such use-cases and I believe this could be the future enhancement.

Notebooks uses it's own index for storing documents, it's not just using some metadata. Hence, it will need full access(create, read, write) over the subscribed index. How is this handled by extension node?

They will have full access to the NodeClient, using which it can create/read/write index. So, there is no change in behavior, although implicitly, all requests would be proxied to one of the cluster node to handle it.

I understand the transport APIs are taken care by transport action handler in extension node. But, Is there any effect on REST APIs provided by dashboard-plugins?

No, REST APIs should work as it is, the only difference would be that they will not be hosted on extension nodes, but on regular cluster nodes, and corresponding transport action would be called on extension node.

Notebooks plugin uses the OpenSearch Dashboard Status API to check if the reporting plugin is available, Will this API endpoint be still accessible?

Do they call localhost address? or do they make use of public endpoint? How these requests are signed?

For a plugin like SQL/PPL which needs access to mostly all indices, how is the subscribed indices part handled?

What do you mean by "access" here? Is it for search purposes? If yes, its the same question as the first one, and its handled by design.

Shout out for this proposal and design, but I have a couple of questions:

Does the plugin need to be aware of which role is in use in different stages within the plugin business logic? For example, the SQL plugin usually fetches indices with NodeClient at the very first stage of the physical plan, and then works on the in-memory post-processing right after the index scan. Would that be the SQL plugin responsibility to switch role to extension role at this point?
Would it bring any impact in the existing circuit breakers and cost estimators something in the plugins?
Thanks!

I have some questions about the design proposed for the architecture of extension nodes:

To make the extension nodes as a cluster, what will be the extra overhead? As jobs on each node are taking care of maybe a single plugin, it will add additional overhead on the master of the OS cluster to maintain the state of extension nodes. How about we have an elected leader amongst the extension nodes and outsource the responsibility of managing the extension nodes to that leader. For starters, we can elect the master node amongst the extension nodes. We can better manage the availability of the extension nodes with an outsourced responsibility model. The benefits in terms of the partition tolerance might not be much as the job which the elected master of the OS cluster was doing would be the same as the master will do it on the extension nodes.

This can also ensure that in case of fail overs from the masters of the OS clusters, the plugins will be safe. In the future, we might introduce some more core plugins which may do tasks that need protection against fail-over.

For my knowledge, can you elaborate a bit more on the design of the plugins package? What is the data store used and how are we storing these classes, etc. Estimated throughput of the data store in terms of reads/writes, etc?

Can we also think to containerize the processes running on the extension nodes? I agree that this might bring in paraphernalia to manage the access from the container on one node to a container on another node, but it will also bring in a lot of benefits to constrain the environments for CPU/memory for the process running.

Kudos for initiating this RFC. Few questions:

If we want to run Core plugins (example analysers) on extension nodes. Will it work ? If yes, by how much percentage Latency will be impacted? If not, where do you see the problem and what it takes to support it.

Primary reason we want to use extension nodes to deploy plugins is Security and sandboxing / isolation. Dependency of this 2 way communication can impact security/availability

Why can't these extension nodes be just stateless compute nodes which supports standard Rest API's?  i.e. coordinating node acts as Client, and extension nodes act as server.  Assuming Co-ordinating nodes knows which extension node (urls) it should reach.  And authentication is performed using mTLS.

this design is tightly coupled with Cluster state? in a way,  extension nodes are part of this cluster

Future enhancements section, using shared memory IPC for analyzer plugins may not work if OpenSearch is running in a container.

Thanks.


improve order to show utillities without a value (base) higher than once with value

would it be possible to have the order reversed for properties like that ? I only have those to as an example, (i don't know if it the same other) but i believe that most of the time people want flex-grow & flex-shrink over flex-grow-0 & flex-shrink-0

@alexanderniebuhr I am trying to improve this.

Hi @Zenthae
Do you mean the completion suggestion?

I have checked the completion logic and Windi CSS docs.
Summary:

flex-grow-0 higher than flex-grow in Windi CSS, ref.
Our intellisense just flow the Windi CSS sort.

Is it make sense to you?
cc @alexanderniebuhr

@ThaddeusJiang not quite. completions are sorted in vs code extension.. see completion.ts -> item.sortText you can hook into their and tweak sort-text so it does get order right

@alexanderniebuhr I see.
One question, Should we tweak sort-text for only 4 classname?

/cc @antfu what order do you prefer?

Hi @Zenthae
Do you mean the completion suggestion?

I have checked the completion logic and Windi CSS docs.
Summary:

flex-grow-0 higher than flex-grow in Windi CSS, ref.
Our intellisense just flow the Windi CSS sort.

Is it make sense to you?
cc @alexanderniebuhr

yes, i'm talking about the completion suggestion, because like i said, i believe that most of the time, what people use is flex-grow & flex-shrink over flex-grow-0 & flex-shrink-0

I think we could make a rule. If an utility exist without number it has to be ordered first.. if It only exist with numbers order like before.
This would make sure that margin or padding kept correct
@ThaddeusJiang maybe sort first then order by string lengths

OK, I see.

just going to close since there was no much activity lately, if some issue still exists please reopen a new issue


Memory Manager logging is confusing

Expected Behavior
gradle should try to access only the RAM, which is assigned to it, rather than RAM which isn't available.
Current Behavior
When running in a container, gradle continually tries to access RAM which isn't available in the container.  The following message is printed.
10:59:37.947 [DEBUG] [org.gradle.process.internal.health.memory.MemoryManager]<PHONE_NUMBER>0 memory requested, 0 released,<PHONE_NUMBER> free
As you can see from the message.  Gradle is requesting<PHONE_NUMBER>0 bytes or ~25GB.  The container only has 12GB available, and gradle is configured to only use 4GB.  this has been set in many places, none of them able to stop this message.  Here is the list of attempted ways to limit the RAM usage:

export GRADLE_OPTS='-XX:MaxRAM=4096m -Dorg.gradle.jvmargs="-XX:MaxRAM=4096m"'
export JAVA_OPTS='-XX:MaxRAM=4096m'
export JAVA_TOOL_OPTIONS=-XX:MaxRAM=4096m
export _JAVA_OPTIONS='-XX:MaxRAM=4096m'
org.gradle.jvmargs=-XX:MaxRAM=4096m in gradle.properties

Context
After switching our build machine from a virtual machine to a container, some jobs have gotten much slower.  IE - One job takes 6 minutes now instead of 4.  I see the above message appearing constantly when running gradle with the --debug flag.  Java 8 sets default values of RAM usage when started without explicit parameters.  It bases this, unfortunately, of the physical server instead of the container, which is why we set the MaxRAM setting to override this, but either gradle is not passing this flag on to all processes, or is going around/ignoring the explicitly set flags.
Steps to Reproduce (for bugs)

Create a container with either lxd or docker explicitly setting the amount of RAM available (much lower than host system has available)
Run a gradle build with --debug, and watch for the above mentioned  messages
If unable to reproduce, I would be willing to provide an environment where this can be reproduced.

Your Environment
https://scans.gradle.com/s/yvksnzgbcb2vu

You are misunderstanding that message. Gradle is not trying to get more RAM. Gradle is noticing that physical memory is low and trying to shut down some of its processes to compensate.
Now as to why your builds are slower: Is the machine oversaturated? Are you giving each build the same amount of memory as before?

Machine is a faster machine, with faster disks, less load than before.  I am giving gradle the same amount of RAM as previously.  If I up it from 4G to 8G I still get the same message.  I can also see that it's not actually using all of that RAM, actually it's not even using 1GB.

If I up it from 4G to 8G I still get the same message. I can also see that it's not actually using all of that RAM

It's not about the memory you give Gradle. It's looking at machine memory. If your machine's overall memory is >90% full, Gradle will actively try to reduce its own memory overhead by killing off worker processes. So what we need to find out is why your machine is hitting that memory limit. Are you using forked compilation? If so, did you set a memory limit for the compiler process (otherwise it'll use the JVM default, which is very high).

Another speculation: Maybe the OS memory info we get from the JVM is bad and tells us that everything is full just because it is assigned to other containers. In that case we'd need a better data source to make our decisions.

The machine isn't running out of memory, that's the thing.  It sounds like it's using the wrong parameters to calculate the machine's memory.  IE - it's using the physical machine's total RAM, seeing how much free RAM the container has and that will definitely be less than 90% left.

We use meminfo on Linux, which gives us the machine's free memory (not the container's). So those 6GB free is all that the machine has left (according to meminfo). Given that Gradle is trying to free 27GB, I assume your sever has around 256GB of total RAM?

Yes, the machine has 256GB, and about 200GB free, the container has 6GB
free.
On Thu, 19 Apr 2018, 16:02 Stefan Oehme<EMAIL_ADDRESS>wrote:

We use meminfo on Linux, which gives us the machine's free memory (not the
container's). So those 6GB free is all that the machine has left (according
to meminfo). Given that Gradle is trying to free 27GB, I assume your sever
has around 256GB of total RAM?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/gradle/gradle/issues/5102#issuecomment-382747712, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AK9_SKyKtgJA554vyq26AYyJRH3Dzmdfks5tqJjqgaJpZM4Tbmei
.

Got it, that explains it.
I think the discrepancy is because we use different APIs for total (MBean) and available (meminfo) memory. CC @ghale

Thanks so much for looking into this, Stefan!
On Thu, 19 Apr 2018 at 17:41 Stefan Oehme<EMAIL_ADDRESS>wrote:

Got it, that explains it.
I think the discrepancy is because we use different APIs for total (MBean)
and available (meminfo) memory. CC @ghale https://github.com/ghale
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/gradle/gradle/issues/5102#issuecomment-382783480, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AK9_SLT-F-AOPdczbNQ1BMOl6zNr8bn-ks5tqLA-gaJpZM4Tbmei
.

For 5.0, we've done a first step in #7058. Gradle will now use a consistent data source for total and available memory. This means it will no longer see false memory pressure.
However, that datasource might still look at the host memory, so Gradle may take more memory than the container is allowed to. To fix this, we'll have to make Gradle aware of cgroups.

Having a similar problem here, but actually much worse. We have tests running and passing successfully on a 2gb docker container. However when the same container is run from a kubernetes pod it gets killed by the container as it is using too much memory. Kubernetes only passes if container has 4gb allocated to it.
Using Gradle 4.10, all the flags, even adding -XX:+UnlockExperimentalOptions, -XX:+UseCGroupMemoryLimitForHeap to all javaexec, groovyexec and everywhere where possible.
The problem is that Gradle spawns up a few worker processes (4 for our process) and a test process each nicely adhering to max memory limits, however as they are all different jvm's, their combined memory usage is over the container's limit.
Gradle doesnt properly keeps track of this and by the time my actual test starts running Gradle is already using about about 2.5gb of ram (4 builders a 500m each, plus main Gradle process).
Is there any way of having the GradleWrapperMain be fully aware of the container limits and contain resources according to those limits?

Please give Gradle 5.0 RC1 a try. 4.10 definitely doesn't behave well.


Specifying Deduplication support on 1709 & later.

Looks good, though we should double-check once published to make sure it renders properly. Ready to merge. Thanks!


Error causing HB to restart

Seeing the below error and causing Homebridge service to restart. HMS was working without error prior to updating to 0.5.26
TypeError: this.getCharacteristic is not a function
at WyzeHMS.updateCharacteristics (/homebridge/node_modules/homebridge-wyze-smart-home/src/accessories/WyzeHMS.js:24:12)
at WyzeHMS.update (/homebridge/node_modules/homebridge-wyze-smart-home/src/accessories/WyzeAccessory.js:351:18)
at WyzeSmartHome.loadDevice (/homebridge/node_modules/homebridge-wyze-smart-home/src/WyzeSmartHome.js:126:17)
at WyzeSmartHome.loadDevices (/homebridge/node_modules/homebridge-wyze-smart-home/src/WyzeSmartHome.js:86:36)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
at WyzeSmartHome.refreshDevices (/homebridge/node_modules/homebridge-wyze-smart-home/src/WyzeSmartHome.js:75:7)
at WyzeSmartHome.runLoop (/homebridge/node_modules/homebridge-wyze-smart-home/src/WyzeSmartHome.js:59:9)

Turns out this was caused by my Hub being offline.


Licensing requirement

The sentence "Using conditional access requires an Azure AD Premium license." does not specify if each targetted user should have an Azure AD Premium license. Could this be clarified in the context of using Conditional Access to protect content shared with guest users / consultants etc, as these are usually not licensed in the same tenant.

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

ID: ffdaa549-8f3b-75e0-9d27-a1a10417d86b
Version Independent ID: aff533db-3ac6-5f9a-0134-812f7d488670
Content: What is conditional access in Azure Active Directory?
Content Source: articles/active-directory/conditional-access/overview.md
Service: active-directory
GitHub Login: @MarkusVi
Microsoft Alias: markvi

@jflieben  Thanks for the feedback !  I have assigned this issue to content author to investigate and update the document as appropriate.

@jflieben FWIW, from my own testing yesterday only the users who manage the Conditional Access policies have needed an AAD Premium license. The policies were applied to all targeted users, regardless of whether they had a license or not.

@Wedvich
You need as many premium licenses as many users are in scope of condional access policy.It is not required that you should assign license to the users in scope but you should have that many licenses.For configuration of conditional access policy you need to assign license.

@Wedvich by clarifying, I meant 'is it allowed' / 'when am I compliant'?
@TechB0t so you are saying a license is needed for EVERY user in scope, even if that user is a guest account? Can you specify your sources? (as your account is 1 day old and shows no references, I cannot take your word for it)

Bringing this thread back. Very interested in the answer to this question:
(1) how many AAD P1 licenses need to be available?
(2) of the AAD P1 licenses available, which users need to be assigned the P1 license?

Hello team, is there any update on this?
I would like to know if each targeted user should have an Azure AD Premium license? If so, can this documentation be updated as well?

Azure AD is license per user. If a user wants to use a feature they need the appropriate license that includes that feature. https://docs.microsoft.com/azure/active-directory/conditional-access/overview#license-requirements-for-using-conditional-access

#please-close


No redirect to login after API returns 401

React-admin gets the 401 response from Feathers API, but nothing happens, no redirect to login page.
App.js:
import React from 'react';
import feathers from '@feathersjs/feathers';
import rest from '@feathersjs/rest-client';
import { restClient, authClient } from 'ra-data-feathers';

const client = feathers().configure(
  rest('http://localhost:3030').fetch(window.fetch)
);

const App = () => (
  <Admin
    dataProvider={restClient(client, {id: '_id'})}
    authProvider={authClient(client)}
  >
    <Resource name="news" list={ListGuesser} />
  </Admin>
);

React-admin v.3.14.2
Ra-data-feathers v.2.8.1

Maybe you can debug it.

I had wrong Feathers configuration. Sorry. Closing the issue.


GitHub Readme Quotes not working anymore

GitHub Readme Quotes is not working anymore.

I think, resources which are not working needs to be updated, so I thought to let you know.

GitHub Readme Quotes is not working anymore.
* I think, resources which are not working needs to be updated, so I thought to let you know.

Thank you for your offer, we will eliminate inactive tools
Checked as if the reason is that
https://github.com/shravan20/github-readme-quotees/issues/156#SISCOMMENT-117956442


how to import it in to ionic 2+ and solve SqlServer is not defined?

Hello. i tried to import it on my project.
I have install it successfully but there is no report on how we import it in our project.
On stackoverflow i found 2 answers  but not of them solve the "SqlServer is not defined" error.
here is the code:
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
 declare var SqlServer: any;

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {

  constructor(public navCtrl: NavController) {
     this.test()

  }

     test(){
      SqlServer.init("<IP_ADDRESS>", "sql_server_ii", "sa", "123456", "asMainCoif", function(event) {
      alert(JSON.stringify(event));
    }, function(error) {
      alert(JSON.stringify(error));
    });
  }
}

You can refer it from the window object.
If TS complains about the type, just typecast it to any
(<any>window).SqlServer.init()

i removed declare "var SqlServer: any; "
and i used (window).SqlServer.init()
i was installed the plugin using this:
npm i cordova-plugin-sqlserver
it was return me this
"ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'init' of undefined
TypeError: Cannot read property 'init' of undefined"
this plugin does not need any import on home.ts? or somewhere? it seems that it doesnt exist at all!

it does not need any import because it's not an Ionic Module, but a real cordova plugin, which means it's made available globally at the window Object.
I can't say why it's not being loaded, but I guess you need to config if the plugin is in fact installed.
Try to remove the platform and add it again, sometimes it helps on the internal wirings of the plugins.

Hello together,
does anyone has a simple finish project for this plugin?
I have no idea how to do it and i would need some inspirations 👍
Thanks in advance!
Br
Marvin

i removed declare "var SqlServer: any; "
and i used (window).SqlServer.init()
i was installed the plugin using this:
npm i cordova-plugin-sqlserver
it was return me this
"ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'init' of undefined
TypeError: Cannot read property 'init' of undefined"
this plugin does not need any import on home.ts? or somewhere? it seems that it doesnt exist at all!

I have the same error too....
Anyone can help...Please

if remove "declare var SqlServer: any;"
and use:  (window).SqlServer.init(....)
will get the following error:
Cannot read property 'init' of undefinded
Anyone can fix it ? Please

I am also having this issue, did anyone get the plugin working, any advice?  I have installed and reinstalled the plugin multiple times from url: https://github.com/SergioDosSantos/cordova-plugin-sqlserver.git
Here is my code with fake var values:
function sendData() {
var host="<IP_ADDRESS>";
var instance="instance";
var user="user";
var password="password";
var dbname="dbname";
SqlServer.init(host, instance, user, password, dbname, function(event) {
alert(JSON.stringify(event));
}, function(error) {
alert(JSON.stringify(error));
});
}
And here is my error (*second one down):

When I declare [var SqlServer;] above the function, the following error appears(*second one down):


[Bug] Explicit ESM declaration

This module is being used by Drauu which has an integration with VueUse and can be used with Nuxt (Vue). Since Nuxt 3 uses Vite as a bundler by default and it only allows the use of ESM modules, when it tries to bundle perfect-freehand the following error occurs:
import { getStroke } from "perfect-freehand";
^^^^^^^^^
SyntaxError: Named export 'getStroke' not found. The requested module 'perfect-freehand' is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via the default export, for example using:
import pkg from 'perfect-freehand';
const { getStroke } = pkg;
I was able to "fix" it by adding the following lines into the package.json inside node_modules:
"type": "module",
"exports": {
".": {
"types": "./dist/types/index.d.ts",
"import": "./dist/esm/index.js"
}
}
I'm not sure if this may cause some problems that's why I'm opening an Issue

Awesome, want to make a PR?

Awesome, want to make a PR?

Sure. It's here https://github.com/steveruizok/perfect-freehand/pull/55

Hello, I have an issue connected to this one in here. I guess the only thing remaining to do is to release the current version, if that's not a big deal.

This has been released. v1.2.2


Refactor OpenAPI Repository Folder Structure

Description:
Problem statement:
The OpenAPI module is enriched with multiple sub-modules designed to perform various tasks. The current repository structure of OpenAPI can be confusing for users. As a solution, we recommend implementing a more organized repository architecture.
Suggested Architecture:
Group by functionality architecture for the repository.

Please find this : reference doc : https://docs.google.com/document/d/1cg6S8EEP2cQfDrsqJn66tZZcDXZqD6_b1XjGOKSBKdY/edit


Updated the name of 1 offering

D365 Marketing doesn't exist as a name.

@ecfan
Can you review the proposed changes?
When the changes are ready for publication, add a #sign-off comment to signal that the PR is ready for the review team to merge.
#label:"aq-pr-triaged"
@MicrosoftDocs/public-repo-pr-review-team

#sign-off


Add image feature extraction to the Inference API [img2vec]

Is your feature request related to a problem? Please describe.
I'm working on a "search by image" prototype. I implemented image search in the standard way:
Prepare search index (offline)

Extract image features
Create index for vector search (e.g., with FAISS)

Search by image (online)

Extract image features from query image
Look up nearest vector in index

Describe the solution you'd like
I'd like to use HuggingFace Inference API to extract features from searched images (no. 3 above). I see we can extract text features with some models (text2vec) but there is no img2vec support.
Describe alternatives you've considered

I considered renting a VM or running a Docker on Azure for the image feature extraction, but it's expensive for GPU enabled options. All I need is very light GPU usage (about 10 ms per search) and it doesn't make sense to allocate a VM for an entire month for a tiny sliver of actual usage.

I considered using a HuggingFace Spaces for the app, but I need the options to store the query images and other customizations.

Additional context
Note that I built the image index offline (no. 1-2 above), and that isn't the intended use of Inference API. I need Inference API for the online component: image search.

hi @avivhu thanks for bringing this up.
In all cases, we can always implement a custom pipeline, I've fixed your original requested model and now it works, https://huggingface.co/radames/blip_image_embeddings
Here is a template for generic custom pipelines, feel free to build other models and pipelines with that task
https://huggingface.co/templates/feature-extraction/tree/main

Hi @radames, I am also facing the same problem. I was wondering if there was a way to use a pipeline for feature extraction on images without having to create a repository on Huggingface every time I change the embedding model. I'm looking for a model-agnostic solution such as the text feature-extraction pipeline (https://api-inference.huggingface.co/pipeline/feature-extraction/{model_id})


[FLINK-9687]Delay the state fetch only when the triggerResult is fire

What is the purpose of the change
When the window operator is fired by the event timer or processing timer, it fetch the state content first. I think it only need to fetch the content from windowState when the triggerResult is Fire. Due to this change, the windowTest have to adjust that the time of the trigger is not none, and i am not sure this way to change the test case is good.

please help review this pr @aljoscha  @kl0u

The failed info in travis error shows the test with checkClusterEmpty is wrong, Is this happened due to the reuse of yarn cluster? It seems unrelated with this pull request.

ping @aljoscha , could you help review it, I'd like to hear your opinion on this PR too. thx

I had a PR that changed the behaviour for https://issues.apache.org/jira/browse/FLINK-5363. Back then, @StephanEwen and I discussed it, I don't remember the exact discussion anymore but I think we didn't want to change this because it changes the semantics of Triggers. I'm also unsure now about whether we should/can change this. Let me think a bit.

I think the reasons at that time where:

it changes the semantics of Triggers
You can get into a situation where you call Trigger.onEventTime(), the Trigger returns FIRE or FIRE_AND_PURGE, and then you don't actually have any window contents to emit

Hi, @aljoscha
I read the PR of https://issues.apache.org/jira/browse/FLINK-5363, i think it is not a same thing with this PR. You meant to get TriggerResult no matter the window content is empty or not. And I meant to check the TriggerResult first to avoid get window state when the trigger are not ready to FIRE. And I think the cost of get window state is much more cost, so i think we can get the triggerResult first.

No, the motivation was different but the effect of the change is the same, I think.
With this change, you can get into a situation where Trigger.onEventTime() returns FIRE and there is actually no window contents to fire. I think this can potentially be confusing for users that write custom triggers.
I'm not saying that this behaviour is bad, I'm only saying that it changes the behaviour, and this can be tricky. This was also the main reason why we didn't change it back when I did the PR. If I remember correctly.
What are the cases where this change leads to an improvement? I think it rarely happens that a timer fires while a window is empty, so I think we read the window state in almost all cases when a timer fires.

Get it, this change indeed will lead to the situation you mentioned.

What are the cases where this change leads to an improvement

I just read code and think the order is not suitable.

I think it rarely happens that a timer fires while a window is empty

I think here is not the one in fact, because we get the window content each time before get the trigger result. AFAIK in there is cleanupTimer and fireTimer in internalTimerService in windowOperator.  we only have to get window content for fireTimer of a window. In now implementation, we have to extract both for the cleanupTimer and fireTimer.

Unfortunately, we cannot distinguish between cleanup timers and other timers. In fact, in the case where we have allowed lateness = 0 the one timer is both a normal timer and a cleanup timer.

Got it, Thanks for your explanation ;-）. I will close this PR.

OK 👌

I merged it 😃


Absolute width of yellow underlines exceeds the container width on iPhone 5 sized devices

This was fixed in Forge 6.7.1 and will show up on our next deploy. 🔜


False positive removal

Based on Zain's branch 705c535400233243bed2070dc3e1ddf08daf0bac
This adds false positive removal to OCR and fixes a bug with prior generation.

I will do so as part of the re-write itself :)


[Consul] Adds Consul per node Service Check

What does this PR do?
Adds per node Service Checks to the Consul Integration
Motivation
More in line with other node based Integrations, and customer requested.
Testing Guidelines
An overview on testing
is available in our contribution guidelines.
Versioning

[X] Bumped the check version in manifest.json
[X] Bumped the check version in datadog_checks/{integration}/__init__.py
[X] Updated CHANGELOG.md. Please use Unreleased as the date in the title
for the new section.
[ ] If PR impacts documentation, docs team has been notified or an issue has been opened on the documentation repo

Additional Notes
This may include an increase in tags that is linear with the number of nodes that is setup in a Consul Cluster.

I'm going to close this request at after discussions this could cause issues by submitting a very large number of service checks over a small number of Agents.

@nmuesch I like the idea of having all nodes in a Consul cluster to send a service check. Would it be possible for each node to send its own service check status? No looping, no checking if is master, just send its own state.

Hey @renan, sorry for the delay on this one. This was primarily closed as it would cause a large number of service checks to be submitted on each check run. Would you mind elaborating on what you're looking for if its different than the above mentioned?


Evolve example project as a multimodule project

Evolve this project as a multimode project.
https://github.com/ev3dev-lang-java/examples
Example:
https://guides.gradle.org/creating-multi-project-builds/
https://spring.io/guides/gs/multi-module/
https://github.com/jitpack/gradle-modular

https://travis-ci.org/ev3dev-lang-java/examples/builds/465308409


getNodeChildDetails callback can't be passed as a React prop

It looks like getNodeChildDetails isn't included in componentUtil's list of function properties, so it only works  when passed in gridOptions.

thanks. will be in next major release. as you say, workaround is gridoptions. sorry if you lost time on this.


Publish ready

Summary
TODO: What does this PR do? (Replace with summary!)
Other Information
TODO (if relevant)
PR Checklist
Please run through before submitting for final review:

[ ] The PR title is descriptive of what changed.
[ ] The description sections above are filled out.
[ ] The CI pipeline is passing
[ ] Added the ready-for-review label to the PR.

Codecov Report

Merging #11 (af8fa75) into main (c89b799) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main      #11   +/-   ##
=======================================
  Coverage   61.01%   61.01%
=======================================
  Files           3        3
  Lines         118      118
  Branches       18       18
=======================================
  Hits           72       72
  Misses         43       43
  Partials        3        3

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 c89b799...af8fa75. Read the comment docs.


Replace java.util.Random with java.security.SecureRandom

This recipe should only be used in security contexts as SecureRandom is considerably slower by default
To do "not harm" we should warn users about the same
See : https://kostenko.org/blog/2019/04/java-spedup-random-generation.html

Hi @yeikel,  Thanks for the reference article,
rewrite-java-security has a SecureRandom recipe, it's optimized to not convert instances in test classes.
Going to close this issue please feel free to re-open it if you have suggestions on how it can be improved.


The license???

Hi,
What type of license is applied to this package? It is not specified here.
Thanks.

Hey @YounessTayer, we'll be applying an MIT license in the next 24 hrs. I've raised a PR here.
https://github.com/pvtl/voyager-page-blocks/pull/8


Aoi need filtering

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Describe the solution you'd like
A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.
aoi.txt

Why is your issue description in an attached txt with the template completely not filled out?


Request body is not consistent across multiple runs ( no portman config changes made across runs )

I have found multiple issues in case of only this particular spec. [ Attached ]
Observation-1
Request body is not consistent across multiple runs even if there is no change in portman configuration.
Observation-2
Assignvariables is not working as expected. Instead of the assignVariable the path variables are replaced by random text.
Observation-3
Inside the requestbody for one of the key which is an array, the items are duplicated. In the spec the example contains one item whereas in the postman collection I noticed two items.
portman-issue.zip

hi @yajiv789
To be able to transform the OpenAPI specification into a Postman collection, it uses some logic to create requests with useable data.
This is the logical cascade on how request values are used/rendered:

If the request body/path/query property has an example sample, this will be taken
If no example sample, the CLI checks if the request body/path/query property has an example value defined, this will be taken
If no example sample or example value, the CLI checks if the request body/path/query property has a default value defined, this will be taken
If the request body/path/query properties has none of the above defined, it will render a random value based on the openapi-to-postman options

So if the conversion does not find the examples/default values, it will render a random value that will be different each time.
To make it consistent across runs, make sure that each property at least has an example value defined OR overwrite them by using the Overwrite options  in Portman.
Under the hood it is using: https://github.com/postmanlabs/openapi-to-postman/blob/develop/OPTIONS.md

schemaFaker(default true): Whether or not schemas should be faked. If you set this to "false" no random values will be generated
requestParametersResolution(default Example): Select whether to generate the response parameters based on the schema or the example in the schema. So by default, Portman will try to use the "Example" values defined; if not then the "SchemaFaker" setting will decide what to do.
exampleParametersResolution (default Example): Select whether to generate the response parameters based on the schema or the example in the schema. So by default, Portman will try to use the "Example" values defined; if not then the "SchemaFaker" setting will decide what to do.

For more information on what these Postman settings do, you can browse the documentation of https://github.com/postmanlabs/openapi-to-postman
You can overwrite the openapi-to-postman options in Portman, like explained in the cli-options example

On observation 3: This is done by the default "schemaFaker" behaviour like explained here: https://github.com/postmanlabs/openapi-to-postman/issues/367#issuecomment-838227884
It is not ideal, but this can be overcome by defining a request body example sample OR by overwriting the whole array using Portman overwrite options.

on observation 2: The assign variables functionality is to set variables in Postman based on the Request responses, so that the request output can be re-used in subsequent requests.
It does not set the variables upfront, for this you can leverage over overwriteRequestPathVariables or environment-variables-as-postman-variables

@thim81  Firstly Thanks alot for the detail explanation.  I have gone through the above info provided by you, I have created the configurations as per the portman documentation.  For rest of my specs it is working as expected but in the case of this specific spec I am facing this issue. It seems like 'allOf' is not handled, but I am not sure though.
Following is the snippet from the full spec.
components:   schemas:     CreatePlan:       **allOf:**         - $ref: "#/components/schemas/PlanContent"       description: A request to create a pricing plan.       required:         - name         - type         - visibility
I have also attached the spec and portman configuration in the first comment. You can execute them to reproduce the observations.

@yajiv789 We have made some improvements on supporting allOff, anyOff since Portman v1.17.0
Could you review if using the latest version, solved your observations?

@thim81 it seems like allOf haven't been resolved too, https://github.com/postmanlabs/openapi-to-postman/issues/390. It's a bug in openapi-to-postman package


Version 2.1.0 is not published on nuget

I notice that on nuget.org the release v2.10 is missing: https://www.nuget.org/packages/Serilog.Sinks.Loki/
Will the package be published on nuget.org?
Thank you

@cagianx Oh goodness, thank you for reminding me! This has now been published and is available on NuGet here.

I'll close this issue, feel free to re-open it if you have any issues.
Thanks!


adapt year in footer

I have seen from another site that this script adapts the year automatically without the need to serve the site each year.

While this does work, I want to move towards removing any inline scripting and this change goes against that objective - see https://github.com/jpanther/congo/discussions/68.

Thanks for your reply.
Just to make sure I understand correctly (sorry if the question is trivial, I am not an expert), this script may compromise security and safety of the website?

The question certainly isn't trivial... and neither is the answer really. This particular change probably isn't a high risk and inline Javascript on the whole isn't 100% bad however there are many considerations. As this is just a one-liner script it's not a great example, but if you can imagine the overall website and consider the trade-offs. One of the main concerns is Javascript can be exploited using many different methods and one of the defences against this is to implement security response headers on your web server.
While there are now quite a few of these headers available, one that is becoming more common is 'Content Security Policy' (CSP) which allows site owners to specify where certain types of assets are permitted to be loaded from. As part of this you can specify that you do not want to permit inline scripting. This has the benefit of preventing a number of possible exploit vectors but unfortunately it also has the side affect of preventing legitimate inline Javascript from being able to run.
Now this is where it's a bit of a trade-off. It's definitely beneficial to be able to set a CSP header and currently the theme doesn't make this easy. The trade-off is that this creates design constraints around how Javascript can be implemented within the theme. You may find it interesting to read more about CSP here. So essentially the change you've proposed isn't in itself risky, but it's more that the architecture of having the inline scripting in the page to begin with is a risk.
I should say this is only the one reason for why you might choose to handle inline scripting a certain way and I'm giving it because it's the main reason behind why I'm trying to avoid it.

Thanks for this complete answer, it makes much more sense now and I’ve learned something!


Fix incorrect CMake library target location with HarfBuzz 8.2.2

Alright, the fix works :)
-- [HarfBuzz]
-- Fixing location: libharfbuzz.0..dylib -> libharfbuzz.0.dylib
-- Version: 8.2.2


18

About the changes

Upgrade to spring boot 2.7.5 and Unleash SDK 7.0.0

Closes #18

Important files

/pom.xml
/springboot-unleash-autoconfigure/pom.xml
/springboot-unleash-starter/pom.xml
Discussion points

I think we need to have a look at our pom to make sure we don't need the gpg key for building. It should only be needed with the release profile active. I'll see if I can't write a PR during this week which addresses this.

I've added #20 to remind myself to move the gpg/release configuration to a release profile.


Can the code be simplified?

Your preprocessing part of the code is very similar to others, can you simplify the parts that aren't used? They seem to have used it.https://github.com/alexzhou907/PVD/

Your preprocessing part of the code is very similar to others, can you simplify the parts that aren't used? They seem to have used it.https://github.com/alexzhou907/PVD/


mockRequest with WebDriver is not intercepting HTTP requests

What are you trying to achieve?
I want to use I.mockRequest with WebDriver on local HTTP mailhog webpage. Clicking 'Inbox (6)' triggers HTTP GET request to this endpoint: 'http://magento2.test:8025/api/v2/messages?limit=50'. After start mocking, if I click this 'Inbox (6)', this API request should be intercepted and '404' should be returned according to my setting:
I.amOnPage('xxx');
I.mockRequest('GET', '/api/v2/messages?limit=50', 404);
I.click('body > div > div > div.col-md-2.col-sm-3 > ul > li:nth-child(2) > a')
In Chrome browser inspector, I'm expecting a '404' response status code.
What do you get instead?
It always gets '200' instead of '404'. It behaves like there is no mocking at all. I did this in interactive debug mode. Screenshot is attached below:

 I.amOnPage('http://magento2.test:8025')
    And I should see order number text
      I am on page "http://magento2.test:8025"
 I.startMocking()
      I start mocking
 I.mockRequest('GET','/api/v2/messages*',400)
      I mock request "GET", "/api/v2/messages*", 400
 I.click('body > div > div > div.col-md-2.col-sm-3 > ul > li:nth-child(2) > a')
      I click "body > div > div > div.col-md-2.col-sm-3 > ul > li:nth-child(2) > a"
 I.mockRequest('GET','/api/v2/messages?limit=50',400)
      I mock request "GET", "/api/v2/messages?limit=50", 400
 I.click('body > div > div > div.col-md-2.col-sm-3 > ul > li:nth-child(2) > a')
      I click "body > div > div > div.col-md-2.col-sm-3 > ul > li:nth-child(2) > a"
 I.

Details

CodeceptJS version: v3.0.2
NodeJS Version: v14.13.1
Operating System: Windows 10
puppeteer || webdriverio || protractor || testcafe version (if related): webdriverio v6.10.0
Configuration file:

    MockRequestHelper: {
      require: '@codeceptjs/mock-request',
    },

package.json:
  "devDependencies": {
    "@codeceptjs/mock-request": "^0.3.0",
    "@pollyjs/adapter-puppeteer": "^5.0.0",
    "@pollyjs/core": "^5.0.0",
    "@wdio/allure-reporter": "^6.5.2",
    "@wdio/browserstack-service": "^6.10.0",
    "@wdio/cli": "^6.10.0",
    "@wdio/selenium-standalone-service": "^6.10.0",
    "codeceptjs": "^3.0.2",
    "global-agent": "^2.1.12",
    "mocha": "^8.1.3",
    "mocha-multi": "^1.1.3",
    "mochawesome": "^6.1.1",
    "mochawesome-merge": "^4.2.0",
    "mochawesome-report-generator": "^5.1.0",
    "puppeteer": "^5.5.0",
    "webdriverio": "^6.10.0"
  },
  "dependencies": {
    "chai": "^4.2.0",
    "codeceptjs-chai": "^2.2.0",
    "dotenv": "^8.2.0",
    "mocha-junit-reporter": "^2.0.0",
    "wdio-browserstack-reporter": "~0.1.1"
  }

I have the same issue.
The only thing is that they say "This helper partially works with WebDriver. It can intercept and mock requests only on already loaded page." and don't provide any real-life example so it's kinda impossible to understand if you are doing things correctly or not.

sorry, webdriver does not support mockRequest natively so if this metod was called before request started it won't intercept request


Continuously asked to log in

I input my username and password, and then it just asks me to log in again. Over and over

fixed by entering 'foo' as username and 'bar' as password


Use AFDKO's fallback values for some OS/2 values

Arguably, these should be set with other "special" fallback values in
fontInfoData.py. However, I like having them all together here so it's
obvious that some rely on others (and they need to be set in a
specific order).
The AFDKO code referenced is at:
https://github.com/adobe-type-tools/afdko/blob/master/FDK/Tools/Programs/makeotf/makeotf_lib/source/hotconv/hot.c
Part of https://github.com/googlei18n/ufo2ft/issues/36. (It would also be nice to set unicodeRanges in OS/2. That's a bit harder, especially since the fallback functions in fontInfoData.py only take in a font info object, which doesn't contain any info about glyphs. It seems to me that we need the glyphs to calculate these ranges.)

LGTM

This is ugly but I guess better than putting zeros in the font...  Should we at least warn if these are missing?

Should we at least warn if these are missing?

I don't know, that may be more of a nuisance than helpful. But I just don't know how common it is for Glyphs/UFO sources to contain these fields (I don't think I've ever seen a source that included them).

Should we at least warn if these are missing?
I don't know, that may be more of a nuisance than helpful. But I just don't know how common it is for Glyphs/UFO sources to contain these fields (I don't think I've ever seen a source that included them).

Given that the default values are almost always wrong (the subscript size, etc might be ok at default, but underline, overstrike, etc cannot be), we want to catch these and find where in Glyphs source they should be defined and encourate those to be defined.

Given that the default values are almost always wrong (the subscript size, etc might be ok at default, but underline, overstrike, etc cannot be), we want to catch these and find where in Glyphs source they should be defined and encourate those to be defined.

Huh. Well this PR was effectively in response to https://github.com/googlei18n/ufo2ft/issues/36. Should the response to that issues instead be, "define that stuff in the source"?

Actually, I don't think there's any way to set these values in the Glyphs interface. So maybe this is something to bring up with Georg.

e.g. underline is done with custom parameters, underlinePosition and underlineThickness.

Huh. Well this PR was effectively in response to #36. Should the response to that issue instead be, "define that stuff in the source"?

I think having same defaults as AFDKO is good.  But that's a fallback and we should make it clear.  If Glyphs does not allow setting these, that's a Glyphs issue indeed.
I'd CC Georg if I could type his github id off the top of my head :)

e.g. underline is done with custom parameters, underlinePosition and underlineThickness.

What about ySubscript*, ySuperscript*, yStrikeout*?

e.g. underline is done with custom parameters, underlinePosition and underlineThickness.

What about ySubscript*, ySuperscript*, yStrikeout*?

Actually, maybe the defaults for these are OK (strikeout uses the underline value). So let's only warn for underline and assume that's fine?

Actually, maybe the defaults for these are OK (strikeout uses the underline value). So let's only warn for underline and assume that's fine?

Something like that.  underline and strikethrough should be defined IMO.  Or simply, whatever Glyphs supports, we should warn if not available.

What about ySubscript*, ySuperscript*, yStrikeout*?

Note these are legacy from type1 and mostly not used anymore (nowadays if you need superscript you put it in the font) so no need to overthink it, imo.

Mozilla uses (wanted to use?) them for positioning fallback superscripts/subscripts since not all fonts provide superscript/subscript glyphs, and found that fonts are very inconsistent about the value they put in there. I think fonts providing sane values here is generally a good idea.


[COD-454] Feat: loosening up ignore correctness to improve performances

COD-454

[x] Ready for review
[x] Linked to Jira ticket

What does this PR do?
This PR improves performances at the cost of loosening up the ignore correctness a bit, without however completely neglecting negative ignores like before.
In the current version (prior to this PR) we initially filter only by the extension patterns returned by the backend, and then for each file we ask our glob matcher if that file should be ignored or not. This leads to exploring every single branch in the file system (e.g. node_modules/**) and to check for each file that it should be ignored before proceeding to the next. This is extremely inefficient as the majority of the branches end up ignored anyway. Also, while exploring the ignored branches, the library "looks stuck" because the updates are emitted only if a valid file is found.
The idea coming from @Arvi3d is that in most cases, negative ignores are just used to exclude a path that was ignored previously, and the length of these exception chains is usually just 2 (even if they could be much longer). Therefore, by manually exploring the negative ignore cases after the main bulk is computed, we should be able to address most of the cases at a reasonable speed.
In this PR:

Split searchFiles so that it uses the positive ignores directly to prune the ignored branches of the file system, and then searches the negative ignores paths and matches them against the backend filters.
Normalyzed the matcher libraries so that just use fast-glob for FS search and multimatch for manual glob matching everywhere.

Technical Debt: the following .gitignore edge case still fails to be correctly addressed (as stated in the tests):
node_module/ <= ignores everything in a node_module folder and it's relative subfolders
!node_module/my_module/ <= excludes the my_module subfolder from the ignore
node_module/my_module/build/ <= re-includes the build subfolder in the ignore
we should explore the possibility to fork the globby library and extend the ignore files (it only natively supports .gitignore files, not .dcignore) to use it directly instead of parsing the ignore files ourselves and then use fast-glob and multimatch.
Where should the reviewer start?
How should this be manually tested?
Any background context you want to provide?
Screenshots
Additional questions

@Arvi3d @shinin-light In general, very cool approach! Nice idea and nice execution.

:tada: This PR is included in version 3.7.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Here is a linux version of your script

Of course livestreamer must be installed, more info here http://docs.livestreamer.io/install.html#linux-and-bsd-packages.
So what changed is the subprocess creation of livestreamer l.50

Im trying to get it running on Ubuntu 16 with Python 3.6.. Could anyone help me to update this code?

I currently use this code:
and get this error: Obtaining the channel...
Obtained the channel
Preparing the processes...
An error has occurred while trying to get the stream data. Is the channel online? Is the channel name correct?
`'''
Copyright 2018
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
'''
import requests
import subprocess
import json
import sys
import multiprocessing
import time
import random
channel_url = "twitch.tv/"
processes = []
def get_channel():
# Reading the channel name - passed as an argument to this script
if len(sys.argv) >= 2:
global channel_url
channel_url += sys.argv[1]
else:
print ("An error has occurred while trying to read arguments. Did you specify the channel?")
sys.exit(1)
def get_proxies():
# Reading the list of proxies
try:
lines = [line.rstrip("\n") for line in open("1.txt")]
except IOError as e:
print ("An error has occurred while trying to read the list of proxies: %s") % e.strerror
sys.exit(1)
return lines

def get_url():
# Getting the json with all data regarding the stream
try:
response = subprocess.Popen(
["livestreamer", "--http-header", "Client-ID=ewvlchtxgqq88ru9gmfp1gmyt6h2b93",
channel_url, "-j"], stdout=subprocess.PIPE).communicate()[0]
except subprocess.CalledProcessError:
print ("An error has occurred while trying to get the stream data. Is the channel online? Is the channel name correct?")
sys.exit(1)
except OSError:
print ("An error has occurred while trying to use livestreamer package. Is it installed? Do you have Python in your PATH variable?")
# Decoding the url to the worst quality of the stream
try:
    url = json.loads(response)['streams']['audio_only']['url']
except:
    try:
        url = json.loads(response)['streams']['worst']['url']
    except (ValueError, KeyError):
        print ("An error has occurred while trying to get the stream data. Is the channel online? Is the channel name correct?")
        sys.exit(1)

return url

def open_url(url, proxy):
# Sending HEAD requests
while True:
try:
with requests.Session() as s:
response = s.head(url, proxies=proxy)
print("Sent HEAD request with %s" % proxy["http"])
time.sleep(20)
except requests.exceptions.Timeout:
print("  Timeout error for %s" % proxy["http"])
except requests.exceptions.ConnectionError:
print("  Connection error for %s" % proxy["http"])
def prepare_processes():
global processes
proxies = get_proxies()
n = 0
if len(proxies) < 1:
    print("An error has occurred while preparing the process: Not enough proxy servers. Need at least 1 to function.")
    sys.exit(1)

for proxy in proxies:
    # Preparing the process and giving it its own proxy
    processes.append(
        multiprocessing.Process(
            target=open_url, kwargs={
                "url": get_url(), "proxy": {
                    "http": proxy}}))

    print('.'),

print('')

if name == "main":
print("Obtaining the channel...")
get_channel()
print("Obtained the channel")
print("Preparing the processes...")
prepare_processes()
print("Prepared the processes")
print("Booting up the processes...")
# Timer multiplier
n = 8

# Starting up the processes
for process in processes:
    time.sleep(random.randint(1, 5) * n)
    process.daemon = True
    process.start()
    if n > 1:
        n -= 1

# Running infinitely
while True:
    time.sleep(1)`