Modules support servicelocator tree traversal. (#14184)

Q
A

Is bugfix?
no

New feature?
yes

Breaks BC?
no

Tests pass?
maybe

Fixed issues
#14184

this approach could lead to unexpected behavior. Getting a parental component is not always preferable.
Why not introducing a new method (e.g. getInTree) so that the developer can choose this kind of behavior.

Any cases why this is not preferrable?

@dynasource In the original ticket where I proposed this that was already discussed.
The only changed behavior here is in very specific cases:

Your module has a parent.
Your module does not have a component named X.
Your parent does have a component named X.
You want to get an exception when you call $module->get('X')

Likely if you get an exception you either create the component yourself or manually check the parent..

why should, in case of a non-existing service, a parental service with the same name be chosen be default. Such an approach is too magical i.m.o.

Name a scenario where you would not want that. A service maps a name to an
object. If the names are the same it is expected the provided services are
the same. (You wouldn't call your i18n component db). In case a module
requests a component currently it just doesn't work or requires explicit
reference to the main app.
On Jun 26, 2017 3:11 PM, "Boudewijn Vahrmeijer"<EMAIL_ADDRESS>wrote:

why should, in case of a non-existing service, a parental service with the
same name be chosen be default. Such an approach is too magical i.m.o.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/yiisoft/yii2/pull/14350#issuecomment-311054642, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAhYzXqN2Ll_UP82uWmcCF_7Ty5mK9Zoks5sH63vgaJpZM4OFGhL
.

practice shows that there are always exceptions. I am trying to already anticipate on that fact.

@dynasource if there are no concrete objections, I prefer a solution that covers majority of cases not to complicate code because of case we can't even think of.

perhabs.
Another thing. How do you want to implement this new convention in the has() part? It could be confusing to get() a component while has() returns false.

I tend to agree with @dynasource : introduction of such behavior is inconsistent and risk prone.
Module should be designed in the way to be be independent entity and should rely on its own component or the componets from the global application.
Making fallback for the owner module component in case it is not found inside the current one may lead to developer mistakes. Developer should be noted that component he requires does not present in the module, so he can react properly. Finding of the component with the same name in parent module can hide the logic mistake from developer.
Besides who will check the found component has an appropriate type (class)? I may expect component foo in some module to be a DB connection, why in parent module it can be cache.
Modules are NOT inherited - they are nested. This is done in order to support route creation for the particular controller. Being nested particular module does not inherit anything from its owner and can not why it should.
If anywone wishes to create module-based-component inheritance - he should do it on his own.

Thanks for the input @klimov-paul. Makes sense.

Module should be designed in the way to be be independent entity and should rely on its own component or the componets from the global application.

I disagree with this. This method of using the service locator is terribly bad. It means modules will hardcode their relation with global app components not allowing the developer that includes the module to configure it.
Basically you're saying it's better to use a global variable instead of injecting the service locator into the module. (The service locator in this case is the parent module).

Modules are NOT inherited - they are nested. This is done in order to support route creation for the particular controller. Being nested particular module does not inherit anything from its owner and I can not see why it should.

If they are nested then their configuration should be as well. Any code directly doing stuf like:
\Yii::$app('i18n')->....

I cannot control. If however the module uses its own service locator to get the i18n component and that service locator falls back to its parent (which basically means it falls back to the global component) I can override that via configuration.
Directing 3rd party libraries to code against Yii::$app does not feel like good practice to me.
Furthermore, since modules can be used recursively there is no way to provide them with different definitions for the same component. What if a module wants to use a database component named db, but I do not want it to use the same component as another module??

Besides who will check the found component has an appropriate type (class)? I may expect component foo in some module to be a DB connection, why in parent module it can be cache.

This is not an argument against tree traversal, this is an argument against the service locator pattern. Who checks that a module named i18n or db is of the proper class? The whole point of a service locator is to translate a name to an implementation.
If you are not allowed to assume the parent module has component X, why then are you assuming Yii::$app has that component? These assumptions are exactly the same.
The benefits of this tree traversal is that it allows for sensible fallback so modules can access the applications' or their parents' X component without hard coding against the tree. Instead they just ask "their" module for the component, allowing the developer maximum control (I can configure the module) but not breaking if I choose not to provide module specific configuration.

Another thing. How do you want to implement this new convention in the has() part? It could be confusing to get() a component while has() returns false.

@dynasource I propose doing that has() will return the answer to the question: "Can you locate a service by this name?", since that is what you want to know.
So in this case it would return the parents' has function in case it doesn't have a definition of its own.
I agree that it would be confusing if implemented in another way.

This method of using the service locator is terribly bad. It means modules will hardcode their relation with global app components not allowing the developer that includes the module to configure it. Basically you're saying it's better to use a global variable instead of injecting the service locator into the module.

I don't get it. This approach is widely use all over framework itself. And it is used so far without any complain or incedent. For example: rbac\DbManager configures its DB connection component as a name of the application component by default:
https://github.com/yiisoft/yii2/blob/master/framework/rbac/DbManager.php#L41-L47
Same thing for i18n/DbMessageSource:
https://github.com/yiisoft/yii2/blob/master/framework/i18n/DbMessageSource.php#L48-L56
and so on.
Why suddenly it becomes unacceptable?
Should we rework behavior at those components to check current module instead of global application?

Furthermore, since modules can be used recursively there is no way to provide them with different definitions for the same component. What if a module wants to use a database component named db, but I do not want it to use the same component as another module?

Again classes like rbac\DbManager and i18n\DbMessageSource already contain the answer for that. You should referer particular component in your module in the same way as they do, creating public field or virtual property, which then can be configured to be either a standalone component, application component or other's module component.
For example:
class Module extends \yii\base\Module
{
    public $db = 'db';

    public function init()
    {
        $this->db = Instance::ensure($this->db, Connection::className());
    }
}

Then you can configure Module::$db in whatever you want:
'modules' => [
    'm1' => [
        'class' => 'my\module\Module',
        'db' => 'someDb',
    ],
    'm2' => [
        'class' => 'my\module\Module',
        'db' =>['class' => 'yii\db\Connection, ....'],
    ],
    'm2' => [
        'class' => 'my\module\Module',
        'db' =>function() {...},
    ],
],

You may as well create a virtual property, which should return particular component with your own logic around it for more flexibility:
class Module extends \yii\base\Module
{
    public function getDd()
    {
        if ($this->has('db')) {
            return $this->get('db');
        }
        return Yii::$app->get('db');
    }
}

This is not an argument against tree traversal, this is an argument against the service locator pattern. Who checks that a module named i18n or db is of the proper class? The whole point of a service locator is to translate a name to an implementation. If you are not allowed to assume the parent module has component X, why then are you assuming Yii::$app has that component? These assumptions are exactly the same.

They are different. Declaring a random component in the global application I actually extending its public interface, creating a virtual property named by this component. In general this means I create another application class, whithout actually declaring it - this is the main benfit of service locator.
Creating my own virtual application class, I write my program in assumption it uses this particular class.
It is even a common practice among the developers to add an actual MyApplication class to the project in order to support typehinting:

class Yii extends yii\BaseYii {
    /*
     * @var MyApplication
     */
    public static $app;
}

/**
 * @property MyComponent $foo
 */
class MyApplication extends \yii\web\Application {}

Yii::$app->foo->some(); // allows typehinting here

Same happens for the module, especially while module class declaration is essintial here. In case module require some particular components to function it should either contain them by default or allow (and demand!) thier configuration like the example above.
Still it is absolutely fine for the module to rely on some global application components like Request, Response, Session, for example.

The benefits of this tree traversal is that it allows for sensible fallback so modules can access the applications' or their parents' X component without hard coding against the tree. Instead they just ask "their" module for the component, allowing the developer maximum control (I can configure the module) but not breaking if I choose not to provide module specific configuration.

This is just a one of the possible solutions. It can be used by developer if he likes it - you are free to do so. But why it should be enforced by the core?
You are still ignore my arguments about error reporting for the missing component:
https://github.com/yiisoft/yii2/pull/14350#issuecomment-311064250
If someone wishes such behavior he should add it consciously, accepting possible fallbacks.

The benefits of this tree traversal is that it allows for sensible fallback so modules can access the applications' or their parents' X component without hard coding against the tree. Instead they just ask "their" module for the component, allowing the developer maximum control (I can configure the module) but not breaking if I choose not to provide module specific configuration.

Here you are talking about creation of a module, which does NOT provide any information about the components and configuration it requires to function. Instead of explicit declaration of the used components you wish to rely on the parent module to provide it, while actual parent module is completely unknown in your example.
Behavior of such module is unpredictable and deprends on its place in modules chain.

Your reasoning is faulty. Depending on the global application service locator and then suggesting it is any more foolproof than on a parent service locater doesn't make sense.
But we both know your mind doesn't change. I'll put this in its own package.

although I like the functionality, I still think this should not reside inside a general method get. This conflicts with the single responsibility of the method and it hacks the default behavior of ServiceLocator.
One can argue that it is handy and covers many 'known' usecases, but still it is magical and not obvious at forehand, clearly state by examples of @klimov-paul. My personal preference goes to software architecture of which the workings are predicatable and magic is simply not part of that. It just weird to ask a Module for a component which is not defined, and returns the component of the parent. That is simply too error prone.
There are alternative solutions which are more explicit and therefore have my choice. Either a method getInTree is introduced or a Module collection is implemented (Yii::$app->module->module->treeCollection()->findComponent('i18n')

@dynasource it doesnt violate single responsibility at all.
The purpose of a service locator is to locate a service... how it does that is an implementation detail from the consumer perspective.
Using Yii::$app in your code is a code smell and something to avoid if possible. In modules it is possible to avoid it, so you should avoid it.

The purpose of a service locator is to locate a service... how it does that is an implementation detail from the consumer perspective.
you are adding the responsibility to look in its parents. For me that is another goal and thus another responsibility.

Using Yii::$app in your code is a code smell and something to avoid if possible. In modules it is possible to avoid it, so you should avoid it.
Isnt it obvious that it is to improve the understanding of the example given.

I want to get @cebe and @SilverFire opinions as well.

Isnt it obvious that it is to improve the understanding of the example given.

I didnt mean your specific example, I meant in general.
Using \Yii::$app is the same as using global $someVariable. If it can be avoided, it should.

Using \Yii::$app is the same as using global $someVariable. If it can be avoided, it should.

Using \Yii::$app is actually called a 'Singleton' pattern, which is widely recognized and used.

Yes. As an anti pattern: https://en.m.wikipedia.org/wiki/Singleton_pattern
The only reason to have it as a Singleton in yii is because it serves as a service locator. If it didn't there would be no need to mark the application as a Singleton. It is not even really a Singleton; I can instantiate multiple application objects. It is just a global variable that references the last initialized application object.

Listening to you - you should simply use some other PHP framework.
I have no idea how you actually withstand usage of Yii with all desgin decisions it is built on...

Ah, so to use Yii I must blindly follow instead of question decisions made?
Is it not possible to use and like Yii without agreeing with all design decisions?

Discussion is going into wrong direction :) Let's wait for more opinions instead.

This could be extracted to trait/behavior and interface - then developer could choose whether his module should inherit components or not.

@rob006 do you have any cases where it should not?

Ah, so to use Yii I must blindly follow instead of question decisions made?
Is it not possible to use and like Yii without agreeing with all design decisions?

You have your choice.
However, the architecture and philosophy Yii is built on seems to be suitable for the many developers. I suggest if it all be wrong - none would use it.
Still there are many other solutions, which follow difference practices and patterns. I find very odd that someone chooses technology, which core principles he dislikes so mych, while there are many alternatives.
This seems unproductive.
Yii is simply one of the alternatives - it is different, because being just another copy of Symfony or Laravel makes absolutly no sense as they are already an excelent examples of SOLID usage with DI coverage.
Still @samdark has a point, it is pointless to follow discusion at this direction.

This could be extracted to trait/behavior and interface - then developer could choose whether his module should inherit components or not.

@rob006 if it is implemented as a trait every module developer must include it, but the point is that as a module user I cannot enforce it.
To be able to actually configure it it must be implemented in the base module (it could be a configuration setting in base module that enables or disables it, there's no technical argument against it).
Then it would become:
'modules' => [
'someModule' => [
    'traverse' => true // default false
]

It would still break BC in case that property is used for something else, but we could make that unlikely by choosing a name like getTreeTraversal = true.

This could be extracted to trait/behavior and interface - then developer could choose whether his module should inherit components or not.

That is exactly what I have said already.
I can agree with @dynasource's suggestion to introduce extra method for this:
https://github.com/yiisoft/yii2/pull/14350#issuecomment-311033537
In case everyone seems such functionality is crucial.

If it is a separate function then it doesn't help a module user at all. If I use a module I want to be able to configure how it gets its services. I do not want to change every module I use so it uses another function; that has 0 benefits.

@samdark I think that @klimov-paul gave some valid arguments here: https://github.com/yiisoft/yii2/pull/14350#issuecomment-311064250
@SamMousa You don't need extra property, you could just attach behavior/event to module.

If it is a separate function then it doesn't help a module user at all. If I use a module I want to be able to configure how it gets its services. I do not want to change every module I use so it uses another function; that has 0 benefits.

The team has already agreed that we will not add extra magic to the DI layer, which is exactly what you demand.
You are talking so much about anti-patterns here, but when I told you your module should explicitly declare its public interface here, you say it is not relevant.

@rob006 there are no events for service locators.
Also I've countered every argument from the comment... but i'll do it again.

Module should be designed in the way to be be independent entity and should rely on its own component or the componets from the global application.

Actually a module should depend on its own components or those from its parents, since a module always has a parent and might be nested. Referencing the application directly breaks modules that are nested. For example:
'components' => [
    'db' => [
        'some database config'
    ]
],
'modules' => [
    'moduleA' => [
        'components' => [
            'db' => [
                'some other database config'
            ]
        ],
        'modules' => [
            'moduleB' => [
                'class' => ModuleB::class
            ]
        ]
]

Doing it this way allows the service locator of the parent to be used transparently.

Making fallback for the owner module component in case it is not found inside the current one may lead to developer mistakes. Developer should be noted that component he requires does not present in the module, so he can react properly. Finding of the component with the same name in parent module can hide the logic mistake from developer.

Currently the logic is hidden as well since a module can just do \Yii::$app->get() there is no situation in which the global application doesn't error and my solution does. However my proposal allows you as an app developer to override which components the module uses.

Besides who will check the found component has an appropriate type (class)? I may expect component foo in some module to be a DB connection, why in parent module it can be cache.

This is a generic argument against service locators not against tree traversal.

Modules are NOT inherited - they are nested. This is done in order to support route creation for the particular controller. Being nested particular module does not inherit anything from its owner and I can not see why it should.

Then why do modules have a parent at all? Nesting creates a tree and it makes sense to traverse that tree instead of ignoring it and blindly using the root.

If anywone wishes to create module-based-component inheritance - he should do it on his own.

This is not an argument for or against anything.

DI already provide enough flexibility to configure a component, which includes Closure with any random code, which you like:
[
    'db' => function() {
        // you may use tree traverse here if you want
    }
]

and still it is not enough for you.

Then why do modules have a parent at all?

As I have already said here it is necessary for the routing, e.g. URL creation.

Doing it this way allows the service locator of the parent to be used transparently

How this is transparent? It is magic. In your example ModuleB will have compoenent db in case its parent has it, but if it attached to the module, which have no db component - it will have none.
Using standalone ModuleB I have no clue, which components it actually requires: if I miss db component in the parent module, module ModuleB will crash, because it has no default fallback for it.

@rob006 Yes, the more cascading is involved, the harder to debug mistakes are. That's absolutely true. But other points @klimov-paul made are to be discussed.

Module should be designed in the way to be be independent entity and should rely on its own component or the componets from the global application.

Doesn't "independent entity" mean that we should use module service locator as much as we can instead of relying on the application one all the time i.e. $module->get('component_id') instead of Yii::$app->get('component_id')? If so, most of the time a module would need to somehow reuse application components anyway while being able to override these. Since an application is a module itself and since when module is running its parent is usually an application it makes sense to implement nested component search as @SamMousa is suggesting.
I'd do implementation differently though, thinking about it now. Instead of doing it at module level I'd introduce nesting to service locators and DI containers in general.

Besides who will check the found component has an appropriate type (class)? I may expect component foo in some module to be a DB connection, why in parent module it can be cache.

Module itself. Same as it happens now. I don't see any issues here technically.

How this is transparent? It is magic. In your example ModuleB will have compoenent db in case its parent has it, but if it attached to the module, which have no db component - it will have none.
Using standalone ModuleB I have no clue, which components it actually requires: if I miss db component in the parent module, module ModuleB will crash, because it has no default fallback for it.

Crashing in this case is fine IMO. A module declared what's needed in order for it to work. If you're not providing it at any of the levels then it would crash.

That's fine with me as well @samdark I just did the minimum change for traversal; I'm definitely in favor of supporting it for all service locators. (But note that only the module level currently has the concept of parents).

Crashing in this case is fine IMO. A module declared what's needed in order for it to work. If you're not providing it at any of the levels then it would crash.

In this way Module produces a coupling with its parent, meaning it can fucntion only with some particular parent, but can not with any other.
If particular module requires to have a particular parent, then why there should be a random configuration?

How this is transparent? It is magic. In your example ModuleB will have compoenent db in case its parent has it, but if it attached to the module, which have no db component - it will have none.
Using standalone ModuleB I have no clue, which components it actually requires: if I miss db component in the parent module, module ModuleB will crash, because it has no default fallback for it.

Actually, if the application misses a db component any approach will fail. Tree traversal will work if any module in the tree has a db component. Which means ModuleB nested inside ModuleA with a db component will work even if the application itself doesn't have a db component.
Also component configuration using closure is great, but it solves a different problem. If I configure a compoment at the module level currently it just won't be used no matter how I configure it; since the practice is for a module to use Yii::$app->get it won't get the component I configured.

In this way Module produces a coupling with its parent, meaning it can fucntion only with some particular parent, but can not with any other.
If particular module requires to have a particular parent, then why there should be a random configuration?

No! It gets decoupled from the global singleton. I'm not sure you understand the idea at all... there is no error scenario where your current code will break because of this...
If you have your component in the global app it will still function!

If you have your component in the global app it will still function!

Who said I will have it there?
We are talking about random components here, not just DB connection. I can rely on component like youTube, mailChimp and so on.

ModuleB may use component MailChimp for mass mail sending and expect it presence at a parent module, while being actually attached to the module, which have no such component.

Looking at some of the examples above, I already foresee developers using bad coding practices like using
shortcuts to access global components like the 'db' with $module->module->get('db') for accessing Yii::$app->db.

Ah, so you have a magic application where nowhere you configure your mailChimp component but Yii::$app->get('mailChimp'); still works? Lol
Anyway, suppose you have a component named X defined in your application.
Then for any module $module that is directly or indirectly defined in that application, $module->get('X') will work.
@dynasource They can do that currently, that's not related to any code I've added at all...

@klimov-paul do you understand tree traversal? From your comments it seems like you think a module will ONLY check its parent.
But since that parent also checks its parent it will traverse all the way up to the application singleton. As i've been trying to say, your existing applications won't break or need a configuration change.

@SamMousa, my example should be seen in a > 2  echelon context

@dynasource I still don't get your point. Currently a module has a parent, and a module has get(). So what prevents anyone currently from using $module->module->module->module->get('something').
My implementation just makes it so that $module->get('something') will work regardless of where in the tree it's located allowing you more freedom of configuration without forcing you to repeat yourself.

Ah, so you have a magic application where nowhere you configure your mailChimp component but Yii::$app->get('mailChimp'); still works? Lol

You do not even listen.
Here I have already told you, that using some random component either at application config is an equal to declaration of my own Application class, thus my entire program works with this application class. And its internal code is not meant to be transfer to any other application.
You however talk about random module, which does NOT know anything about its parent or the application, but should get components from them.

In this way Module produces a coupling with its parent, meaning it can function only with some particular parent, but can not with any other.

It's no different from what it was i.e. if you're using service locator as Yii::$app->something, you're coupling your module with application config explicitly. If you're doing it as $module->get('something') then you're not coupling to application. Application may provide fallbacks but is not required to do so anymore. One can specifiy components in the module config directly.

Ideally a reusable module should not ever know anything about the application. Thus, usage of application's service locator isn't good. Using module's own service locator is OK but, in reality, isn't convenient because you likely have to re-declare same config for components such as db. @SamMousa solution solves all that.

Well, even more ideally, a module should not use service locator at all but that's a different story.

Well, even more ideally, a module should not use service locator at all but that's a different story.

And a really complicated one, so that's why I chose not to touch that :D

OK, last attempt.
If you wish some module or component or any other class to be independent you should provide its necessary dependencies via its config.
For example, see yii\rbac\DbManager::$db:
https://github.com/yiisoft/yii2/blob/master/framework/rbac/DbManager.php#L41-L47
It clearly demands DB connection to be configured, while picking it from the Application instance by default.
Note, that we do NOT use Yii::$app->get('db') directly, keeping the ability for re-configuration.
You may skip such kind of configuration fields using Yii::$app->get('db') directly, but only in case of the code, which can NOT function outside of your particular program.
If you say ModuleB should be able to pick up component massMail from its parent ModuleA - this module can NOT function anywhere else except ModuleA.
Yii Applications have a special method named coreComponents() to declare all components, which are always available:
https://github.com/yiisoft/yii2/blob/master/framework/web/Application.php#L189-L201
Thus yii\web\Application can be used in several projects under the same iterface.
You can always rely it having following components:

request
response
session
user
errorHandler

Those components are also explicitly marked as virtual properties at PHPDoc:
https://github.com/yiisoft/yii2/blob/master/framework/web/Application.php#L19-L24
If some module relies on particular component to function, it should declare a default config for it in the same way. Only then you can say that this module can be actually attached to a random owner.

So the only real issue with the change is that it may become harder to debug unexpected fallbacks. For example, I've declared my db connections in both application and module but in module I've made a typo and instead of erroring it silently falls back to the app config.

If you say ModuleB should be able to pick up component massMail from its parent ModuleA - this module can NOT function anywhere else except ModuleA.

Yes but the difference is that this PR solution is able to pick component from its parents, not from just a single parent. So in the end, if ModuleA is missing, it will looks for massMail in the application. Exactly the same as it does now.

I agree that it's better to declare dependencies either via properties as @klimov-paul suggested or even as an explicit interface in case of truly reusable module. But that doesn't mean @SamMousa solution doesn't make sense on its own.

Okay, so consider a scenario like this:

I have an application that uses a database db.
I have 100 modules, each of which should use a different database.
My application does not need to use those databases.

Does it make sense to declare components db1 to db100 in the application component array or does it make sense to declare a db component` in each module separately?
[
    'components' => [
        'db1' => [...],
        'db2' => [...],
        'db3' => [...],
    ],
    'modules' => [
        'A' => [
            'db' => 'db1'
        ],
        'B' => [
            'db' => 'db2'
        ],
        'C' => [
            'db' => 'db3'
        ]

vs
[
    'components' => [
    ],
    'modules' => [
        'A' => [
            'components' => [
                'db' => [...]
            ]
        ],
        'B' => [
            'components' => [
                'db' => [...]
            ]
        ],
        'C' => [
            'components' => [
                'db' => [...]
            ]
        ]

The 2nd is way cleaner, putting module configuration inside the modules' configuration and not just creating a flat list of all services in the global application.
Note that this example doesn't even require the traversal, but having the traversal will allow me to omit the configuration in case I want to use the global database.

@SamMousa that's bad example because it works now w/o this pull request.

I know it works, but many modules will silently ignore it and use the global service locator.

That's not connected to this pull request.

I'm merely trying to illustrate that the practice of public string properties is hardly implemented by third party module devs. This PR will allow them to trust their modules' service locator so they can use that instead.

Sorry, may be can help new functional of php?

class someModule
{
    public function exposeFunction()
    {
        return Closure::fromCallable([$this, 'getDi']);
    }

    private function getDi($param)
    {
        ...
    }
}

@bscheshirwork we do not have a technical / coding problem; we have a problem of differing opinions.
Unfortunately those are not as easily solved.

May be invert case - DI not included to module and DI pass into callable throw main config?

I don't understand what you mean.
This is not about DI, it is about service locators. Exposing the DI container like you seem to propose just turns it into a service locator.

You propose shared service locator between Yii::$app, parent and any nested modules?

I propose that service locators in general support nesting, that way they can locate services from their parent(s).

So... May be can make this option is optional?
[
    'components' => [
        'db1' => [...],
        'db2' => [...],
        'db3' => [...],
    ],
    'modules' => [
        'A' => [
            'db' => 'db1'
        ],
        'B' => [
            'internalServices' => ['db'],
            'components' => [
                'db' => [...] //don't merge config
            ]
        ],
        'C' => [
            'internalServices' => ['db' => 'db3'],//merge config db3 (i.e. part in main-local.php)
        ],

    ],
]

There is no need to use internal services explicitly in your first example.
Since there is no config merging by default.
Your second example of internalServices could work. Although it would cause unexpected behavior if it is not defined in the parent, if your configuration is partial that might be bad.
It is something that we definitely should look into deeper after we get this accepted.
Currently there is no traversal at all. After we have traversal, you have all the functionality you need.
After that we could look at config merging as you propose, it will reduce duplication in the config file.

Hm, ok. What about mark service to merge only manualy (3th example)? All of another don't merge (current)
[
    'components' => [
        'db1' => [...],
        'db2' => [...],
        'db3' => [...],
    ],
    'modules' => [
        'C' => [
            'internalServices' => ['db' => 'db3'],//merge config db3 (i.e. part in main-local.php)
            'components' => [
                'db' => [...]
            ]
        ],
    ],
]

You're confusing merging with tree traversal. I'm not sure what your goal is? If you want to have manually merged configuration I'm all for it, but that's not (necessarily) directly related to tree traversal.

I've rethought this concept. Despite being magic https://github.com/yiisoft/yii2/pull/14350#issuecomment-311291699, the main disadvantage is the potential debug https://github.com/yiisoft/yii2/pull/14350#issuecomment-311354613 issue mentioned by @samdark. The other disadvantage about coupling is countered by comment https://github.com/yiisoft/yii2/pull/14350#issuecomment-311351558
On the contrary, the developer benefits from its advantage like overriding global components with local module components. An interesting example is mentioned by @SamMousa https://github.com/yiisoft/yii2/issues/14184 about having custom i18n for a specific module.
Because of this, module developers can remove all references to Yii::$app->get() and simply use their $module->getInTree($component) or $module->retrieve($component), which adds cleaner code, flexibility and functionality.
So I mainly see the advantages outweigh the risks

@dynasource I think we should keep using ->get() though.

sorry, I forgot to update that part. I indeed meant ->get()

@SamMousa any suggestions on where docs could be added?

We should mention here that there is tree traversal and provide an example of how to use it:
http://www.yiiframework.com/doc-2.0/guide-structure-modules.html#best-practices
We should mention here: http://www.yiiframework.com/doc-2.0/yii-di-servicelocator.html
Just above public properties.
That: Since ... Modules support tree traversal for the service locator with a link to the best practices.
We should add a paragraph / section here: http://www.yiiframework.com/doc-2.0/guide-concept-service-locator.html
That details the benefits of tree traversal in the service locator.
I propose creating a separate issue for that and adding these 3 tasks to it.
Some are rather simple, others are a bit more work. (Like best practices)

I'm against making it a separate issue. Such enhancement doesn't make sense without docs.

In that case I'll put it on my todo list, might need to wait till the weekend!

Unsure about whether to document how to merge configurations when we have no built-in support for it..
Might make more sense not to publish this as a best practice until we have a practice that is better than this :)
Merging
If you only need to have a slightly different configuration, like in the example above
where you might have 10 configuration settings for the database, but only 1 is different, you can use a \Closure to merge the configuration:
[
    'components' => [
        'db' => [
            'prefix' => 'main_',
            'setting1' => 'a',
            'setting2' => 'b'
            'setting3' => 'c'
            'setting4' => 'd'
            'setting5' => 'e'
        ]
    ],
    'modules' => [
        'mymodule' => [
            'components' => [
                // DI works, you can also use a direct reference `\Yii::$app`.
                'db' => function(Application $app) {
                    $config = $app->getComponents()['db'];
                    $config['prefix'] => 'module_';
                    return \Yii::createObject($config);
                }
            ]
        ]
    ]
]

@cebe Adjusted it.

CHANGELOG is missing.

I won't have time for this until next week; sorry!
On Aug 22, 2017 21:19, "Carsten Brandt"<EMAIL_ADDRESS>wrote:

CHANGELOG is missing.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/yiisoft/yii2/pull/14350#issuecomment-324125266, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAhYzR5OGsxSVT1L25BnHX6Ug2PpO7NQks5saymzgaJpZM4OFGhL
.

No problem, we can add the changelog ourselfs ;) I want to train the @yii-bot to do that soon btw :)

Added changelog.

Merged. Thank you!


Implement AMP

Can we implement AMP? https://www.ampproject.org/ That should improve our Google ranking

@bonustrack do we have idea how should AMP page should look like? I guess we only want AMP for single posts, right?

@Sekhmet we want it for single post yes, and i'm not sure how it should look like. Do we have that much choice about how it look like? Isn't just information to fill similar than og: metadata?

I't pretty flexible. You have to build new website in AMP-flavoured HTML. I would keep it as simple as possible though, I don't think we should build another Busy version just for AMP.

Ok yes i see, agree we need something simple just to get post better indexed.


Update toc.md

Modified TOC to reflect Getting Started with Visual Studio topics
Summary
Revised TOC for Getting Started with Visual Studio content.
Suggested Reviewers
@mairaw

Open Publishing Build Service: The pull request content has been published and here are some changed files links of this time:

Docset 1 - core-docs
No file of this docset changes.

Status: SucceededWithWarning. Message: Warning occurred: docs/standard/base-types/quantifiers.md contains illegal link: #Greedy-and-Lazy-Quantifiers. The file docs/standard/base-types/quantifiers.md doesn't contain a bookmark named Greedy-and-Lazy-Quantifiers...
Open Publishing Report.

LGTM


Replace benchmark suite with airspeed velocity

This PR replaces the current benchmark suite with a corresponding Airspeed Velocity compatible benchmark suite.
This PR however needs to wait for the following ASV features to get merged:

https://github.com/spacetelescope/asv/pull/205 (Parameterized benchmarks)
https://github.com/spacetelescope/asv/pull/210 (Fix an annoying wart with asv dev cloning scipy unnecessarily)
https://github.com/spacetelescope/asv/pull/203 (Fix an annoying issue with asv rebuilding scipy several times every time, with ccache not helping)

A ready-to use ASV branch including all of the above, for testing: https://github.com/pv/asv/tree/xxx
EDIT: those features are now merged in asv master: https://github.com/spacetelescope/asv
Some advantages using ASV:

end of ad-hoc table formatting code in the benchmarks
end of ad-hoc timing code in benchmarks
possible to monitor performance changes across scipy history
better text output
fancy HTML output, example https://pv.github.io/scipy-bench/

This PR however needs to wait for the following ASV features to get merged

This looks really good.  I hope those ASV features are merged soon.

Ok, everything necessary should now be in ASV master

Would prefer to merge soonish to keep the ball rolling

python runtests.py --bench bench_sparse.Arithmetic

gave 'No benchmarks selected', but

python runtests.py --bench

seems to be running the benchmarks and showing the results.  I'm using a recently pulled and installed  asv.

Fixed the typos

I see that the manifest but not .gitignore mentions benchmarks/html. Is this distinction deliberate?

Updated gitignore too

Would prefer to merge soonish to keep the ball rolling

I'd like to merge, but I think it should wait until at least someone else has looked over the system calls.

Looks good to me when running benchmarks, and looking at your site @pv, but ./run publish dies for me.  I might be misunderstanding how this is suppose to work though.  It may also be misconfiguration on my part since the clone of pv:scipy-benchmarks is failing with Permission denied (publickey).  I'm out of time to figure this out today, though.
I'm okay with merging this as it is though.  The benchmarking works and is better than what we have right now. This should probably be pointed somewhere other than the repository pv/scipy-benchmarks, but doing that requires that we figure out where, if anywhere, we want to canonically run these and where the results should be displayed, but these questions don't need answering in this PR.

The clone probably dies since the repository url is the ssh one, which is apparently private.
I can just change that to not clone anything for now, since the repo location is subject to change anyway.

I can just change that to not clone anything for now, since the repo location is subject to change anyway.

Are you planning to do that in this PR? Either way I'm OK with merging this.

+1 from me as well - definitely good enough to merge. Then we can start accepting benchmarks in this form in other PRs.

a mention in the release notes would be good

Made changes vs. the above comments.

Merged. Thanks for the feedback!

@pv thanks for doing this, major improvement!

This might be a dumb question, but how can I run a python profiler on a benchmark?  I tried $ python -m cProfile -o profile_data.pyprof runtests.py ... but this doesn't make the output file.  After spelunking in the system code, I ran the run.py benchmarks script directly but profiling showed 100% of the time was spent in an opaque inter-process communication function.

You need to use the asv profiling feature.
ie. run.py --current-repo run -p -n --bench  ^!
or runtests.py --pyhton benchmarks/run.py --current-repo run --python=same -p ...

I tried
$ python runtests.py --python benchmarks/run.py --current-repo run --python=same -p
but this gives
Building, see build.log...
Build OK
Traceback (most recent call last):
  File "runtests.py", line 436, in <module>
    main(argv=sys.argv[1:])
  File "runtests.py", line 151, in main
    exec_(script, ns)
  File "runtests.py", line 433, in exec_
    exec("""exec code in globs, locs""")
  File "<string>", line 1, in <module>
  File "<string>", line 23, in <module>
ImportError: No module named benchmarks.common

I tried the first one too
$ run.py --current-repo run -p -n --bench <benchmark> <commit>^!
but I'm too noob to get it to work.  I guess it should be $ python benchmarks/run.py ...?  It started fetching recent changes, creating environments, and installing dependencies, at which point I ctrl-c'd it after a few minutes.

Let it run, or try the other one in runtests.py --shell

I ran
$ python benchmarks/run.py --current-repo run -p -n --bench sparse_linalg_onenormest.BenchmarkOneNormEst.time_onenormest HEAD^!
· Fetching recent changes
· Creating environments
· Installing dependencies.................................................................
· Discovering benchmarks.
·· Uninstalling from py2.7-Cython0.21.1-Tempita0.5.2-numpy1.8.2-six
·· Building for py2.7-Cython0.21.1-Tempita0.5.2-numpy1.8.2-six....................................................................................................................................................................................................................................................................
·· Installing into py2.7-Cython0.21.1-Tempita0.5.2-numpy1.8.2-six..
· Running 1 total benchmarks (1 commits * 1 environments * 1 benchmarks)
[  0.00%] · For scipy commit hash ad28a2ed:
[  0.00%] ·· Building for py2.7-Cython0.21.1-Tempita0.5.2-numpy1.8.2-six...
[  0.00%] ·· Benchmarking py2.7-Cython0.21.1-Tempita0.5.2-numpy1.8.2-six
[100.00%] ··· Running ...normest.BenchmarkOneNormEst.time_onenormest 2/18 failed

but I didn't see any profiling information.  Also this took a long time to run.

the correct asv command is actually "profile", not run.
read the asv help.I'm writing this from my phone and dont remember the details

I ended up just copypasting the benchmarking script and hacking it to run it manually...

you can run asv --help and be enlightened for the next time :)
http://stevelosh.com/blog/2013/04/git-koans/

For posterity, the right command was
python runtest.py --shell
./benchmarks/run.py profile --python=same -o $PWD/prof.out sparse.Matmul.time_large

or
python runtest.py --shell
cd benchmarks && asv profile --python=same -o $PWD/prof.out sparse.Matmul.time_large

or
./benchmarks/run.py --current-repo profile -o $PWD/prof.out sparse.Matmul.time_large HEAD^!

The first run for the last choice will take time as it needs to install numpy and compile scipy for the first time in a place ccache possibly hasn't seen before.


日历加入插槽

[ ] I'm sure this does not appear in the issue list of the repository

Basic Info
What are the similar cases of this feature
麻烦尽快更新一下，大佬，现在用的其它的插件，效果不太好，也有点丑，麻烦尽快更新，谢谢大佬
What problem does this feature solve?
现在只是展示作用吧，我如果想做考勤或者待办事项等功能没法用吧

Mark


Add tests for NIR edge dimensionality

Every outgoing edge must have the same dimensionality as the corresponding incoming edge. We can ensure that by checking the edges when the NIR object is constructed. Perhaps by __post_init__?

the function for this is implemented in #59, which can be called on every graph. currently, it is not enforced, but this is suggested in PR #61 so I will close this issue


docs: document use of Lt/Gt

Fixes #2456
Description
Document and show some examples of using the AWS specific labels,
specifically using Lt/Gt.
How was this change tested?

N/A

Does this change impact docs?

[X] Yes, PR includes docs updates
[ ] Yes, issue opened: #
[ ] No

Release Note

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Hide whitespace on diff, I changed the fileformat to Unix style.


Updating the Azure IP Datacenter link with latest

The link in line number 46 is referencing to the deprecating data center IP addresses for Azure. the latest is available in the link https://www.microsoft.com/en-us/download/confirmation.aspx?id=56519 and documented currently as Azure IP Ranges and Service Tags – Public Cloud. FIXED the link to highlight the same based on a recent customer query.
#ATCP.

@maathangik : Thanks for your contribution! The author(s) have been notified to review your proposed change.

#sign-off

#merge


Json output evolution

We need to at least have a plan for how to evolve the format

I believe it was @Veykril that I talked to at RustNL about how LSP handles this

cargo test could pass a CLI flag of features requested
the program can send back the subset that is supported
instead of namespacing, experimental features put their features (see above) and any custom data into an untyped value under a key named for the feature

For features, this allows sub-features


Bug: error in images fetched from github

URL(s)
https://eslint.org/team/
https://eslint.org/sponsors/
other
What did you do?
went to the website.
What did you expect to happen?
there must be the images of sponsors, authors and team members.
What actually happened?
most of the images were not there.

Participation

[x] I am willing to submit a pull request for this issue.

Additional comments
All the images with issue are sourced from github and were updated in
https://github.com/eslint/eslint.org/commit/45a54f8022b38a8b7b5635c8e44f417659eb4962

Do you know why the images, which were visible earlier, are not visible now?

Do you know why the images, which were visible earlier, are not visible now?

Still figuring out! seems github action bot has updated the image links in data.

It is asked here also https://github.com/orgs/community/discussions/147297
that's why github action bot is updating the link's token daily i guess, as a solution we can omit the private- word from the avatar link, would like to here some opinions on this approach.

I'm not sure I understand everything in the linked discussion, but let's try to re-construct the old URLs from the new ones, at least as a temporary solution.

Based on the discussion in this thread, as long as the user is not an Enterprise Managed User (EMU), the old URL will continue to work as expected. Therefore, as a solution, we can proceed with constructing and using the old URL.


align the format of the different ID used

All resource name, variable name and panel name follow the same rule:

more than 2 characters
less than 75 characters
cannot contain any space or special characters

/cc @saminzadeh @LukeTillman
Signed-off-by: Augustin Husson<EMAIL_ADDRESS>

the choice of the number of characters is totally arbitrary and we can of course talk about. The idea is to avoid a reference with only one letter. A variable ID with a single letter won't be helpful for example. At least 2 characters can start to say something.


Dev: Back arrow in currency selector not working

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed:

Click FAB
Click Send Money/ Request Money
Click select currency
Click back arrow

Expected Result:
The currency selector modal should be closed and send money/request money page shown
Actual Result:
The currency selector page stuck
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[ ] Android / native
[ ] Android / Chrome
[x] iOS / native
[ ] iOS / Safari
[x] MacOS / Chrome / Safari
[x] MacOS / Desktop

Version Number: Dev 1.3.35-5
Reproducible in staging?: n/a
Reproducible in production?: n/a
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
https://github.com/Expensify/App/assets/93399543/e8e90d61-e9cf-46f2-9028-f7b6b0c64c4f
Expensify/Expensify Issue URL:
Issue reported by: @wildan-m
Slack conversation: https://expensify.slack.com/archives/C049HHMV9SM/p1688327565024119
View all open jobs on GitHub

dupe of https://github.com/Expensify/App/issues/22130

Closing as dupe


Xcode j2objcOutputs resource loading, AssembleResourcesTask

Please review PR #318 first

Move Xcode resource loading to j2objcOutputs, fixes #319
Added AssembleResourcesTask to copy resources to j2objcOutputs
‘File’ suffix when @Input or @Output is File rather than string

J2objcConfig path refactor

Users set directories now point to src/main rather than src/main/objc
destSrcDir => destSrcMainDir
destSrcDirTest => destSrcTestDir
Explicit directory methods for accessing Main/Test, Objc/Resources:
i.e. j2objcConfig.getDestSrc{Main|Test}{Objc|Resources}Dir()

i think you need to come up with a convention for the InputFiles naming as well, otherwise it doesn't come off as consistent

LGTM after that

@advayDev1 - the distinction I think of is returning a File rather than a path. To that end, I've marked any @Input* returning a file with "File" as a method suffix. Please see what I've done but I don't think it needs to be more than that.
For the J2objcConfig output paths, they all now use project.file and File to produce a safer and better result. Using these methods also prevents a task from forgetting to call project.file to resolve a path for example.
For @OutputDirectory, though some testing, it re-runs the task if the directory path or contents have changed. That allowed me to removed some redundant @Input methods for the output directory path. This was then documented in a Gradle PR: https://github.com/gradle/gradle/pull/485

@advayDev1 - please take a look again. I think this is in a much better place thanks to your input.

@advayDev1 - I've now merged the changes. Feel free to push back on anything.

sorry, I already gave an LGTM above: https://github.com/j2objc-contrib/j2objc-gradle/pull/320#issuecomment-124771494


radicle-node: fetch from the announcer only if tracking the node

This is to solve issue #316

This is looking good.
There's one thing I forgot to mention that is important and makes the general UX a lot better: repo tracking policies include a policy Scope. This scope further describes the tracking policy for that repo:
/// Tracking scope of a repository tracking policy.
pub enum Scope {
    /// Track remotes of nodes that are already tracked.
    Trusted,
    /// Track remotes of repository delegates.
    DelegatesOnly,
    /// Track all remotes.
    All,
}

So actually what we need to do is that if the scope is Trusted, then we check that we're tracking the peer. If it's DelegatesOnly, we check that the refs come from a project delegate, and if it's All, we don't check at all and just fetch.

So actually what we need to do is that if the scope is Trusted, then we check that we're tracking the peer. If it's DelegatesOnly, we check that the refs come from a project delegate, and if it's All, we don't check at all and just fetch.

Looks like we can either add this logic in this PR, or in a separate PR. I think it's easier for me to add it in a separate PR, but I'm okay either way. If there is some additional reason I'm not aware of for adding this in this PR, let me know and I will work on that.

So actually what we need to do is that if the scope is Trusted, then we check that we're tracking the peer. If it's DelegatesOnly, we check that the refs come from a project delegate, and if it's All, we don't check at all and just fetch.

Looks like we can either add this logic in this PR, or in a separate PR. I think it's easier for me to add it in a separate PR, but I'm okay either way. If there is some additional reason I'm not aware of for adding this in this PR, let me know and I will work on that.

I'm fine with adding it in a separate PR, as long as we aren't unexpectedly changing the behavior of existing tests. I think that if you fix the other issue mentioned above, we can get there.

I'm fine with adding it in a separate PR, as long as we aren't unexpectedly changing the behavior of existing tests. I think that if you fix the other issue mentioned above, we can get there.

I've updated the patch to check for the repo tracking Scope. For now, only when the scope is Scope::Trusted we will check for each node's tracking record. Hence the existing tests now pass without changes.
I have not added any special handling for Scope::DelegatesOnly as I'm not clear what is the proper way of verifying the delegates. I can add that in a follow-up PR if that's okay.

Ok, probably time to revisit this, @FintanH 's PRs are merged.

Ok, probably time to revisit this, @FintanH 's PRs are merged.

I've rebased to the latest, and updated the diff accordingly.

Should there be a test where a peer is tracking Alice and hears a refs announcement and then ends up having fetched the repository? Perhaps I'm wrong, but I don't think the existing test does that.

This is one of the tests : https://github.com/radicle-dev/heartwood/blob/73221e43d781f17aa8ef1830f10b56c14a3d93a5/radicle-cli/tests/commands.rs#L471
The reason is that now the default scope is scope::Trusted, hence some existing tests would go through that path.

I finally was able to construct a relatively simple test in tests.rs and removed the more involved test in tests/e2e.rs.
The only thing is that I had to add a new field MockStorage.remotes so that we can add mocked refs into the storage's repository. Then RefsAnnouncement will be generated with "real" refs, which helped the test.

Rebased to the latest master, and addressed review comments, and refactored is_fresh check into the should_fetch_refs_announcement .


[BuildSystem] Move Swift compiler's aux files next to the object file

This is important for performing correct builds when there are two source files
with the same name in a Swift target.
rdar://problem/41060279 Nest all swift auxiliary files similar to the object files

@swift-ci smoke test

Not sure if we can create a future proof test as the "failure" depends on the type of supplementary file.

I guess it would be hardcoding knowledge of the file map format, but you could check that no paths are duplicated throughout the file. (Honestly, the compiler could probably check that too, so maybe you should just file a JIRA bug and leave it at that.)


feat: base measureFunction API

Summary
Resolves #224
async function measureFunction(
  fn: () => void,
  options?: { runs?: number, dropWorst?: number },
): Promise<MeasureResults>

API for measuring execution time of regular JS functions. It works similarly to render measures, but instead of using React.Profiler to measure renders stats of component, it just measures the execution duration of JS function.
It's intended to be used for any JS apps (not only React/RN) or libraries.
Scope:

[x] Minimal Viable API
[x] Unit Tests
[x] Perf Tests
[ ] Update Docs
[ ] Update Output report wording / separate tables

Test plan
Added unit tests and perf tests using measureFunction

@thymikee what do you mean by warmup code? The worst (first) run of the function will be dropped, similar to how we process render measurements.

@mdjastrzebski e.g. here: https://github.com/krausest/js-framework-benchmark#about-the-benchmarks. AFAIK warmup is helpful when preparing the JS engine to fire up JIT, but maybe there's more to it

@mdjastrzebski now ready for review, with a fallback value of render as a migration path for the missing 'type' property in any existing tests :)

Looks good! Let's merge it! 🦙🏄♂


Explorer issue

Explorer.exe randomly flickers. Sometimes volume or audio icon disappears from taskbar.

This happened to me aswell on Windows 10 around 3 days ago. Had to use system restore.

This was fixed in #240


utils.parse_hosts_from_configs() doesn't support multiple host names in a Host line

Host entries in a ssh_config file may have multiple host names, like: Host <short name> <fqdn> <ip address>.
In that case, remote-sshfs creates a ~/.sshfs/<short name> <fqdn> <ip address> mount point and, of course, fails to connect to a host named... <short name> <fqdn> <ip address>.
I have a PR ready, that:

splits the host names and uses the first non-IP address as a host name.
excludes a * host definition from the list of hosts.

I have a question, though:

my PR adds the multiple host names parsing in the utils.parse_hosts_from_config() function. The downside is that it keeps only the first non-IP address name in the hosts list.
I could also keep all names in a host["Names"] attribute and, in  connection.init_host() or connection.mount_host(), iterate through those names until a connection is made. That way, all the host names are visible in the hosts list.

Which approach do you prefer ?

Hey! Thank you so much for your continued contribution and help. I appreciate it.
This is a good one... Could we continue with your "split the host names" and potentially create an entry for each one?  Etc, in the telescope connect view each "alias" would have its entry. The underlying SSHFS/SSH call will understand which "host" you are referring to when using any of the names, and the mount point should be reflective of which ever name you use. If some names cause issues with the naming of the directory, we could use a regular express to strip out bad characters.
Does this make sense? Would also love your opinion!


UploadFile: Could not save metadata (transfer.sh).

Setup info

Workflow name: UploadFile
Workflow version: v1.6.0
Alfred version: 4.0.4
macOS version: 10.14.6

Description of issue
Hi. When the workflow has uploaded the file, it doesn't copy the url. The result is the following "Could not save metadata".

Debugger output
[14:27:44.601] Logging Started...
[14:28:03.755] UploadFile[File Action] Processing complete
[14:28:03.759] UploadFile[File Action] Passing output '/Users/miltonardila/Documents/SolucionesK/Clientes/Carcaixent CF/Colaboradores.zip' to Run Script
[14:28:11.354] STDERR: UploadFile[Run Script] /Users/miltonardila/Documents/SolucionesK/Clientes/Carcaixent CF/Colaboradores.zip
[14:28:11.357] UploadFile[Run Script] Processing complete
[14:28:11.358] UploadFile[Run Script] Passing output '' to Run Script

That’s a problem with transfer.sh. Either change the upload_file_to Workflow Environment Variable or wait it out for them to fix the server problems.

Hi, I spoke to transfer.sh support and they say it works correctly.
However it tells me to use alpha.transfer.sh that works better.
How can I change the variable to use this service?
I tried to change it by editing the current one, but it sends me to bayfiles.com
Greetings and thanks.

I spoke to transfer.sh support and they say it works correctly.

It doesn’t. A moment ago, even the website itself wasn’t loading. Ever since they were acquired these issues are a constant. I’ve had a few Twitter conversations with them about it. Yesterday, neither the alpha nor the non-alpha version worked.
I didn’t add alpha support because I thought they had dealt with the issues. It’s added now, you’ll find it in the just released version.

Hi Vitor,
Thank you for your support.
It seems that the new owners of transfer.sh are dedicating themselves to new projects, but they say they will stay alive.
I have upgraded to version 1.6.2 and everything seems to be going well. As long as the server is working as you say.
Can I use this thread to ask how to configure "oneupdater"? so that all your workflows (which I love!) continue working?

It seems that the new owners of transfer.sh are dedicating themselves to new projects, but they say they will stay alive.

They seem like nice people and I believe they want transfer.sh to keep going. But at the same time it’s true that I don’t recall any major issues before the acquisition, and several after. Which is weird because the company that now controls the website is a cloud hosting company. Them being unreliable is the worst kind of publicity; I have no desire to try their paid services.

Can I use this thread to ask how to configure "oneupdater"? so that all your workflows (which I love!) continue working?

Thank you for the kind words, but I don’t understand the question. You don’t need to do anything to configure OneUpdater in my Workflows.

ok I understand.
My question is because I cannot update automatically.  I must be aware of your new releases to update manually.  and also in your list you have a workflow that is called the same.
So I thought I had to install that workflow and set it up separately.

I must be aware of your new releases to update manually.

You do not. Updates are downloaded automatically and opened for you to install them. But each Workflow only checks for updates once every four days and only when invoked.

Ohhh, perfect  Some of the two situations may not have happened before.  That you did not invoke at the precise moment when the update is to be installed.
Thank you again for your support and congratulate you for this work you do.

That you did not invoke at the precise moment when the update is to be installed.

That’s not what I mean.
Whenever you invoke the Workflow, OpenUdater asks “have I checked for updates in the last four days?” If yes, it skips the check, otherwise it does it. If you call a Workflow once every six days (for example), then it would check every time.

Ok I understand.
I will be pending for an upcoming update and see the behavior.
and any questions I ask.


have a "default" macro for Target enums

#[derive(Clone, Debug, PartialEq, Eq, Target)]
pub enum Details {
  Overview,
  Code,
  Metrics,
}

impl Default for Details {
  fn default() -> Self {
    Self::Overview
  }
}

Could be
#[derive(Clone, Debug, PartialEq, Eq, Target)]
pub enum Details {
#[target(default)]
  Overview,
  Code,
  Metrics,
}

I know #[target(default)] is already a thing :D names are hard

You can use the new default attribute from Rust. However, that comes with Rust 1.62 (?). And I wanted to keep the MSRV at the same level as Yew has it (1.60).
So, you already can do:
#[derive(Clone, Debug, Default, ParrtialEq, Eq, Target)]
pub enum Details {
  #[default]
  Overview,
  Code,
  Metrics,
}

But only if you use a newer Rust version.

Forgot about this one, I think we can close it.


Assertion Failed: You cannot use the same root element (DIV) multiple times in an Ember.Application

This error started appearing after I upgraded to Ember 2.18 and ember-cli-qunit 4.2.1.
I'm honestly not sure if it's a bug, my tests aren't properly migrated, or what since I'm not exactly sure how the app is getting booted anymore.

I came across this as well when trying to update to the new ember-qunit API. I had to add autoboot: false to APP in config/environment.js. Not sure why, though; it's not mentioned anywhere that I saw, nor does the ember-new-output repo have that settings.

Same happened to me. Fixed with the @alexlafroscia workaround.

If anybody else runs into this in the future even after turning autoboot off, this may help...
I had already turned autoboot to false in my config/environment.js file but I was still getting this error. As it turns out, I was both calling setupApplicationTest(hooks) and calling startApp() from tests/helpers/start-app. Removing the call to startApp fixed the issue for me.

I think, after the refactor, tests/helpers/start-app shouldn't existing anymore.

Still I am getting the same error. After both the above changes.

Adding to @alexlafroscia comment, if you want to have mixed tests: you do this in test-helper.js
import resolver from './helpers/resolver';
import {
  setResolver
} from '@ember/test-helpers';
import { start } from 'ember-qunit';
import Application from '../app';
import { setApplication } from '@ember/test-helpers';
import config from '../config/environment';

setResolver(resolver);
setApplication(Application.create(config.APP));
start();

Then you do what @alexlafroscia said in config/environment.js
module.exports = function(env) {
  let ENV = {
    ...
  };

  if (env === 'test') {
    ENV.APP.autoboot = false;
  }

  return ENV;
}

then in start-app.js make sure you have this:
import Application from '../../app';
import config from '../../config/environment';
import { merge } from '@ember/polyfills';
import { run } from '@ember/runloop';
import './with-new-user';
import './importer';

export default function startApp(attrs) {
  let attributes = merge({}, config.APP);
  attributes.autoboot = true;
  attributes = merge(attributes, attrs); // use defaults, but you can override;

  return run(() => {
    let application = Application.create(attributes);
    application.setupForTesting();
    application.injectTestHelpers();
    return application;
  });
}

Then you can leave all your existing tests as-is and add a new test like this:
import { module, test } from 'qunit';
import { visit, currentURL } from '@ember/test-helpers';
import { setupApplicationTest } from 'ember-qunit';

module('Acceptance | transaction drawers new', function(hooks) {
  setupApplicationTest(hooks);

  test('visiting /transaction-drawers-new', async function(assert) {
    await visit('/login');

    assert.equal(currentURL(), '/login');
  });
});

and both should (still) work

This was happening in my app as well, but I discovered that it's because we were applying a .ember-application class manually to the body tag (or something else) on route transition. Hope that helps someone.

@atomkirk It seems with this solution, tests that still use moduleForAcceptance will have Application.create() called twice? At least that's what I am seeing in my (a bit non-standard) ember app. Is this expected and ok?

@atomkirk I tried to setup according to your post, but the new style application tests are not run (all other tests are executed).
Even the line setupApplicationTest(hooks); is not executed if I place a breakpoint there. Any idea why?
Ember is 2.18.2 and quint 4.4.0

I ran into this error, googled the error message, came to this issue, then realised I had called setupRenderingTest(hooks) twice in a single test 😅

Yeah, we should really catch those types of simple mistakes and give a better (more eager) error message.

I forgot to import todo while trying to run a todo test and got this error, importing todo fixed it.

Closing as loads of things have changed since this was originally opened. The root cause of this error message is different in each scenario. It is normally due to invalid "cleanup".
Folks having this issue (now or future), please make a reproduction repo that someone can clone and run ember test in to get this failure. I'm happy to dig into it.

for me i had the same error and the cause was environment variable , because of some modification i made in environment.js i override environment variable to 'development' even in test environment .


[Bug]: The volume buttons aren't changing the volume.

Consent

[X] I have searched the existing issues and verified that there is no open issue for the same subject.
[X] I understand that the YTMDesktop Elgato Plugin has NO affiliation with Google, YouTube or the YTMDesktop application.

Current Behavior
The volume slider is moving to the places that they should be, but it's not changing the volume.
Expected Behavior
The volume should be changing with the slider
Steps To Reproduce
1 Download YTMD
2. Place volume control buttons on the Stream Deck buttons
3. Press volume control buttons and check for audible difference.
OS
Windows
OS Version
11
Plugin Version
v1.7.0
YTMDesktop Version
?
How did you download the software?
Elgato Store
Anything else?
I'm pretty new here and this might be a controller issue. it's not a critical error at least in my opinion, but it's an issue that I am experiencing.

This seems to be a /duplicate of #28
Please make sure you're on one of the latest nightly releases (v2.x isn't supported right now due to missing api endpoints, it has to be a nightly version like Nightly Release (May 2022)), because v1.13.0 isn't supported anymore.
If this issue still persist, feel free to re-open it.


Tab key adds random number of spaces instead of specified

Issue Type: Bug
There are options to control whether Tab characters are replaced by 'n' number of spaces or not, and also to convert between existing tabs and spaces. Following is my setting (on both User and Workspace configs),
Editor: Detect Indentation - False
Editor: Tab Size - 2
Editor: Insert Spaces - True
Editor: Use Tab Stops - False (changing this has no effect)
Yet, whenever I press the Tab key, I get RANDOM number of spaces than what I have set. For example, Tab will be replaced with 2 spaces at some places and 1 space at some other place.
Why is this weird behavior ? My requirement is just to replace Tabs (when I press Tab key) with specified number of spaces ALWAYS instead of random number of spaces. That is the way I was working on Atom.

AFAIK that's not how VSCode behaves. In response to you pressing TAB it inserts enough spaces (at least 1) to move you to the column position of the next tabstop.
For example, when set to Spaces: 8 and I type 1,TAB,|,ENTER,1,2,TAB,|,ENTER,1,2,3,TAB,|,ENTER etc
1       |
12      |
123     |
1234    |
12345   |
123456  |
1234567 |
12345678       |

@gjsjohnmurray Thanks for the explanation. I tried out your example on Atom with the same setting you said, and found to be working the same way. So I was wrong with my statement on Atom.
I now understand how Tab works (I always thought it would simply place Tab character or equivalent number of spaces, but I was wrong), and how it is used to "align" text.
But since we [developers] are more concerned with indentations rather than alignment, wouldn't it be logical if Tab key produced same number of spaces everywhere ? For example, if the indentation I prefer is 2 spaces, both auto indentation and Tab key should produce 2 spaces everywhere. What do you think ?

I disagree. I'm happy with the current behaviour.

@gjsjohnmurray Thank you :)


AssertionError

I encountered such an error when I was running, can you tell me the reason?
Traceback (most recent call last):
File "/home/ubuntu/anaconda3/envs/tf2/bin/ut", line 33, in
sys.exit(load_entry_point('utime', 'console_scripts', 'ut')())
File "/home/ubuntu/tf2/U-Time/utime/bin/ut.py", line 55, in entry_func
mod.entry_func(parsed.args)
File "/home/ubuntu/tf2/U-Time/utime/bin/train.py", line 221, in entry_func
raise e
File "/home/ubuntu/tf2/U-Time/utime/bin/train.py", line 218, in entry_func
run(args=args, gpu_mon=gpu_mon)
File "/home/ubuntu/tf2/U-Time/utime/bin/train.py", line 192, in run
**hparams["fit"])
File "/home/ubuntu/tf2/U-Time/utime/train/trainer.py", line 118, in fit
raise e
File "/home/ubuntu/tf2/U-Time/utime/train/trainer.py", line 104, in fit
self._fit(batch_size=batch_size, **fit_kwargs)
File "/home/ubuntu/tf2/U-Time/utime/train/trainer.py", line 200, in _fit
verbose=verbose
File "/home/ubuntu/anaconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/util/deprecation.py", line 324, in new_func
return func(*args, **kwargs)
File "/home/ubuntu/anaconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py", line 1479, in fit_generator
initial_epoch=initial_epoch)
File "/home/ubuntu/anaconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py", line 66, in _method_wrapper
return method(self, *args, **kwargs)
File "/home/ubuntu/anaconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py", line 876, in fit
callbacks.on_epoch_end(epoch, epoch_logs)
File "/home/ubuntu/anaconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/keras/callbacks.py", line 365, in on_epoch_end
callback.on_epoch_end(epoch, logs)
File "/home/ubuntu/tf2/U-Time/utime/callbacks/callbacks.py", line 194, in on_epoch_end
TPs, relevant, selected, metrics = self.predict()
File "/home/ubuntu/tf2/U-Time/utime/callbacks/callbacks.py", line 87, in predict
assert len(metrics_names)-1 == len(metrics)
AssertionError
2020-07-19 21:34:52.871960: W tensorflow/core/kernels/data/generator_dataset_op.cc:103] Error occurred when finalizing GeneratorDataset iterator: Failed precondition: Python interpreter state is not initialized. The process may be terminated.
[[{{node PyFunc}}]]

Did someone solve this?

有人解决了吗？

After I tried to use a brand new conda environment, the problem was solved. It may be a problem of relying on the library version. I hope to help you

Hi!
This issue is likely linked to the version of tensorflow that you have installed. Would you mind sharing which version you are using?
Thanks
Kind regards
Mathias

It should work with at least tensorflow 2.1 and 2.2 by the way.

Upgrading tensorflow worked. Thank you.

You're welcome 👍

This error pops up again with Tensorflow 2.3.1.

I'm using tensorflow 2.3 and I get this error.

Hi @sweta-r! Would you mind trying to fetch the latest version of the repository and re-install the package with pip? Minor changes have been made to the formatting of the hyperparameter file, so I would also suggest you re-run the ut init command to create a new, correctly formatted file.
Let me know if you encounter any issues.
Mathias

Hi @perslev. Thank you for the quick response. This helped!


hotfix_redshiftOutputWriter

hotfix(RedshiftOutputWriter): add default values for all redshift writer optional parameters

Codecov Report

Merging #57 into master will decrease coverage by 0.23%.
The diff coverage is 0%.

@@            Coverage Diff             @@
##           master      #57      +/-   ##
==========================================
- Coverage   36.36%   36.12%   -0.24%
==========================================
  Files          35       35
  Lines         462      465       +3
  Branches       51       52       +1
==========================================
  Hits          168      168
- Misses        294      297       +3

Impacted Files
Coverage Δ

...output/writers/redshift/RedshiftOutputWriter.scala
0% <0%> (ø)
:arrow_up:

Continue to review full report at Codecov.

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


source code for demo on https://felixhao28.github.io/JSCPP/

Hi,
First of all this is a fantastic project. Is there source available for the interactive editor?
Thanks,
Noel

I see the code at https://github.com/felixhao28/JSCPP/tree/gh-pages. Is there some instructions how to build it .th

Apologies I figured it out.


Taskbar Windows media control

Description of the new feature / enhancement
Bar control in the taskbar so easily click on pause, previous or play next song.
Scenario when this would be used?
When you are listening to music.
Supporting information
No response

no plans for PowerToys to implement this as taskbar doesn't have public APIs for this.  Best spot for this feedback would be windows feedback hub.


Implement a currency registry

Fixes #17

@flaeppe Great, thanks for reviewing! 🙏

Codecov Report

Merging #18 (806471f) into main (c696ac3) will not change coverage.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##              main       #18    +/-   ##
==========================================
  Coverage   100.00%   100.00%
==========================================
  Files            7         8     +1
  Lines         1849      2172   +323
  Branches       675       676     +1
==========================================
+ Hits          1849      2172   +323

Impacted Files
Coverage Δ

src/immoney/currencies.py
100.00% <100.00%> (ø)

src/immoney/registry.py
100.00% <100.00%> (ø)

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Prepend polyfills only once in with-polyfills example

Fixes #4643 by ensuring that the polyfills are not prepended more than once.

Thanks!


maximum length of input

how to set limit of input and also it wont accept any special characters except numbers
how to achieve this

This module doesn't support max length yet. However this is how to add it:
https://github.com/facebook/react-native/blob/master/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java#L475-L514
I'm a beginner at modifying native code, and this is a bit complicated for me. But maybe the author can copy paste this.


ui/placement resource

removed call to PRS
simply return JSON built to call PRS
updated unit tests
removed placement validation for Run
removed PRS from server configuration

Connected to #941

Migration in ES DB will be required. The following config parameters should be removed from configuration/slipstream
:prsEndpoint "http://localhost:8203/filter-rank"
:prsEnable true

The branch builds for me without problems. However, it seems that this requires changes on the UI and the PRS before this can be merged without breaking the deployments.  @konstan is this correct?

Yes, this is correct.  Clients definitely should change before this can be merged.


Document RTCIceCandidatePairStats and RTCIceCandidateStats

These need to be documented fully.
RTCIceCandidatePairStats
The main page and all subpages need to be written.
Specification: https://w3c.github.io/webrtc-stats/#dom-rtcicecandidatepairstats
RTCIceCandidateStats
The main page is about done but there are a number of subpages that need to be done still.
Specification: https://w3c.github.io/webrtc-stats/#dom-rtcicecandidatestats

[x] deleted
[x] networkType
[x] port
[x] priority
[x] transportId
[x] url

RTCIceCandidatePairStats
BCD update information sources
Firefox

https://bugzilla.mozilla.org/show_bug.cgi?id=906990 (Firefox 29)
https://bugzilla.mozilla.org/show_bug.cgi?id=1339906 (Firefox 56)

Chrome
https://bugs.chromium.org/p/chromium/issues/detail?id=633550
https://bugs.chromium.org/p/chromium/issues/detail?id=627816
https://bugs.chromium.org/p/webrtc/issues/detail?id=7062&desc=3
https://chromium.googlesource.com/chromium/src/+/6c227da7f61037394fa95f3d071c4af3827e3a8e

RTCIceCandidatePairStats
Content added

RTCIceCandidatePairStats
availableIncomingBitrate
availableOutgoingBitrate
bytesReceived

BCD updates
Added BCD for RTCIceCandidatePairStats and the Firefox and Chrome
data that I will include for the first push of this interface to BCD. Worth note
is that in Chrome, many of the properties are technically implemented, in
that they exist, but do not return a value because they aren't yet wired up
to anything. I have generally chosen to list those as unsupported. The only
exceptions are cases where they do return a value but it is not calculated
per the specification, in which case I list it as supported but include a note
explaining the deviation from the spec. Any additional data, other than
corrections to blatant errors or Firefox specific issues, can be handled in a
follow-up.
The BCD PR 3628 has been submitted.
Data sources for Firefox

https://bugzilla.mozilla.org/show_bug.cgi?id=906990 (Firefox 29)
https://bugzilla.mozilla.org/show_bug.cgi?id=1339906 (Firefox 56)

Data sources for Chrome

https://bugs.chromium.org/p/chromium/issues/detail?id=633550
https://bugs.chromium.org/p/chromium/issues/detail?id=627816
https://bugs.chromium.org/p/webrtc/issues/detail?id=7062&desc=3
https://chromium.googlesource.com/chromium/src/+/6c227da7f61037394fa95f3d071c4af3827e3a8e

RTCIceCandidatePairStats
Finished..
BCD updates
Added BCD for RTCIceCandidatePairStats and the Firefox and Chrome
data that I will include for the first push of this interface to BCD. Worth note
is that in Chrome, many of the properties are technically implemented, in
that they exist, but do not return a value because they aren't yet wired up
to anything. I have generally chosen to list those as unsupported. The only
exceptions are cases where they do return a value but it is not calculated
per the specification, in which case I list it as supported but include a note
explaining the deviation from the spec. Any additional data, other than
corrections to blatant errors or Firefox specific issues, can be handled in a
follow-up.
The BCD PR 3628 has been submitted.
Data sources for Firefox

https://bugzilla.mozilla.org/show_bug.cgi?id=906990 (Firefox 29)
https://bugzilla.mozilla.org/show_bug.cgi?id=1339906 (Firefox 56)

Data sources for Chrome

https://bugs.chromium.org/p/chromium/issues/detail?id=633550
https://bugs.chromium.org/p/chromium/issues/detail?id=627816
https://bugs.chromium.org/p/webrtc/issues/detail?id=7062&desc=3
https://chromium.googlesource.com/chromium/src/+/6c227da7f61037394fa95f3d071c4af3827e3a8e


Add experiments for different image sizes

Add experiments for different image sizes.

Cloudflare has a small limit for code sizes, allowing only 1 MB for free plans and 10 MB for paid plans. There are no plans currently to run experiments with different image sizes on Cloudflare.


chore: update go package dependencies for demo

Current dependencies on/for this PR:

main

PR #158   👈

This stack of pull requests is managed by Graphite.

I could not get ignite chain build to work until these packages were updated with go get.

When I run go get locally:
under root:
go: go.mod file not found in current directory or any parent directory.
'go get' is no longer supported outside a module.
To build and install a command, use 'go install' with a version,
like 'go install example.com/cmd@latest'
For more information, see https://golang.org/doc/go-get-install-deprecation
or run 'go help get' or 'go help install'.
under demo/rollkit/
go: no package to get in current directory
that said, ignite chain build continues to work with this PR.

go version go1.21.5 darwin/arm64

most recent release. I've never used go before so no idea what's going on


How to correct run rcnn in windows with cython compiled

For bugs or installation issues, please provide the following information.
The more information you provide, the more likely people will be able to help you.
Environment info
Operating System:
windows 10 x64
Compiler:
vs2013 update5
nvcc
gcc
Package used (Python/R/Scala/Julia):
Python
MXNet version:
0.9.5
Or if installed from source:
MXNet commit hash (git rev-parse HEAD):
If you are using python package, please provide
Python version and distribution:
anaconda2 python2.7
anaconda3 python3.5
If you are using R package, please provide
R sessionInfo():
Error Message:
Please paste the full error message, including stack trace.
C:\Users\Trangle\Anaconda2\python.exe D:/MyCoding/PublicCode/example2/rcnn/test.py
Traceback (most recent call last):
File "D:/MyCoding/PublicCode/example2/rcnn/test.py", line 5, in
from rcnn.tools.test_rcnn import test_rcnn
File "D:\MyCoding\PublicCode\example2\rcnn\rcnn\tools\test_rcnn.py", line 7, in
from ..symbol import *
File "D:\MyCoding\PublicCode\example2\rcnn\rcnn\symbol_init_.py", line 1, in
from symbol_vgg import *
File "D:\MyCoding\PublicCode\example2\rcnn\rcnn\symbol\symbol_vgg.py", line 2, in
import proposal
File "D:\MyCoding\PublicCode\example2\rcnn\rcnn\symbol\proposal.py", line 14, in
from rcnn.processing.nms import py_nms_wrapper, cpu_nms_wrapper, gpu_nms_wrapper
File "D:\MyCoding\PublicCode\example2\rcnn\rcnn\processing\nms.py", line 3, in
from ..cython.gpu_nms import gpu_nms
ImportError: No module named gpu_nms
Minimum reproducible example
if you are using your own code, please provide a short script that reproduces the error.
Steps to reproduce
or if you are running standard examples, please provide the commands you have run that lead to the error.

just test rcnn

What have you tried to solve it?

how to compile the needed .pyd for rcnn in windows

This issue is closed due to lack of activity in the last 90 days. Feel free to ping me to reopen if this is still an active issue. Thanks!


automatic AP when wifi station is unavailable.

hello ! pixelix is working great, thank you for all the hard work !
i'd like to suggest a simple improvement where in case it's impossible to connect to configured wifi station after n number of retries that that the display would automatically switch to AP mode, and then if no one connects to AP for x number of minutes to retry automatically to connect to configured SSID again, also wouldn't it be simpler if on first startup to automatically go to AP mode if no wifi is configured ? there seems to be a problem for me where when using an external touch button i can't seem to make go into AP mode since it takes longer to start up than a normal button so it wouldn't be low at esp boot. thanks for your consideration !

Nice to hear that you like the project. Thanks.
Its a security feature not to automatically start up in AP mode and must be forced manually via the user button. Usually configuring the network in AP mode should be a one time task for most of the users.
The remote user button can not be used to trigger AP mode at startup, because it requires a existing network connection to Pixelix, which does not exist at this time. :wink:

thanks for the quick answer ! security concerns are completly valid in this case i haven't thought about it that way ! thanks !


Doors for buildings

Some buildings have entrances mapped. Could you render doors with a plausible placement at the corresponding wall?

I know this is extra-micromapping, but in case this would be implemented, could you consider colouring them with the colour=* value?


Crosswalk WebView on Android KitKat 4.4.2 very lame

[ ] 1.x
[x] 2.x
[ ] bug report
[x] feature request
Current behavior:
Crosswalk WebView on Android KitKat 4.4.2 very lame. The app with Crosswalk WebView on Android 4.4.2 is so slow. The App works without Crosswalk WebView perfect. What could be the problem?
Cordova CLI: 6.5.0
Ionic Framework Version: 2.0.1
Ionic CLI Version: 2.2.1
Ionic App Lib Version: 2.2.0
Ionic App Scripts Version: 1.0.0
ios-deploy version: Not installed
ios-sim version: Not installed
OS: Windows 10
Node Version: v6.9.5
Xcode version: Not installed

    <plugin name="cordova-plugin-crosswalk-webview" spec="~2.3.0">
        <variable name="XWALK_VERSION" value="23+" />
        <variable name="XWALK_LITEVERSION" value="xwalk_core_library_canary:17+" />
        <variable name="XWALK_COMMANDLINE" value="--disable-pull-to-refresh-effect" />
        <variable name="XWALK_MODE" value="embedded" />
        <variable name="XWALK_MULTIPLEAPK" value="true" />
    </plugin>

I couldn't recognize this problem with my app build with crosswalk.
Have you already checked it with the starter app from ionic, if you see the issue here aswell?
Also it would be good if you could provide a video showing the laggy/slowness like a button press, or tab swap.

try to download the ionic-conference app https://github.com/driftyco/ionic-conference-app an install it on your Anrdoid 4.4.2 Device. I saw the issue with ionic-conference aswell as with my own app on the device.

Older phones are always slower, the question is what specific is slower on your side, thats why a video showing it with and without crosswalk would be very helpful.
I'm just running my project with Crosswalk and it has a pretty good performance

I dont' have also any problem on others older devices with crosswalk. I have just on Anrdoid KitKat 4.4.2 this issue.

Hello! Thanks for opening an issue with us! As this seems like more of a support question i will urge that you ask this question on our forum or on our slack channel. Thanks for using Ionic!


Release v1.1.0+2

Change bundle version to v1.1.0+2
Change Unity3D Editor version to 2020.3.30f1

Any reason to switch from Unity version 2020.3.30f1c1 to 2020.3.30f1?
2020.3.30f1c1 is Unity's China-specific version, which is easy to be downloaded from China.


Site digitalslidearchive.org times out

Hi
we are trying to access the REST API on api.digitalslidearchive.org, but the site times out.
Any update, announcement, workaround on this?
Thanks
Marco Antoniotti

I am replacing the server and waiting on a piece of equipment... I think
it's arriving today so I'll hopefully plug it in and get it back up and
running.  I think that machine has been running with a reboot for about 4
years, so not too bad in the grand scheme of things.
On Thu, Aug 29, 2024 at 9:01 AM Marco Antoniotti @.***>
wrote:

Hi
we are trying to access the REST API on api.digitalslidearchive.org, but
the site times out.
Any update, announcement, workaround on this?
Thanks
Marco Antoniotti
—
Reply to this email directly, view it on GitHub
https://github.com/DigitalSlideArchive/digital_slide_archive/issues/358,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAFODTT4NBF2QFJMWAMLZJLZT4LRJAVCNFSM6AAAAABNKMG666VHI2DSMVQWIX3LMV43ASLTON2WKOZSGQ4TIMZXG43DANA
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

--
David A Gutman, M.D. Ph.D.
Associate Professor of Pathology
Emory University School of Medicine

Thanks.
Good to know.
All the best
Marco
On Thu, Aug 29, 2024 at 4:36 PM dgutman @.***> wrote:

I am replacing the server and waiting on a piece of equipment... I think
it's arriving today so I'll hopefully plug it in and get it back up and
running. I think that machine has been running with a reboot for about 4
years, so not too bad in the grand scheme of things.
On Thu, Aug 29, 2024 at 9:01 AM Marco Antoniotti @.***>
wrote:

Hi
we are trying to access the REST API on api.digitalslidearchive.org,
but
the site times out.
Any update, announcement, workaround on this?
Thanks
Marco Antoniotti
—
Reply to this email directly, view it on GitHub
https://github.com/DigitalSlideArchive/digital_slide_archive/issues/358,

or unsubscribe
<
https://github.com/notifications/unsubscribe-auth/AAFODTT4NBF2QFJMWAMLZJLZT4LRJAVCNFSM6AAAAABNKMG666VHI2DSMVQWIX3LMV43ASLTON2WKOZSGQ4TIMZXG43DANA>

.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

--
David A Gutman, M.D. Ph.D.
Associate Professor of Pathology
Emory University School of Medicine
—
Reply to this email directly, view it on GitHub
https://github.com/DigitalSlideArchive/digital_slide_archive/issues/358#issuecomment-2317900548,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAD5SWV666OIZVNM23425HLZT4WVVAVCNFSM6AAAAABNKMG666VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGMJXHEYDANJUHA
.
You are receiving this because you authored the thread.Message ID:
@.***
com>

--
Marco Antoniotti
Somewhere over the Rainbow

Cable didn't get delivered yet-- so may not be to early next week.  Sorry
for the inconvenience.
dg
On Fri, Aug 30, 2024 at 8:56 AM Marco Antoniotti @.***>
wrote:

Thanks.
Good to know.
All the best
Marco
On Thu, Aug 29, 2024 at 4:36 PM dgutman @.***> wrote:

I am replacing the server and waiting on a piece of equipment... I think
it's arriving today so I'll hopefully plug it in and get it back up and
running. I think that machine has been running with a reboot for about 4
years, so not too bad in the grand scheme of things.
On Thu, Aug 29, 2024 at 9:01 AM Marco Antoniotti @.***>
wrote:

Hi
we are trying to access the REST API on api.digitalslidearchive.org,
but
the site times out.
Any update, announcement, workaround on this?
Thanks
Marco Antoniotti
—
Reply to this email directly, view it on GitHub
<
https://github.com/DigitalSlideArchive/digital_slide_archive/issues/358>,

or unsubscribe
<

https://github.com/notifications/unsubscribe-auth/AAFODTT4NBF2QFJMWAMLZJLZT4LRJAVCNFSM6AAAAABNKMG666VHI2DSMVQWIX3LMV43ASLTON2WKOZSGQ4TIMZXG43DANA>

.
You are receiving this because you are subscribed to this
thread.Message
ID: @.***>

--
David A Gutman, M.D. Ph.D.
Associate Professor of Pathology
Emory University School of Medicine
—
Reply to this email directly, view it on GitHub
<
https://github.com/DigitalSlideArchive/digital_slide_archive/issues/358#issuecomment-2317900548>,

or unsubscribe
<
https://github.com/notifications/unsubscribe-auth/AAD5SWV666OIZVNM23425HLZT4WVVAVCNFSM6AAAAABNKMG666VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGMJXHEYDANJUHA>

.
You are receiving this because you authored the thread.Message ID:
@.***
com>

--
Marco Antoniotti
Somewhere over the Rainbow
—
Reply to this email directly, view it on GitHub
https://github.com/DigitalSlideArchive/digital_slide_archive/issues/358#issuecomment-2321164926,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAFODTUZ5H3GADK4SYKAXL3ZUBTYPAVCNFSM6AAAAABNKMG666VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGMRRGE3DIOJSGY
.
You are receiving this because you commented.Message ID:
@.***
com>

--
David A Gutman, M.D. Ph.D.
Associate Professor of Pathology
Emory University School of Medicine

No problem... Just let us know when the server will be reachable.
All the best
Marco

Give it a shot...  May still be flaky, need to test it a bit more.  There
was a lot of fun and exciting VLAN upgrades and MAC address filtering I
needed to resolve after swapping out to a new machine.
On Tue, Sep 3, 2024 at 2:53 PM Marco Antoniotti @.***>
wrote:

No problem... Just let us know when the server will be reachable.
All the best
Marco
—
Reply to this email directly, view it on GitHub
https://github.com/DigitalSlideArchive/digital_slide_archive/issues/358#issuecomment-2327201464,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAFODTVMFNEEK3XXAU7SC63ZUYARZAVCNFSM6AAAAABNKMG666VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGMRXGIYDCNBWGQ
.
You are receiving this because you commented.Message ID:
@.***
com>

--
David A Gutman, M.D. Ph.D.
Associate Professor of Pathology
Emory University School of Medicine