First option gets automatically selected with tags=true

This issue was originally posted here: https://github.com/select2/select2/issues/5516#issuecomment-630942043
To make this easier to follow, I'll also post the original JSFiddle.
The bug is that the first option automatically gets selected if tags: true and you don't have an empty option in the select element.
This behaves similarly when an empty select is used with AJAX, with the main difference being that if there are no returned results from the AJAX endpoint, the actual tag is being selected (as that is the first and only option). Events (like select2:select or change) are not triggered.
The workaround I've found is to have an empty option in the select and a placeholder text.

As is mentioned in the documentation for single selects and placeholders

For single selects only, in order for the placeholder value to appear, you must have a blank  as the first option in your  control. This is because the browser tries to select the first option by default. If your first option were non-empty, the browser would display this instead of the placeholder.

This behaviour of selecting the first option by default, which in this case is the tag option that Select2 automatically creates for you, is not something which Select2 can prevent. The easy solution is to either have an option in your <select> that is empty, which you've noticed already.
For AJAX selects, this empty option should be ignored even when you're not using the placeholder option.


Add support to check version of airfoil

Expected results
Ability to check version of airfoil with airfoil --version
Observed results
Received an error when trying to check the version (I'm on 0.3.0)
Logs
➜ airfoil --version
/Users/austin/.nvm/versions/node/v12.18.3/lib/node_modules/@airship/airfoil/node_modules/gluegun/build/index.js:13
    throw up;
    ^

Error: Couldn't find that command, and no default command set.
    at Command.run (/Users/austin/.nvm/versions/node/v12.18.3/lib/node_modules/@airship/airfoil/node_modules/gluegun/build/runtime/runtime-find-command.js:26:19)
    at Runtime.<anonymous> (/Users/austin/.nvm/versions/node/v12.18.3/lib/node_modules/@airship/airfoil/node_modules/gluegun/build/runtime/run.js:118:58)
    at step (/Users/austin/.nvm/versions/node/v12.18.3/lib/node_modules/@airship/airfoil/node_modules/gluegun/build/runtime/run.js:44:23)
    at Object.next (/Users/austin/.nvm/versions/node/v12.18.3/lib/node_modules/@airship/airfoil/node_modules/gluegun/build/runtime/run.js:25:53)
    at fulfilled (/Users/austin/.nvm/versions/node/v12.18.3/lib/node_modules/@airship/airfoil/node_modules/gluegun/build/runtime/run.js:16:58)

Steps to reproduce

run airfoil --version

The --version flag was intentionally disabled because it clashed with the airfoil version command (which is a different command used for bumping the version of a React Native app).
Recommend setting a defaultCommand which looks like it can be configured to intercept the --version option flag: https://github.com/infinitered/gluegun/blob/master/docs/runtime.md#defaultcommand


[Bug]: When I use the "RAPTOR to enhance retrieval" feature, it reports an error "Model(qwen-plus) not authorized" while parsing the file.

Is there an existing issue for the same bug?

[X] I have checked the existing issues.

Branch name
main
Commit ID
c3b2a1
Other environment information
No response
Actual behavior

If I use RAPTOR to enhance retrieval, I encounter this error, but it does not occur when it is disabled.

I suspect that qwen-plus is being called here.
Expected behavior
No response
Steps to reproduce
In Model Provides. I just add Ollama and OpenAI. Using text-embedding-ada-002 as Embedding model.

Additional information
No response

I suspect that the qwen-plus model is being called at line 59 in the rag/raptor.py file. I hope that RAPTOR should enhance retrieval without unauthorized model errors.

Same issues. I'm using Ollama models for inference, but RAPTOR doesn't seem to automatically switch to them.

Same issues. I'm using Ollama models for inference, but RAPTOR doesn't seem to automatically switch to them. @KevinHuSh

Raptor used LLM in system settings.

Raptor used LLM in system settings.

Thank you, the issue has been resolved.


vsce publish time out

Does this issue occur when all extensions are disabled?: Yes/No

VS Code Version:
OS Version:

Steps to Reproduce:

publish failed:

pack sucessful:

I test it's fine now


Feature request - Smart app info box provide description of functionality

As a user i would want to know what functionality a smart app would provide if I were to input my properties into it.
As such a short description should be able to be provided within the "Info" section of the app.json alongside Author and AppUrl Section

added, FileFlows app is the only app that currently uses this, but just update a app.json to include the info.
For example
{
  "Name": "FileFlows",
  "TestFunction": true,
  "Interval":5,
  "Icon": "icon.svg",
  "Info":{
    "Authors": ["John Andrews"],
    "AppUrl":"https://fileflows.com/",
    "Description": "Shows information from FileFlows including files that are currently processing, files that have been processed.\n\nCan show a carousel for currently processing files.  Bar charts for processed files, or basic information if the size of app is set to medium."
  }
}


Set up compile-fail tests for invalid implementations of De/Serialize

Things like calling Deserializer::deserialize_* more than once, which is now caught by #651.

I trust the compiler enough to believe it won't let us pass ownership of Deserializer to multiple methods.


. and / are replaced

Hi,
Thanks for maintenance.
Just curious about the reason that . and / are replaced with $period$ and $backslash$.
(https://github.com/HIT-SCIR/ELMoForManyLangs/blob/master/elmoformanylangs/gen_elmo.py)
Do they present any bad effects?
Sincerely.

Seems there are no follow-up questions. I will close this issue.


Move CLI Client back to Contribute in left nav of Dev Portal

@Clay-Mysten  can you plz give some context of this change?

@Clay-Mysten can you plz give some context of this change?

Hi Lu, this merely restores the file to navigation (it doesn't appear in nav now) while we sort out the proper location in:
https://github.com/MystenLabs/sui/issues/4305

Closing in favor of:
https://github.com/MystenLabs/sui/pull/4360
https://github.com/MystenLabs/sui/pull/4361


Update Website Launch Month in About

Change March to May

Sorry @KartikChinda the issue has already been assigned to someone.


apps sc & wc: fix ck8s version validate

What this PR does / why we need it:
The version validation now checks if you are at the exact tag/branch rather then just the latest tag.
Which issue this PR fixes
fixes #189
Checklist:

[x] Added relevant notes to WIP-CHANGELOG.md
[x] Proper commit message prefix on all commits
[x]  Some test is done to check if the problem still persists.
[ ] Updated the public facing documentation
Is this changeset backwards compatible for existing clusters? Applying:

[ ] is completely transparent, will not impact the workload in any way.
[ ] requires running a migration script.
[ ] will create noticeable cluster degradation.
E.g. logs or metrics are not being collected or Kubernetes API server
will not be responding while upgrading.
[ ] requires draining and/or replacing nodes.
[x] will change any APIs.
E.g. removes or changes any CK8S config options or Kubernetes APIs.
[ ] will break the cluster.
I.e. full cluster migration is required.

Pipeline config (if applicable)
If you change some config options (e.g. add/rename variable or change the default value) you may need to update the config used by the pipeline in pipeline/config.

Don't edit the PR template. Fill it out instead.

Fixed! :+1:

Don't edit the PR template. Fill it out instead.

Fixed! +1

You checked:
will change any APIs.
E.g. removes or changes any CK8S config options or Kubernetes APIs.

This checkbox should be treated more like "the configuration/API has changed in a way where it's no longer backwards compatible" and this should almost always be mention as a critical release note. While it's true that you have modified the way a configuration value is interpreted the old configuration value will still be valid as long as the user runs from a specific tag which should be the main use case. You should never run from a non-tagged commit if you are not very sure what you are doing or developing. :smile:
Only mentioning this for knowledge sharing purposes, not as a blocker.


Layers how-tos, introduction and explanation

📚 Documentation
Hi all!
I've recently started with a proposal to refactor the Layers tutorials. This includes:

Grouping all the layer how-tos into a "Using layers" section;
Removing duplication of content by creating a "Layers at a glance" document, explaining basic features common to all layers;
Cleaning up links and wording to reflect this new organization.

For this, I assumed the proposed reorganization is the starting point, as well as the new theme, so things look different from what is currently on the main site.
You can see the proposal in this PR.
Feedback and ideas welcome!

@melissawm are there still outstanding items for this one?

Not at this point, if there are any other suggestions we should probably open a new issue. Thanks for the heads up!


No bound JSON API server - your application may not be handling an HTTP request.

Hi, thanks for your great work.
I'm trying to create a Feature test for some routes:
I've defined this one in my api.php route file:
JsonApiRoute::server('v1')
    ->middleware('auth:api')
    ->prefix($api_prefix)
    ->namespace('Api\V1')
    ->resources(function ($server) {
        $server->resource('users')->actions('-actions', function ($actions) {
            $actions->get('profile');
        })->only('profile');
    });

Making the request with a restful client I get a successful answer, but when I'm going to test it following the steps from documentation, I get the No bound JSON API server - your application may not be handling an HTTP request..

This is my TestCase.php file:

And my test file is this:

BTW. I had to bind $this->app->bind(Server::class, ServerServer::class); because I was getting this error:

I'm using a fresh installation of Laravel v8.27 and Pest v1.0.
Thanks.

Sorry, this is pretty difficult for me to debug from the information you've provided.
Can you share the test?
Also, when you're getting an error about there being no bound JSON API server, have you checked the full stack trace? There will be previous exceptions in the stack trace so you'd need to check what they say too.
Also, I have no idea what this is: $this->app->bind(Server::class, ServerServer::class); What do you mean by that?
In summary, the main thing to look at is the full stack trace including previous exceptions as that is likely to give some clue as to what is failing. It's unique to your set up which is why the stack trace is important.

Hi @lindyhopchris thanks for your response.
Action to test:
JsonApiRoute::server('v1')
    ->middleware('auth:api')
    ->prefix('api/v1')
    ->namespace('Api\V1')
    ->resources(function ($server) {
        $server->resource('users')->actions('-actions', function ($actions) {
            $actions->get('profile');
        })->only('profile');
    });

My TestCase file is this one:
<?php

namespace Tests;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use LaravelJsonApi\Testing\MakesJsonApiRequests;

abstract class TestCase extends BaseTestCase
{
    use CreatesApplication, RefreshDatabase, WithoutMiddleware, MakesJsonApiRequests;
}

Te test file is this one:
<?php

use App\Models\User;

test('should show logued user data', function () {
    $user = User::factory()->create();

    $endpoint = '/api/v1/users/-actions/profile';

    $response = $this->actingAs($user)->jsonApi('users')->get($endpoint);

    dd($response);  //For debugging purposes
});

Stack trace result:
LaravelJsonApi\Testing\TestResponse^ {#3953
  +baseResponse: Illuminate\Http\Response^ {#3992
    +headers: Symfony\Component\HttpFoundation\ResponseHeaderBag^ {#3997
      #computedCacheControl: array:2 [
        "no-cache" => true
        "private" => true
      ]
      #cookies: []
      #headerNames: array:3 [
        "content-type" => "Content-Type"
        "cache-control" => "Cache-Control"
        "date" => "Date"
      ]
      #headers: array:3 [
        "content-type" => array:1 [
          0 => "application/vnd.api+json"
        ]
        "cache-control" => array:1 [
          0 => "no-cache, private"
        ]
        "date" => array:1 [
          0 => "Sun, 28 Feb 2021 16:06:20 GMT"
        ]
      ]
      #cacheControl: []
    }
    #content: "{"jsonapi":{"version":"1.0"},"errors":[{"status":"500","title":"Internal Server Error"}]}"
    #version: "1.1"
    #statusCode: 500
    #statusText: "Internal Server Error"
    #charset: null
    +original: "{"jsonapi":{"version":"1.0"},"errors":[{"status":"500","title":"Internal Server Error"}]}"
    +exception: LogicException {#3963
      #message: "No bound JSON API server - your application may not be handling an HTTP request."
      #code: 0
      #file: "./vendor/laravel-json-api/core/src/Core/JsonApiService.php"
      #line: 78
      -previous: Illuminate\Contracts\Container\BindingResolutionException^ {#3979
        #message: "Target [LaravelJsonApi\Contracts\Server\Server] is not instantiable."

        P\Tests\Feature\API\Auth\V1\UserProfileTest->Pest\Factories\{closure}() {}
        ./vendor/pestphp/pest/src/Concerns/TestCase.php:175 { …}
        ./vendor/pestphp/pest/src/Support/ExceptionTrace.php:28 { …}
        ./vendor/pestphp/pest/src/Concerns/TestCase.php:176 { …}
        ./vendor/pestphp/pest/src/Concerns/TestCase.php:164 { …}
        ./vendor/phpunit/phpunit/src/Framework/TestCase.php:1526 { …}
        ./vendor/phpunit/phpunit/src/Framework/TestCase.php:1132 { …}
        ./vendor/phpunit/phpunit/src/Framework/TestResult.php:722 { …}
        ./vendor/phpunit/phpunit/src/Framework/TestCase.php:884 { …}
        ./vendor/phpunit/phpunit/src/Framework/TestSuite.php:677 { …}
        ./vendor/phpunit/phpunit/src/Framework/TestSuite.php:677 { …}
        ./vendor/phpunit/phpunit/src/TextUI/TestRunner.php:667 { …}
        ./vendor/phpunit/phpunit/src/TextUI/Command.php:142 { …}
        ./vendor/pestphp/pest/src/Console/Command.php:130 { …}
        ./vendor/pestphp/pest/bin/pest:44 { …}
        ./vendor/pestphp/pest/bin/pest:45 { …}
      }
    }
  }
  #streamedContent: null
  #document: null
  -expectedType: "users"
}

