Prepare for zend-mvc v3

For the v3 release, we will be pulling in a smaller set of components out-of-the-box. These are primarily defined by zend-mvc, but also include:

zend-config (used by the zend-modulemanager ConfigListener by default)
zend-component-installer (to automate registration of components as modules)

Additionally, we plan to leverage Composer for all autoloading, which means:

we can register a PSR-4 entry for the Application module, and remove one directory level;
the Application module no longer needs to setup autoloading.

For a minimal application, we do not want or need internationalization. As such, this patch also removes all translations and calls to translate strings in templates. We can explore re-adding them later, or offering an alternative skeleton application with more default features (including i18n, forms, databases, etc.).
At the time of submission, this patch provides a working skeleton with the current zend-mvc develop branch.

This is a WIP; do not merge until zend-mvc is tagged and/or zendframework is tagged!

A few notes here:

not sure about translations, although they did make the skeleton MUCH fatter for very little gain. Including a translation module would be sufficient. Keeping the ->translate() calls would also be sufficient, for now.
I can't find direct references to Zend\Config in this code. Is the zend-modulemanager using class_exists()? If so, we should probably make this particular dependency usage explicit.
zend-component-installer I'm trying that nao \o/

A few other notes:

Zend\Loader still seems to be required: what does it take to chop its head off?
Zend\Http also required, but I see no diactoros: does that mean that PSR-7 support won't be there OOTB?
aren't required components automatically injected in application.config.php by the zendframework/zend-component-installer`? I glanced over the code at https://github.com/zendframework/zend-component-installer/blob/07fa730b11041d48106f658b655230828dc76ff1/src/ComponentInstaller.php#L187 - seems like that's the case

Confirmed: adding them to application.config.php is probably not needed, and it would expose the users to the process of configuring modules (possibly good):

Very nice, it looks very clear and I like the way other zend-components are registered as modules. Removing one directory level is also very nice.
For the skeleton, I would convert all array(...) to use short array syntax. Old arrays exists on config files and in the layout.phtml.
Thanks for good work guys!

@weierophinney I created PR https://github.com/weierophinney/ZendSkeletonApplication/pull/3 to your branch for some feedbacks above ( wording, ::class, short array syntax )

@Ocramius — some responses:

not sure about translations, although they did make the skeleton MUCH fatter for very little gain. Including a translation module would be sufficient. Keeping the ->translate() calls would also be sufficient, for now.

The translate() helper is part of zend-i18n, and would thus require installing zend-mvc-i18n as a dependency (which also brings in zend-i18n). We can certainly do that, but my thought is to have:

a base, minimal skeleton, with only the bare minimum necessary to create an MVC application, and then potentially add skeletons with more features.
an installer, ala zend-expressive, that allows you to opt-in to features:

"Do you want the console integration?"
"Do you want i18n integration?"
"Do you want to use zend-db?"
"Do you need caching?"
etc.

One consistent complaint I've heard is from developers who start with the skeleton, and then need to strip out a whole bunch of stuff they don't need. If we have a minimal base on which we can expand, we solve that problem.

I can't find direct references to Zend\Config in this code. Is the zend-modulemanager using class_exists()? If so, we should probably make this particular dependency usage explicit.

It's used by the ConfigListener of zend-modulemanager, which I discovered that when testing out the skeleton. At this point, I'm unsure if the dependency should go in:

zend-modulemanager (ConfigListener is technically optional, though)
zend-mvc (as it enables the ConfigListener by default)
the skeleton application

Thoughts?

zend-component-installer I'm trying that nao \o/

Interestingly, the Zend\Router and Zend\Validator entries in the application configuration were added by the component installer when I first did a composer install. :smile: (I'm very excited by this!)

@Ocramius — more responses:

Zend\Loader still seems to be required: what does it take to chop its head off?

It's currently required by zend-modulemanager, for autoloading modules that do not have autoloading setup. (See Zend\ModuleManager\Listener\ModuleLoaderListener.)
Since one goal is to have a clear and clean upgrade path, we currently need to keep that. What we could do, however, is deprecate the usage; the question is if we should do that in a 2.x series of zend-modulemanager, or in the v3 release.
If we do it in the 2.x series, we could emit a deprecation notice from Zend\ModuleManager\Listener\AutoloaderListener whenever it receives autoloader configuration, prompting the user to add autoloading configuration to their composer.json; we could even link to a documentation page detailing the various approaches.
Thoughts?

Zend\Http also required, but I see no diactoros: does that mean that PSR-7 support won't be there OOTB?

Out of the box, no, not for the minimal skeleton. zend-psr7bridge is listed as a suggested requirement for zend-mvc already, however, and the suggestion text indicates it should be installed if you plan to use PSR-7 middleware within your application.

aren't required components automatically injected in application.config.php by the zendframework/zend-component-installer`? I glanced over the code at https://github.com/zendframework/zend-component-installer/blob/07fa730b11041d48106f658b655230828dc76ff1/src/ComponentInstaller.php#L187 - seems like that's the case

Yes and no. zend-component-installer prompts you to add the component, but gives you the option of saying "no" (as well as saying, "remember my selection for all remaining components on this installation run). It also checks to see if the component is already listed, and, if so, will not prompt. My feeling is that components required by the base skeleton should be listed in the configuration as well, so that you only get prompted the first time you add a new component.

For the skeleton, I would convert all array(...) to use short array syntax. Old arrays exists on config files and in the layout.phtml.

Noted; can't believe I missed that on the first pass through!

The translate() helper is part of zend-i18n, and would thus require installing zend-mvc-i18n as a dependency (which also brings in zend-i18n). We can certainly do that, but my thought is to have:

a base, minimal skeleton, with only the bare minimum necessary to create an MVC application, and then potentially add skeletons with more features.
an installer, ala zend-expressive, that allows you to opt-in to features:
"Do you want the console integration?"

"Do you want i18n integration?"
"Do you want to use zend-db?"
"Do you need caching?"
etc.

Agreed, let's keep i18n out then.

I can't find direct references to Zend\Config in this code. Is the zend-modulemanager using class_exists()? If so, we should probably make this particular dependency usage explicit.

It's used by the ConfigListener of zend-modulemanager, which I discovered that when testing out the skeleton. At this point, I'm unsure if the dependency should go in:

It should probably live in the module-manager. The 95% use-case of the module manager is merging config.

Out of the box, no, not for the minimal skeleton. zend-psr7bridge is listed as a suggested requirement for zend-mvc already, however, and the suggestion text indicates it should be installed if you plan to use PSR-7 middleware within your application.

Fair enough. I feel like we should push further on this in future, but maybe not now.

Yes and no. zend-component-installer prompts you to add the component, but gives you the option of saying "no" (as well as saying, "remember my selection for all remaining components on this installation run). It also checks to see if the component is already listed, and, if so, will not prompt. My feeling is that components required by the base skeleton should be listed in the configuration as well, so that you only get prompted the first time you add a new component.

My thought here is that while the user may answer "no", he may actually learn that he will be prompted. Not having that is also fine, IMO, but we're committing post-install artifacts. Still: good for usability, let's keep it as-is, I'd say.

Out of the box, no, not for the minimal skeleton. zend-psr7bridge is listed as a suggested requirement for zend-mvc already, however, and the suggestion text indicates it should be installed if you plan to use PSR-7 middleware within your application.
Fair enough. I feel like we should push further on this in future, but maybe not now.

Would it be that crazy if the "installer" and skeleton was merged with zend-expressive-skeleton ?
If it was, there are possible cons:

People would still need to decide whether to go PSR7 or "legacy mvc", requires understanding what it is.
Increases package complexity slightly.

Pros:

Advertising: 3.0.0 equals the future version - expressive becomes integral part of new version.
Only one skeleton to maintain instead of two.
People actually start using PSR7 when they "default to ZF" or just want to try "the new ZF".
Because there's still a choice between PSR7 and "legacy mvc" in the installer, people can choose the latter and have somewhat easier migration path from ZF2.
Less legacy stuff. No need to wait for ZF4 or ZF3.1 or whatever else that cuts the cord.

Current blog posts and available docs do not clearly explain the PSR7 transition IMO. This would effectively solve the problem as ZF3 skeleton would give one clear choice. Through the "power of defaults" (default = expressive), the installer would be educating and promoting PSR7.

I think for 'controllers' -> 'invokables' config, we can use factories and use Zend\ServiceManager\Factory\InvokableFactory ? and change Application\Controller\Index to Application\Controller\IndexController for the key.

@Thinkscape —

Would it be that crazy if the "installer" and skeleton was merged with zend-expressive-skeleton ?

Yes, yes it would. :smile:
Here's the thing: zend-mvc and zend-expressive represent very different paradigms, including configuration and workflow. Merging the two would be akin to violating the SRP.
While I appreciate the pros and cons list you've created, I think you vastly underestimate the point about package complexity, and user comprehension. Merging the two installers is difficult for a number of reasons:

Right now, we can have the skeleton reflect 90% of the application, with the last 10% being from installation artifacts created by the installer. Merging the two would switch that ratio around and require generation of around 90% of the skeleton by the installer.
This in turn makes maintenance far harder for the bulk of changes. Many changes we make currently can be made in files in their final location; moving this all into installation artifacts makes understanding where the changes need to be made more difficult.
End users using the installer now need to know the difference between zend-mvc and zend-expressive in order to make a decision as to what to do next. This is not at all trivial, and while we could default to one or the other (likely Expressive), I suspect that this would be a huge hurdle.

At this point, we've trimmed the cruft from the MVC, and, believe it or not, I think we've made it a far more viable option as a full-stack framework. For those who want that kind of integration, it's a good option. But for those who want to use PSR-7 and middleware, or who want fine-grained control over what they install and use in their application, Expressive will be a better fit. They are different choices, targeting different sets of developers.
The takeaway is: we need to figure out our marketing messages around the two, and make sure there's readily accessible information so developers can make the correct choice for their project. But part of that choice is figuring out which project to start with, and merging those complicates that choice.

@samsonasik Thanks for the patches!

There's two major concerns I see.
Even with extremely well constructed, immaculate PR play you still end up having to explain "Zend Framework" (the parent github.com/zendframework group and project marketing name). What is it then?
If you follow the "bag of loosely-coupled coupled components" rhetoric, then you're allowed to give out several (competing) implementations of say, MVC. Thanks to interop efforts, it now goes even beyond github.com/zendframework and one can pick and choose from different routers, template engines, IoT containers etc. But that increases the complexity and confusion as only some components work with some components.
With ZF2 we had:

a one, central point of contact,
a desired/expected consistent architecture,
handling of modularity, plugins, etc.
some hard-coupling around MVC.

Now with recent efforts we're releasing the grip on the MVC and made it less coupled, BUT the structure seems to hold its ground and now compete directly with "Expressive". Expressive seems to be doing a catch-up game to ZF2: similar end-goals (easy to use architecture, extensibility, web-app framework) but different approaches and "missing features".
With current direction and velocity I can only see more confusion. There isn't now a single "architecture design" that is either recommended or preferred. I understand the benefits of staying neutral and respecting developers' choices but I can feel this becoming a major pain point esp. for less experienced developers who are not so opinionated nor knowledgeable about PSR7 vs event-driven MVC.
Secondly, think about the version management - bumping major version (ZF2 to ZF3) is a perfect moment to break BC, introduce fresh new concepts and sweep legacy under the rug. ZF1 to ZF2 path was a good example of it. It was painful from migration perspective, but it enabled a quality jump like no other. I'm afraid we might be lose the benefit of this new-version moment, increase the overall complexity, bump up learning curve and muddle up the messaging even more.
My proposed solution is hard on the implementation side (all your points taken), is "opinionated", but simplifies and converges a lot in user-land; is better long-term.

@weierophinney the wording and logo still uses 'ZF2', I will start provide patch with logo and send pull request to your pull request :dancer:

@Thinkscape Well said and sadly I have to agree.

@weierophinney There's two major concerns I see.
Even with extremely well constructed, immaculate PR play you still end up having to explain "Zend Framework" (the parent github.com/zendframework group and project marketing name). What is it then?
If you follow the "bag of loosely-coupled components" rhetoric, then you're allowed to give out several (competing) implementations of say, MVC. Thanks to interop efforts, it now goes even beyond github.com/zendframework and one can pick and choose from different routers, template engines, IoT containers etc. But that increases the complexity and confusion as only some components work with some components.
With ZF2 we had:
a one, central point of contact,
a desired/expected consistent architecture,
handling of modularity, plugins, etc.
consistent education path,
some hard-coupling around MVC.
Now with recent efforts we're releasing the grip on the MVC and made it less coupled, BUT the structure seems to hold its ground and now compete directly with "Expressive". Expressive seems to be doing a catch-up game to ZF2: similar end-goals (easy to use architecture, extensibility, web-app framework) but different approaches and "missing features".
With current direction and velocity I can only see more confusion. There isn't now a single "architecture design" that is either recommended or preferred. I understand the benefits of staying neutral and respecting developers' choices but I can feel this becoming a major pain point esp. for less experienced developers who are not so opinionated nor knowledgeable about PSR7 vs event-driven MVC.
Secondly, think about the version management - bumping major version (ZF2 to ZF3) is a perfect moment to break BC, introduce fresh new concepts and sweep legacy under the rug. ZF1 to ZF2 path was a good example of it. It was painful from migration perspective, but it enabled a quality jump like no other. I'm afraid we might be lose the benefit of this new-version moment, increase the overall complexity, bump up learning curve and muddle up the messaging even more.
My proposed solution is hard on the implementation side (all your points taken), is "opinionated", but simplifies and converges a lot in user-land; is better long-term.

@Thinkscape —
Sorry for the lateness of this response; I've been busy on the documentation milestone, and missed your comments until today, when I'm finally returning to this. Below are my thoughts on your latest comment. I really appreciate the feedback, even if I don't agree with it.

If you follow the "bag of loosely-coupled components" rhetoric, then you're allowed to give out several (competing) implementations of say, MVC. Thanks to interop efforts, it now goes even beyond github.com/zendframework and one can pick and choose from different routers, template engines, IoT containers etc.

Yes and no. This has theoretically always been possible, due to the event-driven nature of Zend\Mvc\Application. Want a different routing solution? Register a custom "route" listener to do so. Want a different dispatcher? Register a custom "dispatch" listener (we already did with the MiddlewareListener!). etc. The efforts so far with the ZF3 initiatives have been to take this to its logical conclusion:

Reduce dependencies/coupling. This makes using ZF components more palatable for many, who were reluctant because any single component was often pulling in up to a dozen others.
Simplify wiring. We've been doing this by introducing ConfigProvider and Module classes to each component, providing the necessary configuration to wire them into IoC containers and, if required, the zend-mvc event manager.  zend-component-installer automates wiring these into zend-mvc- or Expressive-based applications.

The point is to allow developers the ability to pick and choose what they want, whether they are building Zend Framework applications or not. This includes Expressive.

But that increases the complexity and confusion as only some components work with some components.

I'm not sure I agree with this statement at all. The work done to define the config providers and Module classes, as well as the component installer, makes certain that these play nicely with one another. Due to current efforts by the container-interop group, we'll likely have a solution around container configuration soon that will make this trivial even for non-Zend application stacks.

With ZF2 we had:

a one, central point of contact,
a desired/expected consistent architecture,
handling of modularity, plugins, etc.
consistent education path,
some hard-coupling around MVC.

Why are all of these considered "good"? And why do you assume they're all gone?

I'm not sure what you mean by "one, central point of contact." If you mean a monolithic repository, my argument to that is a storify on multi-repository benefits. The executive summary: a monolithic repository slows down and complicates release cycles, and doesn't scale from a maintentance standpoint. The move to many repositories has already proved itself; we've done multiple hundreds of releases since last fall, vs the dozen or so in the previous two years.

While we can point to an "expected" or "consistent" architecture with ZF2, at the same time, I can argue it was not always "desired." Many developers disliked the default skeleton, as it was too complex for smaller tasks. Others followed some very strange practices when it came to directory layout. Some missed the single "library" or "src" directory of the ZF1 skeleton, and would recreate it in a ZF2 application. The point is: we can point the way, but we cannot enforce it, and anything we do to enforce it makes the structure inflexible.

Modularity and plugins are still present. Literally the only difference with these currently is how modules are handled, as there are slight differences between zend-modulemanager and the proposed zend-config-manager (the latter handles literally only the configuration aggregation, arguably the most interesting and useful feature of zend-modulemanager).

Yes, we do lose a consistent education path to a degree, particularly if we have multiple skeletons (and we already do: one for zend-mvc, another for Expressive). However, this also gives us flexibility: we can have different skeletons for different application purposes. These each pose a potentially different educational approach. This could turn out to be either good or bad, but I think it's too early to claim either at this point.

Hard-coupling around zend-mvc is precisely what we needed to remove. This alone was causing huge problems with keeping components updated and independent. It took us literally months to untangle that and make it possible for components to develop independently — and thus evolve. Tight coupling between components should be done only when strictly necessary. Tight coupling with the MVC makes it too hard to evolve our components, or allow them to be used easily outside the framework. I, for one, want to see greater adoption, not less.

Expressive seems to be doing a catch-up game to ZF2: similar end-goals (easy to use architecture, extensibility, web-app framework)

Yes, but the approaches are very different. zend-mvc is an event-driven pipeline, using priorities, and requiring developers learn:

IoC
Our event system (which is a behemoth)
How priority systems work (in order to correctly and effectively use the event system)
Our module system (in order to learn how to do literally anything with the system, you need to build modules)
Our HTTP abstraction layer (which differs from everybody else's, dis-allowing re-use between frameworks)

Expressive, on the other hand:

Recommends and requires IoC, but you can use it without.
Uses middleware pipelines for shaping application flow, just like any other middleware framework.
Allows developers to structure the application according to application/organizational needs.
Uses a standardized HTTP abstraction layer, allowing re-use of middleware between frameworks.

Catch-up game? In many ways, zend-mvc is the one playing catch-up.
(I'll note that I still find ZF2 powerful, and a huge leap over ZF1. I also have take some time to analyze it critically — via the issues we've received, contact forms, stack overflow questions, in-person conversations, etc. — and I'm well aware of its failings, too. It's never fun tearing apart something you've poured your heart and soul into, but it's how we improve.

but different approaches and "missing features".

Most of those "missing features" are not missing at all, just delivered by third-party framework-agnostic PSR-7 middleware libraries. Which is exactly the point of having PSR-7 around in the first place — to enable such an ecosystem, so that no one framework or library ends up holding all the code.

With current direction and velocity I can only see more confusion. There isn't now a single "architecture design" that is either recommended or preferred. I understand the benefits of staying neutral and respecting developers' choices but I can feel this becoming a major pain point esp. for less experienced developers who are not so opinionated nor knowledgeable about PSR7 vs event-driven MVC.

This is the place I agree with you. Having a choice in which application structure to choose is problematic. The choice was not made lightly, and there were several distinct considerations made:

The ZF1 -> ZF2 transition was a nightmare. Applications written to target ZF1 cannot be easily migrated to ZF2. End of story. I know many consultants, including Zend's own, who are still working with clients to migrate. Many chose not to migrate, and either are sticking with ZF1, fully knowing it will EOL eventually, or have chosen to jump ship to a different framework altogether.
I, for one, did not want a repeat of this. So we needed to keep some version of zend-mvc around, and make it as backwards compatible as possible, to allow users to update.

We've witnessed a huge change in the PHP ecosystem. Yes, Symfony has made huge in-roads in adoption, but an interesting, under-reported fact: a lot of that adoption has been through other frameworks such as Silex and Laravel, who build on top of it, and use a subset of the full-stack. Developers want something a) simpler, and/or b) more flexibly. PSR-7 middleware frameworks are hitting that sweet-spot, because they allow developers to compose their applications out of any libraries they want, and because they allow developers to define any workflow they want, simply and programmatically, instead of via an event abstraction. This is powerful.

Secondly, think about the version management - bumping major version (ZF2 to ZF3) is a perfect moment to break BC, introduce fresh new concepts and sweep legacy under the rug. ZF1 to ZF2 path was a good example of it.

Please see my notes above. While it's a chance to increase quality and/or decrease complexity, it's also a chance to completely lose our existing user base, and likely ensure we never get adoption. What I'm trying to do here with this proposal is keep a semblance of the structure we've had during the ZF2 lifecycle, for our existing users and those developers who are fluent and comfortable with the ZF2 application workflow. For new projects, by developers new to Zend Framework, we will recommend Expressive, as a more modern, more flexible, and ultimately easier stack on which to build applications.

I've updated the issue description to add a TODO list (which is also in the branch).

I've created zend-skeleton-installer for handling the "optional dependencies" installation requirements. It is a composer plugin that will prompt based on the contents of the composer.json extra.zend-skeleton-installer key, allowing users to choose the features they want to install in their project. Once installed, it uses zend-component-installer to update application configuration, and then removes itself from the project.
With that in place, I should be able to push the final updates (which will only be composer.json changes) required to complete this pull request and prepare it for testing and review.

9c67fba adds the prompts into the composer.json; I then needed to update the zend-mvc dependency to alias it to 2.8.0, as zend-test and zend-mvc-console are pinned to ^2.7 versions; I'll get these updated before tagging zend-mvc 3.0 and having this patch merged.
At this point, the remaining tasks are:

[ ] Update zend-mvc-console to pin to ^3.0.0-dev || ^3.0.0
[ ] Update zend-test to pin to ^2.7.1 || ^3.0
[ ] Add zend-development-mode as a development requirement

[ ] add config/development.config.php.dist as done in apigility
[ ] add config/modules.config.php as done in apigility
[ ] add verbiage post-install to execute public/index.php development enable

[ ] Add verbiage before prompting configuration changes that users can safely choose to "Remember this option for other packages of the same type" (no packages are development modules).
[ ] Document the changes to the skeleton either in zend-mvc or a tutorial (this likely can and will happen after merging this pull request)

I'm going to defer the zf-development-mode additions to a later iteration, as the component needs to be updated to act as a console script (vs MVC console tooling) first.
I'm still mulling the prompt to tell users they can safely choose the "remember this option for other packages of the same type"; I'm thinking this would need to be a special target within the OptionalPackagesInstaller or other post-install-cmd listener in the zend-skeleton-installer. Regardless, it would be a change in that repository, not this one.
Documentation changes will need to take place in the tutorials; I've created a wiki page detailing documentation needs.
As such, I'd argue this is no longer a WIP, but can be tested and reviewed.

I've tried, working as expected.

Found more TODO items:

[ ] Update the Vagrantfile to use ubuntu 16.04 and PHP 7.

Hello,
I am not an expert, adding an example of object injection could be very useful.
I have tried to follow what I can understand with a really basic model, a factory in this fork:
https://github.com/Jodaille/ZendSkeletonApplication
Is it the right way to use/call a model in a controller ?

@Jodaille — adding such examples is out-of-scope for the skeleton application, and belongs in the tutorials.
Regarding your example, it's spot on, though I'd suggest one change: implement Zend\ServiceManager\Factory\FactoryInterface, and modify your factory to implement __invoke() as it defines. It would then look something like the following:
<?php
// IndexControllerFactory.php
namespace Application\Controller\Factory;

use Interop\Container\ContainerInterface;
use Zend\ServiceManager\Factory\FactoryInterface;
use Application\Controller\IndexController;

class IndexControllerFactory implements FactoryInterface
{
    public function __invoke(ContainerInterface $container, $name, array $options = null)
    {
        return new IndexController($container->get('MyApplication'));
    }
}

Updated Vagrantfile created that:

Uses the official ubuntu/trusty64 as the base box (existing issues with VirtualBox and the ubuntu/xenial64 box prevent its usage at this time)
Updates to PHP 7.
Installs, but does not run, composer (installed to /usr/local/bin/composer).
Maps port 8080 instead of 8085 in order to be consistent with the Docker image.
Uses the default vhost on the virtual machine, instead of creating a new one.
Updates the default vhost to point its DocumentRoot at /var/www/public.
Maps the current working directory to /var/www.

Adds a Dockerfile that:

Builds on the php:7.0-apache image
Installs the PHP zip extension (so that composer can run)
Updates the default vhost on the virtual machine to point its DocumentRoot at /var/www/public.
Installs composer to /usr/local/bin/composer.
Makes the working directory and volume /var/www.
Exposes port 80.

Adds a docker-composer.yml that:

Uses the Dockerfile as its base.
Builds against the working directory.
Maps the working directory to the image's /var/www.
Maps the host's port 8080 to the image's port 80.

@zendframework/community-review-team Ready for review!

This is ok for me :+1:

Status update
First, I've updated to stable versions of:

zend-mvc (3.0)
zend-test (3.0)
zend-mvc-console (1.1.10, which marks zend-mvc v2 as a conflict)
zend-mvc-i18n (1.0)
zend-mvc-plugins (1.0; see below)

This puts the pull request in a good position to be tagged once merged. However…
I've created a zend-mvc-plugins metapackage, to aggregate all official plugins, reducing the number of prompts by three. However, on experimentation, it appears that packages installed via a metapackage do not trigger plugins; instead, only the metapackage triggers the plugin.
The solution will be to allow the module and component keys to be arrays, which will allow zend-mvc-plugins to define the list of components for zend-component-installer to install. Until that is done, this PR cannot be merged.

Status update

I've released zend-component-installer 0.2.0, which adds support for arrays of components, modules, and config-providers when defining packages.

I've released zend-skeleton-installer 0.1.1, which fixes a bug in the Uninstaller whereby the `composer.lock was not updated to reflect the removal of the skeleton installer package.

I've released zend-mvc-plugins 1.0.1, which updates the package to define an array of components for the component installer to inject into configuration.

At this time, this patch is finally ready to merge!

Pushed to develop for release with 3.0.0.


Error in the accompanying Livebook notebook: function Explorer.Series.slice/2 is undefined or private

The accompanying Livebook notebook contains the following piece of text:
Which you can pass to `Explorer.Series.slice/2` if you want the sorted values.

```elixir
Series.slice(s, ids)
```

But there's no Explorer.Series.slice/2 function. There's only the Explorer.Series.slice/3 one.
When one runs the notebook, the following error is shown:
** (UndefinedFunctionError) function Explorer.Series.slice/2 is undefined or private. Did you mean:

      * slice/3

The notebook is updated to the main branch but it declares Explorer v0.2.0 on top. It is probably best for you to use the notebook from hexdocs.pm instead! Or update Mix.install to use git.

My mistake. I imported the notebook from the main branch but was using Explorer v0.2.0.


GH-2375 "location"-Button in Table Browser to open in New Window than popup box

What changes were proposed in this pull request?
GH-2375 -"location"-Button in Table Browser to open in New Window than popup box
How was this patch tested?

Tested manually works well

For the record, this is supposed to show the mini File Browser on hover or click, this don't show up anymore?

It's indeed supposed to show the popover. If it's broken perhaps there's an error in the console that might help troubleshoot?


Introducing support for azurerm_network_security_rule creation with for_each iteration meta-argument

Describe your changes
Added support to create azurerm_network_security_rule resources with for_each instead of count
Issue number
#90
Checklist before requesting a review

[X] The pr title can be used to describe what this pr did in CHANGELOG.md file
[X] I have executed pre-commit on my machine
[X] I have passed pr-check on my machine

Thanks for your cooperation!

for_each example was not deploying any kind of rule and failed the e2e test, added one rule to custom_rules.

Thanks @juanjojulian for the update, would you please rename examples/For_each to examples/for_each?

I forgot that MacOS X default installation formats the disk with a case insensitive file system... No problem, fixed and committed.

Thanks @juanjojulian for the update, we've got failed tests, one exmaple is:
TestExamples/MySQL-true 2023-02-17T01:56:26Z retry.go:99: Returning due to fatal error: FatalError{Underlying: error while running command: exit status 1; ╷
│ Error: Unsupported attribute
│
│   on ../../main.tf line 45, in resource "azurerm_network_security_rule" "predefined_rules_for":
│   45:   priority                                   = each.value.priority
│     ├────────────────
│     │ each.value is object with 1 attribute "name"
│
│ This object does not have an attribute named "priority".
╵}

I guess we need update all example's default variables, and we might need an extra precondition to ensure that when var.use_for_each is true, then the priority must be set, this precondition could bring the users a much clearer message on what's wrong with their variables. WDYT?

I see, I agree a precondition is going to be needed to help the users understand that priority is needed in for_each mode. No problem.
Let me think on the approach for the tests, is not only about modifying the default variables for every example but also modifying the modules the examples consume to make them expect priority in case for_each is true.  I don't see an easy way for this as once you define priority even if you make it null this lookup:
priority = lookup(var.predefined_rules[count.index], "priority", 4096 - length(var.predefined_rules) + count.index)
is going to find it and will not apply the default value, it will apply null and the deployment will fail. And then there is the ActiveDirectory module with a large list of rules...

Finally got some time for this... Added a precondition for priority attribute in custom rules and predefined rules when using for_each. Also modified the tests for the new code.

Thanks for update @juanjojulian , it looks like we've met a concurrent test issue while executing version upgrade test. I'll try a fix, please wait for my test framework patch, then merge to the latest main branch, thanks for your understanding!

We've got a concurrent issue when test this pr, would you please merge your branch with the latest main branch and try again? Apology for the inconvenience.

No problem. Done!

Hi @lonegunmanb, version-upgrade test is failing, if I'm not mistaken this test deploys a resource with the current module version (4.0.1) and then tries to update the module to the one in this PR. The current module version doesn't have a use_for_each variable declared and unfortunately Terraform don't allow us to pass command line variables if they are not declared in the code.

Maybe we can remove the for_each option from the upgrade test. As version 4.0.1 only supports count method there is no need to test the upgrade with for_each, that's not an scenario that is going to happen, and introduce it again for next version. What do you think?.

Hi @lonegunmanb, version-upgrade test is failing, if I'm not mistaken this test deploys a resource with the current module version (4.0.1) and then tries to update the module to the one in this PR. The current module version doesn't have a use_for_each variable declared and unfortunately Terraform don't allow us to pass command line variables if they are not declared in the code.

Maybe we can remove the for_each option from the upgrade test. As version 4.0.1 only supports count method there is no need to test the upgrade with for_each, that's not an scenario that is going to happen, and introduce it again for next version. What do you think?.

Thanks @juanjojulian, would you please set for_each value via environment value?
os.Setenv("TF_VAR_for_each", strconv.FormatBool(forEach))

Terraform would only try to read variable's value from env when there's no where to get it's value, so this environment won't bother previous version.
The blocker here is once we've done that, we cannot run our tests in parallel since the environment is global. Now test framework doesn't support turning on and off the parallelism.
I'd like to add a new toggle for test framework so we can turn off the parallelism, then we can use this env var approach. Apology for your bad experience, and thanks for your patience, you have improved our CI pipeline and test framework.

Thanks @lonegunmanb, no problem from my side, I'm happy to help when I have time to. In fact already applied and tested locally your suggestion for the version-upgrade test and seems to work nicely. Let me know if you want me to submit a new PR with it, find the changes bellow:
for _, f := range useForEach {
  os.Setenv("TF_VAR_use_for_each", strconv.FormatBool(f))
  t.Run(fmt.Sprintf("%s-%t", directory.Name(), f), func(t *testing.T) {
    test_helper.ModuleUpgradeTest(t, "Azure", "terraform-azurerm-network-security-group", fmt.Sprintf("examples/%s", d.Name()), currentRoot, terraform.Options{
      Upgrade: true,
    }, currentMajorVersion)
  })
}


Builder/dockerfile/dispatchers.go unit tests

Unit tests for builder/dockerfile/dispatchers.go.
Part of resolving #20784
Signed-off-by: Tomasz Kopczynski<EMAIL_ADDRESS>

LGTM

LGTM


Provide adequate overrides to System settings on a per data provider level.

XRTK - Mixed Reality Toolkit Feature Request
Is your feature request related to a problem? Please describe

When platform level data provider configurations are changed from the default setting in the parent service level's configuration profile, then we should be properly supplying an "override" to that data provider with the setting.
The best example of this atm is the Spatial Awareness System and the WMR/Lumin data providers. There's global settings in the spatial awareness system that can be adjusted for all, then a per platform setting can also be supplied that will effectively override the global setting.
How would you classify your suggestion

Usability / Configuration
Architecture / Services

Acceptance Criteria

[ ] Developers can set global settings for a service using it's configuration profile
[ ] Developers can set per platform settings using a data provider's configuration profile on the parent service.

My main issue with setting "Per Service" platform level overrides, is that you are taking an already heavy configuration layout and making it far more complicated.
Also if I want to look at the configuration for a single platform, I now have to hunt through each service to find the differences.  The approach in #290 is far simplier, bu grouping each platforms config under a single header.
They can still chare configuration, but allows the developer to customise a "Set" of config for a platform.

You are setting a custom config per platform, on the data provider level.
The top down approach means that each master configuration can me wildly different than the per platform configuration.

I suppose it's simpler in the fact that you can easily see the changes, but it's more complex because of the vast differences you can have form one master configuration to another.
Where as the bottom up approach means that the platform is configured exactly as it should be and all the other settings are shared between all platforms.

Settings can still be shared between platforms, I would simply create folders for all my config.  Putting the global (shared) config in one folder.  Then creating platform variances only where I needed them

Imho, it' simply a UX problem. But in reality we really need it to be this way from a arch standpoint.
We can easily make a window that shows just the specific platform settings.

Putting the global (shared) config in one folder. Then creating platform variances only where I needed them

That's already the way it works

Yes, except currently, there is no way to separate config per platform. Other than in the Data providers.
It's not available for the core services, etc.

Core services are the global shared config, and the data provider profiles are the per platform settings.
We just need a way to make this easier to access via UX updates.

And make it more obvious that the data provider settings take precedent (even tho it may be the same options on the system level.

TL;DR I don't wanna change the way the system fundamentally works, when it's just a UX problem.

Can you update the discussion in #290 and close this FR (since they are the same thing).  Post your alternate proposal there.

I just wanted to keep it clean by opening a new issue as an alt. Linked back here, just in case.
Is that okay?


Unpleasant flickering

As the title says, it appears to almost flickering, the interior of the ship appears to disappear i can see the outside. It does this at a fast rate and it is very unpleasant . It mainly happens in my right eye, but it also happens in my left eye.
Other than that, im getting great fps and everything appears to generally be great.
Specs,
I7-6700k
GTX-1080
16gb of Ram
Windows-10

Yep I think I see it... I think I've got a fix for it. I'll make a new release later today with the fix.
For more gory details: I think I was not being consistent in the order in which each camera renders every frame. I should stop using foreach loops, they cause more trouble than they're worth. Anyways, I think if I make sure that the cameras render in the right order (first GalaxyCamera, then Camera ScaledSpace, then Camera 00, then Camera 01, then InternalCamera), the flickering should go away.

Closed via #19
Please let me know if the issue comes back though.

Problem still is taking place for me, this time i recorded it.
I also noticed an error which is shown at the end of the video, if that means anything.
https://www.youtube.com/watch?v=6Kkt1mDmXzg
Hopefully this helps

Oh wow, okay yea that is not at all what I thought the problem was. The flickering I was seeing was not nearly that bad.
I noticed you have RasterPropMonitor installed. It seemed to me like RPM is broken in KSP 1.4. Could you do me a favor and try testing it on a clean install of KSP (no other mods, only KerbalVR)? The error you showed at the very end is talking about a function that is not used in my code, it kind of makes me think there is a broken mod somewhere that's making the rendering go bonkers.
Thanks for bringing up this issue.

Still appears to be there, ill try reinstalling the game.

Yeah a reinstall and a restart of my computer, still no luck. Could it be my drivers, i have the latest ones right now.

So i downgraded my drivers to see if that would do anything, they are now at 388.31
Still no luck for me, any suggestions?

It also seems this only happens near/on kerbin. I do not experience this near jool

That is strange... I'm not sure, can't think of what else you could try...
For what it's worth I've been running Nvidia drivers 388.31. I just updated to 391.01 and didn't notice any changes, nor flickering.

Yeah it is odd, i only experience it when you are able to see the planet/moon, i do not experience this when orbiting jool or the sun

I'm now seeing this issue with KSP 1.4.1. It is as you say, when you look at Kerbin. No other mods present. I'll keep looking into it.

Hey it might be the graphics settings, I'm not sure what exactly. If every single graphics setting is toned down, there is no flickering. At some point, I changed something and started seeing the flickering. Going to narrow down exactly which graphics setting triggers the flickering.

Alright

Honestly seems like it's the aggregated effect of the KSP Graphics settings. Render Quality in particular seems to have the highest impact on the rendering. When set to Fantastic I can almost guarantee I'll see the flickering effect.
I would recommend toning down all your graphics settings and experiment with what works best for your system. For reference, these settings worked well for me, and inside the cockpit still looks good:
Terrain Detail: High
Terrain Scatters: On / 100%
Render Quality: Fast
Texture Quality: Full Res
Aerodynamic FX Quality: Normal
Surface FX / Underwater FX: On
Screen Res: 1024x768
Full Screen: unchecked
Anti-aliasing: disabled
V-Sync: Don't Sync
Frame Limit: 120 FPS
Pixel Light Count: 8
Shadow Cascades: 0
I'm running a Core i5-6600K @ 4.1GHz / Nvidia GTX 1070 8GB

I noticed for me that the pixel light count mainly causes it for me. It actually works great now!

Is it somehow possible to add "The Lab Renderer"'s plugin to your project ?
From Unity Asset Store description :

This is the set of scripts and shaders that drove rendering in The Lab. It is a forward renderer with support for up to 18 dynamic shadowing lights in a single pass with MSAA enabled, and it included the Adaptive Quality system that dynamically adjusts rendering resolution to maintain framerate in VR

From the language used here I understand that Unity/SteamVR support less than 18 dynamic shadowing lights, so the issue may come from this ?

@killerken924 Ok great! I will keep this issue open while I dig a little deeper into what causes the flicker.
@Li0n-0 I'm familiar with the plugin, but I'm not sure how feasible it really is to use it as part of this mod. It is typically used while building the game in Unity, and that would require a lot of under-the-hood changes that are inaccessible at the mod level.

Still experiencing this on your recommended settings and on the lowest they'll go at 1024*768. The left eye 90% of the time only shows the furthest layer (sun and atmo), the right one is ok 60% of the time and flickers for the rest. Does seem to get a little better on your settings rather than default but it's still unplayable. FPS as showed by the nVidia overlay is around 88-90, so probably 90 with some error creeping in.
Running a 4790k with a 1070ti, the headset is a Vive. Anything I can do to diagnose this? There's nothing freaky in the log and my KSP install is clean.

Hello! I experience this issue with the latest KSP version. Im about to downgrade to 1.7.1, but is there any chance that can be fixed for new versions of KSP?

Try the latest release for KSP 1.9.1. Performance is a crap-shoot, I don't expect it will ever get good. The game wasn't designed with VR in mind. Good luck!

Everyone's performance is going to vary, I don't think there's anything else I can do here from the KerbalVR mod's perspective.


FzfLua and git worktree

Thank you for your fantastic plugin; it has greatly improved my workflow. Could you please assist me in using or provide a document on how to use this plugin with git worktree?

Closing, feel free to reopen if you need more help.


Each instance of stateful service (.net core) on Linux cluster takes at least 250MB of temp storage.

Loved the recommendations here until I came to realize a serious limitation of Linux Service Fabric cluster. I experienced situation where every single instance of .net core stateful service takes at least 250MB of temp disk storage on Linux. Managed to fit only ~320 services on D2v2. The service is just stock starter template from Visual Studio. Windows cluster does not have that problem and can fit thousands of .net core stateful services on same size node.

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

ID: 9bb25acc-6868-7ae8-5b42-813eee29efa4
Version Independent ID: ba88e4b7-f27c-6d0a-7550-6e04c6f36c4c
Content: Scalability of Service Fabric services
Content Source: articles/service-fabric/service-fabric-concepts-scalability.md
Service: service-fabric
GitHub Login: @masnider
Microsoft Alias: masnider

Thanks for the feedback! We are currently investigating and will update you shortly.

@lucasmaj I will close this for now as I do not see any action needed on the doc. If you want to continue the conversation just let me know and we can always reopen and continue.


FIX: QoL and other issues

Issues
fixes #704 reworked keylocation input field. may need some better styling @mabasian @maxbehzadi82
fixes #658 added 1 second delay between playbook calls
#597 when running the onclickinstaller the EC is always started first
this should prevent this problem for now (not really a fix)
Update Panel

added functionality to buttons
refresh updates when opening the panel
disable update buttons when updates are already running to avoid conflicts

This is my Idea for the Login:

You can type/copy the path into the input field and you can also choose the file via the explorer/finder by clicking the icon


Keyboard interrupt/signal handling

Try to imagine long running task.
The task uses multi threading / multi processing (like django_q).
Supervisor hangs for a while on stop/restart if task is active.
Is there a way to send signal (receive signal by task) to interrupt the task quickly?
Sub question: we should have two signals - 'soft' stopping (when task can make any cleanup) and 'hard' stopping - urgently close all the threads/kill sub-processes and exit ASAP.
Additionally: python catches SIG_INT and raises 'KeyboardInterrupt' exception.
It's good idea to handle this exception too.

I've run into an issue related to this. My app is running on Heroku, and I have a background job that is API rate limited by a third party, so it has a number of sleeps and API requests. As such, it uses a row in a Postgres table to prevent multiple instances of itself from running, and it cleans this up when the task finishes. The task is designed to run continuously, so as soon as one instance finishes, another starts.
The issue is that if Heroku sends its SIGTERM signal while this job is running, and it takes longer than 30 seconds to respond, my job's logic does not receive the SIGTERM signal to clean-up my "running" flag, and my job is forcefully killed. When the heroku worker starts again, the job detects it is already running, and does not start up again.
The Signals documentation doesn't seem to include any specific on how to listen to "stop" events from the cluster. Is there another way to handle SIGTERM events from within a task?

There was no answer to my question, and I expect no answer to your question :)
Sigterm handling: https://www.programcreek.com/python/example/385/signal.SIGTERM
If you use uwsgi, look at uwsgi mules/sigmals, it's much better.


Fix broken links in documentation

Description of your changes

Fixes #214 and two other unreported broken links. There are no broken links left in the documentation.
I have:

[ ] Run make reviewable to ensure this PR is ready for review.

How has this code been tested

I manually reviewed changes by navigating the affected files on GitHub and clicking new links:

Migration Guide Step 5
Migration Guide Step 6
Configuration: IRSA
Configuration: External Secrets

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


Please consider the minor fixes

IMHO, the fixes are already self-explainable.

Thanks @tkrisnguyen.  @mvanzulli or @mforets . do you have any comments on this pr?

Also, can we create an issue for this PR https://github.com/ONSAS/ONSAS.jl/issues/new/choose ?

The current status of CI must succeed to be merged, I would apply the suggestions above.   I'm happy to have meeting if u need help.

My email is<EMAIL_ADDRESS>feel free to send me an email so we can have chat 👍🏼


DB::Exception: RemoveDirectory is not implemnted in DiskByteS3

Bug Report
cnch_system.cnch_kafka_log (8e34e07e-ca67-4269-9820-a0e3679838a2): Cannot quickly remove directory pandora_data_01/8e34e07e-ca67-4269-9820-a0e3679838a2/7428c04a-79b5-470d-afe1-704e0736f5d8 by removing files; fallback to recursive removal. Reason: Code: 48, e.displayText() = DB::Exception: RemoveDirectory is not implemnted in DiskByteS3 SQLSTATE: HY000 (version <IP_ADDRESS>)

Version
0.1.1

@FourSpaces thanks for the report, you can ignore this exception because the part files will be removed from s3 eventually. Nevertheless we'll fix the bug because it confuses people.

OK


Fix testing with pip - (don't pip install requests[security] )

Before this PR we were seeing errors from PyOpenSSL when pip installing anything with pip 10.0 inside CentOS7 docker container

Seems that PyOpenSSL gets updated via pip and then stuff breaks. Haven't seen this outside travis.


Request:  Option to manually add a child device

I'm not sure why you've recently removed the manual IP change option that I worked with you on last year, but with that removal I will need some way to add devices that are not on my ethernet LAN where my Hubitat sits. My WLAN is in a different subnet so the SSDP requests aren't getting forwarded.  I'd like to be able to add a device manually since I can no longer just update the IP (drop a temporary AP in the main VLAN to get the child device registered and then move it to the main WLAN VLAN and update it's IP)

I wanted to also request a way to add devices that are not on the same subnet. I had to reset my network and and am having to do at @samstreak suggests and bring my hubitat onto a different lan temporarily so i can try and find my devices.

I would love this also as I can not find my Wemo Mini plugs

I've just completed my initial run at adding some capability of this to the app...  It will need some more testing and such, but I think I'm pretty much there.  Right now it is only for the Wemo Switch type devices because that's all I have to work with, but I suppose it could be modified to add a selector for the device type.   Here's the link to the updated app. I also played initially with adding a 'sibling' device from an already-existing wemo device but that doesn't help someone that's just starting out, so why I ended up moving the functionality to the app.

Wemo Mini plugs

I don't have any of the Mini's so I don't know if this will work with them or not.  I was able to get it to work with my Wemo 'Outdoor' plug which is one of the 'newer' devices, so it MAY also work with the mini's.

@samstreak, you are the man.  I was able to manually add my WEMO dimmer switch and now I have complete control of all my WEMO switches.

glad to hear!...  I don't know how much is supported as the code I made it for was just for a switch, but I suppose if you have the right driver installed for the other devices it is just a matter of switching the driver (and maybe adding the selection of driver into the new app portion instead of hard-coded for a switch because that's all I have)


update workflow dependencies

closes #359, #356 and #356

This PR was redundant with dependency bot PR's


[WIP] stream support

TODO:

[x] distinct
[x] flatMap
[x] flatten
[x] fold
[x] reduce
[x] sort

stream sort? maybe blocking...

[ ] test
[ ] refactoring
[ ] example
[ ] benchmark
[ ] godoc

Changes Unknown when pulling 85a8badc2ba95355c6625a28d40d13ccf319b2d5 on feature/stream into ** on master**.

Changes Unknown when pulling 2288c9453b0fe80ad64410ba41229588785c27b2 on feature/stream into ** on master**.

Changes Unknown when pulling 4571cc713ea1f4999c1603e25d4beee970d4c890 on feature/stream into ** on master**.

Changes Unknown when pulling 97c4b3b4d524a7c95292513540aca3cd0ebaa67b on feature/stream into ** on master**.

Changes Unknown when pulling 0fd2a3eb3a19596b3b4da546d338e13a5479e085 on feature/stream into ** on master**.

Changes Unknown when pulling 00216847f17fc75a565336064f1290e2f2ecf2c3 on feature/stream into ** on master**.

Changes Unknown when pulling e20bc3bf7f8b9f1596d7340fe5d5daac6908a8e2 on feature/stream into ** on master**.

Changes Unknown when pulling 0a03bd6a4c088c0b0a859d2772d73702dc72d4b7 on feature/stream into ** on master**.

Changes Unknown when pulling 565b3720ba6c8e8733adc33549eedd8b28eff1ac on feature/stream into ** on master**.

Changes Unknown when pulling 565b3720ba6c8e8733adc33549eedd8b28eff1ac on feature/stream into ** on master**.

Changes Unknown when pulling e6003ca2e22cba4667f6e1f700b4c35bcbae8171 on feature/stream into ** on master**.

stream first value should be funcType.Out(0)

Changes Unknown when pulling 1f1f36c90f89030cfa9003b201712a87b7463c84 on feature/stream into ** on master**.

Changes Unknown when pulling 56d0cf2e3b2e9329cd968bfaea13038a6ea12913 on feature/stream into ** on master**.

Changes Unknown when pulling 0df083b95de126132ea0023e28212388eb797644 on feature/stream into ** on master**.

Changes Unknown when pulling 1100b7c4704ba594c5a02842720e42298c5c8b5e on feature/stream into ** on master**.

Changes Unknown when pulling f69e3f717cdd5086a02ae8ee6b9f5eaaebc0cb52 on feature/stream into ** on master**.


Update the composer.lock file to require the ecms_profile dependencies

Summary
The ecms profile repository dependencies were not being reflected in the lock file. This updates the lock file to correct that.
Metadata

Question
Answer

Did you use a meaningful pull request title?
yes

Did you apply meaningful labels to the pull request?
yes

Did you perform a self review first?
yes

Documentation reflects changes?
no

CHANGELOG reflects changes?
yes

Unit/Functional tests reflect changes?
n/a

Did you perform browser testing?
yes

Risk level
Low

Relevant links
RIG-28

This was re-implemented with #3.


Focal Manipulator Start Crafting button won't light up

I have all the requirements to craft foci given the instructions in the Thaumonomicon, yet the "Start Crafting button still doesn't seem to light up.

I believe that last button is for the split modifier. What exactly is the spell you're making supposed to do?

This isn't a valid spell pattern because it has no effect. Projectile and bolt are both spell shapes, not effects. Things like fire, air, excavaction etc are spell effects.


DeviceData blank from GetDevices and DeviceMonitor

If a device has been connected to my PC for at least a few seconds and then Adb.Instance.GetDevices() is  called then the DeviceData returned is fine. The issue arises when this function is called immediately after a device is connected. For example, I have the following code:
DeviceMonitor monitor = new DeviceMonitor(new AdbSocket(new IPEndPoint(IPAddress.Loopback, AdbClient.AdbServerPort)));
monitor.DeviceConnected += OnDeviceConnected;
monitor.DeviceDisconnected += OnDeviceDisconnected;
monitor.Start();

the function OnDeviceConnected simply looks like this:
private void OnDeviceConnected(object sender, DeviceDataEventArgs args)
{
    MyDeviceList.Add(args.Device);
}

MyDeviceList is an ObservableCollection which is being displayed in a WPF listview item. An item is added to the collection but all of the properties are blank. I try to display Device.Name, Model, etc. but they are all blank. I have even put a debug line at the top of the function to display the DeviceData values into the console but it also shows blank. A strange thing I found is that if I put a Thread.Sleep at the top of the function for abount 2 seconds then all the properties are set. Can anyone tell me why this is or what I may be doing wrong/what I should be doing to get proper values returned?

I also get this, but then I noticed 'unauthorized' in the device state field.
After acknowledging 'enable USB debugging' on my Samsung, the fields were filled with data.
BTW. How do you get the Wifi or USB name from the device?

Same issue here. Although the device is authorized, when DeviceConnected event is fired only device serial is available rest of data is null. When using AdbClient.Instance.GetDevices(); data is complete.


gpxsee: 13.32 -> 13.33

Automatic update generated by nixpkgs-update tools. This update was made based on information from passthru.updateScript.
meta.description for gpxsee is: GPS log file viewer and analyzer
meta.homepage for gpxsee is: https://www.gpxsee.org/
meta.changelog for gpxsee is: https://build.opensuse.org/package/view_file/home:tumic:GPXSee/gpxsee/gpxsee.changes
Updates performed

Ran passthru.UpdateScript

To inspect upstream changes

Compare changes on GitHub

Impact
Checks done

built on NixOS
The tests defined in passthru.tests, if any, passed
found 13.33 with grep in /nix/store/d4fsr5zali6l91qzkdbz3wpdmjv75pvc-gpxsee-13.33
found 13.33 in filename of file in /nix/store/d4fsr5zali6l91qzkdbz3wpdmjv75pvc-gpxsee-13.33

Rebuild report (if merged into master) (click to expand)

4 total rebuild path(s)

4 package rebuild(s)

First fifty rebuilds by attrpath

gpxsee
gpxsee-qt5
gpxsee-qt6

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/d4fsr5zali6l91qzkdbz3wpdmjv75pvc-gpxsee-13.33 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A gpxsee https://github.com/r-ryantm/nixpkgs/archive/cf17a819b49e0d0813fdd8dd67ade55bc28e7768.tar.gz

Or:
nix build github:r-ryantm/nixpkgs/cf17a819b49e0d0813fdd8dd67ade55bc28e7768#gpxsee

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/d4fsr5zali6l91qzkdbz3wpdmjv75pvc-gpxsee-13.33
ls -la /nix/store/d4fsr5zali6l91qzkdbz3wpdmjv75pvc-gpxsee-13.33/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
nixpkgs-review result
Generated using nixpkgs-review.
Command: nixpkgs-review

x86_64-linux

:white_check_mark: 2 packages built:

gpxsee
gpxsee-qt6

Maintainer pings
cc @womfoo @sikmir for testing.

[!TIP]
As a maintainer, if your package is located under pkgs/by-name/*, you can comment @NixOS/nixpkgs-merge-bot merge to automatically merge this update using the nixpkgs-merge-bot.

Add a :+1: reaction to pull requests you find important.

nixpkgs-review result
Generated using nixpkgs-review.
Command: nixpkgs-review pr 366064

x86_64-darwin

:fast_forward: 1 package marked as broken and skipped:

gpxsee-qt6

:white_check_mark: 1 package built:

gpxsee


Can't compile class level proc initializer

I found crash in compiler version 0.16.0 [fc89c1a] for class level proc initializers. For example
class A
  @f = ->() { p 1 }
  getter f
end
A.new.f.call

fails to compile with
Error in ./temp.cr:2: instantiating 'p(Int32)'

  @f = ->() { p 1 }
              ^

in /opt/crystal/src/kernel.cr:4: instantiating 'IO::FileDescriptor:Class#new(Int32)'

STDOUT = (IO::FileDescriptor.new(1, blocking: LibC.isatty(1) == 0)).tap { |f| f.flush_on_newline = true }
                             ^~~

instantiating 'new(Int32, Bool, Bool)'

instantiating 'IO::FileDescriptor#initialize(Int32, Bool, Bool)'

in /opt/crystal/src/io/file_descriptor.cr:26: class variable '@@eb' of Scheduler must be Event::Base, not Nil

        @read_event = Scheduler.create_fd_read_event(self, @edge_triggerable)
                                ^~~~~~~~~~~~~~~~~~~~

Hi, thanks for reporting this.
While fixing this I found another bug and fixed it too, the commit just before the one that fixes this :-)
This now works, but you'll have to say what's the type of @f. One way to do it is:
class A
  @f  = Proc(Void).new { p 1 }
  getter f
end
A.new.f.call

The other fix I'm commenting is that this used to compile fine:
class A
  @f = ->{ -1.abs }
  getter f
end

A.new.f.call

but it shouldn't, because the compiler can't (easily) infer the type of @f. However, the compiler wrongly applied the old type inference algorithm here.


Disable anonymous bind in LDAP

For many users, enabling anonymous bind is not an option from security
perspective, so we should have it disabled in our tests as well.
Note: supporting no anonymous bind requires changes on Presto side as
well.

were you able to reproduce the bug with this change?

yup


Installer does not create the /home/pi/raspi-sump folder

I've now tried re-installing the OS and running the installer twice but it's not creating the files in the /home/pi folder but puts them in /usr/..../dist-packages folder. I can then move the sample conf file into the raspi-sump directory but i cannot save the edited version.  I've tried moving the files and folders into the /home/pi/folder but still cannot save the edited version of the file. any help gratefully received.

Problem resolved !  When all else fails READ THE INSTRUCTIONS is my lesson for today


Menu with submenus won't open

Describe the bug
I've updated from 0.10.7 to 0.10.10 and Menus seems to be broken (at least in macOS)
Whenever I press a Menu (that have sub-menu items), the menu won't stay open, it just flicks and automatically closes
To Reproduce
Steps to reproduce the behavior:
Create a sample project, and in the main view add a Menu with subitems
Then press the Test menu
<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="using:menu_bug.ViewModels"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
        x:Class="menu_bug.Views.MainWindow"
        Icon="/Assets/avalonia-logo.ico"
        Title="menu_bug">

    <Design.DataContext>
        <vm:MainWindowViewModel/>
    </Design.DataContext>

    <StackPanel>
        <Menu>
            <MenuItem Header="Test">
                <MenuItem Header="Test 1"></MenuItem>
                <MenuItem Header="Test 2"></MenuItem>
            </MenuItem>

        </Menu>
        <TextBlock Text="{Binding Greeting}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </StackPanel>
</Window>

Expected behavior
The menu should remain open until the user clicks on a menu item, or somewhere else
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):

OS: macOS Monterey 12.0.1
Version 0.10.10

Additional context
Add any other context about the problem here.

Yes I noticed that too. This bug only exists on MacOS. 0.10.8 works, 0.10.10 not

Can't reproduce on windows. Don't have access to macos at the moment.
@danwalmsley

This is probably the most breaking bug with the current version afaik, as it makes MacOS apps with menus unusable.
Probably has something to do with #6803 or #6700

I have the same problem, but for me it dont require submenus, it will flicker and close a simple menu too.
But if i ALT + hotkey of the menu it will open, but i can't use mouse nor arrows to navigate it, but press enter does trigger the menu item

It should be fixed with latest master. Can anybody confirm?

I just tried it on the latest master branch, and the issue is still there for me.

@danwalmsley after #6700 we seem to be getting non-client clicks reported immediately after opening the menu, which causes the menu to close.

I am using version 11.0.0 preview5 on macOS and the menu only opens on click after entering full screen first.
After that , it works as usual.
Is this behavior expected?

I have the same problem as @svenhue. Will the issue be solved anytime soon?
Using macOS 14.5 (23F79), Avalonia packages 11.1.0, .net 8.


Omit the error when the upgrading of the cluster fails in the process of restoring etcd snapshot

Issue:

https://github.com/rancher/rancher/issues/40889
Problem

When Rancher restores the etcd snapshot, one of the steps is to update the cluster, which fails because of conflicting (see error msg below) if PSP is disabled in the cluster's current spec but was enabled in the backup (and vice versa).
The conflicting error message:
Operation cannot be fulfilled on clusters.management.cattle.io "c-gdzsq": the object has been modified; please apply your changes to the latest version and try again
However, the call to update the cluster looks unnecessary because the driverUpdate function and its caller do not modify the cluster. Also, only the driverUpdate function returns the error, but driverRemove, driverUpdate, and driverCreate ignore the error.
Solution

Ignore the error if the update fails, the same as other functions mentioned above.
Testing

The following steps have been done on a local dev setup:

run rancher in dev env
create a downstream cluster RKE1 1.24.13 with dedicated nodes, with PSP enabled and set to Unrestricted
after the cluster is active, deploy a few deployments
make an etcd snapshot in Rancher UI
upgrade the cluster to v1.25.9, Rancher forces to disable PSP
wait for the upgrade to be done
restore the snapshot, and  choose "Cluster config, K8s version and etcd"
monitoring the cluster in rancher UI during the process and confirm that it does not show the error message anymore
once the restore is done, confirm that the cluster still works normally and the deployments still exist

@bfbachmann  I think it is covered by QA's automation tests

Is there any other possible error that can occur during snapshot restoration that may make this unsafe? Or would the cluster be unusable in that state anyway so it doesn't really matter?

Is there any other possible error that can occur during snapshot restoration that may make this unsafe? Or would the cluster be unusable in that state anyway so it doesn't really matter?

@jakefhyde, the latter.


Helm installation instructions install old non-working version (2.16.3)

Following the instructions to add AKS to the Azure Industrial IoT microservices deployment, you are directed to install kubectl and Helm.  The Helm installation command 'az acr helm install-cli' installs the wrong version of Helm and causes the following installation steps to fail.  Looking at 'az acr', it seems that the entire helm commands are deprecated as well.
Our experience has shown that a manual installation of Helm is required in order to get the latest version which works with the Helm Charts provided for this AKS deployment.

Thank for reporting this @gregeva. I will update the doc to link to official Helm documentation for installation instructions. I will also keep Azure CLI based installation as an alternative approach, adding a client version to it. The updated command will be:
 az acr helm install-cli --client-version "3.2.0"

Regarding the deprecation of az acr helm command group: there is an ongoing discussion about this, and there is a possibility that the whole command group will be moved under az aks. You can find more about this here.

You're welcome @karok2m - thanks for improving the documentation to address this.  It was a brick wall for a lot of our people trying to use AIIOT.


G4 4.0 导出更多的类型定义

The issue which is not created via https://antv-issue-helper.surge.sh will be closed immediately.

注意：不是用 https://antv-issue-helper.surge.sh 创建的 issue 会被立即关闭。
如题~ 可以参考当时3.6的~

import { Options } from '@antv/g2/lib/interface';


CASSANDRA-19107 Revert unnecessary read lock acquisition when reading ring version in TokenMetadata introduced in CASSANDRA-16286

patch by Caleb Rackliffe; reviewed by Francisco Guerrero for CASSANDRA-19107

Committed as https://github.com/apache/cassandra/commit/4dd69dc62db58a82391102ba7278786508078f09


process for metadata changes (e.g. no-data value)

This came up in an internal use case:
user wants to change the no-data value of a datacube (e.g. in an exported GeoTiff so that it can be processed with another tool that assumes certain no-data setting).
Should we create a new process for meta-data manipulation?
Or could this be standardized as some kind of output format option?

For no-data values, this is likely an output format option, because some may support no-data directly and some require setting a specific value. The processes themselves don't really need the differentiation.


Markdownify code syntax from the old $(D code) macros to Markdown (i.e. code)

Gets Phobos one step closer to pretty code ;-)
While the detection is easy with a stupid RegExp, I needed to write a small lexer as it's context-sensitive:
$(D foo) -> `foo`
$(D writeln("foo")) -> `writeln("foo` /// <- with a naive RegExp

Ideally DAutoTest shouldn't show any changes.

I'm actually against this, somewhat strongly. The backtick and the $(D ) macros have different semantics on two levels:

Backticks can not contain embedded HTML (and are not supposed to contain macros, the way I intended it, but the implementation didn't keep to that intention), whereas $(D ...) can. Embedded html is a major ddoc misfeature, but one you need to watch out for in translation. The diff looks ok, but still,

/// `<b>hi</b>`
/// $(D <b>hi</b>)

will render as two different things in dmd today.... (yet as the same thing in ddox today. I call that a bug in ddox!)

Backticks are generic code and may be a --command-line-arg or a {"config":"sample"} or <xml snippet="" />, whereas $(D) specifically is D code and might be highlighted or cross-referenced differently. Why remove additional useful information that already exists? It is nice to know that it is D as opposed to some other type of code. Granted, phobos uses $(D) in some places for code that isn't actually D (see: std.getopt for example), but it is more right than wrong. Mechanically removing all of them is a net loss of useful information.

Just today, I implemented context-aware cross referencing in dpldocs.info that uses the $(D ...) macro to intelligently look up names. Take a look at this for example: http://dpldocs.info/experimental-docs/std.stdio.File.close.html The links to File and detach are auto-generated thanks to being in a $(D ...) macro, so it could check the imports and get an exact match. (It doesn't link ErrnoException btw because that isn't actually in scope; it is thrown by the selectively-imported errnoEnforce..)
I specifically did not apply that to backticks because they are often used on non-D code (the reason I pushed for them in dmd was to document xml samples in my dom.d...) and attempting name lookup and syntax highlighting there can lead to silly results. It isn't disastrous but it is less than ideal and IMO a step backwards from where we are now. Knowing the language of code snippets leads to more intelligent output.

Yah, prolly we should keep this for single words only for the time being.

Yeah you made an excellent case! And there are more important things in this world ;-)

Closing as well.

@wilzbach @adamdruppe I very much appreciate how you handled this. Thanks!!


Current QBoost implementation is just a diminished AdaBoost

As applied to the given demonstration problems, the QBoost algorithm does essentially nothing.  AdaBoost is actually run first to pre-select a set of weak classifiers, which are then provided to the QBoost algorithm.  With the current settings and demonstration problems, the results are simply that QBoost includes all of the classifiers that AdaBoost provides to it (confirm by seeing the list of "1" weights in the output for QBoost).  In other words, for these problems, QBoost could be replaced by the following anti-algorithm:

Run AdaBoost
Change all of the weights that AdaBoost came up with to 1

Note that the screen output is misleading in terms of the method comparisons.  For example, runs with the "mnist" data set often show that "QBoost" is performing better than Adaboost.  This is misleading because what is labeled Adaboost is actually sklearn Adaboost running with weak decision tree classifiers at depth 1, whereas QBoost is pulling from a custom Adaboost implementation that uses weak decision tree classifiers with depth 3 (confusingly, this custom Adaboost implementation is labeled "DecisionTree" in the output; see Issue #13).
The key questions are what weak classifiers should be considered in the QBoost algorithm, and what actually is the definition of the QBoost algorithm?  The README refers to the earlier 2008 paper (https://arxiv.org/pdf/0811.0416.pdf).  Aside from not actually using the QBoost terminology, this paper presents the algorithm as drawing from all possible "degree 1 and 2 decision stumps" (basically decision rules using either a single variable or a product of two variables). As described, this produces a large number of variables if doing a one-shot global optimization: 930 variables for the 30-feature case and many more for the 784-feature case.  Compare these numbers to the 35 variables being currently used because QBoost is being fed weak classifiers pre-selected by AdaBoost.
A different version of the method is described in the more recent 2012 paper (http://proceedings.mlr.press/v25/neven12/neven12.pdf), which introduces the name QBoost.  This paper reduces the problem size by using "inner" and "outer" loops that pre-select the weak classifiers as detailed by Algorithms 1 and 2.  Note that neither paper discusses using AdaBoost to pre-select the weak classifiers, and if one is going to do that, it is unclear what the motivation for QBoost is (the 2008 paper contrasts QBoost as a "global optimization" vs the "greedy" AdaBoost method, but this is nullified if we simply use AdaBoost first).
In conclusion, my suggestions are the following:

The code should be reworked to use an implementation of QBoost that does not simply re-use the classifiers selected by AdaBoost.  Probably the implementation should draw from the 2012 paper, otherwise it is unclear how to select a set of weak classifiers and achieve a reasonable problem size.
Any comparisons against other boosting methods such as AdaBoost should use the same pool of weak classifiers (as done in the papers mentioned above).  Otherwise, it is not an apples-to-apples comparison.

Both the 2008 and 2012 papers show improved performance relative to AdaBoost when using the same pool of weak classifiers.  It would be nice to illustrate that through this demo as well.

Resolved by PR #19.


Fix read isolation for blob and sys cluster tables

@dobe Plz quick review it (squashed fix for flaky test too)

ack


chore(master): release 1.15.3

:robot: I have created a release beep boop
1.15.3 (2023-08-31)
CI

修改 (ea00823)

Miscellaneous Chores

测试 (5542f89)

This PR was generated with Release Please. See documentation.

:robot: Release is at https://github.com/KYX1234/Element-Admin/releases/tag/v1.15.3 :sunflower:


socks5h proxy support

Hello
please add socks5h proxy support
for cloudflare warp support (https://github.com/aleskxyz/warp-svc etc.)

my socks5h works well


Combobox deselcts on mobile device

Issue and steps to reproduce.

I'm using a Galaxy S7 and Free Adblocker Browser 72 and the following code example:
<Combobox items={ ['Autobiography', 'Anime', 'Biography', 'Classic', 'Comics', 'Crime', 'DIY (Do It Yourself)', 'Dystopia', 'Fantasy', 'Folktale', 'Historical', 'Horror', 'Humor', 'Legend', 'Memoir', 'Mystery', 'Mythology ', 'Personal Development', 'Pyschology', 'Political Science', 'Romance', 'Satire', 'Science fiction', 'Science', 'Short', 'Spirituality / Religion', 'Textbook / Reference Book', 'Thriller', 'Western', 'Other']} onChange={selected => console.log(selected)} placeholder="Genres" autocompleteProps={{   // Used for the title in the autocomplete.   title: 'Genres' }} />

I'm unsure if it happens on any other mobile device since I can only test on my own, yet I've replicated it on the Combobox example at https://evergreen.segment.com/components/combobox/

Expected.
When selecting a value on a large combobox, I can scroll through the options on a mobile device

Actual.
When scrolling through the options, it will select when the finger leaves a select box

Nice find! Is this specific to Evergreen or is it happening in downshift too (which is what Evergreen is wrapping here)?

Hi @mshwery ! Thank you for your reply and patience.
I took a deeper look into this, and it seems to be specific to Evergreen. Here's an example of downshift working properly; although slightly different.
https://codesandbox.io/s/github/kentcdodds/downshift-examples/tree/master/?module=%2Fsrc%2Fordered-examples%2F02-complete-autocomplete.js&moduleview=1

Hello again!
Here's where I think it goes wrong:
https://github.com/segmentio/evergreen/blob/e4e350239c782843d6c2ae7d68119a28a384bf8e/src/autocomplete/src/Autocomplete.js#L224
I tried playing with the events to see if anything would change yet I couldn't figure it out.

@juxley seems like we may need to remove onMouseUp and onTouchEnd to replace them with onClick?

Or maybe we should remove the onMouseUp and onTouchEnd altogether?

I'm unsure. When I attempted to do that, than functionality stopped working. Did you attempt to replace or remove it?

Hm. Yeah it breaks in different ways.
I think it might be a bug in downshift still (it's applying mouse event props to the items instead of touch events on mobile) but it might be quite specific to this usage.

With the example provided above, downshift doesn't have this bug. In the example above they use an onChange. I'm unsure what's wrong.
I suggest to write this component. This component is quite important for forms on mobile devices and long lists. If I have some free time I'll give it a shot! :smile:
Thank you for your time.

I think this will be fixed once #793 lands