When you do:
php artisan route:list --path profile

and it lists the action route, what middleware is listed as being registered for that route?

Hi @lindyhopchris

So the BootJsonApi middleware registers the server in the service container.
So I have no idea what's going on in your app I'm afraid.... it's almost impossible for me to debug remotely. Sorry.

Have you disabled middleware in testing at all?

Hi @lindyhopchris .
I've already found some problems, first I was using WithoutMiddleware trait in TestCase.php and second I was using the $this->actingAs() function in the enpoint call, since I'm using Laravel Passport I should've used Passport::actingAs() helper https://laravel.com/docs/8.x/passport#testing.
So sorry for the noise, and thanks for your responses.
Great work!, congrats.


ProxyProtocol connection debug messages have level "info"

Do you want to request a feature or report a bug?

Bug

What did you do?
Enabled ProxyProtocol in traefik and pointed external HAProxy to it

What did you expect to see?
Log with requests with external IP's
What did you see instead?
Four lines per request, one line of actual request logged and three debug lines of level "info":
time="2019-10-21T15:52:04Z" level=info msg="Trusted connection" entryPointName=http
time="2019-10-21T15:52:04Z" level=info msg="Use header remote addr" entryPointName=http
time="2019-10-21T15:52:04Z" level=info msg="Header parsed &{<IP_ADDRESS>:37306 <IP_ADDRESS>:80}" entryPointName=http
<IP_ADDRESS> - - [21/Oct/2019:15:52:04 +0000] "GET / HTTP/1.0" - - "-" "-" 132 - - 0ms

Output of traefik version: (What version of Traefik are you using?)

Version:      2.0.2
Codename:     montdor
Go version:   go1.13.1
Built:        2019-10-09T19:26:05Z
OS/Arch:      linux/amd64

What is your environment & configuration (arguments, toml, provider, platform, ...)?
    entryPoints:
      http:
        address: ':80'
        proxyProtocol:
          trustedIPs:
            - <IP_ADDRESS>/8
    log:
      level: INFO

Closed by #5712.


Add update method to Select control to refresh after adding new values / options

The ability to populate the Select after the document will allow to provide better performance to the initial rendering of the page, when the number of options is very large.
Currently I have a project where the Select control has 4000+ options. If I add all the options when the initial document is loaded, the Select option takes a couple of seconds to prepare. I have experience a similar problem in the past when using the Chosen Jquery plugin for the same task.
I found that a very good solution is to start with an empty Select (no options) and after the document is loaded, used a Javascript options to read a JSON array of values to populate the select.
For example, in Chosen JQuery plugins this is accomplish by triggering the chosen.updated method, that indicates to the control that the structure has change and that it needs to update the rendering of the control.
function loadSelectValues(el, path) {
let dropdown = $(el).chosen();
const curl = window.location + '/' + path;
$.getJSON(url, function(date) {
$.each(data, function(key, entry) {
dropdown.append('' = entry.name + '');
});
 $dropdown.trigger("chosen:updated");

});
}
});
Because this is not currently possible with the Select my only workaround is to try to use CSS stylesheets to try to mimic the look and feel of Metro4 to the Chosen plugin. Would be great to be able to do it with a single library.

use method data from select API https://github.com/olton/Metro4-Docs/tree/master/public_html/examples/ajax


class vs className consumption

After reading https://github.com/developit/preact/issues/103
I would think that this would work:
const componentA = () => {
    return (
        <ComponentB class="yyy">
            Hello World
        </ComponentB>
    )
}

const componentB = () => {
    const { children, className, ...other } = this.props;

    return (

            { children }

    )
};

// Expected output:
Hello World

// Real output:
Hello World

In componentB, className is undefined when componentA passes class as the prop (the preact recommendation), whereas in componentB this.props.class does equal "yyy"
In my understanding, in componentB, I should be able to use this.props.className as well as this.props.class regardless of how the prop is passed in componentA. Am I under the wrong assumption?

Finally, I should mention that Preact will happily consume className props/attributes if you use them. The JSX reviver simply changes the name to class and continues on as it would have if you'd used class.

You can use class or className, whichever you want. But Preact doesn't convert className to class as a property. It accepts both/either for the rendering DOM attribute on plain VDOM elements. See tests.
The props will look exactly as you define them, so it's best to pick one and stay consistent 😄

So if I wanted to make a component that's consumable by both React and Preact, it would be best to check for both properties?

class is only supported in React if you’re using Web Components[1], so if you want maximum interop, I would go with className.
[1] https://reactjs.org/docs/dom-elements.html#classname

Sure, but devs that use Preact get the recommendation to use class instead of classname. It would be unintuitive/inconsistent for them to use classname for this specific component, as opposed to the rest of their app.
So I'm wondering if I should use some pattern like this:
import { h } from 'preact';
import cx from 'classnames';

const ComponentA = ({ class: c1, className: c2, ...other }) => {
    return (

    );
};

export default ComponentA;

This is one of the things preact-compat does that we might want to put into a preact-compat-lite package.
Here's a tiny plugin for Preact that makes className a strict alias of class bidirectionally using a getter/setter pair.  Should solve your problem nicely:
import { options } from 'preact';

const classNameDescriptor = {
	enumerable: true,
	configurable: true,
	get() { return this.class; },
	set(value) { this.class = value; }
};

let old = options.vnode;
options.vnode = vnode => {
	let a = vnode.attributes;
	if (a && a.class) {
		Object.defineProperty(a, 'className', classNameDescriptor);
	}
	if (old) old(vnode);
};

I'm running into a classnames issue with sass modules in Preact:
// Card component
import { h, Component } from "preact";
import cx from "classnames";
import style from "./style";

export const Card = () => {
  return (

  );
};

// in style.scss
.card {
  .image-item {
    margin-bottom: 23px;
  }
}

The specified margin-bottom css does not get applied, any ideas?

@bodaz you need to reference it as style['image-item']:
// Card component
import { h, Component } from "preact";
import cx from "classnames";
import style from "./style";

export const Card = () => {
  return (

  );
};

// in style.scss
.card {
  .image-item {
    margin-bottom: 23px;
  }
}

@developit Agree, I think this belongs into preact-compat, not into core. The issue should be moved there.

Just destructure-rename it:
function InnerView({class: className}) {/* ... */}


Hazel script

I am new with Hazel script stuff. Do you mind to describe the rule you made in Hazel to notify Elodie to do this:
"to set up a Hazel rule to notify me when photos arrive in ~/Downloads so I can import them."
Thanks

Leaving this open to include it in the documentation.
Here's a screenshot of one of my rules. It watches ~/Downloads for photos, waits 1 minute, then processes it. The 1 minute wait is so I have time to move them somewhere else since other apps save to ~/Downloads.
This is the script which executes. Yours may vary depending on where your checked out the source. I checked out to ~/.elodie/elodie.
/Users/jmathai/.elodie/elodie/elodie.py import --file="$1"  --destination="/Users/jmathai/Google Drive/Google Photos" >> /Users/jmathai/.elodie/output.log

Exporting the Hazel script looks to be binary and not text so I can't really post it in the docs. Closing since the screenshot and embedded code should be sufficient.


Updating script with Harmonized Sentinel-2 MSI: MultiSpectral Instrument, Level-1C  and Landsat 9

Hi, I was wondering if these script needs updating as GEE now has Sentinel harmonised data along with collection 2 of Landsat. Just checking. Would be nice to know if there have been any updates in these scripts. Thank you

Unfortunately these scripts are not maintained any more. They probably need to be updated. You're very welcome to contribute to the repo.

did anyone update these codes ? if so, please help.


Service CIDR range and VNET address range

The page says we have to use address range outside the cluster's virtual network.  Is it supposed to mean outside of cluster's virtual network allocation?   We have a scenario where we allocated a /15 to the vnet, the first /16 is used for pod/default subnet.   the second /16 is used for service CIDR.  We are considering reducing the subnet to a /18 and still left 3 x /18 for other purposes.

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

ID: 37ba0343-7e43-6e2e-e564-5d3a0f523a75
Version Independent ID: 0ba581a1-3e4a-27b4-c667-4a9b969a3ade
Content: Configure Azure CNI networking in Azure Kubernetes Service (AKS) - Azure Kubernetes Service
Content Source: articles/aks/configure-azure-cni.md
Service: container-service
GitHub Login: @mlearned
Microsoft Alias: mlearned

@keatseongchan
Thanks for your feedback! We will investigate and update as appropriate.

@keatseongchan
Yes, the address range to be provided to Kubernetes service cluster should be outside the range of the cluster e.g. if you have setup cluster as <IP_ADDRESS>/8, it can be <IP_ADDRESS>/16.
It is clearly stated in the documentation.
The reason for this is that azure networking won't get to know about the assignment of IP range by k8s service and it might cause conflict in IP causing failures or unpredictable behavior.
However if you still want to use the same IP range, I would suggest to use a subnet which can't be overlapped with other resources (effectively assuming the complete IP range is occupied by k8s services and it behaves as independent range itself).
Hope this information clarifies your query.

Thank you Vikas.  Initially, I was not sure if outside of AKS means outside
of the subnet allocated.  We have tested both scenarios and it appears to
work.
On Tue, Jun 9, 2020 at 4:32 AM VikasPullagura-MSFT<EMAIL_ADDRESS>wrote:

@keatseongchan https://github.com/keatseongchan
Yes, the address range to be provided to Kubernetes service cluster should
be outside the range of the cluster e.g. if you have setup cluster as
<IP_ADDRESS>/8, it can be <IP_ADDRESS>/16.
It is clearly stated in the documentation
https://docs.microsoft.com/en-us/azure/aks/configure-azure-cni.
The reason for this is that azure networking won't get to know about the
assignment of IP range by k8s service and it might cause conflict in IP
causing failures or unpredictable behavior.
However if you still want to use the same IP range, I would suggest to use
a subnet which can't be overlapped with other resources (effectively
assuming the complete IP range is occupied by k8s services and it behaves
as independent range itself).
Hope this information clarifies your query.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/MicrosoftDocs/azure-docs/issues/56528#issuecomment-641231344,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AEZUGRAHC2AVFVCOKVMTXELRVYMU5ANCNFSM4NVSXZIQ
.

@keatseongchan Thanks for responding back and confirming on this.
We will now close this issue. If there are further questions regarding this, please tag me in a comment. I will reopen it and we will continue the discussion.


removeAttr('onclick') not working in IE

For hard onclick attribute the current code for removing onclick is not working in IE, resulting in onclick being triggered before the popup appears.
Instead of
$(self).removeAttr('onclick');
Use
$(self).prop("onclick", null);
See advice in https://api.jquery.com/removeAttr/
Cheers
Franck

Thanks, this is fixed on 623515d1c7e4a344cd6e271ce3eefa800c255958
Release : v0.4.3


Interaction of use_state with  tag

Problem: counter always returns to 0, if the button inside  tag (as well as text returns to initial state if it is from input tag)
In my test project use_state does not work correctly with html tag
Steps To Reproduce
I have that code:
html! {

{Search}
       { *counter }

}
onclick Event is connected to function component, which is the past-copy of the counter from Docs: https://yew.rs/docs/getting-started/build-a-sample-app
Environment:

Yew version: [e.g. v0.21, master]
Rust version: [e.g. 1.78.0, stable]
Target: [wasm32-unknown-emscripten]
Build tool: [trunk]
OS, if relevant: [e.g. Windows]
Browser: [Chrome]

are you sure the button is not triggering the submit event of the form and causing the page to refresh?

Hello!
Now I am not shure if this is a bug, but it would be nice to include this information into docs...
I've just tested the example from https://yew.rs/docs/getting-started/build-a-sample-app
But use  tag instead of

Form tag has it's own default behavior and refreshes page after every click. So the counter will be always be 0.
But if we add just one simple line it works fine:

But I couldn't find the information about prevent_default() earlier. So it took me some hours to figured out the problem.

This issue has nothing to do with Yew so I don't see why it should be in Yew's docs. If you had the same code in plain HTML, it wil behave the same way. You'll also experience the same issue as the one described here in React


Add quicktoctree directive for easier prioritised globbed ToC reuse

Fixes

Fixes #1861 by @sarayourfriend
Description

I'm not sure if this is the best solution. However, it's an interesting one, at least. The alternative is really to copy and paste the same toctree options in all the places that use quicktoctree now.
This fixes the ordering problem raised in the issue without reintroducing the need to duplicate the toctree settings everywhere. However, it does so by introducing a custom directive that just extends the base TocTree directive. Maybe that's too clever and we really should just copy/paste those toctree settings everywhere.
Testing Instructions

Try out the new quicktoctree directive and confirm it works identically to toctree except for the new type option which adds the new behaviours.
Checklist

[x] My pull request has a descriptive title (not a vague title likeUpdate index.md).
[x] My pull request targets the default branch of the repository (main) or a parent feature branch.
[x] My commit messages follow best practices.
[x] My code follows the established code style of the repository.
[N/A] I added or updated tests for the changes I made (if applicable).
[x] I added or updated documentation (if applicable).
[x] I tried running the project locally and verified that there are no visible errors.
[N/A] I ran the DAG documentation generator (if applicable).

Developer Certificate of Origin

Developer Certificate of Origin
Developer Certificate of Origin
Version 1.1

Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
1 Letterman Drive
Suite D4700
San Francisco, CA, 94129

Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.

Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I
    have the right to submit it under the open source license
    indicated in the file; or

(b) The contribution is based upon previous work that, to the best
    of my knowledge, is covered under an appropriate open source
    license and I have the right under that license to submit that
    work with modifications, whether created in whole or in part
    by me, under the same open source license (unless I am
    permitted to submit under a different license), as indicated
    in the file; or

(c) The contribution was provided directly to me by some other
    person who certified (a), (b) or (c) and I have not modified
    it.

(d) I understand and agree that this project and the contribution
    are public and that a record of the contribution (including all
    personal information I submit with it, including my sign-off) is
    maintained indefinitely and may be redistributed consistent with
    this project or the open source license(s) involved.

@krysal Can you give this one a review soon? :pray:

Should these be fixed in a different PR?

Yes, those specific errors should be addressed in a different PR as they're not caused by the toc tree issue. They're addressed I think in #855 and/or in #1973 (whichever is merged first).
The others are caused by those directories not including folders within themselves. I'm not sure how best to solve them without defeating the purpose of the quicktoctree "types". I'll do a bit of poking to try and find a workaround. Worst case, we can just use the regular toctree directive for those in the mean time.

Can we still define toctree manually for places that require manual content ordering?

Yes, and quicktoctree still allows you to do so anyway. All it does is automatically add the globbed versions to prevent pages from not being included.
Though, now that I think about it, we could just close this PR and write the toctrees out manually. As annoying as it is to repeat those things, it's only a bulk job once. After that it should be rare outside adding new projects, when it's easy enough to do anyway. Adding new directories doesn't seem like a regular ocurrence and it's easy to handle when it is.
The main goal of this PR was to prevent documents from not being included. But in #1973 we prevent warnings from being committed anyway, so that'll never be an issue going forward after that PR.
I'm going to close this PR and update the toc trees in #1973 to fix this stuff once and for all without needing to write custom extensions :slightly_smiling_face: Thanks for challenging the approach @dhruvkb and @obulat!


[Dynamic Regions] Check if the new peer is already in history record before proposing confchange

Development Task
As title, it should reject adding such peer.
https://github.com/tikv/tikv/blob/1f3e7530caf346e147508457db3bf8e1a96f52d0/components/raftstore-v2/src/operation/command/admin/conf_change.rs#L110

Sure!
You can add a check to fn check_conf_change that rejects adding a new Peer that is already in RegionLocalState.removed_records.
# conf_change.rs:100
         util::check_conf_change(
             &ctx.cfg,
             self.raft_group(),
             self.region(),
+            self.region_state(),
             self.peer(),
             changes.as_ref(),
             &cc,
            self.is_in_force_leader(),
        )?;

fn check_conf_change(...) {
  for cp in change_peers {
    // ...
    if cp.change_type is add_node && cp.peer is in region_state.get_removed_records() {
      return err
    }
    // ...
  }
}

@goku321 are you still looking at this enhancement?

@zzl-7 Yes. I've already made the changes. Will create a PR soon :)


emacs: 25.1 -> 25.2

Motivation for this change
package new Emacs release.
Also update macport to corresponding patchset, and bring some more homogeneity between the two builds.
Things done

[x] Tested using sandboxing
(nix.useSandbox on NixOS,
or option build-use-sandbox in nix.conf
on non-NixOS)
Built on platform(s)

[x] NixOS
[x] macOS
[ ] Linux

[x] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[x] Fits CONTRIBUTING.md.

Also tested successfully with spacemacs config.


html: Avoid unnecessary request

Coverage increased (+1.8%) to 89.157% when pulling 6a690d27557d1be890df0e876ecdc301c10bb422 on html into 8e7abdf289b002f7c229f2c8dfdf34cc4f28ce14 on master.


[BUG] No such host is know

. My Azure search still work with postman but with .NET SDK throw exception No such host is know

@nminhduc Can you please share the code you're using to initialize the SearchServiceClient or SearchIndexClient (whichever is throwing the exception)?

@nminhduc Are you still experiencing this issue? Can you share the code to reproduce it?

Closing this issue since we don't have enough information to reproduce it. @nminhduc, feel free to re-open it if you're still experiencing the issue and can provide more details on how to reproduce it.


[Bug] Xcode build archive fails

[x] I have read the documentation.

Describe the bug
xcodebuild archive fails in the following scenario.
To Reproduce
Steps to reproduce the behavior:

Create a Swift Package, which depends on MetaCodable
Create a Target which depends on MetaCodable, HelperCoders and uses the MetaProtocolCodable plugin.
Include this target as a product of the package
Add types into the target which make use of dynamic data variations, in particular Step 9 from the tutorial: https://swiftpackageindex.com/swiftylab/metacodable/v1.3.0/tutorials/metacodable/dynamic
Create an Xcode project for an iOS app which imports the product from the package.
Add code-signing for your app
Build and Archive from Xcode Product menu (or using xcodebuild archive)

Expected behavior
I should be able to archive the product.
Actual behaviour
Build script fails because build tools cannot find the executable tool ProtocolGen.

Showing All Issues
sandbox-exec: execvp() of '//Users/daniel/Library/Developer/Xcode/DerivedData/Posts-aaxhnzolyyfxrgcsibzfeeijakbj/Build/Intermediates.noindex/ArchiveIntermediates/Posts/BuildProductsPath/Release/ProtocolGen' failed: No such file or directory

Screenshots

Environment (please complete the following information, remove ones not applicable):

OS: macOS
Version 14.4.1 (23E224)
Xcode Version 15.3 (15E204a)
Swift $ swift -version
swift-driver version: <IP_ADDRESS> Apple Swift version 5.10 (swiftlang-<IP_ADDRESS> clang-15<IP_ADDRESS>)
Target: arm64-apple-macosx14.0
CocoaPods N/A

Additional context
I have created a small project to demonstrate this issue: https://github.com/danthorpe/metacodable_demo
A possible solution, would be to export ProtocolGen as a Swift artefact bundle, and reference this as a binary target in your Package.swift. e.g. how SwiftLint is packaged. In this project, on macOS, the dependency is a binary target instead of the source code executable.

@danthorpe this seems more like a bug in Xcode as mentioned here.

i got the same warnngs in xcode 15.4, macbook pro M3, swift version 5.10, i search a workaround is
 #if compiler(>= 5.10)
private import XXX
#else
@_implementationOnly import XXX
#endif

so  when i can resolve these warnings in future release versions of the MetaCodable?

What warnings are you getting @913868456?


Publish 2.0.9 release?

Hello, thanks for your efforts in developing the project!
I was looking forward to trying response validation which is missing at 2.0.8. Instructions on where to get snapshot builds (if you publish them)?

@stevehu Any chance of a 2.0.9 release soon?

I don't know. @GavinChenYan is on vacation and he doesn't have access to the Internet. I think he is about to come back.

@stevehu @GavinChenYan Any update on this? 2.0.9 seems to include a few significant fixes

I understand that we need to have the new version released ASAP. However, we need @GavinChenYan to do that once he is back. Thanks a lot for your patience.


h Indexing in evaluate method

In the .evaluate  of the HierarchicalEvaluation class, it sets h = len(Y_h.loc[Y_h.index[0]]) but when the look ahead period is only 1 period ahead, Y_h.loc[Y_h.index[0]] returns values rather than a dataframe.
The length of these values is then 2 because of the ds column and the forecast column. This then returns an error during the reshape of Y_test here: y_test_cats = Y_test.loc[cats, 'y'].values.reshape(-1, h) because it tries to reshape to 2 even though there is only 1 record.
Would changing  h = len(Y_h.loc[Y_h.index[0]]) to  h = len(Y_h.loc[[Y_h.index[0]]]) with the double brackets to ensure a dataframe is returned work?
Let me know if you need any additional detail or a reproducible example as this is my first issue statement

Hi @jakebajo!
Thank you for explaining the issue. It's clear to me, and your solution should work. We'll be fixing the problem asap. :)

Sounds great thank you!


When testing for setting.WSGI_APPLICATION, catch AttributeError which is raised if setting.WSGI_APPLICATION is set to None

This is my first pull request ever so forgive me if I screwed it up.  The default branch when I checked it
out is develop so I worked on that.  I made a mistake and left a debug line and so had to do two
commits.

Coverage increased (+0.05%) to 64.115% when pulling 62596c9fe7a1ccc8b475757a8a2a2b72d7bb167b on sgbirch:develop into 1e1954b06fe140346acea43582515991685e4e01 on django-ddp:develop.


added static initialization of ydb + moved serverless examples to directory serverless

I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en

Pull request type

Please check the type of change your PR introduces:

[ ] Bugfix
[ ] Feature
[ ] Code style update (formatting, renaming)
[x] Refactoring (no functional changes, no api changes)
[x] Build related changes
[ ] Documentation content changes
[ ] Other (please describe):

What is the current behavior?

Issue Number: N/A
What is the new behavior?

Other information

Wait for newest docker image


Rework next-page component test

Currently, the last test case in the next-page.cy.js intercepts a GET request to assert over the url when the next-page button is clicked:
https://github.com/neurobagel/annotation_tool/blob/cd4a0a4b911a30c66954e1b985b3315939b095b1/cypress/component/next-page.cy.js#L144-L174
However, since next-page.cy,js is a component test, it's better to test the component itself (i.e., it's ability to display elements, fire events, ...) as opposed to how it interacts with the rest of the app.
So this test case needs to be reworked to check whether the responsible mutation is called when the next-page button is clicked.
This came to light when bumping cypress lead to the test failing in #536

While working on this, it was discovered that given the current implementation of the next-page button in next-page.vue where routing is handled implicitly using the to attribute of the b-button element, test cases that involve clicking the next-page button trigger the routing mechanism of the app which leads to cypress waiting on the page load event. However, the page load event is not fired since this is a component test detached and isolated from the app and therefore unaware of app pages.
To remedy this, we're going to remove this test case and decouple the logic of routing from the next-page button in #545


Loot Option not working

First, I want to say I love the work on this. Everything is working as intended except the Loot function.
No matter what I use to try and get it to work, it just doesn't. The command in console doesn't work, the in-game interface shows that it's enabled and color a light blue but doesn't actually work for me, even changing the distance doesn't work.
This mod was installed with your installer for record.

Does not seem to work for me either.

Ok so turn "Loot" on and then in command type "track *" and then all the loot shows up on screen in light blue (or whichever color)?


Re-introduce Ruby 2.3 support and test Jekyll 3.7+

The plugin doesn't use Ruby 2.4 specific syntax. So, the Ruby version constraint can be relaxed to minimum version testable across the ecosystem: Ruby 2.3
Other changes:

Remove superfluous specifications in the gemspec
Test with Jekyll 4.0 pre-release

@jekyllbot: merge +fix


fix pod install failed when Podfile.lock exists

@SomnusLee1988 - thank you for creating this fix!
Can you please join our contributors community by signing JFrog's CLA so that we can merge your code?

OK, I have signed JFrog's CLA. What else do I need to do?

Thanks @SomnusLee1988!
Before we publish the new version, can you pease test and confirm that after building the code, everything works as expected?
You can do this as follows:

git clone https://github.com/jfrog/cocoapods-art.git
cd cocoapods-art
gem build cocoapods_art.gemspec
gem install gen install cocoapods-art-1.0.3.gem
See that the new version works as expected.

Thanks!

Any news about it ? I can help ?

Yeah, I have the same issue as well. Would be great if fixed!

Thank you for the fix.
I tried 1.0.3 out and it fixed the pod install issue, but pod update still doesn't work.
It delivers [!] Unable to find a specification for <any pod>

Any update on this? For the past month, my team has had to delete Podfile.lock everytime they need to update the pods. Would be really great to not have to do this.

@omuntis and @NirPernexus,
We couldn't reproduce the pod update issue with version 1.0.3.
Can you please share a sample project and relevant steps so that we can see the issue?
We've also just published version 1.0.3

Thanks, I updated to 1.0.3 but still have the issue. I'm sure you understand that I can't post source code from my employer. I'll consider creating an empty test project, that showcases the error.
A different option would be to give you the console log, from when I get the error.
Finally, this might turn out to be a Cocoapods issue: https://github.com/CocoaPods/CocoaPods/issues/8540

In my case, it runs well in my local machine, however in the ci.
I tried to
echo -e "machine quibi.jfrog.io\nlogin ${JFROG_USERNAME}\npassword ${JFROG_PASSWORD}" > ~/.netrc
              bundle exec pod repo-art add cocoapods-local "https://xxxxx/api/pods/cocoapods-local"

I will see sh: line 0: cd: /Users/distiller/.cocoapods/repos: No such file or directory
Since this step is run before pod install.
I wonder what is the current order for it. It looks like when we run pod install first, it will still fail because we have not add cocoapods-local. If we do cocoapods-local first, then cocoapods/repos is not existed. Unless we manually create it


GRCh37 variation data cannot be upgraded

Hi, I have been trying to upgrade the GRCh37 genome version variation data but it stalls at
Running GGD recipe: GRCh37 hapmap 3.3
--2022-01-06 11:57:19--<EMAIL_ADDRESS>=> ‘-’
Resolving ftp.broadinstitute.org (ftp.broadinstitute.org)... <IP_ADDRESS>
Connecting to ftp.broadinstitute.org (ftp.broadinstitute.org)|<IP_ADDRESS>|:21... failed: Connection timed out.
Retrying.
--2022-01-06 11:59:28--<EMAIL_ADDRESS>(try: 2) => ‘-’
When I looked at the broadinstitute website, it mentions that this resource is no longer maintained but moved to google cloud -
FTP Server Access
NOTE: FTP Server Access will soon be disabled, and code using FTP file paths must be updated with Google Bucket file paths by June 1, 2020.
The FTP server is intended for people who wish to download files to run on them locally. However, FTP is local to the Broad Institute (there are no mirrors), it has tight limits on concurrent downloads, and users in some countries have reported difficulties accessing it due to e.g. firewalls. For these (and other) reasons, FTP Server Access will be disabled by June 1, 2020.
Instead, please use the resources available in our Google Cloud bucket, and available through our cloud-based analysis portal Terra, in workspaces that are preconfigured for the major Best Practices analysis use cases.
link-https://gatk.broadinstitute.org/hc/en-us/articles/360035890811-Resource-bundle
I manually downloaded the hapmap files but it is not recognizing the files and still stalling on the same step.
Please guide what should be done.
Thanks

Hi @Priyankanator !
Thanks for describing the issue in detail! the FTP server is still working, but, yes, it has connection limit. I've just installed GRCh37 successfully to investigate https://github.com/bcbio/bcbio-nextgen/issues/3599
So, I think, you might just start it and let it run during the night.
If you could dig an exact URL in the google or Azure clouds to use in the recipe for hapmap resource, I would gladly update it! :
https://github.com/chapmanb/cloudbiolinux/blob/master/ggd-recipes/GRCh37/hapmap.yaml
Manual installation is also possible - just process the downloaded file according to the recipe:
https://github.com/chapmanb/cloudbiolinux/blob/master/ggd-recipes/GRCh37/hapmap.yaml#L13
bcbio is looking for two output files
[bcbio-install-dir]/genomes/Hsapiens/GRCh37/variation/hapmap_3.3.vcf.gz
[bcbio-install-dir]/genomes/Hsapiens/GRCh37/variation/hapmap_3.3.vcf.gz.tbi

Also add a line: hapmap,3.3
to [bcbio-install-dir]/genomes/Hsapiens/GRCh37/versions.csv
Sergey

Hi Sergey,
Thanks for replying.
I did tried to download by ftp but it did not worked. Eventually I downloaded the datasets either from gsutil command line or from autheticated link for datasets on google clouds. Bcbio tried for 20 times and then drops as an error for ftp client.
I did then manual installation for most of them. Also, in hg19 version, for GIAB files, it still uses ftp rather than https links.
I think making these changes will lead to a more cleaner upgrades.
Thanks
Priyanka


Add OAuth2 Support for Gitea Remote

cc @6543
Edit: Please note I have not tested this, please test before merging.

I didn't tested it but I think you must add flags in order to get CLIENTID and SECRET
	cli.StringFlag{
		EnvVar: "DRONE_GITEA_CLIENT,WOODPECKER_GITEA_CLIENT",
		Name:   "gitea-client",
		Usage:  "gitea oauth2 client id",
	},
	cli.StringFlag{
		EnvVar: "DRONE_GITEA_SECRET,WOODPECKER_GITEA_SECRET",
		Name:   "gitea-secret",
		Usage:  "gitea oauth2 client secret",
	},

in /cmd/droner-server/flags.go#325

@ygbillet thanks so much for that feedback :) I've just pushed those changes.

@techknowlogick my pleasure.
Good job adding OAuth2 with Gitea.

@laszlocph can you please look at discord :)

Thank you for the contribution @techknowlogick and testing @ygbillet


Added a Dockerfile to automate truffle migration

Compiled truffle, but we'll run the migrate in a swarm or network where we actually wanna migrate.  We'll setup the command in a docker-compose or we'll set the command when we run docker run.

Why exactly do you not run migrate? In the initial setup everything will be local and most likely just a docker-compose or 3-4 individual docker run commands to spawn the whole system.
Wouldn't it be possible to bake the truffle migrate into the image itself?

Because you might wanna pass in --network development.  But, I guess I could make truffle migrate an entrypoint.

I'll defer to @anoff on this one for review

Discussed a bit about this one with @TheOriginalAlex on slack yesterday. I think it would really benefit if we can have a reproducible docker image of Sonar that ships with the contract deployed. That would enable us to hardcode the contract address for the hydrogen milestone making initial setup easier.
@TheOriginalAlex what's your take on this? Should we merge this PR as a first step and start another one? Code-wise this PR LGTM

@anoff: I will come back and address that.

given that we have a followup issue for the desired improvements. I'll go ahead and merge this guy. Great work @TheOriginalAlex !!


"Unknown Error" while decompiling RISC-V binary

Describe the bug
I've been testing the RISC-V decompiler with the following RISC-V binaries:

Both of them are ELF 64-bit, UCB RISC-V, statically linked binary
( To download : Right click --> Save link as --> Remove the .jpg extension )
Ghidra failed to decompile some of the functions ( e.g. main ) in those binaries, showing "Unknown Error" in the decompile window.
For example, in the rrr binary, ghidra failed to decompile the following functions :

__do_global_dtors_aux
print_flag
game
main

The other functions seems to be decompiled normally ( did not check all of them though ).
Same errors occur in hitree as well. At least the main function is not being decompiled.
To Reproduce
Steps to reproduce the behavior:

Create a new non-shared project, drag those binaries into the project.
Ghidra will detect the language as RISCV:LE:64:RV64I (1.2) ( on both binaries ).
Click OK and start analyze ( all options are default ).
Goto the main funtion and check the decompile window.
Decompile window will show "Unknown Error".

Expected behavior
Expected the decompiler work flawlessly.
Screenshots
rrr's main function:

hitree's main function:

Attachments
application.log
Environment

OS: Windows 10
Java Version: 11.0.2
Ghidra Version: 9.2 ( 2020/11/13 )

Ah, looks like the issue is gp most likely.  The RISC-V java analyzer code definitely needs improvement, I only (barely) implemented code to do this.  Calculate the gp off the auipc and addi in the entry function and in functions where gp is used you can right-click and set register values (or ctrl-A and do the whole program).

@mumbel thanks for providing the solution !
Here for the above two binaries, I created a simple workaround script after learning some ghidra python. The script will calculate the value of gp register base on the code in entry() and apply the value to all functions.
However I think this only works in the RV64I language, since I found another RISC-V binary ( RV64GC language ) which will set the gp register in a non-entry function ( entry() will call that function though ).
I think a better way to fix this is to emulate the entry() function with EmulatorHelper ( till it jumps to main() ). Once the value of gp register is confirmed, it then can be applied to the entire binary.

Not sure when the issue was fixed, but have notice that in version 10.3 the issue no longer exist. Closing issue.


Check if going online sets frequency

Since changing the way the main screen works (standby/ONLINE) make sure that we update the VFO frequency only when going ONLINE.  This also means we write the VFO frequency to EEPROM less frequently.
Also when the VFO starts up it should set the display to the saved VFO frequency.  That is, if the display frequency hasn't been written to EEPROM it's lost on power down.

Fixed.


query multiple characters by ID in graphql

Currently, there is no way to pass an array of ids to filter out characters like in the REST API, where you can pass multiple ids as params. Am I missing something?

That's correct. Since character is going to return one character, you can't pass an array of Ids.

I've done a PR that aims to provide this feature 🚀


Add support for rate limiting

Currently blocked on the lack of backing key value store, issue tracked here: #27

I think enabling a true max connections for backend (not on an instance level) label would also require in #27.
@jjcollinge ?

Yup, I'll create a separate issue to track that.


Tool is not working for may 2021 onwards snomed update

Hitting an exception whilst running go.bat
Exception in thread "main" java.lang.RuntimeException: Failed to execute SQL Statement: -- Where the term has been created and there is immediate inactivation indicator
UPDATE rf21_COMPONENTHISTORY ch
-- Either find an inactivation indicator, or work the status out from the description and concept status
SET STATUS = SELECT magicNumberFor(s.linkedComponentId)
FROM rf2_crefset_sv s
WHERE s.refsetId = @DESC_INACT_RS
AND s.active = 1
AND s.referencedComponentId = ch.componentId
AND s.effectiveTime = ch.releaseVersion
WHERE isConcept = false
AND changeType = @ADDED
AND EXISTS (
SELECT 1 FROM rf2_crefset_sv s
WHERE s.refsetId = @DESC_INACT_RS
AND s.active = 1
AND s.referencedComponentId = ch.componentId
AND s.effectiveTime = ch.releaseVersion)
at org.ihtsdo.snomed.rf2torf1conversion.DBManager$StatementRunner.run(DBManager.java:194)
at org.ihtsdo.snomed.rf2torf1conversion.DBManager.runStatement(DBManager.java:159)
at org.ihtsdo.snomed.rf2torf1conversion.DBManager.executeResource(DBManager.java:95)
at org.ihtsdo.snomed.rf2torf1conversion.ConversionManager.convert(ConversionManager.java:490)
at org.ihtsdo.snomed.rf2torf1conversion.ConversionManager.doRf2toRf1Conversion(ConversionManager.java:288)
at org.ihtsdo.snomed.rf2torf1conversion.ConversionManager.main(ConversionManager.java:206)
Caused by: org.h2.jdbc.JdbcSQLException: Scalar subquery contains more than one row; SQL statement:
-- Where the term has been created and there is immediate inactivation indicator
UPDATE rf21_COMPONENTHISTORY ch
-- Either find an inactivation indicator, or work the status out from the description and concept status
SET STATUS = SELECT magicNumberFor(s.linkedComponentId)
FROM rf2_crefset_sv s
WHERE s.refsetId = @DESC_INACT_RS
AND s.active = 1
AND s.referencedComponentId = ch.componentId
AND s.effectiveTime = ch.releaseVersion
WHERE isConcept = false
AND changeType = @ADDED
AND EXISTS (
SELECT 1 FROM rf2_crefset_sv s
WHERE s.refsetId = @DESC_INACT_RS
AND s.active = 1
AND s.referencedComponentId = ch.componentId
AND s.effectiveTime = ch.releaseVersion) [90053-193]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
at org.h2.message.DbException.get(DbException.java:179)
at org.h2.message.DbException.get(DbException.java:155)
at org.h2.message.DbException.get(DbException.java:144)
at org.h2.expression.Subquery.getValue(Subquery.java:39)
at org.h2.command.dml.Update.update(Update.java:121)
at org.h2.command.CommandContainer.update(CommandContainer.java:98)
at org.h2.command.Command.executeUpdate(Command.java:258)
at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:184)
at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:158)
at org.ihtsdo.snomed.rf2torf1conversion.DBManager$StatementRunner.run(DBManager.java:183)
... 5 more

Hi @NaveenSatheesh thanks for getting in touch.   I didn't realise that anyone was still using this tool.  I see I've not touched it since 2018.  The tool continues to become more obsolete as we've moved to using OWL for our stated form in 2019, and with the move to include support for Concrete Values in the July 2021 edition, the inferred view will now be incomplete.
I highly recommend that you look at moving to use the RF2 format, which has been available since 2011.


position is valid at the point the trade was made, not when it was inserted

use trade's creation time as valid_from time for position 'update'


add missing torch requirement #246 #253

Close #246 #253 #284

@tridao This would help a lot if merged: https://github.com/HazyResearch/flash-attention/issues/246

I had to remove pyproject.toml for now since I couldn't find a way to add torch as a build dependencies that work for everyone.


feat(substrait): modular substrait consumer

Note: When reviewing this PR I would recommend hiding whitespace changes.
Which issue does this PR close?
Initial work for https://github.com/apache/datafusion/issues/13318
Rationale for this change
Improves the reusability of the Substrait consumer for users that utilize user-defined extensions and types.
I should note that this PR represents an approach to the problem, but is not necessarily the only way we could handle it. I'm very open to feedback on the approach.
What changes are included in this PR?

Relation and expression handling code has been extracted into a series of from_substrait_* functions (i.e. from_filter_rel, from_scalar_function) to aid re-use.
A SubstraitConsumer trait has been introduced with default methods that handle relations and expression using the above functions.
The SubstraitConsumer trait also includes methods for handling extension relations (i.e consume_extension_single) along with user-defined types (consume_user_defined_type, consume_user_defined_literal).
All conversion methods take as their first argument an &impl SubstraitConsumer.
The role of SubstraitPlanningState has been subsumed into the SubstraitConsumer.

Are these changes tested?
These changes refactor existing code and leverage their tests.
A doc comment has been added to show how the SubstraitConsumer trait can be implemented by users.
Are there any user-facing changes?
Yes.
The top-level from_substrait_plan(state, plan) function now takes a &SessionState as its first argument, instead of &dyn SubstraitPlanningState. The same is true for from_substrait_extended_expr. These two functions are the primary external facing APIs for intiation a conversion.
A number of functions like from_substrait_rel, from_substrait_rex, etc have had their API changed to make the first argument &impl SubstraitConsumer, and remove all state: &dyn SubstraitPlanningState and extensions: &Extensions arguments.

@Blizzara I would appreciate if you could take a look and let me know if this approach seems reasonable, or if I've architecture astronauted myself.

@Blizzara I would appreciate if you could take a look and let me know if this approach seems reasonable, or if I've architecture astronauted myself.

Thanks for the ping - I took a look, and overall looks really good to me! I left couple thoughts (I see you already saw some), but nothing major. I already have usecase in mind for this internally, so looking forward to getting it merged 😄
One thing is we should consider splitting the consumer.rs into smaller files. It could be a separate PR to keep the diff smaller, but maybe moving all the static "consumer_X" functions into like consumer/relations.rs, consumer/expressions.rs, consumer/literals.rs and consumer/types.rs (and one more for utils etc) or similar? Feels like now could be a good moment to do that.

@Blizzara

One thing is we should consider splitting the consumer.rs into smaller files. It could be a separate PR to keep the diff smaller, but maybe moving all the static "consumer_X" functions into like consumer/relations.rs, consumer/expressions.rs, consumer/literals.rs and consumer/types.rs (and one more for utils etc) or similar? Feels like now could be a good moment to do that.

I think it makes sense to do that, and I'm happy to own it, but I would prefer to do that as a followup. I structured the consumer.rs changes in order to make it easy to see that the functions I added were extracted from the big from_substrait_rel and from_substrait_rex switch statements.

I think it makes sense to do that, and I'm happy to own it, but I would prefer to do that as a followup. I structured the consumer.rs changes in order to make it easy to see that the functions I added were extracted from the big from_substrait_rel and from_substrait_rex switch statements.

Yup, I totally agree!
I looked through the latest changes, looks even better now, just some more comments re SubstraitPlanningState but otherwise this looks very good by me!

I'll plan to merge this tomorrow unless anyone would like some more time to review

FYI @ccciudatu


Configure from section in pyproject.toml

It would be great for Python projects if git-cliff could be configured from pyproject.toml as can be done for Rust projects in Cargo.toml (implemented in #46). I think the implementation would require minimal additional changes.
The docs give this as an example for Rust projects:
[package]
name = "..."
[dependencies]
# ...
[package.metadata.git-cliff.changelog]
header = "All notable changes to this project will be documented in this file."
body = "..."
footer = "<!-- generated by git-cliff -->"
# see [changelog] section for more keys
[package.metadata.git-cliff.git]
conventional_commits = true
commit_parsers = []
filter_commits = false
# see [git] section for more keys

pyproject.toml would look like:
name = "..."

[project]
dependencies = []

[tool.git-cliff.changelog]
header = "All notable changes to this project will be documented in this file."
body = "..."
footer = "<!-- generated by git-cliff -->"
# see [changelog] section for more keys
[tool.git-cliff.git]
conventional_commits = true
commit_parsers = []
filter_commits = false
# see [git] section for more keys

The format of pyproject.toml is detailed in PEP621 and the [tool] table is described in PEP518.
Looking at the implementation in https://github.com/orhun/git-cliff/commit/f48d2077c33b878337edc2e5fe8a97be990b4773 it seems that you could add a regex to support this:
/// Regex for matching the metadata in Cargo.toml
const CARGO_METADATA_REGEX: &str =
	r"^\[(?:workspace|package)\.metadata\.git\-cliff\.";

/// Regex for matching the metadata in pyproject.toml
const PYPROJECT_METADATA_REGEX: &str =
	r"^\[(?:tool)\.git\-cliff\.";

That's actually a great idea! Let's proceed with the implementation.

Implemented in #147


Mac user to verify Tip69

Need a Mac user to validate Ruby Tip69 "How To Use Safari" (link). (Related to issue #60 "Validated Beginner Tips in Ruby")

[ ] Technical content validated
[ ] Copy content validated
[ ] New directory and markdown file uploaded to updated tips folder
[ ] Old directory and markdown file deleted from nonupdated tips folder

@aquaomarine will check


The requested URL /apps/1234/events was not found on this server.

I created an event which implements ShouldBrodcast but form some reason when I launch the event I got the error:
The requested URL /apps/1234/events was not found on this server.
I already setup the package with the next credentials:
PUSHER_APP_ID=123456
PUSHER_APP_KEY=ABCDEF
PUSHER_APP_SECRET=GHIJKL
PUSHER_APP_CLUSTER=mt1
And when I enter to the websockets dashboard it's working.
I hope you can help me out here

Buenas, cual fue la solución a tu problema ?


Add x86_64_linux bottle on linuxbrew-core

Summary
x86_64_linux bottle isn't defined on linuxbrew-core
Use Cases

Install argo on Linux with brew command line without compiling

Message from the maintainers:
Impacted by this bug? Give it a 👍. We prioritise the issues with the most 👍.

I did not know brew worked on Linux.
We update as follows:
brew bump-formula-pr argo --version 2.11.5

The formula is here:
https://github.com/Homebrew/homebrew-core/blob/master/Formula/argo.rb
Would you like to submit a PR to change it?

PR https://github.com/Homebrew/linuxbrew-core/pull/23282

PR done, waiting for merge

PR merged


Consistency check possible removal of legitime flow

I was running a few tests in disruptive scenarios (i.e., scenarios with link failures/flaps) and with a bunch of EVCs (around 100 EVCs) and everything worked as expected, except for one test in which one EVC didn't work as expected (after the failed link return to its normal state - UP - the end user started seen packet loss).
The test consists of the following workflow:

100 EVCs are created using dynamic path
After the creation of the EVCs, we start a PING connectivity test between the endpoints of each EVC
A few seconds later, the link 00:00:00:00:00:00:00:01:11--00:00:00:00:00:00:00:06:11 goes down
60 seconds later, the link 00:00:00:00:00:00:00:01:11--00:00:00:00:00:00:00:06:11 come up
ping keeps running for more 30 seconds and the test finishes.

Due to a problem in the way link down events are being handled by mef_eline, the EVC does not actually gets moved to the backup path during the link failure. However, after the link has come UP again, mef_eline runs a reprovisioning on the EVC and setup new flows (actually, at this point mef_eline was still running the loop over the EVCs affected by the link failure.. so that, the reprovisioning of the EVC will be through the same path, but now using different service vlans).
Below is a sequence of filtered log messages showing the behavior in terms of mef_eline (evc creation and reprovisioning), of_core (interface down and up) and flow_manager (flows creation, removal and consistency check):
# zcat /var/log/kytos/kytos.log-20220203012301.gz | egrep "12319557280506940481|f7dc1326b18c41|Consistency check:|Modified"
##
## Note: below is the EVC creation
##
2022-02-03 06:27:16,977 - INFO [kytos.napps.kytos/flow_manager] (Thread-916) Send FlowMod from request dpid: 00:00:00:00:00:00:00:01, command: delete, force: True, flows_dict: {'flows': [{'cookie':<PHONE_NUMBER>0506940481, 'cookie_mask':<PHONE_NUMBER>3709551615}], 'force': True}
2022-02-03 06:27:17,202 - INFO [kytos.napps.kytos/flow_manager] (Thread-917) Send FlowMod from request dpid: 00:00:00:00:00:00:00:06, command: delete, force: True, flows_dict: {'flows': [{'cookie':<PHONE_NUMBER>0506940481, 'cookie_mask':<PHONE_NUMBER>3709551615}], 'force': True}
2022-02-03 06:27:17,259 - INFO [kytos.napps.kytos/mef_eline] (Thread-915) EVC f7dc1326b18c41 was synced to the storehouse.
2022-02-03 06:27:17,418 - INFO [kytos.napps.kytos/flow_manager] (Thread-919) Send FlowMod from request dpid: 00:00:00:00:00:00:00:01, command: add, force: False, flows_dict: {'flows': [{'match': {'in_port': 16, 'dl_vlan': 1149}, 'cookie':<PHONE_NUMBER>0506940481, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 's'}, {'action_type': 'set_vlan', 'vlan_id': 859}, {'action_type': 'output', 'port': 11}]}, {'match': {'in_port': 11, 'dl_vlan': 859}, 'cookie':<PHONE_NUMBER>0506940481, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 'c'}, {'action_type': 'set_vlan', 'vlan_id': 1149}, {'action_type': 'output', 'port': 16}]}], 'force': False}
2022-02-03 06:27:17,870 - INFO [kytos.napps.kytos/flow_manager] (Thread-920) Send FlowMod from request dpid: 00:00:00:00:00:00:00:06, command: add, force: False, flows_dict: {'flows': [{'match': {'in_port': 21, 'dl_vlan': 1149}, 'cookie':<PHONE_NUMBER>0506940481, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 's'}, {'action_type': 'set_vlan', 'vlan_id': 859}, {'action_type': 'output', 'port': 11}]}, {'match': {'in_port': 11, 'dl_vlan': 859}, 'cookie':<PHONE_NUMBER>0506940481, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 'c'}, {'action_type': 'set_vlan', 'vlan_id': 1149}, {'action_type': 'output', 'port': 21}]}], 'force': False}
2022-02-03 06:27:18,451 - INFO [kytos.napps.kytos/mef_eline] (Thread-915) EVC f7dc1326b18c41 was synced to the storehouse.
2022-02-03 06:27:18,466 - INFO [kytos.napps.kytos/mef_eline] (Thread-915) EVC(f7dc1326b18c41, my evc 1149) was deployed.
##
## Note: Link goes down
##
2022-02-03 06:28:51,760 - INFO [kytos.napps.kytos/of_core] (ThreadPoolExecutor-0_31) Modified Interface('novi_port_11', 11, Switch('00:00:00:00:00:00:00:01')) 00:00:00:00:00:00:00:01:11
2022-02-03 06:28:51,821 - INFO [kytos.napps.kytos/of_core] (ThreadPoolExecutor-0_1) Modified Interface('novi_port_11', 11, Switch('00:00:00:00:00:00:00:06')) 00:00:00:00:00:00:00:06:11
...
##
## Note: Link come up again
##
2022-02-03 06:29:55,311 - INFO [kytos.napps.kytos/of_core] (ThreadPoolExecutor-0_8) Modified Interface('novi_port_11', 11, Switch('00:00:00:00:00:00:00:06')) 00:00:00:00:00:00:00:06:11
2022-02-03 06:29:55,416 - INFO [kytos.napps.kytos/of_core] (ThreadPoolExecutor-0_21) Modified Interface('novi_port_11', 11, Switch('00:00:00:00:00:00:00:01')) 00:00:00:00:00:00:00:01:11
##
## Note: mef_eline path  reprovision for the EVC
##
2022-02-03 06:30:38,073 - INFO [kytos.napps.kytos/flow_manager] (Thread-1265) Send FlowMod from request dpid: 00:00:00:00:00:00:00:01, command: delete, force: True, flows_dict: {'flows': [{'cookie':<PHONE_NUMBER>0506940481, 'cookie_mask':<PHONE_NUMBER>3709551615}], 'force': True}
2022-02-03 06:30:38,298 - INFO [kytos.napps.kytos/flow_manager] (Thread-1266) Send FlowMod from request dpid: 00:00:00:00:00:00:00:06, command: delete, force: True, flows_dict: {'flows': [{'cookie':<PHONE_NUMBER>0506940481, 'cookie_mask':<PHONE_NUMBER>3709551615}], 'force': True}
2022-02-03 06:30:38,591 - INFO [kytos.napps.kytos/mef_eline] (ThreadPoolExecutor-0_13) EVC f7dc1326b18c41 was synced to the storehouse.
2022-02-03 06:30:38,779 - INFO [kytos.napps.kytos/flow_manager] (Thread-1268) Send FlowMod from request dpid: 00:00:00:00:00:00:00:01, command: add, force: False, flows_dict: {'flows': [{'match': {'in_port': 16, 'dl_vlan': 1149}, 'cookie':<PHONE_NUMBER>0506940481, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 's'}, {'action_type': 'set_vlan', 'vlan_id': 1455}, {'action_type': 'output', 'port': 11}]}, {'match': {'in_port': 11, 'dl_vlan': 1455}, 'cookie':<PHONE_NUMBER>0506940481, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 'c'}, {'action_type': 'set_vlan', 'vlan_id': 1149}, {'action_type': 'output', 'port': 16}]}], 'force': False}
2022-02-03 06:30:39,071 - INFO [kytos.napps.kytos/flow_manager] (Thread-1269) Send FlowMod from request dpid: 00:00:00:00:00:00:00:06, command: add, force: False, flows_dict: {'flows': [{'match': {'in_port': 21, 'dl_vlan': 1149}, 'cookie':<PHONE_NUMBER>0506940481, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 's'}, {'action_type': 'set_vlan', 'vlan_id': 1455}, {'action_type': 'output', 'port': 11}]}, {'match': {'in_port': 11, 'dl_vlan': 1455}, 'cookie':<PHONE_NUMBER>0506940481, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 'c'}, {'action_type': 'set_vlan', 'vlan_id': 1149}, {'action_type': 'output', 'port': 21}]}], 'force': False}
2022-02-03 06:30:39,964 - INFO [kytos.napps.kytos/mef_eline] (ThreadPoolExecutor-0_13) EVC f7dc1326b18c41 was synced to the storehouse.
2022-02-03 06:30:40,122 - INFO [kytos.napps.kytos/mef_eline] (ThreadPoolExecutor-0_13) EVC(f7dc1326b18c41, my evc 1149) was deployed.
##
## Note: flow_manager consistency routine
##
2022-02-03 06:30:41,051 - INFO [kytos.napps.kytos/flow_manager] (ThreadPoolExecutor-0_32) Consistency check: alien flow on switch 00:00:00:00:00:00:00:06
2022-02-03 06:30:41,108 - INFO [kytos.napps.kytos/flow_manager] (ThreadPoolExecutor-0_32) Flow forwarded to switch 00:00:00:00:00:00:00:06 to be deleted. Flow: {'flows': [{'switch': '00:00:00:00:00:00:00:06', 'table_id': 0, 'match': {'in_port': 21, 'dl_vlan': 1149}, 'priority': 32768, 'idle_timeout': 0, 'hard_timeout': 0, 'cookie':<PHONE_NUMBER>0506940481, 'id': '13ef7612927e97f13d3f1942ff3cdf71', 'stats': {'byte_count': 320166, 'duration_sec': 198, 'duration_nsec': 426511681, 'packet_count': 2541}, 'cookie_mask': 0, 'instructions': [{'instruction_type': 'apply_actions', 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 's'}, {'vlan_id': 859, 'action_type': 'set_vlan'}, {'port': 11, 'action_type': 'output'}]}]}]}
2022-02-03 06:30:41,146 - INFO [kytos.napps.kytos/flow_manager] (ThreadPoolExecutor-0_32) Consistency check: alien flow on switch 00:00:00:00:00:00:00:06
2022-02-03 06:30:41,305 - INFO [kytos.napps.kytos/flow_manager] (ThreadPoolExecutor-0_32) Flow forwarded to switch 00:00:00:00:00:00:00:06 to be deleted. Flow: {'flows': [{'switch': '00:00:00:00:00:00:00:06', 'table_id': 0, 'match': {'in_port': 11, 'dl_vlan': 859}, 'priority': 32768, 'idle_timeout': 0, 'hard_timeout': 0, 'cookie':<PHONE_NUMBER>0506940481, 'id': '9dc8c461eb1e6befea3cc50e303f8d58', 'stats': {'byte_count': 320166, 'duration_sec': 198, 'duration_nsec': 369709443, 'packet_count': 2541}, 'cookie_mask': 0, 'instructions': [{'instruction_type': 'apply_actions', 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 'c'}, {'vlan_id': 1149, 'action_type': 'set_vlan'}, {'port': 21, 'action_type': 'output'}]}]}]}
2022-02-03 06:30:41,349 - INFO [kytos.napps.kytos/flow_manager] (ThreadPoolExecutor-0_32) Consistency check: alien flow on switch 00:00:00:00:00:00:00:06
2022-02-03 06:30:41,460 - INFO [kytos.napps.kytos/flow_manager] (ThreadPoolExecutor-0_32) Consistency check: alien flow on switch 00:00:00:00:00:00:00:06
2022-02-03 06:30:43,314 - INFO [kytos.napps.kytos/flow_manager] (ThreadPoolExecutor-0_32) Consistency check: missing flow on switch 00:00:00:00:00:00:00:06.

The above log messages show the situation described before. It is important to notice the last set of messages: the ones related to the "flow_manager consistency routine". As discussed before, mef_eline takes longer to react to the link failure for this EVC, and it ends up using the same (recovered) path but with different service-vlans. The customer VLAN is 1149, and previous service VLAN was 859 while the new service VLAN is  1455. Everything should be working at the time 2022-02-03 06:30:40,122 (when the evc was reprovisioned). However, at 2022-02-03 06:30:41,051  the flow_manager consistency routine identifies alien flows at the switch 00:00:00:00:00:00:00:06 and sends out a FlowMod Remove. The problem is at the first flow removal, where the match conditions are the same as the correct flow at the switch. Unfortunately, the there is no evidence in the logs about the consistency check fixing this mistake. However, a dump of the switch's flow_table at the end of the test reveals that indeed switch 00:06 have one flow missing:
$ grep -A 10 f7dc1326b18c41 dump-flowtable-20220203012301-xxx.xxx.xxx.229
        Cookie           = aaf7dc1326b18c41
        Send_flow_rem    = true
        Persistent       = false
        [MATCHFIELDS]
            OFPXMT_OFB_IN_PORT = 11
            OFPXMT_OFB_VLAN_VID = 1455(OFPVID_PRESENT=1)
        [INSTRUCTIONS]
            [OFPIT_APPLY_ACTIONS]
                 [ACTIONS]
                    [OFPAT_POP_VLAN]
                    [OFPAT_PUSH_VLAN]

I've tried to extract the flow.persistency objects from storehouse for this execution, however due to another issue (#67) it was not readable.

@italovalcy I'm suspecting that this might have been a side effect of storehouse being corrupted, and the _add_flow_store method when calling storehouse.save_flow event crashed and didn't even return an error? and it also has some shared data being passed around, not sure which value that could end up. For instance, in the log above we don't see any log messages from the save_flow_callback method such as:
[kytos.napps.kytos/flow_manager] (ThreadPoolExecutor-0_1) Flow saved in kytos.flow.persistence.f096a6aae17048afbd38d1914b492879

or:
log.error(f"Can't update persistence box {data.box_id}.")

With that being said, it makes sense that it would consider an alien and delete it since what was being written to the storehouse wasn't functioning properly, although having this silent sort of crash also sucks. It would be cool to try to reproduce this again once #67 lands and decide what to do and prioritize next, thanks for reporting this.

@viniarck, thanks for the analysis and the suggestions! Yes, it does make total sense, and I agree with you. I wanna add an extra comment regarding the detection of alien flows: since there was a "recent" flow removal by cookie-id (see logs at 2022-02-03 06:30:38,073  and 2022-02-03 06:30:38,298), the consistency check routine could benefit from that and avoid sending a new flow_removal for the "alien flow". That way, the EVC will remain consistent in the flow table. Without this optimization, we will see a flow_removal from the alien detection followed by a flow add from the missing flow detection.
I was able to reproduce this behavior with the following test:

Run Kytos-ng with docker image amlight/kytos:latest
Run Mininet with a ring topology:

# cat ring.py
from mininet.topo import Topo

class RingTopo(Topo):
    """Ring topology with three switches
    and one host connected to each switch"""

    def build(self):
        # Create two hosts
        h1 = self.addHost('h1', ip='<IP_ADDRESS>')
        h2 = self.addHost('h2', ip='<IP_ADDRESS>')
        h3 = self.addHost('h3', ip='<IP_ADDRESS>')

        # Create the switches
        s1 = self.addSwitch('s1')
        s2 = self.addSwitch('s2')
        s3 = self.addSwitch('s3')

        # Add links between the switch and each host
        self.addLink(s1, h1)
        self.addLink(s2, h2)
        self.addLink(s3, h3)

        # Add links between the switches
        self.addLink(s1, s2)
        self.addLink(s2, s3)
        self.addLink(s3, s1)

topos = {
    'ring': (lambda: RingTopo()),
}

# mn --custom ring.py --topo ring --controller=remote,ip=<IP_ADDRESS>

Change flow_stats interval in /src/kytos-of-core/settings.py with STATS_INTERVAL = 15 and restart kytos
Create a few EVCs (I've created 100 EVCs) between h1 and h2:

for vlan in $(seq 401 500); do curl -H 'Content-type: application/json' -X POST http://<IP_ADDRESS>:8181/api/kytos/mef_eline/v2/evc -d '{"name": "evc-vlan-'$vlan'", "dynamic_backup_path": true, "enabled": true, "uni_z": {"tag": {"value": '$vlan', "tag_type": 1}, "interface_id": "00:00:00:00:00:00:00:01:1"}, "uni_a": {"tag": {"value": '$vlan', "tag_type": 1}, "interface_id": "00:00:00:00:00:00:00:02:1"}}'; done

Wait a few seconds to get the flows created and disable the link s1--s2, to force the reprovisioning of the EVCs (now through s1-s3-s2):

ip link set down dev s1-eth2 && sleep 30 && ip link set up dev s1-eth2

Monitor the EVCs to make sure they are operational (i.e., they have the proper number of flows). I used the following script:

# s=s1; for vlan in $(seq 401 500); do if [ $(ovs-ofctl dump-flows $s | egrep "in_port=1,dl_vlan=$vlan |vlan_vid:$vlan,output:1" | wc -l) -ne 2 ]; then echo missing flows for $vlan on switch $s -- current flows = $(ovs-ofctl dump-flows $s | egrep "in_port=1,dl_vlan=$vlan |vlan_vid:$vlan,output:1"); fi; done

# s=s2; for vlan in $(seq 401 500); do if [ $(ovs-ofctl dump-flows $s | egrep "in_port=1,dl_vlan=$vlan |vlan_vid:$vlan,output:1" | wc -l) -ne 2 ]; then echo missing flows for $vlan on switch $s -- current flows = $(ovs-ofctl dump-flows $s | egrep "in_port=1,dl_vlan=$vlan |vlan_vid:$vlan,output:1"); fi; done
missing flows for 439 on switch s2 -- current flows   = cookie=0xaaac2133b837bb4d, duration=56.868s, table=0, n_packets=0, n_bytes=0, idle_age=56, in_port=2,dl_vlan=1975 actions=strip_vlan,mod_vlan_vid:439,output:1

The above scenario may not happen in the first execution. In fact, I had to repeat the above test a few times to get into that situation (reducing the FLOW_STATS interval helped).
The situation shown above was caused by a unnecessary flow_removal sent by flow_manager as part of the consistency check (alien flow detected). After a few seconds, the missing flow will be recreated, as part of the consistency routine. Maybe we could optimize the above situation by avoiding send flow_removal for "recently removed flows" (whey they match each other, of course).
The logs for the above situation are shown below:
## Notice: first I filter by the time interval in which the error happened (this is the file "last-event"
# egrep "^Feb  4 21:03:0[1-9]|^Feb  4 21:03:[1-9]|^Feb  4 21:04:" /var/log/syslog > last-event
# egrep "12319564338740338244|f7e27e86301e44|Consistency" last-event
Feb  4 21:03:01 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:01
Feb  4 21:03:02 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:01
Feb  4 21:03:03 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:02
Feb  4 21:03:03 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:02
Feb  4 21:03:16 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:01
Feb  4 21:03:16 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:01
Feb  4 21:03:18 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:401:  Consistency check: missing flow on switch 00:00:00:00:00:00:00:02.
Feb  4 21:03:33 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:02
Feb  4 21:03:33 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:02
Feb  4 21:03:46 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:01
Feb  4 21:03:46 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:01
Feb  4 21:03:47 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:737:  Send FlowMod from request dpid: 00:00:00:00:00:00:00:01, command: delete, force: True, flows_dict: {'flows': [{'cookie':<PHONE_NUMBER>8740338244, 'cookie_mask':<PHONE_NUMBER>3709551615}], 'force': True}
Feb  4 21:03:47 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:737:  Send FlowMod from request dpid: 00:00:00:00:00:00:00:02, command: delete, force: True, flows_dict: {'flows': [{'cookie':<PHONE_NUMBER>8740338244, 'cookie_mask':<PHONE_NUMBER>3709551615}], 'force': True}
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/mef_eline:INFO evc:141:  EVC f7e27e86301e44 was synced to the storehouse.
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:737:  Send FlowMod from request dpid: 00:00:00:00:00:00:00:02, command: add, force: False, flows_dict: {'flows': [{'match': {'in_port': 1, 'dl_vlan': 483}, 'cookie':<PHONE_NUMBER>8740338244, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 's'}, {'action_type': 'set_vlan', 'vlan_id': 3760}, {'action_type': 'output', 'port': 2}]}, {'match': {'in_port': 2, 'dl_vlan': 3760}, 'cookie':<PHONE_NUMBER>8740338244, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 'c'}, {'action_type': 'set_vlan', 'vlan_id': 483}, {'action_type': 'output', 'port': 1}]}], 'force': False}
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:02
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:462:  Flow forwarded to switch 00:00:00:00:00:00:00:02 to be deleted. Flow: {'flows': [{'switch': '00:00:00:00:00:00:00:02', 'table_id': 0, 'match': {'in_port': 1, 'dl_vlan': 483}, 'priority': 32768, 'idle_timeout': 0, 'hard_timeout': 0, 'cookie':<PHONE_NUMBER>8740338244, 'id': 'c801fc231c4405a934be36fc2345798c', 'stats': {'byte_count': 0, 'duration_sec': 156, 'duration_nsec': 21000000, 'packet_count': 0}, 'cookie_mask': 0, 'instructions': [{'instruction_type': 'apply_actions', 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 's'}, {'vlan_id': 2048, 'action_type': 'set_vlan'}, {'port': 2, 'action_type': 'output'}]}]}]}
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:02
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:462:  Flow forwarded to switch 00:00:00:00:00:00:00:02 to be deleted. Flow: {'flows': [{'switch': '00:00:00:00:00:00:00:02', 'table_id': 0, 'match': {'in_port': 2, 'dl_vlan': 2048}, 'priority': 32768, 'idle_timeout': 0, 'hard_timeout': 0, 'cookie':<PHONE_NUMBER>8740338244, 'id': 'fbeb5f41489e70fb990a8504b3035dc2', 'stats': {'byte_count': 0, 'duration_sec': 155, 'duration_nsec': 962000000, 'packet_count': 0}, 'cookie_mask': 0, 'instructions': [{'instruction_type': 'apply_actions', 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 'c'}, {'vlan_id': 483, 'action_type': 'set_vlan'}, {'port': 1, 'action_type': 'output'}]}]}]}
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:401:  Consistency check: missing flow on switch 00:00:00:00:00:00:00:02.
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:737:  Send FlowMod from request dpid: 00:00:00:00:00:00:00:01, command: add, force: False, flows_dict: {'flows': [{'match': {'in_port': 1, 'dl_vlan': 483}, 'cookie':<PHONE_NUMBER>8740338244, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 's'}, {'action_type': 'set_vlan', 'vlan_id': 3760}, {'action_type': 'output', 'port': 2}]}, {'match': {'in_port': 2, 'dl_vlan': 3760}, 'cookie':<PHONE_NUMBER>8740338244, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 'c'}, {'action_type': 'set_vlan', 'vlan_id': 483}, {'action_type': 'output', 'port': 1}]}], 'force': False}
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/mef_eline:INFO evc:141:  EVC f7e27e86301e44 was synced to the storehouse.
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/mef_eline:INFO evc:552:  EVC(f7e27e86301e44, evc-vlan-483) was deployed.
Feb  4 21:04:17 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:401:  Consistency check: missing flow on switch 00:00:00:00:00:00:00:02.
Feb  4 21:04:17 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:405:  Flow forwarded to switch 00:00:00:00:00:00:00:02 to be installed. Flow: {'flows': [{'match': {'in_port': 1, 'dl_vlan': 483}, 'cookie':<PHONE_NUMBER>8740338244, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 's'}, {'action_type': 'set_vlan', 'vlan_id': 3760}, {'action_type': 'output', 'port': 2}]}]}

@viniarck, thanks for the analysis and the suggestions! Yes, it does make total sense, and I agree with you. I wanna add an extra comment regarding the detection of alien flows: since there was a "recent" flow removal by cookie-id (see logs at 2022-02-03 06:30:38,073  and 2022-02-03 06:30:38,298), the consistency check routine could benefit from that and avoid sending a new flow_removal for the "alien flow". That way, the EVC will remain consistent in the flow table. Without this optimization, we will see a flow_removal from the alien detection followed by a flow add from the missing flow detection.
I was able to reproduce this behavior with the following test:

Run Kytos-ng with docker image amlight/kytos:latest
Run Mininet with a ring topology:

# cat ring.py
from mininet.topo import Topo

class RingTopo(Topo):
    """Ring topology with three switches
    and one host connected to each switch"""

    def build(self):
        # Create two hosts
        h1 = self.addHost('h1', ip='<IP_ADDRESS>')
        h2 = self.addHost('h2', ip='<IP_ADDRESS>')
        h3 = self.addHost('h3', ip='<IP_ADDRESS>')

        # Create the switches
        s1 = self.addSwitch('s1')
        s2 = self.addSwitch('s2')
        s3 = self.addSwitch('s3')

        # Add links between the switch and each host
        self.addLink(s1, h1)
        self.addLink(s2, h2)
        self.addLink(s3, h3)

        # Add links between the switches
        self.addLink(s1, s2)
        self.addLink(s2, s3)
        self.addLink(s3, s1)

topos = {
    'ring': (lambda: RingTopo()),
}

# mn --custom ring.py --topo ring --controller=remote,ip=<IP_ADDRESS>

Change flow_stats interval in /src/kytos-of-core/settings.py with STATS_INTERVAL = 15 and restart kytos
Create a few EVCs (I've created 100 EVCs) between h1 and h2:

for vlan in $(seq 401 500); do curl -H 'Content-type: application/json' -X POST http://<IP_ADDRESS>:8181/api/kytos/mef_eline/v2/evc -d '{"name": "evc-vlan-'$vlan'", "dynamic_backup_path": true, "enabled": true, "uni_z": {"tag": {"value": '$vlan', "tag_type": 1}, "interface_id": "00:00:00:00:00:00:00:01:1"}, "uni_a": {"tag": {"value": '$vlan', "tag_type": 1}, "interface_id": "00:00:00:00:00:00:00:02:1"}}'; done

Wait a few seconds to get the flows created and disable the link s1--s2, to force the reprovisioning of the EVCs (now through s1-s3-s2):

ip link set down dev s1-eth2 && sleep 30 && ip link set up dev s1-eth2

Monitor the EVCs to make sure they are operational (i.e., they have the proper number of flows). I used the following script:

# s=s1; for vlan in $(seq 401 500); do if [ $(ovs-ofctl dump-flows $s | egrep "in_port=1,dl_vlan=$vlan |vlan_vid:$vlan,output:1" | wc -l) -ne 2 ]; then echo missing flows for $vlan on switch $s -- current flows = $(ovs-ofctl dump-flows $s | egrep "in_port=1,dl_vlan=$vlan |vlan_vid:$vlan,output:1"); fi; done

# s=s2; for vlan in $(seq 401 500); do if [ $(ovs-ofctl dump-flows $s | egrep "in_port=1,dl_vlan=$vlan |vlan_vid:$vlan,output:1" | wc -l) -ne 2 ]; then echo missing flows for $vlan on switch $s -- current flows = $(ovs-ofctl dump-flows $s | egrep "in_port=1,dl_vlan=$vlan |vlan_vid:$vlan,output:1"); fi; done
missing flows for 439 on switch s2 -- current flows   = cookie=0xaaac2133b837bb4d, duration=56.868s, table=0, n_packets=0, n_bytes=0, idle_age=56, in_port=2,dl_vlan=1975 actions=strip_vlan,mod_vlan_vid:439,output:1

The above scenario may not happen in the first execution. In fact, I had to repeat the above test a few times to get into that situation (reducing the FLOW_STATS interval helped).
The situation shown above was caused by a unnecessary flow_removal sent by flow_manager as part of the consistency check (alien flow detected). After a few seconds, the missing flow will be recreated, as part of the consistency routine. Maybe we could optimize the above situation by avoiding send flow_removal for "recently removed flows" (whey they match each other, of course).
The logs for the above situation are shown below:
## Notice: first I filter by the time interval in which the error happened (this is the file "last-event"
# egrep "^Feb  4 21:03:0[1-9]|^Feb  4 21:03:[1-9]|^Feb  4 21:04:" /var/log/syslog > last-event
# egrep "12319564338740338244|f7e27e86301e44|Consistency" last-event
Feb  4 21:03:01 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:01
Feb  4 21:03:02 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:01
Feb  4 21:03:03 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:02
Feb  4 21:03:03 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:02
Feb  4 21:03:16 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:01
Feb  4 21:03:16 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:01
Feb  4 21:03:18 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:401:  Consistency check: missing flow on switch 00:00:00:00:00:00:00:02.
Feb  4 21:03:33 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:02
Feb  4 21:03:33 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:02
Feb  4 21:03:46 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:01
Feb  4 21:03:46 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:01
Feb  4 21:03:47 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:737:  Send FlowMod from request dpid: 00:00:00:00:00:00:00:01, command: delete, force: True, flows_dict: {'flows': [{'cookie':<PHONE_NUMBER>8740338244, 'cookie_mask':<PHONE_NUMBER>3709551615}], 'force': True}
Feb  4 21:03:47 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:737:  Send FlowMod from request dpid: 00:00:00:00:00:00:00:02, command: delete, force: True, flows_dict: {'flows': [{'cookie':<PHONE_NUMBER>8740338244, 'cookie_mask':<PHONE_NUMBER>3709551615}], 'force': True}
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/mef_eline:INFO evc:141:  EVC f7e27e86301e44 was synced to the storehouse.
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:737:  Send FlowMod from request dpid: 00:00:00:00:00:00:00:02, command: add, force: False, flows_dict: {'flows': [{'match': {'in_port': 1, 'dl_vlan': 483}, 'cookie':<PHONE_NUMBER>8740338244, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 's'}, {'action_type': 'set_vlan', 'vlan_id': 3760}, {'action_type': 'output', 'port': 2}]}, {'match': {'in_port': 2, 'dl_vlan': 3760}, 'cookie':<PHONE_NUMBER>8740338244, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 'c'}, {'action_type': 'set_vlan', 'vlan_id': 483}, {'action_type': 'output', 'port': 1}]}], 'force': False}
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:02
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:462:  Flow forwarded to switch 00:00:00:00:00:00:00:02 to be deleted. Flow: {'flows': [{'switch': '00:00:00:00:00:00:00:02', 'table_id': 0, 'match': {'in_port': 1, 'dl_vlan': 483}, 'priority': 32768, 'idle_timeout': 0, 'hard_timeout': 0, 'cookie':<PHONE_NUMBER>8740338244, 'id': 'c801fc231c4405a934be36fc2345798c', 'stats': {'byte_count': 0, 'duration_sec': 156, 'duration_nsec': 21000000, 'packet_count': 0}, 'cookie_mask': 0, 'instructions': [{'instruction_type': 'apply_actions', 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 's'}, {'vlan_id': 2048, 'action_type': 'set_vlan'}, {'port': 2, 'action_type': 'output'}]}]}]}
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:457:  Consistency check: alien flow on switch 00:00:00:00:00:00:00:02
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:462:  Flow forwarded to switch 00:00:00:00:00:00:00:02 to be deleted. Flow: {'flows': [{'switch': '00:00:00:00:00:00:00:02', 'table_id': 0, 'match': {'in_port': 2, 'dl_vlan': 2048}, 'priority': 32768, 'idle_timeout': 0, 'hard_timeout': 0, 'cookie':<PHONE_NUMBER>8740338244, 'id': 'fbeb5f41489e70fb990a8504b3035dc2', 'stats': {'byte_count': 0, 'duration_sec': 155, 'duration_nsec': 962000000, 'packet_count': 0}, 'cookie_mask': 0, 'instructions': [{'instruction_type': 'apply_actions', 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 'c'}, {'vlan_id': 483, 'action_type': 'set_vlan'}, {'port': 1, 'action_type': 'output'}]}]}]}
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:401:  Consistency check: missing flow on switch 00:00:00:00:00:00:00:02.
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:737:  Send FlowMod from request dpid: 00:00:00:00:00:00:00:01, command: add, force: False, flows_dict: {'flows': [{'match': {'in_port': 1, 'dl_vlan': 483}, 'cookie':<PHONE_NUMBER>8740338244, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 's'}, {'action_type': 'set_vlan', 'vlan_id': 3760}, {'action_type': 'output', 'port': 2}]}, {'match': {'in_port': 2, 'dl_vlan': 3760}, 'cookie':<PHONE_NUMBER>8740338244, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 'c'}, {'action_type': 'set_vlan', 'vlan_id': 483}, {'action_type': 'output', 'port': 1}]}], 'force': False}
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/mef_eline:INFO evc:141:  EVC f7e27e86301e44 was synced to the storehouse.
Feb  4 21:03:48 012f88145fe6 kytos.napps.kytos/mef_eline:INFO evc:552:  EVC(f7e27e86301e44, evc-vlan-483) was deployed.
Feb  4 21:04:17 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:401:  Consistency check: missing flow on switch 00:00:00:00:00:00:00:02.
Feb  4 21:04:17 012f88145fe6 kytos.napps.kytos/flow_manager:INFO main:405:  Flow forwarded to switch 00:00:00:00:00:00:00:02 to be installed. Flow: {'flows': [{'match': {'in_port': 1, 'dl_vlan': 483}, 'cookie':<PHONE_NUMBER>8740338244, 'actions': [{'action_type': 'pop_vlan'}, {'action_type': 'push_vlan', 'tag_type': 's'}, {'action_type': 'set_vlan', 'vlan_id': 3760}, {'action_type': 'output', 'port': 2}]}]}

Got it, @italovalcy, great idea, let's go for it. Thanks for the scripts and topology there were super helpful. I've prioritized and  opened this PR, I'm also gonna run the end to end tests with this PR suite shortly.


How can i make Strums move

Hi,
As stated in the titled I would like to move the Strums like in zardy but I don't know what I need to do

Don't make "issues" with "I wanna do something like in X mod".


enhance dc script with blocky

https://developers.google.com/blockly/about/examples
app inventor is good example

can maybe use this for dcui too

http://opensource.com/education/15/2/blockly-makes-easier-every-one-learn-code?sc_cid=70160000000erQxAAI&elq=3939033d9a6e4fcea13a627ec3fc3bb3&elqCampaignId=48552&elqaid=17781&elqat=1&elqTrackId=0921b41d7eb34afd876f9f32821dd01d