HasSubscribers queue_if not working properly, or is misnamed

The has_subscribers module allows a queue_if parameter for notifications. I believe the intention for queue_if was to delay the processing of the notification into a Delayed Job if the condition was true, otherwise process the notification immediately. Instead it appears to be acting the same as the if parameter - where if queue_if resolve to false, no notifications are generated. Further confusing is there is a delay parameter which is only considered when queue_if resolves to true.
I believe the ideal change would be to remove the delay option for notifiers, and make queue_if queue a delayed job if true, otherwise process the notification immediately. Also, audit all uses of queue_if as they may currently not be generating notifications if it resolves to false. If we make these changes, those would start generating notifications so make sure that's intended. If not, replace with the if parameter.
Replication conditions for the current bug:

Make a post with an account/journal that users are subscribed to where they should receive notifications
Notice they get notifications successfully (this is working properly)
Make a new post for the same account/journal but mention a user
Notice only the mentioned user gets a notification and the subscribers did not
This is because when the queue_if condition for the notifies_subscribers_of :parent is called, it returns false as there are existing notifications for the mentioned user

Before this change, notifies_subscribers_of supported queue_if and if parameters. queue_if was originally created when all notifications jobs were delayed and was used to determine if a job was to be created at all. If queue_if was false, then not notifications would be generated. if was and still is used not at callback time, but at job run time and is specific to the user being notified - allowing us to notify some users but not others. At a later time we added a delay option which made the name queue_if confusing as we could have queue_if resolve to true but delay be set to false which meant we would notify users, but the job would happen immediately and not be delayed.
One thing I changed was to turn queue_if into unless, which was already supported. unless now works at callback time and can be used to skip notifications entirely, which if continues to be assessed when the job runs allowing us to send notifications to some users and not others. queue_if is no longer supported.
The bug in this case was specific to posts. Posts were not notifying subscribers when the post mentioned users. This is because the (now) unless was skipping sending notifications to subscribers if there were any notified users - but the mentioned users were bring processed first, so when the (now) unless block was run, there were notified users. There was also some data modification happening in that block which was better suited for a model lifecycle callback.
In the end - queue_if has been turned into unless, and posts should notify both mentioned users and subscribed users when published


NodeJS authentication examples - please?

With the following setup:

An openid connect IDP using IdentityServer4
A NodeJs express website that needs to authenticate with IdentityServer4 using the "hybrid" flow. So, that means server to server communication and storing the token (identity and access) in a secure cookie.
A NodeJs express REST API that receives requests from the NodeJS website in 2 above. The website will pass the access token as the authorization bearer header in the request. The api will validate the access token and go from there.

All of the documented examples for 2) & 3) above are for Asp.Net Core and mostly wrapped up as middleware. I've searched with web to no avail. How can 2) and 3) be accomplished?
Working samples greatly appreciated!

Sorry, we don't have any nodejs samples nor do we have plans to build any.


How to disable bounce at edges? (Spring animation)

After upgrading to 2.0.0 I can see that the animation default animation behavior has been changed and that the FloatingPanel now has a distinct bounce at the edges. Personally I don't care for the spring animations and would like to have the previous behavior where the panel does not bounce at when swiping up and down.
Is there a way to disable the spring animation/bounce?

@SCENEE Describes how to do this perfectly in the documention of the FloatingPanelBehavior
"the oscillation magnitude to attract a panel to an anchor can be adjusted this value between 0.979 and 1.0 in increments of 0.001. When this value is around 0.979, the attraction uses a critically damped spring system."
When setting the this value to 0.979 I get the behavior I want. Thank you to @SCENEE  for this awesome little library!


Docker-compose improvements

This change ensures that the docker-compose stack is always
restarted when an error occurs or if the host system gets
rebooted.
Also this change allows for setting the database URL via an
environment variable, so that for basic use-cases the docker-compose
file does not need to be edited.

I used a mix of the docker-compose and test to do latest developments.
It may be improved, to have an intermediate env with both a pdns server and a sqlite db on a persistent volume.
@RGanor ?

@turip @jbe-dw I recommend you take a look at my PR for issue 1070 here. I have solved all of your concerns and many more.

I'll take a look, if I don't have to pick my customization each time I create a test branch it's better, thank you.

@turip @jbe-dw I recommend you take a look at my PR for issue 1070 here. I have solved all of your concerns and many more.

Thank you, for pointing out. That one seems way more elaborate, closing down this PR.


Comments interfering with fluent formatting

Copied over from https://github.com/ambv/black/issues/379#issuecomment-409710377
Without a comment, formatted with black (-l 79)
    return (
        df_day.assign(date=date, fund_ticker=ticker)
        .pipe(lambda x: x.loc[x["Shares"].notnull()])
        .assign(Shares=df_day["Shares"].astype("float64"))
    )

Adding a comment, before formatting
    return (
        df_day.assign(date=date, fund_ticker=ticker)
        .pipe(lambda x: x.loc[x["Shares"].notnull()])
        # arrives as int sometimes
        .assign(Shares=df_day["Shares"].astype("float64"))
    )

With a comment, after formatting with black:
    return (
        df_day.assign(date=date, fund_ticker=ticker).pipe(
            lambda x: x.loc[x["Shares"].notnull()]
        )
        # arrives as int sometimes
        .assign(Shares=df_day["Shares"].astype("float64"))
    )

Without thinking about the more general problem, the second example here is ideal - the comment can be within a fluent expression and wouldn't change the fluent expression formatting.
Thanks again for such an awesome library and vision!
Operating system: MacOS
Python version: 3.7
Black version: 18.6b4
Does also happen on master:

I agree with you that comments should not break the flow of fluent interfaces. We'll address it next week.

The problem is that the standalone comment "splits" the fluent interface so Black sees two periods before (and fluent interfaces are implemented to only apply for >2 periods), then a comment, and one after.

See this Black playground.


Build on docker-machine provisioned docker

Build on docker-machine provisioned docker
i.e. in the cloud
Signed-off-by: Ivan Mikushin<EMAIL_ADDRESS>

:+1:

Perhaps we could add this as another command instead of changing the current build?  I'm worried that this will cause slower build times by default if you are on a slow link.  Maybe a script/build-remote or something?  Otherwise I like the idea :)

Yeah, I'm in favor of this, but as @ehazlett said, I'd rather have it as a separate script in script/ than as a modification of the existing one.  The release script really shouldn't be changed, and there needs to be at least a small blurb in the documentation on contributing which mentions this remote build method.

@imikushin would you mind making this an additional script and some docs about building remote?  thanks!

@ehazlett Are you sure you absolutely don't want to touch the build script? Reason I'm asking is people who are not on Linux (I guess, your target audience) won't be able to use the same build scripts as you guys, and so these scripts will have a good chance to divert in subtle ways.
I don't mind implementing your decision, whatever it is. Just wanted to make the build portable.
PS: the speed difference will probably be barely noticeable for a local docker daemon. But if you can't natively run docker, you'll necessarily end up tweaking the build script to something like this.

@imikushin actually they can.  the "preferred" way is to use b2d (or another docker host) and setup your environment for use with that docker host.  one way is to use machine.  when i was on a mac, i would use machine to create a "dev" host that i would then use to build machine.  since we have this working and is part of the release process, i would rather have an additional script to build remotely.  we can always merge them together if we see that it's desired.

@ehazlett NP. Pushing it shortly

@tianon Could you please take a look at these scripts and let us know what you think?

Seems sane, although I have to admit I'm not a big fan of gox (it does the job well enough though).

Updated according to @tianon's suggestion

You'll want to update to conform to : https://github.com/docker/machine/pull/1686
Sorry about that.

Done

LGTM


Command Side Authenticator (all the different types)

As a ZITADEL Administrator I want to be able to create add/manage/remove all different kind of authenticators to my users in regards of having user schemas.
Acceptance Criteria

[ ] AddAuthenticator: Adds an authenticator

[ ]  webAuthNKey
[ ] One time password Email
[ ] One time password SMS
[ ] Time based one time password
[ ] When adding a new authenticator it is checked if that authentication method is allowed on the user schema

[ ] RemoveAuthenticator: Removes an existing authenticator

[ ]  webAuthNKey
[ ] One time password Email
[ ] One time password SMS
[ ] Time based one time password

Questions to answer
Do we need to check if authentication method is allowed on the user schema or not?
Additional Information
Authenticators

username: human readable identifier of the user

username

password
webAuthNKey
one time password

email
phone

time based one time password
jwt profile key
identity provider
PAT
FUTURE: recovery code

Estimation:

authenticator events:  1d
writemodels userschema allowed and exists: 0,5d
command side: 0,5d
unit tests for all types: 1d
API definitions in oneof message: 0,5d
integration tests: 1d

Summary: 4,5d

@eliobischof @stebenz As discussed I split the issue into 3 parts (username/secret, factors, identity providers), can you please estimate them?
https://github.com/zitadel/zitadel/issues/7896
https://github.com/zitadel/zitadel/issues/7897


Replacement of SMVC Router with an Improved Routing

This pull request contains the Improved Routing components discussed on https://github.com/simple-mvc-framework/framework/issues/222

I downloaded https://github.com/LuckyCyborg/simple-mvc-framework/tree/3.0-improved-routing and installed it just like @daveismyname ver 3 beta.  @daveismyname ver 3 beta is working with no issues, but I spent over 2 hours trying to get @LuckyCyborg  to work, all I ever get is a blank white screen.
It was install exactly like Daves ver 3 beta.  In fact controllers, models, views were just copied over.
Oh, I'm not getting any errors in the error.log neither.

Forgot to ask, has it been tested on php 7, I am developing in php 5.6 and that's where it's not working as stated above.  No offence to anyone, but if a big change to router, why don't we just adapt the one Laravel uses?

@jimgwhit It is supposed to be a Routing replacement, sure that the code is identical with the @daveismyname default tree, considering the rest of framwork. ;)
In other hand, is developed under PHP 5.6.x, intensive tested under PHP 5.5.x and some (but working) tests was made under PHP 7.0. I hope to see the feedback about how it works in another cases.
Our PHP version target is literally PHP 5.5.x with (future) support for PHP 5.6.x, as Project objectives. Sure, the PHP 7.0 can't be ignored, so we wait your opinions.

@jimgwhit
Looks like something was gone wrong with the commit executed by my colleague.
Please try to update your local tree, seems like everything is OK now.

No didn't see the config file change at first, was following the readme.md instructions. Please if you do a pull request update all affected files.  The Dag Gum thing works now, no errors so far.
Funny I am the only one testing stuff and at least reporting back.  Please ensure all latest updates are actually in the pull request.
Where are all the other testers?  See @daveismyname I may get worried at times, but I hang it there, and test, report back, etc.  I think some of the others just like throwing in a comment.  I spend hours testing stuff.  Remember me and @volter9 did extensive test on previous router, so cut me a break.  Let me rant a little at times.

@jimgwhit Thanks for your efforts, I'm happy that now you have a function SVMC driven by our Routing. And your previous experience on SVMC's Routing make you a Valuable Enemy for us. We hope that you'll continue the tests and I wait your reports.
Please, continue also your QUERY_STRING tests and report back if something looks changed. Like I said, there should be no differences, compared with the Macaw Son, and also we are interested in your opinion about the Routing speed performances. Similar? Slower? Faster?
All the best!

@LuckyCyborg This is for the new version 3 beta right?

@jimgwhit Yep! But is it supposed to works out-of-box in a 2.2 stable setup too...
Still you need to integrate it manually. See the details given in the another thread.
But, in principle is simple to port our Routing into 2.2 stable tree: add the supplementary Methods in Request and Url helpers, replace the Router and add the Route, then modify the index.php and the define in the \Core\Config.
If you need the ClassicRouter, watch for the right namespace: App\Core -> \Core

I'm testing this out not, I was busy last night.
I've downloaded the zip from https://github.com/LuckyCyborg/simple-mvc-framework/tree/3.0-improved-routing unzipped and placed in my localserver renamed the base folder to simple-mvc-framework-3
renamed and setup Config.php and .htaccess I can see the defualt page but when going to the subpage I'm getting a 404 page.
Have I missed a step?

@daveismyname  Strange! I downloaded too the zip file, right now, configured and installed in a shared hosting, with the webroot pointing in the public directory. Everything works OK, see there:
http://smvc3.giulianaeassociati.com/
I will test on several hours (I'm not on our Office right now), also the local installation right on your style, to see what happened.
BTW, you adjusted on .htaccess the RewriteBase ? In you case (sub-directory installation), I believe that it shall be:
RewriteBase /simple-mvc-framework-3/public/

ah of course I missed public from the paths! my bad it's working now thanks.
Sorry to ask but with the many posts it's hard to keep track of the changes / discussions can you maybe give an overall summary of what's now possible with this new router?

@daveismyname I will give you a summary today, in several hours, when I will return to Office. Right now I'm run in highway, sorry for delay... :)

I understand many thanks for your help.

@daveismyname A quick; the most important post, were is described everything in detail, is following (sorry for quick copy&paste!).
OK, then my suggestion to enhance the Routing in the SVMC 3.0; offering a better support to further enhance the Router, if is the case.
Additional method on \Helpers\Request
    /**
     * Gets the request method.
     *
     * @return string
     */
    public static function getMethod() {
        $method = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'GET';

        if (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) {
            $method = $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'];
        }
        elseif (isset($_REQUEST['_method'])) {
            $method = $_REQUEST['_method'];
        }

        return strtoupper($method);
    }

Additional method to \Helpers\Url
    public static function detectUri()
    {
        $requestUri = $_SERVER['REQUEST_URI'];
        $scriptName = $_SERVER['SCRIPT_NAME'];

        $pathName = dirname($scriptName);

        if (strpos($requestUri, $scriptName) === 0) {
            $requestUri = substr($requestUri, strlen($scriptName));
        }
        else if (strpos($requestUri, $pathName) === 0) {
            $requestUri = substr($requestUri, strlen($pathName));
        }

        if (($requestUri == '/') || empty($requestUri)) {
            return '/';
        }

        $uri = parse_url($requestUri, PHP_URL_PATH);

        return str_replace(array('//', '../'), '/', ltrim($uri, '/'));
    }

A new class, \Core\Route
namespace Core;

/**
 * The Route class is responsible for routing an HTTP request to an assigned callback function.
 * The Router tries to match the requested URL against a series of URL patterns.
 */
class Route
{
    /**
     * @var string HTTP method or 'ANY'
     */
    private $method;

    /**
     * @var string URL pattern
     */
    private $pattern;

    /**
     * @var mixed Callback
     */
    private $callback = null;

    /**
     * @var array Route parameters
     */
    private $params = array();

    /**
     * @var string Matching regular expression
     */
    private $regex;

    /**
     * Constructor.
     *
     * @param string $method HTTP method
     * @param string $pattern URL pattern
     * @param mixed $callback Callback function
     */
    public function __construct($method, $pattern, $callback)
    {
        $this->method   = $method;
        $this->pattern  = $pattern;
        $this->callback = $callback;
    }

    /**
     * Checks if a URL and  HTTP method matches the Route pattern.
     *
     * @param string $uri Requested URL
     * @param string $method HTTP method
     * @return boolean Match status
     */
    public function match($uri, $method)
    {
        if (($this->method != $method) && ($this->method != 'ANY')) {
            return false;
        }

        // Wildcard or exact match.
        if (($this->pattern === '*') || ($this->pattern === $uri)) {
            return true;
        }

        $last_char = substr($this->pattern, -1);

        // Build the regex for matching.
        if (strpos($this->pattern, ':') !== false) {
            $regex = str_replace(
                array(':any', ':num', ':all', ':hex', ':uuidV4'),
                array('[^/]+', '-?[0-9]+', '.*', '[[:xdigit:]]+', '\w{8}-\w{4}-\w{4}-\w{4}-\w{12}'),
                $this->pattern
            );
        }
        else {
            $regex = $this->pattern;
        }

        $regex = str_replace(array('(/', ')', '/*'), array('(?:/', ')?', '(/?|/.*?)'), $regex);

        // Fix trailing slash.
        if ($last_char === '/') {
            $regex .= '?';
        }
        // Allow trailing slash.
        else {
            $regex .= '/?';
        }

        // Attempt to match the Route and extract the parameters.
        if (preg_match('#^' .$regex .'(?:\?.*)?$#i', $uri, $matches)) {
            // Remove $matched[0] as [1] is the first parameter.
            array_shift($matches);
            // Store the extracted parameters.
            $this->params = $matches;
            // Also, store the compiled regex.
            $this->regex = $regex;

            return true;
        }

        return false;
    }

    //
    // Some Getters

    public function callback()
    {
        return $this->callback;
    }

    public function params()
    {
        return $this->params;
    }

    public function regex()
    {
        return $this->regex;
    }

}

The (rewritten) class \Core\Router
namespace Core;

use Core\Route;
use Helpers\Request;
use Helpers\Url;

/**
 * Router class will load requested controller / closure based on url.
 */
class Router
{
    private static $instance;

    /**
     * Array of routes
     *
     * @var array $routes
     */
    private $routes = array();

    /**
     * Set an Error Callback
     *
     * @var null $errorCallback
     */
    private $errorCallback = '\Core\Error@index';

    // Constructor
    public function __construct()
    {
        self::$instance =& $this;
    }

    public static function &getInstance()
    {
        if(! self::$instance) {
            $appRouter = APPROUTER;

            self::$instance = new $appRouter();
        }

        return self::$instance;
    }

    /**
     * Defines a route with or without Callback and Method.
     *
     * @param string $method
     * @param array @params
     */
    public static function __callStatic($method, $params)
    {
        $router = self::getInstance();

        $router->addRoute($method, $params[0], $params[1]);
    }

    /**
     * Defines callback if route is not found.
     *
     * @param string $callback
     */
    public static function error($callback)
    {
        $router = self::getInstance();

        $router->callback($callback);
    }

    public function callback($callback = null)
    {
        if(is_null($callback)) {
            return $this->errorCallback;
        }

        $this->errorCallback = $callback;
    }

    /**
     * Maps a Method and URL pattern to a Callback.
     *
     * @param string $method HTTP metod to match
     * @param string $pattern URL pattern to match
     * @param callback $callback Callback object
     */
    public function addRoute($method, $route, $callback)
    {
        $method = strtoupper($method);
        $pattern = ltrim($route, '/');

        $route = new Route($method, $pattern, $callback);

        array_push($this->routes, $route);
    }

    /**
     * Invoke the callback with its associated parameters.
     *
     * @param  object $callback
     * @param  array  $params array of matched parameters
     * @param  string $message
     */
    protected function invokeObject($callback, $params = array())
    {
        if (is_object($callback)) {
            // Call the Closure.
            return call_user_func_array($callback, $params);
        }

        // Call the object Controller and its Method.
        $segments = explode('@', $callback);

        $controller = $segments[0];
        $method     = $segments[1];

        // Initialize the Controller
        $controller = new $controller();

        // Execute the Controller's Method with the given arguments.
        return call_user_func_array(array($controller, $method), $params);
    }

    public function dispatch()
    {
        // Detect the URI and the HTTP Method.
        $uri = Url::detectUri();

        $method = Request::getMethod();

        foreach ($this->routes as $route) {
            if ($route->match($uri, $method)) {
                // Found a valid Route; invoke the Route's Callback and go out.
                $this->invokeObject($route->callback(), $route->params());

                return true;
            }
        }

        // No valid Route found; invoke the Error Callback with the current URI as parameter.
        $params = array(
            htmlspecialchars($uri, ENT_COMPAT, 'ISO-8859-1', true)
        );

        $this->invokeObject($this->callback(), $params);

        return false;
    }

}

The new \Core\Router class is compatible as configuration with the standard one, offering also the ability to use optional parameters in patterns, so will work a pattern like:
blog/archive(/:num(/:num(/:num)))
This example pattern will match the URIs:
/blog/archive/2015/12/31
/blog/archive/2015/12
/blog/archive/2015
/blog/archive

To note that for a properly work, this new Router need a define in Config class,
/**
 * Set the Application Router.
 */
define('APPROUTER', '\Core\Router');

and a slightly different approach in /public/index.php
// We should get the Router instance before to start Routes configuration.
$router = Router::getInstance();

// Load the Routes
include SYSTEM .'Core/routes.php';

// Execute matched routes
$router->dispatch();

Also, there is no fallback switch and no autoDispatch.
You'll notice that the new \Core\Router is very different from the orthodox one, and use only few static functions. But the best of the bests is that class can be easily extended; for example, if we want a Classic Router, running in ol'good style of AutoDispatching or like the CodeIgniter routes, there we go:
namespace Core;

use Core\Route;
use Helpers\Request;
use Helpers\Url;

/**
 * ClassicRouter class will load requested controller / closure based on url.
 */
class ClassicRouter extends \Core\Router
{
    // Constructor
    public function __construct()
    {
        parent::__construct();
    }

   /**
     * Ability to call controllers in their module/directory/controller/method/param way.
     */
    public function autoDispatch($uri)
    {
        // NOTE: This Auto-Dispatch routing use the styles:
        //
        // <DIR><directory><controller><method><params>
        // <DIR><module><directory><controller><method><params>

        // Split the URI in the path components.
        $parts = explode('/', $uri);

        // Loop through URI parts, checking for the Controller file including its path.
        $controller = '';

        if(! empty($parts)) {
            // Classify, to permit: '<DIR>/file_manager/admin/' -> '<SMVC>/Modules/FileManager/Admin/
            $controller = str_replace(array('-', '_'), '', ucwords(array_shift($parts), '-_'));
        }

        // Verify if the first URI part match a Module.
        $testPath = SMVC.'Modules/'.$controller;

        if(! empty($controller) && is_dir($testPath)) {
            // Walking in a Module path.
            $moduleName = $controller;
            $basePath   = 'Modules/'.$controller.'/Controllers/';

            // Go further only if have other URI Parts, to permit URL mappings like:
            // '<DIR>/clients' -> '<SMVC>/Modules/Clients/Controllers/Clients.php'
            if(! empty($parts)) {
                $controller = str_replace(array('-', '_'), '', ucwords(array_shift($parts), '-_'));
            }
        }
        else {
            $moduleName = '';
            $basePath   = 'Controllers/';
        }

        // Check for a valid Controller even in sub-directories.
        $directory = '';

        while (! empty($parts)) {
            $testPath = SMVC.$basePath.$directory.$controller;

            if (! is_readable($testPath .'.php') && is_dir($testPath)) {
                $directory .= $controller .'/';
                $controller = str_replace(array('-', '_'), '', ucwords(array_shift($parts), '-_'));

                continue;
            }

            break;
        }

        // Get the normalized Controller
        $defaultOne = !empty($moduleName) ? $moduleName : DEFAULT_CONTROLLER;
        $controller = !empty($controller) ? $controller : $defaultOne;

        // Get the normalized Method
        $method = !empty($parts) ? array_shift($parts) : DEFAULT_METHOD;

        // Get the Controller's className.
        $controller = str_replace('/', '\\', 'App/'.$basePath.$directory.$controller);

        // Controller's Methods starting with '_' are not allowed also to be called on Router.
        if(($method[0] === '_') || !class_exists($controller)) {
            return false;
        }

        // Initialize the Controller
        $controller = new $controller();

        // Check for a valid public Controller's Method.
        if(! in_array(strtolower($method), array_map('strtolower', get_class_methods($controller)))) {
            return false;
        }

        // Execute the current Controller's Method with the given arguments.
        call_user_func_array(array($controller, $method), !empty($parts) ? $parts : array());

        return true;
    }

    public function dispatch()
    {
        // Detect the URI and the HTTP Method.
        $uri = Url::detectUri();

        $method = Request::getMethod();

        foreach ($this->routes as $route) {
            if ($route->match($uri, $method)) {
                // Found a valid Route; invoke the autoDispatch and go out.
                $callback = $route->callback();

                if(! is_object($callback)) {
                    $autoUri = preg_replace('#^' .$route->regex() .'$#', $callback, $uri);

                    $this->autoDispatch($autoUri);
                }
                else {
                    $this->invokeObject($callback, $route->params());
                }

                return true;
            }
        }

        // No valid Route found; invoke the Error Callback with the current URI as parameter.
        $params = array(
            htmlspecialchars($uri, ENT_COMPAT, 'ISO-8859-1', true)
        );

        $this->invokeObject($this->callback(), $params);

        return false;
    }

}

To activate the ClassicRouter we need to setup:
/**
 * Set the Application Router.
 */
define('APPROUTER', '\Core\ClassicRouter');

To note that new ClassicRouter have much greater performance compared with the orthodox autoDispatcher method of the actual \Core\Router, supporting patterns, just like the base \Core\Router, and supporting also, very important, the sub-directories on App and Modules. Then, you can happily use, for example, for your controllers paths, the styles:
/admin/blog              -> /app/Controllers/Admin/Blog.php                @index
/user                    -> /app/Modules/User/Controllers/User.php         @index

/admin/users             -> as route pattern to following...
/user/admin/users/list   -> /app/Modules/User/Controllers/Admin/Users.php  @list

You can even do:
Router::any('/admin/(:any)/(:all)', '$1/admin/$2');

OR

Router::any('/admin/(:any)/(:all)', '$1/admin/$1/$2');

which will map the following Routes like as:
/admin/page/add     -> /page/admin/add     -> /app/Modules/Page/Controllers/Admin.php   @add
/admin/blog/view/15 -> /blog/admin/view/15 -> /app/Modules/Blog/Controllers/Admin.php   @view
/admin/users/edit/1 -> /users/admin/edit/1 -> /app/Modules/Users/Controllers/Admin.php  @edit

OR

/admin/page/add     -> /page/admin/page/add      -> /app/Modules/Page/Controllers/Admin/Page.php    @view
/admin/blog/view/15 -> /blog/admin/blog/view/15  -> /app/Modules/Blog/Controllers/Admin/Blog.php    @view
/admin/users/edit/1 -> /users/admin/users/edit/1 -> /app/Modules/Users/Controllers/Admin/Users.php  @edit

And, yeah, if the SVMC 3.0 is driven by this enhanced Router, not only you have, native, a better Routing, but us we can easily extend the default Router to support our Asset Files Serving style and other things, without to completely replace the main thing.
Finally, I will ask if there is interest for a simple but very powerful \Core\Language class replacement, which support the PHP's 5.5.x native INTL (based on ICU), with support for single language file per App and Module or Template, loading multiple language domains, etc. It needs the Config class mentioned in my previous (long) post, some functions to be defined in index.php or a configuration file, but the result is somewhat similar with what can be seen in CakePHP 3.0
Example of usage:
Session::set('message', array('type' => 'success', 'text' => __d('user', 'User <b>{0}</b> was Added', $userinfo['username'])));

Notice the function called __d(), that's command read the language file from the domain (of Module) User and translate the message with support for parameters.
BTW, our Language class have as companion a (Linux) script able to scan the PHP files from framework, to extract the translatable strings and to update the language files on App and Modules.
All the best!

to use the classic routes the setup as I understand it is to change the CONSTANT in Config.php to this
define('APPROUTER', '\App\Core\ClassicRouter');

I've done that but as soon as I go to the project root this error is fired:
Invalid argument supplied for foreach() in /app/Core/ClassicRouter.php on line 118

It appears the class is not calling the parent construct, since $routes is an array in the parent Router.php class.
Also with this proposed change will it be possible to use classic routes and named routes? since ClassicRouter extends Router
Also I've tried to use your example:
blog/archive(/:num(/:num(/:num)))

In a route using a closure
Router::any('test(/:num(/:num(/:num)))', function($one, $two, $three){
    echo "$one - $two - $three";
});

I've tried a few different combinations none of which I can get working, classic routes like this still work but must match the exact number of params in the url:
test/(:num)/(:num)

@daveismyname  and @LuckyCyborg  see my latest comment under issue #222  where are you are talking about grouping, which I have no problem with, but maybe hold off on pushing this until the grouping thing is all worked out. That way it's a thoroughly retested router. In other words there are still tweaks happening here. Maybe wait till all tweaks are complete and test run.

@jimgwhit since there's sections not working for me yet I'm not going to commit it, I may be missing something but the only routes I can get working at the moment are the routes that already work. See my comment above.

@daveismyname  yeah I saw your comment, and when I tested last night I only tested for a querystring and that worked. But now with the grouping thing that is something added since last night, so I'm confused on the define constants, should one define be used for the grouping thing and another define for the regular routing. I think you know what I mean you but two constants being used.

@daveismyname I will look tomorrow to ClassicRouter. If I understand right, there are the problems.
In other hand, while base Router use the "modern" routes, and the ClassicRouter use the... classic routes, there is nothing that stop a third one, more complex, which use the both ways. As principle, our Design is to be easily extended.

@LuckyCyborg thanks I appreciate the effort you have put it, it looks really useful and more flexible then the current router just want to make sure I understand all the options as I need no doubt need to support others in it's use later on.
The base Router works fine and names routes and filters (:num) etc but not for flexible params as far as I can tell, then the other problem is the classic router as you've mentioned.
I think it's useful to have the option to use a named route or a classic route for those that prefer them.
Personally I prefer named routes.

So you don't have to jump back and forth here's my question on thathe
@LuckyCyborg  you have
$router = Router::getInstance();

$router->group('admin', function() {
    Router::get('/', 'App\Controllers\Admin\AdminController@index');
    Router::get('/some', 'App\Controllers\Admin\AdminController@some');
});

But what if admin controller is underneath controllers like
$router = Router::getInstance();

$router->group('admin', function() {
    Router::get('whatever/', 'App\Controllers\AdminController@whatEver');
    });

Also the same define is being used couldn't the define for the extended router be named something else that way regular routing and grouping could it still be done.
Another question should the pull request be closed for now while you tweak this and then you could put in a new pull request after testing all.

@daveismyname In principle is a veri important decision the routing style, so, in our opinion, the best for the end-user is to have ability to switch them, and to use one of the classes. Let's say that the Router offer Laravel style, while ClassicRouter, the CodeIgniter style.
@jimgwhit In principle, what Grouping do is to append a path prefix on routes. So,
$router->group('admin', function() {
    Router::get('whatever/', 'App\Controllers\AdminController@whatEver');
    });

Is equivalent with:
 Router::get('admin/whatever/', 'App\Controllers\AdminController@whatEver');

@LuckyCyborg I agree that makes a lot of sense. if we can test both ways with your suggestions that would be great.

And I'm here to assist you. :smile:
I believe also that a well testing of the both ways is the best. You want us to concentrate into Classic Style? Why not! Let's test them!
You can describe the classic route which you tested, there?

I didn't get far with classic testing my first test was to call localhost/project/demo to call app/Controllers/Demo.php.
just looking over the other comment and noticed a section talking about asset server which I absolutely love the sound of that, I'd like to look at using that too, with it being weekend we can wait until next week that's not problem at all.

@daveismyname I try to test and prepare the classic routing for your default welcome pages.
Talking about the Asset File Serving is a standard procedure used even by CakePHP and Laravel, to serve files, when the application is behind webroot. And, yes, we use in our Routing too.
In the proposed Routing variant, it was stripped down, to not scare you with the complexity. But, the Assets Serving can be reintroduced in quick time. The code is already there.
In other hand, you should remember that you talk, in our case, with some Corporate guys. For us, this Project is one of the job tasks. As, can be understand, in Weekend, my colleagues aren't available.
In other hand, I understand well that for you, this is a Hobby Project, and you have time for him right on the weekend. So, trying to do the best of two worlds, I will try spend this weekend keeping the contact with the SVMC community. Think that is the best... :smiley:

I think it would be good to put it back in, this is a hobby project but also I use this to build CRM projects for my main job so I try to keep my other projects structure inline as much as I can with the framework.
Since I do majority of the work on my own I really value the community and people such as yourself.

@daveismyname For me it is just a Job Task, but I really liked this little Micro-Framework, and I appreciate your ability to create tutorials for it. Good Job! :+1:

Isn't it better to name it Scope instead of group? Good work on the routing!
Anyway I really like this framework just because it's not too much blabla and easy to understand. Also works on multiple environments, and isn't limited on several php extension (like others do).

@tomvlk Yeah, can be called Scope, or Group. Both works fine. To be honest, I prefer your variant.
@daveismyname well, the main bug was an private -> protected, and the auto-routing works, as can be seen in:
http://smvc3.giulianaeassociati.com/welcome/index
http://smvc3.giulianaeassociati.com/welcome/subpage
Yet, I hit another small problem about regex compatibility. which make problems with the route mapping.
BTW, I hope you'll ignore my debugging lines. :smirk:

Ok, then. Now the ClassicRouting works in my tests, like there:
http://smvc3.giulianaeassociati.com/
Using the following routes for mapping:
Router::any('subpage', '/welcome/subpage');
Router::any('', '/welcome/index');

I still work on regex compatibility. It is used with the parameters. About something like:
Router::any('/admin/(:any)/(:all)', '$1/admin/$2');

@tomvlk are you going to help with testing the router in various situations?

OK, I managed to make the ClassicRouter to work, but possible the parameters do not works right, now. I you want to test it, I can do a push, in about 2 hours, when I will be back. Or you maybe want to wait the entire cake. Post there what you wish, I will read the posts in the next 2 hours (I go home). :+1:

I'll wait then I can test more at once.
Thanks again.

Ok, the ClassicRouter now works as expected, with parameters being functional, also, tested and added examples for optional parameters route in routes.php, and tested in a real website all of our today offer.  Everything works as expected by us.
The main reason of those glitches was remained on the past of the ClassicRouter (about a week), comparative with the base Routing. Nothing major but disturbing.
To note that the optional parameters make no sense for Classic Routing in the actual Design, where the regex captures shall to match the insertions in processed route (second parameter, aka callback).

thanks this is working great, for classic router I agree there is no need to have routes defined in the routes file or make optional params let the controller method set those.
I've tested the named routes using exact matches and also optional params patterns using the examples you provided and also my own. All working great.
This is really good! :+1:
I'll accept this PR now, since we are still in beta more testing is required but I'm happy to put this in the beta release.
Then if we can look at the asset serving next week that would be good. Using your recommend server from an assets folder from the sections (templates / modules)


Add new RDS cloudwatch metric.

The unit test started failing due to this probably new metric for RDS:
OldestReplicationSlotLag. It's not documented but is appearing in
results, so allow it.
This fixes #10.
@davidvgalbraith @VladVega @go-oleg

+1

Also -  maybe new metrics will be added frequently. Consider changing the test to ensure that the metrics we know about are in there but disregard others.

I'll keep an eye on them, but I think the set is fairly static.


Bump golang version to 1.7.5

We have been seeing many dns failures that look a lot like this bug:
https://github.com/golang/go/issues/16865
Sequins was running on the release version of go 1.7, this PR bumps it to the most recent stable version of go 1.7.5
r? @evan-stripe

lgtm


Restructuring

Main goals

[x] Resolve cyclic dependencies and work toward Maven compatibility
I pulled most of the libraries from the plugin module and moved them to a new "labyrinth-common" module. The main plugin class and its resource (plugin.yml) remain in labyrinth-plugin. A new class--LabyrinthProvider--exists to manage access to the plugin's functionalities. See api package in labyrinth-common.
[x] Try out adventure shade meh, shelfed for later date
As mentioned in early commits, I accomplished it but ultimately decided against it for now (it swells the jar for Spigot by almost 1MB). Consider making abstraction(s) that use adventure and other libraries provided by Paper, falling back to traditional implementations when on Spigot.
[x] Completely remove Vault and Enterprise shade logic
It was iffy; we didn't really use it. My solution was to completely rework the economy hooks to carefully check plugin presences and only then try to reference classes as local variables (static == blows up).
[x] Redesigned EconomyProvision service to really be like a service
Kept static getter; created dedicated EconomyProvision implementations which are instantiated by their respective hook classes and registered directly with the Bukkit ServicesManager with priorities (Vault at Low, Advanced/Enterprise at Normal). Replaced now obsolete DefaultProvision with a private static inner, 'EmptyProvision' class to be returned in the case that no services have registered. Returns empty Optionals.
[x] Get repository cleaned up and ready for OSSRH deployment
Still working on this one; be careful with this commit, you may want to backup your project's .idea folder and Labyrinth.iml file, pull, close, and then drop them back in. Hopefully this'll help things stay clearer with VCS later.
[x] Deployment action .yml
All set. I still need to add the secrets, but the workflow should be ready.

Secrets added; should be ready for deployment

[x] Added templates project as a native resource

Added commit for additional repository (missing alternate Sonatype repo for templates)
https://central.sonatype.org/publish/publish-guide/#deployment

@Hempfest if possible, let's squash+merge this and add your edits in a fresh branch+pr


Duplicate Product Records Created When Same Bulk Count File Is Uploaded Multiple Times

Note

We have this description text present on UI but this is useful only when user is trying to upload the CSV having duplicate records of products. This message doesn't cover the case where the file with unique records is uploaded multiple times.
Current behavior
Each upload of the same bulk count file results in duplicate product records being created for a count.
Expected behavior
The system should recognize that the same bulk count file has been uploaded and prevent duplicate product records from being created.
Steps to reproduce the issue
Navigate to the 'Bulk Count' page.
Upload a bulk count file with product records.
Without making any changes, upload the same file again.
Observe that the product records are created as duplicates for the count mentioned in CSV.
Environment details
App version : v2.1.0
App environment : UAT
Additional information
https://jam.dev/c/e3074243-7893-494b-a1ed-7aae1f986872
https://jam.dev/c/95872c2b-49ba-4677-b99c-f4eab3aa2f0d

I believe this is expected behavior, because user is not giving unique id, system will always create new count. If that is the scenario you're talking about, then please close the ticket.

I believe this is expected behavior, because user is not giving unique id, system will always create new count. If that is the scenario you're talking about, then please close the ticket.

Let’s assume a CSV file has been created with 3 records, where the count name is TEST, the facility ID is STORE_14, and the SKUs are SKU1, SKU2, and SKU3.
If the same file is uploaded again via bulk upload, or if a count with the same name and facility ID is created manually (without bulk upload), the system may result in a successful upload, but the count could end up containing duplicate products.


apns-priority and apns-push-type needed for remote notifications

Thanks for this script - it was very helpful for doing development, but we found that for sending content-available pushes, the following headers needed to be set:
apns-priority: 5
apns-push-type: background

Apple documentation:

header
description

apns-push-type
(Required for watchOS 6 and later; recommended for macOS, iOS, tvOS, and iPadOS) The value of this header must accurately reflect the contents of your notification’s payload. If there is a mismatch, or if the header is missing on required systems, APNs may return an error, delay the delivery of the notification, or drop it altogether.

apns-priority
The priority of the notification. If you omit this header, APNs sets the notification priority to 10. Specify 10 to send the notification immediately. A value of 10 is appropriate for notifications that trigger an alert, play a sound, or badge the app’s icon. Specifying this priority for a notification that has a payload containing the content-available key causes an error. Specify 5 to send the notification based on power considerations on the user’s device. Use this priority for notifications that have a payload that includes the content-available key. Notifications with this priority might be grouped and delivered in bursts to the user’s device. They may also be throttled, and in some cases not delivered.

I don't know if you want to handle this in the script or just add it as documentation for the README.

Hi @kejadlen thanks for this (and sorry for taking forever to reply 🙂)
If you create a PR placing it in the readme file I'll be happy to merge it in!


⚠ dev.minetest.net has degraded performance

In c7eb345, dev.minetest.net (https://dev.minetest.net/Main_Page) experienced degraded performance:

HTTP code: 200
Response time: 2563 ms

Resolved: dev.minetest.net performance has improved in d6b0f6c after 9 minutes.


Publish 8.4-20230911234702+0000

Publish 8.4-20230911234702+0000

@bot-gradle test and merge

I've triggered a build for you. Click here to see all failures if there's any.


investigate/fix gazebo realtime factor

gazebo real time factor starts at ~1.00 when the simulation is started. after some time it slows down to the level of ~0.05. possible causes may be:

unnecessarily big sea world
something related to our usage of gazebo
some problem in gazebo 11 unrelated to us

we need to determine the reason and fix it if possible.

Lets try the pool environment and try to eliminate the first cause

Also what about the cpu usage? Does it start low and go up when rtf drops? Or is it always high?

Could you add your findings as comments under the card?  @eminmeydanoglu @optimistprime21
Did the issue get resolved after transitioning to the pool environment?
What is the average real-time factor of the data we are receiving?
As Sencer Yazici mentioned, how is the CPU usage?
What conclusions have you reached based on your research?
Adding these outputs to the card would help us make better progress.

Some observations

In seabed, rtf is pretty much always low, even at the start.
In pool world, rtf is pretty high and stable.
Couldn't observe the rtf going down with time, at least with the pool world. The cpu usage is around 150 (I don't know what the number represents, check ss) and doesn't seem to go up with time.


Bug/include tests dir to pre-commit lint step

Looks good to me :) make sure that we update this in the user microservice too

Hmm not sure wdym..this is users microservice. I already merged problems into dev.


WPS interface for the HBV-EC emulator (2)

@richardarsenault
HBV-EC is one of the standard emulations in RAVEN. So no problem at all. Do you have a benchmark setup in, e.g., Matlab? I'd only need that to:

get parameter ranges,
a default parameter set, and
parameters you want to calibrate

Then I need a quick chat with James because he has to show me where I find all these in the *.rvp file and that's it.

@julemai
We do not have HBV-EC in Matlab, this is a new model for me. I've used a watered-down version before (Amir AghaKouchak's academic version) but I unfortunately cannot find it anymore (it was experimental). Does RAVEN have "proposed" or "default" boundaries for the models?

@richardarsenault
Ok. No problem. I only wanted to be sure that you don't have a code I could compare to.
I will find out what the HBV-EC specific model parameters are and will look for ranges. Might take a while. I can work on that a bit next week.

@richardarsenault @huard
I'm done with the HBV-EC setup. since I didn't have a reference HBV implementation you want to use, I went through all the hard-coded values in the *.rv* setup files with James. We identified 21 parameters where most of them are used in some versions of HBV.
The Wiki is updated. Here are:

The Raven setup
The Ostrich setup

@julemai Excellent ! Sorry for my slow response these days, I've been handed a short term assignment that takes all my time. Should be back in the game next week.

No problem. Now that I have figured out how this whole WPS thing is working. I would feel comfortable to add that for MOHYSE and HBV (if you would create a branch for me). I could do that after the generic_raven branch is merged back. :)
Have a great weekend!

Yep, will start by merging your changes into master. You don't need me to create a branch though. Once I've merged the generic_raven branch, you can update your master and then create an hbv branch (checkout -b hbv), commit your changes then push the hbv branch to github (push --set-upstream origin hbv) and create a PR.

Ok. I will give it a try. I’ve met done that before.

Done.


Repeat video with start and end time

@PierfrancescoSoffritti : We assume that I start from this configuration: https://pastebin.com/aXExMX3g
I'm trying with the onCurrentSecond method, but it seems like I'm doing something wrong?

Is this related to #164 ?
I suggest printing the value of of second in the logcat to better understand what to do.

I need same functionality. for example We have 10 mins video.  but I want to play only between 2:10mins to 3:15mins.
This type of functionality can we get by using your library.


brave: 1.33.106 -> 1.34.80

Motivation for this change
https://github.com/brave/brave-browser/blob/master/CHANGELOG_DESKTOP.md#13480
Things done

Built on platform(s)

[x] x86_64-linux

[x] Tested basic functionality of all binary files (usually in ./result/bin/)
[x] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 153912 run on x86_64-linux 1

1 package built:

brave


feat(upgrade-pomerium): upgrade image from 0.25.0 to 0.27.1

upgrade pomerium to nonroot-v1.27.1

Hi @alfonsofortunato!
Some questions:

Are there no changes to the manifests? Have you checked?
Any breaking changes or major changes that we should note in the release notes introduced in the new versions?
Have you tested this version and the upgrade from the previous one?

I didn't notice any difference with the manifest with newer version. There are breaking changes, should I list there? I've tested the version on a local kind cluster and checked whether the pod is running. I created 2 dummy secrets for:

COOKIE_SECRET
SHARED_SECRET

and the pod is running (seems properly). I didn't have the change to test it on a fury distro since I haven't install a local fury distro yet. Should I test it on fury?

I didn't notice any difference with the manifest with newer version.

cool.

There are breaking changes, should I list there?

No need to list them all here. Did you find anything relevant that may have impact in how we use Pomerium? Something that we should repeat in the release notes of this module or at least link to?

I've tested the version on a local kind cluster and checked whether the pod is running. I created 2 dummy secrets for:

COOKIE_SECRET
SHARED_SECRET

and the pod is running (seems properly). I didn't have the chance to test it on a fury distro since I haven't install a local fury distro yet. Should I test it on fury?

This is the minimum test, ideally we should test this and that all the integrations still work properly (integration with dex, gangplank, ingresses are still protected, grafana dashboard still show the metrics, etc.), so, yes, ideally you should test this in a Fury cluster, it can be Fury on Kind or minikube but install at least the complete auth module.


SAAS module routing error

Hi, I'm trying to integrate the SAAS multi-tenant module with a Bagisto 1.2.0 fresh installation, i followed this instructions  that are the same on the readme.md file that comes in the module zip file, the installation goes without errors but when i try to go into the page i get this error
 ErrorException (E_ERROR)
Route [saas.home.index] not defined. (View: /var/www/html/bagisto/packages/Webkul/SAASCustomizer/src/Resources/views/companies/layouts/nav-top.blade.php) (View: /var/www/html/bagisto/packages/Webkul/SAASCustomizer/src/Resources/views/companies/layouts/nav-top.blade.php) (View: /var/www/html/bagisto/packages/Webkul/SAASCustomizer/src/Resources/views/companies/layouts/nav-top.blade.php)
Previous exceptions

    Route [saas.home.index] not defined. (View: /var/www/html/bagisto/packages/Webkul/SAASCustomizer/src/Resources/views/companies/layouts/nav-top.blade.php) (View: /var/www/html/bagisto/packages/Webkul/SAASCustomizer/src/Resources/views/companies/layouts/nav-top.blade.php) (0)
    Route [saas.home.index] not defined. (View: /var/www/html/bagisto/packages/Webkul/SAASCustomizer/src/Resources/views/companies/layouts/nav-top.blade.php) (0)
    Route [saas.home.index] not defined. (0)

The route seems to be beign defined here on /packages/Webkul/SAASCustomizer/src/Routes/web.php
Route::group(['middleware' => ['web', 'company-locale']], function () {
    // company registration routes
    Route::prefix('company')->group(function() {

        //Store front home
        Route::get('/home', 'Webkul\SAASCustomizer\Http\Controllers\Company\HomeController@index')->defaults('_config', [
            'view' => 'saas::companies.home.index'
        ])->name('saas.home.index');

        Route::get('/register', 'Webkul\SAASCustomizer\Http\Controllers\Company\CompanyController@create')->defaults('_config', [
            'view' => 'saas::companies.auth.register'
        ])->name('company.create.index');

        Route::post('/register', 'Webkul\SAASCustomizer\Http\Controllers\Company\CompanyController@store')->name('company.create.store');

        Route::post('/validate/step-one', 'Webkul\SAASCustomizer\Http\Controllers\Company\CompanyController@validateStepOne')->name('company.validate.step-one');

        Route::post('/validate/step-three', 'Webkul\SAASCustomizer\Http\Controllers\Company\CompanyController@validateStepThree')->name('company.validate.step-three');

        Route::get('/seed-data', 'Webkul\SAASCustomizer\Http\Controllers\Company\PurgeController@seedDatabase')->name('company.create.data');
    });
});

However it just don't run, I'm new to Laravel and this is a fresh installation without any changes on the code aside for the parametrization showed in the readme file and in the link above.
I appreciate any help since i haven't been able to get pass this point.
I'm running on local machine, Linux Mint with PHP 7.4, composer 1.10.1 and MySQL 8.0.22, serving the app with
php artisan serve on <IP_ADDRESS>:8000
Thanks.

Hi @juancantor12  thank you for reporting your issue.
The extension that you are referring to is build by Webkul they don't provide support for this on Github as this is not a open source extension.
We kindly suggest to create a support ticket on https://bagisto.uvdesk.com/en/customer/create-ticket

Hi @juancantor12  thank you for reporting your issue.
The extension that you are referring to is build by Webkul they don't provide support for this on Github as this is not a open source extension.
We kindly suggest to create a support ticket on https://bagisto.uvdesk.com/en/customer/create-ticket


Parameterization missing 'a'?

Hi, I'm a bit new to this but it seems that the 'a' parameter is missing. Does this produce an equivalent parameterization where 'a' is assumed 0 or is it intended for use only with kinematic chains where this happens to be true?

Sorry for the slow reply. Cold you point me to a specific part of the code? It's been quite a while since I wrote it and recall that in some cases a (I use d so in the code to have less confusion with alpha) is zero, but non-zero in others... I never did get around to finishing the documentation. I suppose that would help when I need to remember what I did :)


⚠ Bofrost.at has degraded performance

In 62aa337, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 1814 ms

Resolved: Bofrost.at performance has improved in c49b7c3 after 1 minute.


Unable to insert data using tryinsertrow and update data using tryupdaterow in run_js_code

Unable to use tryinsertrow to insert data into a table and tryupdaterow to update data in run_js_code.
I followed the youtube tutorial [forum.saltcorn.com - how to create and call triggers], no problem.
But if there is getRows({id:row.product}), tryinsertrow or tryupdaterow cannot work.
Who can help me?

hello @tce12
Perhaps this example can help you.
This is an Trigger-script that runs automaticaly after an Insert-event on the Orders-table.
It updates the order-number of the just inserted order-record.
This new order-number is taken from the systeem-table which only has 1 record. New ordernumer is latest order-number + 1.
Order-rec is updated.
Next systeem-rec is updated.
var order_rec, systeem_rec, ordernum;
order_rec = (row);
systeem_rec = (await Table.findOne({name: 'Systeem'}).getRow(({id: 1})));
ordernum = (systeem_rec.laatste_order_nr) + 1;
await Table.findOne({name: 'Orders'})
.tryUpdateRow(({order_nr: ordernum}), (order_rec.id));
await Table.findOne({name: 'Systeem'})
.tryUpdateRow(({laatste_order_nr: ordernum}), 1);

Hi @HFolkertH might you have an idea on the following:
When I configure a trigger for an update-event on a specific table, lets say mytable, and update the same table with mytable.tryUpdateRow(...) within the run_js_code logic I end up in an infinite loop, because the event triggers itself recursively.
Can I stop saltcorn from emitting update-events, when I do it programatically? Or do you have another idea?


Fix ament_black for new get_sources API

This is my attempt to fix #12. Not sure if it is the correct way but it seems to work. Though, it will break support for black pre 23.9.0 version. Maybe we can do a version check. Any suggestions?

I would suggest we try and fix this in a way that works with both old and new black versions. Either using try/except or explicitly checking the Black version. ROS Humble still has a 3 more years of support left and is likely going to be stuck with the old Black version the entire time.

I would suggest we try and fix this in a way that works with both old and new black versions. Either using try/except or explicitly checking the Black version. ROS Humble still has a 3 more years of support left and is likely going to be stuck with the old Black version the entire time.

This seems very hacky to me... I think if we release different versions for humble then this should work without any try/execpt.
Or do I miss something?

Sure you could, but then you have to maintain two versions and push any fixes or updates to both versions. It is pretty standard to have compatibility layers so you can support a range of library versions. Over a decade ago I contributed to Matplotlib's Qt compatibility layer and they are still using the same strategy to this day: https://github.com/matplotlib/matplotlib/blob/v3.9.0/lib/matplotlib/backends/qt_compat.py .
I am assuming we want to support at least the current 'Tier 1' platforms here: https://www.ros.org/reps/rep-2000.html i.e. Windows + range of Ubuntu versions. It feels like to much effort to support them all if you have to manage different releases. Being flexible on the dependency also means the Tier 2-3 platforms are more likely to work with the package, to say nothing of anyone doing something more complex with custom builds.
For my particular use case I would want the Humble release to be able to support newer Black versions. We have a company wide code quality policy that requires newer Black versions. Our build is currently using an older version of this package to avoid the compatibility issue that was recently introduced.

@gstorer , @bjsowa, I'm not ignoring this; I'm just too overloaded to fix this. The release process for ROS packages is long and extremely painful.
Sorry for the delay

I'm sorry, everyone; I'm not ignoring the messages you sent. I don't have enough time to go through the release-pain. I'm also a bit demotivated as ROS folks won't change their mind about sticking to a horrible format standard like flake8. See https://github.com/ros-navigation/navigation2/pull/3941#issuecomment-1795638952
This means that black, ruff, or whatever will never get officially supported. This pain will continue on each ROS release from now on. If you feel the energy of fighting, please consider looking into ROS discourse; there are many conversations about this topic, all relatively depressing, for me, is a lost cause
@ruffsl, would you like to take over? Can you spare some time?

I made the fix backward compatible for black versions <23.9.0 so now it shouldn't break support for black version distributed in Ubuntu Jammy.

I don't have enough time to go through the release-pain.

I can offer my help. I have some experience (~150 PRs in rosdistro)

This is why I hate this bloom so much, I always follow the instructions in https://docs.ros.org/en/jazzy/How-To-Guides/Releasing/Subsequent-Releases.html, I always need to hack things around, and now I get this error
==> bloom-export-upstream /tmp/tmpx7cemart/upstream git --tag 0.2.4 --display-uri https://github.com/botsandus/ament_black.git --name upstream --output-dir /tmp/tmp20jdhuxz
Checking out repository at 'https://github.com/botsandus/ament_black.git' to reference '0.2.4'.
Exporting to archive: '/tmp/tmp20jdhuxz/upstream-0.2.4.tar.gz'
Cloning into '/tmp/tmpm2inv1ii'...
warning: --depth is ignored in local clones; use file:// instead.
done.
md5: e8f86a1674aecc3437f62ef5534e44c9

==> git-bloom-import-upstream /tmp/tmp20jdhuxz/upstream-0.2.4.tar.gz  --release-version 0.2.5 --replace
ROS Distro index file associate with commit '3e9af773826ee49ea09135314786d8a46085d9da'
New ROS Distro index url: 'https://raw.githubusercontent.com/ros/rosdistro/3e9af773826ee49ea09135314786d8a46085d9da/index-v4.yaml'
Importing archive into upstream branch...
The package(s) in upstream are version '0.2.4', but the version to be released is '0.2.5', aborting.
❌  Error running command '['/usr/bin/git-bloom-import-upstream', '/tmp/tmp20jdhuxz/upstream-0.2.4.tar.gz', '--release-version', '0.2.5', '--replace']'
Release failed, exiting.

@bjsowa any idea what could have go wrong?  seems related to https://robotics.stackexchange.com/questions/60540/bloom-release-failure

This is why I hate this bloom so much, I always follow the instructions in https://docs.ros.org/en/jazzy/How-To-Guides/Releasing/Subsequent-Releases.html, I always need to hack things around, and now I get this error
==> bloom-export-upstream /tmp/tmpx7cemart/upstream git --tag 0.2.4 --display-uri https://github.com/botsandus/ament_black.git --name upstream --output-dir /tmp/tmp20jdhuxz
Checking out repository at 'https://github.com/botsandus/ament_black.git' to reference '0.2.4'.
Exporting to archive: '/tmp/tmp20jdhuxz/upstream-0.2.4.tar.gz'
Cloning into '/tmp/tmpm2inv1ii'...
warning: --depth is ignored in local clones; use file:// instead.
done.
md5: e8f86a1674aecc3437f62ef5534e44c9

==> git-bloom-import-upstream /tmp/tmp20jdhuxz/upstream-0.2.4.tar.gz  --release-version 0.2.5 --replace
ROS Distro index file associate with commit '3e9af773826ee49ea09135314786d8a46085d9da'
New ROS Distro index url: 'https://raw.githubusercontent.com/ros/rosdistro/3e9af773826ee49ea09135314786d8a46085d9da/index-v4.yaml'
Importing archive into upstream branch...
The package(s) in upstream are version '0.2.4', but the version to be released is '0.2.5', aborting.
❌  Error running command '['/usr/bin/git-bloom-import-upstream', '/tmp/tmp20jdhuxz/upstream-0.2.4.tar.gz', '--release-version', '0.2.5', '--replace']'
Release failed, exiting.

@bjsowa any idea what could have go wrong? seems related to https://robotics.stackexchange.com/questions/60540/bloom-release-failure

You've set your release tag to 0.2.4 in track configuration instead of :{version} which will look for a tag matching the package version.
To fix that, run bloom-release with -e flag. When it asks you for a release tag, type: :{version}. You can also fill Upstream devel branch to main.

@bjsowa amazing :heart: !!! thanks for the fast support! I was dying!

PRs created in rosdistro:

https://github.com/ros/rosdistro/pull/42246
https://github.com/ros/rosdistro/pull/42247
https://github.com/ros/rosdistro/pull/42248
https://github.com/ros/rosdistro/pull/42249


Dm 196 add sample filter to new UI

Adds the current implementation of the sample status filter to the new UI

Sorry I included this already in my branch 👼


Show a sub icon that indicates whether a bug report activity has time  lapse data or just a single view hierarchy.

New activity list UX for bug reports:

Regression testing for live devices activity lists:

Let's avoid the badging and change the primary icon itself. Also current icon for activity list ('looks_one') looks like an error as if the time-lapse data is the real deal and everything else is legacy case. Also the icon does not mean anything in the absence of a time-lapse data

I'll avoid the badge and just use the time lapse icon as the actual icon background.
Are you saying I should remove the looks_one icon completely, or only show it if there is at least one time lapse data present in a bug report activity list?


Added ignore event typs into notifications

Because image pull events occur frequently and not very important, we do not want to receive  such notification events.  So we  need a filter that filters out the types of events I do not need, and the user can customize the types of events I do not want.

@xiaonancc77 Don't worry about the diffs: we deal with this in Go to have consistent formatting.

@nwt PTAL

Same comments as @stevvooe, so LGTM after those are addressed.

@stevvooe  @nwt  I'm so sorry to submit late. Because I am very busy recently. I have already solved the above problems. Thanks. O(∩_∩)O

LGTM

@nwt I have already updated my code. Please review it~

LGTM.

LGTM


Using "yield" can help save memory usage

For example in ActiveQuery.php method createModels line 320
$models[] = $class::create($row);

we can replace by
yield $class::create($row);

We don't need create object for all rows right now. This solution help postpone memory usage

As it's already 2015, PHP 5.5 and even 5.6 is widely used, I think yield function can be put in.

for version 2.0.x we are backwards compatible to PHP 5.4, Yii 2.1 will be able to use this feature.

@creocoder @fengerzh @cebe  Thanks for you help.

@oherych Have you actually tried this? It seems like naively updating ActiveQueryTrait with this code:
yield $class::create($row);

causes all sorts of strange problems. If you actually tried this and got it to work, I'd appreciate any tips you have.


Schedule global ml footprints dag

Work in progress. Fixes #224

I'm running into some troubles here in the AWS Batch jobs that I can't reproduce locally -- will update with details soon

Thanks for the review @melanie-logan!


Syntactic coloring

Hello,
I have lost the Syntactic coloring with the new version

I have the same problem

My solution was install the old version 0.0.6
with the command:
apm install<EMAIL_ADDRESS>First of all, uninstall the ariake-dark-syntax, and so install a old version

Hi @Crazy-Cactus, @Deharlan
Thanks for letting me know the issue.
Which version of Atom are you on?
Atom 1.13.0 should work with the latest version. Please try v0.1.1 of the theme with the latest Atom.
Or does it luck the syntactic coloring for a certain language? If so, I'd be grateful If you could provide which language the theme is missing.

Thanks @pathtrk
In Atom 1.13.0 everything works well
Maybe you should update engines section in package.json to prevent people with older versions from getting incompatible update.

Thanks @pathtrk
Its works very well, good job and good theme

@caudatecoder
Thanks so much for letting me know about engines section in package.json. I completely missed it! I updated the package.json with engines section for corresponding atom version.
@Deharlan
Glad to hear the theme works!

As I updated the theme with 0.1.2 release for deprecation and compatibility, I'll close this issue.
Thanks folks! Please feel free to reopen this anytime.


Sensing-yum public keys are not available, and docker image hangs on installing updates.

Describe the bug
While installing updates on sensing-yum encounted the following error:
warning: /var/cache/yum/x86_64/7/base/packages/libtirpc-0.2.4-0.16.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
To Reproduce
Steps to reproduce the behavior:
sudo  --preserve-env docker-compose --file resources/senzing/docker-compose-senzing-installation.yaml up
Expected behavior
Should be able to install updates for the docker image
Screenshots
https://i.imgur.com/Qdcnlzb.png

And another screenshot.
https://i.imgur.com/LxLC60Y.png

And another screenshot.
https://i.imgur.com/LxLC60Y.png

If you are running an instruction like the one seen at https://github.com/Senzing/docker-compose-demo/blob/master/docs/docker-compose-rabbitmq-postgresql/README.md#install-senzing, you do see the warning in the log and a successful completion after 5-15 minutes, depending on network speed:
$ sudo \
>   --preserve-env \
>   docker-compose --file resources/senzing/docker-compose-senzing-installation.yaml up

Starting senzing-yum ... done
Attaching to senzing-yum
senzing-yum | Loaded plugins: fastestmirror, ovl
senzing-yum | Loading mirror speeds from cached hostfile
senzing-yum |  * base: reflector.westga.edu
senzing-yum |  * extras: www.gtlib.gatech.edu
senzing-yum |  * updates: mirror.mia11.us.leaseweb.net
senzing-yum | Resolving Dependencies
senzing-yum | --> Running transaction check
senzing-yum | ---> Package senzingapi.x86_64 0:2.3.0-20342 will be installed
senzing-yum | --> Processing Dependency: senzingdata-v1 >= 1.0.0 for package: senzingapi-2.3.0-20342.x86_64
senzing-yum | --> Processing Dependency: python3 >= 3.6.3 for package: senzingapi-2.3.0-20342.x86_64
senzing-yum | --> Running transaction check
senzing-yum | ---> Package python3.x86_64 0:3.6.8-18.el7 will be installed
senzing-yum | --> Processing Dependency: python3-libs(x86-64) = 3.6.8-18.el7 for package: python3-3.6.8-18.el7.x86_64
senzing-yum | --> Processing Dependency: python3-setuptools for package: python3-3.6.8-18.el7.x86_64
senzing-yum | --> Processing Dependency: python3-pip for package: python3-3.6.8-18.el7.x86_64
senzing-yum | --> Processing Dependency: libpython3.6m.so.1.0()(64bit) for package: python3-3.6.8-18.el7.x86_64
senzing-yum | ---> Package senzingdata-v1.x86_64 0:1.0.0-19287 will be installed
senzing-yum | --> Running transaction check
senzing-yum | ---> Package python3-libs.x86_64 0:3.6.8-18.el7 will be installed
senzing-yum | --> Processing Dependency: libtirpc.so.1()(64bit) for package: python3-libs-3.6.8-18.el7.x86_64
senzing-yum | ---> Package python3-pip.noarch 0:9.0.3-8.el7 will be installed
senzing-yum | ---> Package python3-setuptools.noarch 0:39.2.0-10.el7 will be installed
senzing-yum | --> Running transaction check
senzing-yum | ---> Package libtirpc.x86_64 0:0.2.4-0.16.el7 will be installed
senzing-yum | --> Finished Dependency Resolution
senzing-yum |
senzing-yum | Dependencies Resolved
senzing-yum |
senzing-yum | ================================================================================
senzing-yum |  Package               Arch      Version            Repository             Size
senzing-yum | ================================================================================
senzing-yum | Installing:
senzing-yum |  senzingapi            x86_64    2.3.0-20342        senzing-production    494 M
senzing-yum | Installing for dependencies:
senzing-yum |  libtirpc              x86_64    0.2.4-0.16.el7     base                   89 k
senzing-yum |  python3               x86_64    3.6.8-18.el7       updates                70 k
senzing-yum |  python3-libs          x86_64    3.6.8-18.el7       updates               6.9 M
senzing-yum |  python3-pip           noarch    9.0.3-8.el7        base                  1.6 M
senzing-yum |  python3-setuptools    noarch    39.2.0-10.el7      base                  629 k
senzing-yum |  senzingdata-v1        x86_64    1.0.0-19287        senzing-production    766 M
senzing-yum |
senzing-yum | Transaction Summary
senzing-yum | ================================================================================
senzing-yum | Install  1 Package (+6 Dependent packages)
senzing-yum |
senzing-yum | Total download size: 1.2 G
senzing-yum | Installed size: 3.3 G
senzing-yum | Downloading packages:
senzing-yum | warning: /var/cache/yum/x86_64/7/base/packages/libtirpc-0.2.4-0.16.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
senzing-yum | Public key for libtirpc-0.2.4-0.16.el7.x86_64.rpm is not installed
senzing-yum | Public key for python3-3.6.8-18.el7.x86_64.rpm is not installed
senzing-yum | warning: /var/cache/yum/x86_64/7/senzing-production/packages/senzingapi-2.3.0-20342.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID d99e309d: NOKEY
senzing-yum | Public key for senzingapi-2.3.0-20342.x86_64.rpm is not installed
senzing-yum | --------------------------------------------------------------------------------
senzing-yum | Total                                              1.1 MB/s | 1.2 GB  18:37
senzing-yum | Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
senzing-yum | Importing GPG key 0xF4A80EB5:
senzing-yum |  Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key<EMAIL_ADDRESS>senzing-yum |  Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
senzing-yum |  Package    : centos-release-7-7.1908.0.el7.centos.x86_64 (@CentOS)
senzing-yum |  From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
senzing-yum | Retrieving key from https://senzing-production-yum.s3.amazonaws.com/senzing-production.key
senzing-yum | Importing GPG key 0xD99E309D:
senzing-yum |  Userid     : "Senzing, Inc<EMAIL_ADDRESS>senzing-yum |  Fingerprint: e38c a28c f7ab 06d5 120b bda7 4f67 bf4d d99e 309d
senzing-yum |  From       : https://senzing-production-yum.s3.amazonaws.com/senzing-production.key
senzing-yum | Running transaction check
senzing-yum | Running transaction test
senzing-yum | Transaction test succeeded
senzing-yum | Running transaction
senzing-yum | ENVIRONMENT SET TO ACKNOWLEDGE ACCEPTANCE of the Senzing EULA at https://senzing.com/end-user-license-agreement
senzing-yum |   Installing : senzingdata-v1-1.0.0-19287.x86_64                            1/7
senzing-yum |   Installing : libtirpc-0.2.4-0.16.el7.x86_64                               2/7
senzing-yum |   Installing : python3-setuptools-39.2.0-10.el7.noarch                      3/7
senzing-yum |   Installing : python3-pip-9.0.3-8.el7.noarch                               4/7
senzing-yum |   Installing : python3-3.6.8-18.el7.x86_64                                  5/7
senzing-yum |   Installing : python3-libs-3.6.8-18.el7.x86_64                             6/7
senzing-yum | ENVIRONMENT SET TO ACKNOWLEDGE ACCEPTANCE of the Senzing EULA at https://senzing.com/end-user-license-agreement
senzing-yum |   Installing : senzingapi-2.3.0-20342.x86_64                                7/7
senzing-yum |   Verifying  : libtirpc-0.2.4-0.16.el7.x86_64                               1/7
senzing-yum |   Verifying  : senzingapi-2.3.0-20342.x86_64                                2/7
senzing-yum |   Verifying  : senzingdata-v1-1.0.0-19287.x86_64                            3/7
senzing-yum |   Verifying  : python3-3.6.8-18.el7.x86_64                                  4/7
senzing-yum |   Verifying  : python3-libs-3.6.8-18.el7.x86_64                             5/7
senzing-yum |   Verifying  : python3-setuptools-39.2.0-10.el7.noarch                      6/7
senzing-yum |   Verifying  : python3-pip-9.0.3-8.el7.noarch                               7/7
senzing-yum |
senzing-yum | Installed:
senzing-yum |   senzingapi.x86_64 0:2.3.0-20342
senzing-yum |
senzing-yum | Dependency Installed:
senzing-yum |   libtirpc.x86_64 0:0.2.4-0.16.el7          python3.x86_64 0:3.6.8-18.el7
senzing-yum |   python3-libs.x86_64 0:3.6.8-18.el7        python3-pip.noarch 0:9.0.3-8.el7
senzing-yum |   python3-setuptools.noarch 0:39.2.0-10.el7 senzingdata-v1.x86_64 0:1.0.0-19287
senzing-yum |
senzing-yum | Complete!
senzing-yum exited with code 0

After the warnings, there are log records showing that the keys are being retrieved.
senzing-yum | Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
:
senzing-yum | Retrieving key from https://senzing-production-yum.s3.amazonaws.com/senzing-production.key

The senzing/yum (https://github.com/Senzing/docker-yum) container is only meant to populate two external volumes with Senzing binaries (https://github.com/Senzing/docker-yum#docker-volumes). After the binaries have been delivered, the yum container is considered "disposable" (https://12factor.net/disposability).  The senzing/yum docker container is meant to be cattle, not a pet (http://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/).  As such, it keeps no internal history.
Should the docker binaries need to be updated on the host,  the senzing/yum container is simply re-run.  The newest binaries will be downloaded and placed at the spot of the mounted volumes.  If the same mounted volumes are specified, it will overwrite existing files with new files.
So although a "warning" is seen, it's working properly in the context of a "twelve factor app" (https://12factor.net/).
Does that explain the behavior of the senzing/yum container or do you have other concerns?

If you are running an instruction like the one seen at https://github.com/Senzing/docker-compose-demo/blob/master/docs/docker-compose-rabbitmq-postgresql/README.md#install-senzing, you do see the warning in the log and a successful completion after 5-15 minutes, depending on network speed:
$ sudo \
>   --preserve-env \
>   docker-compose --file resources/senzing/docker-compose-senzing-installation.yaml up

Starting senzing-yum ... done
Attaching to senzing-yum
senzing-yum | Loaded plugins: fastestmirror, ovl
senzing-yum | Loading mirror speeds from cached hostfile
senzing-yum |  * base: reflector.westga.edu
senzing-yum |  * extras: www.gtlib.gatech.edu
senzing-yum |  * updates: mirror.mia11.us.leaseweb.net
senzing-yum | Resolving Dependencies
senzing-yum | --> Running transaction check
senzing-yum | ---> Package senzingapi.x86_64 0:2.3.0-20342 will be installed
senzing-yum | --> Processing Dependency: senzingdata-v1 >= 1.0.0 for package: senzingapi-2.3.0-20342.x86_64
senzing-yum | --> Processing Dependency: python3 >= 3.6.3 for package: senzingapi-2.3.0-20342.x86_64
senzing-yum | --> Running transaction check
senzing-yum | ---> Package python3.x86_64 0:3.6.8-18.el7 will be installed
senzing-yum | --> Processing Dependency: python3-libs(x86-64) = 3.6.8-18.el7 for package: python3-3.6.8-18.el7.x86_64
senzing-yum | --> Processing Dependency: python3-setuptools for package: python3-3.6.8-18.el7.x86_64
senzing-yum | --> Processing Dependency: python3-pip for package: python3-3.6.8-18.el7.x86_64
senzing-yum | --> Processing Dependency: libpython3.6m.so.1.0()(64bit) for package: python3-3.6.8-18.el7.x86_64
senzing-yum | ---> Package senzingdata-v1.x86_64 0:1.0.0-19287 will be installed
senzing-yum | --> Running transaction check
senzing-yum | ---> Package python3-libs.x86_64 0:3.6.8-18.el7 will be installed
senzing-yum | --> Processing Dependency: libtirpc.so.1()(64bit) for package: python3-libs-3.6.8-18.el7.x86_64
senzing-yum | ---> Package python3-pip.noarch 0:9.0.3-8.el7 will be installed
senzing-yum | ---> Package python3-setuptools.noarch 0:39.2.0-10.el7 will be installed
senzing-yum | --> Running transaction check
senzing-yum | ---> Package libtirpc.x86_64 0:0.2.4-0.16.el7 will be installed
senzing-yum | --> Finished Dependency Resolution
senzing-yum |
senzing-yum | Dependencies Resolved
senzing-yum |
senzing-yum | ================================================================================
senzing-yum |  Package               Arch      Version            Repository             Size
senzing-yum | ================================================================================
senzing-yum | Installing:
senzing-yum |  senzingapi            x86_64    2.3.0-20342        senzing-production    494 M
senzing-yum | Installing for dependencies:
senzing-yum |  libtirpc              x86_64    0.2.4-0.16.el7     base                   89 k
senzing-yum |  python3               x86_64    3.6.8-18.el7       updates                70 k
senzing-yum |  python3-libs          x86_64    3.6.8-18.el7       updates               6.9 M
senzing-yum |  python3-pip           noarch    9.0.3-8.el7        base                  1.6 M
senzing-yum |  python3-setuptools    noarch    39.2.0-10.el7      base                  629 k
senzing-yum |  senzingdata-v1        x86_64    1.0.0-19287        senzing-production    766 M
senzing-yum |
senzing-yum | Transaction Summary
senzing-yum | ================================================================================
senzing-yum | Install  1 Package (+6 Dependent packages)
senzing-yum |
senzing-yum | Total download size: 1.2 G
senzing-yum | Installed size: 3.3 G
senzing-yum | Downloading packages:
senzing-yum | warning: /var/cache/yum/x86_64/7/base/packages/libtirpc-0.2.4-0.16.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
senzing-yum | Public key for libtirpc-0.2.4-0.16.el7.x86_64.rpm is not installed
senzing-yum | Public key for python3-3.6.8-18.el7.x86_64.rpm is not installed
senzing-yum | warning: /var/cache/yum/x86_64/7/senzing-production/packages/senzingapi-2.3.0-20342.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID d99e309d: NOKEY
senzing-yum | Public key for senzingapi-2.3.0-20342.x86_64.rpm is not installed
senzing-yum | --------------------------------------------------------------------------------
senzing-yum | Total                                              1.1 MB/s | 1.2 GB  18:37
senzing-yum | Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
senzing-yum | Importing GPG key 0xF4A80EB5:
senzing-yum |  Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key<EMAIL_ADDRESS>senzing-yum |  Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
senzing-yum |  Package    : centos-release-7-7.1908.0.el7.centos.x86_64 (@CentOS)
senzing-yum |  From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
senzing-yum | Retrieving key from https://senzing-production-yum.s3.amazonaws.com/senzing-production.key
senzing-yum | Importing GPG key 0xD99E309D:
senzing-yum |  Userid     : "Senzing, Inc<EMAIL_ADDRESS>senzing-yum |  Fingerprint: e38c a28c f7ab 06d5 120b bda7 4f67 bf4d d99e 309d
senzing-yum |  From       : https://senzing-production-yum.s3.amazonaws.com/senzing-production.key
senzing-yum | Running transaction check
senzing-yum | Running transaction test
senzing-yum | Transaction test succeeded
senzing-yum | Running transaction
senzing-yum | ENVIRONMENT SET TO ACKNOWLEDGE ACCEPTANCE of the Senzing EULA at https://senzing.com/end-user-license-agreement
senzing-yum |   Installing : senzingdata-v1-1.0.0-19287.x86_64                            1/7
senzing-yum |   Installing : libtirpc-0.2.4-0.16.el7.x86_64                               2/7
senzing-yum |   Installing : python3-setuptools-39.2.0-10.el7.noarch                      3/7
senzing-yum |   Installing : python3-pip-9.0.3-8.el7.noarch                               4/7
senzing-yum |   Installing : python3-3.6.8-18.el7.x86_64                                  5/7
senzing-yum |   Installing : python3-libs-3.6.8-18.el7.x86_64                             6/7
senzing-yum | ENVIRONMENT SET TO ACKNOWLEDGE ACCEPTANCE of the Senzing EULA at https://senzing.com/end-user-license-agreement
senzing-yum |   Installing : senzingapi-2.3.0-20342.x86_64                                7/7
senzing-yum |   Verifying  : libtirpc-0.2.4-0.16.el7.x86_64                               1/7
senzing-yum |   Verifying  : senzingapi-2.3.0-20342.x86_64                                2/7
senzing-yum |   Verifying  : senzingdata-v1-1.0.0-19287.x86_64                            3/7
senzing-yum |   Verifying  : python3-3.6.8-18.el7.x86_64                                  4/7
senzing-yum |   Verifying  : python3-libs-3.6.8-18.el7.x86_64                             5/7
senzing-yum |   Verifying  : python3-setuptools-39.2.0-10.el7.noarch                      6/7
senzing-yum |   Verifying  : python3-pip-9.0.3-8.el7.noarch                               7/7
senzing-yum |
senzing-yum | Installed:
senzing-yum |   senzingapi.x86_64 0:2.3.0-20342
senzing-yum |
senzing-yum | Dependency Installed:
senzing-yum |   libtirpc.x86_64 0:0.2.4-0.16.el7          python3.x86_64 0:3.6.8-18.el7
senzing-yum |   python3-libs.x86_64 0:3.6.8-18.el7        python3-pip.noarch 0:9.0.3-8.el7
senzing-yum |   python3-setuptools.noarch 0:39.2.0-10.el7 senzingdata-v1.x86_64 0:1.0.0-19287
senzing-yum |
senzing-yum | Complete!
senzing-yum exited with code 0

After the warnings, there are log records showing that the keys are being retrieved.
senzing-yum | Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
:
senzing-yum | Retrieving key from https://senzing-production-yum.s3.amazonaws.com/senzing-production.key

The senzing/yum (https://github.com/Senzing/docker-yum) container is only meant to populate two external volumes with Senzing binaries (https://github.com/Senzing/docker-yum#docker-volumes). After the binaries have been delivered, the yum container is considered "disposable" (https://12factor.net/disposability).  The senzing/yum docker container is meant to be cattle, not a pet (http://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/).  As such, it keeps no internal history.
Should the docker binaries need to be updated on the host,  the senzing/yum container is simply re-run.  The newest binaries will be downloaded and placed at the spot of the mounted volumes.  If the same mounted volumes are specified, it will overwrite existing files with new files.
So although a "warning" is seen, it's working properly in the context of a "twelve factor app" (https://12factor.net/).
Does that explain the behavior of the senzing/yum container or do you have other concerns?

The reason for 5-15 minutes is that it is downloading a 3GB file and then extracting that file.   So the appearance of hanging is actually waiting for the file to download.

The reason for 5-15 minutes is that it is downloading a 3GB file and then extracting that file.   So the appearance of hanging is actually waiting for the file to download.

One thing we can do to help, is to "manage expectations".   For instance in a place like https://github.com/Senzing/docker-compose-demo/tree/master/docs/docker-compose-sqs-postgresql#install-senzing  We would write:
Install Senzing

If Senzing has not been installed, install Senzing.
Example:
cd ${GIT_REPOSITORY_DIR}
sudo \
  --preserve-env \
  docker-compose --file resources/senzing/docker-compose-senzing-installation.yaml up

This will download and extract a 3GB file.  It may take 5-15 minutes, depending on network speeds

One thing we can do to help, is to "manage expectations".   For instance in a place like https://github.com/Senzing/docker-compose-demo/tree/master/docs/docker-compose-sqs-postgresql#install-senzing  We would write:
Install Senzing

If Senzing has not been installed, install Senzing.
Example:
cd ${GIT_REPOSITORY_DIR}
sudo \
  --preserve-env \
  docker-compose --file resources/senzing/docker-compose-senzing-installation.yaml up

This will download and extract a 3GB file.  It may take 5-15 minutes, depending on network speeds

@SamMacy If the improved instructions are acceptable to the customer, I'll transfer this issue to you to make the modifications in all descriptions in https://github.com/Senzing/docker-compose-demo/tree/master/docs

@SamMacy If the improved instructions are acceptable to the customer, I'll transfer this issue to you to make the modifications in all descriptions in https://github.com/Senzing/docker-compose-demo/tree/master/docs

That does answer my question, thanks! It did work for me. I wound up walking away for a bit, got a drink, and it was running. Wound up running it again the next day and seemed to work better once I got a better connection, as well.
Thanks for the quick response, and the helpful answers everyone.

That does answer my question, thanks! It did work for me. I wound up walking away for a bit, got a drink, and it was running. Wound up running it again the next day and seemed to work better once I got a better connection, as well.
Thanks for the quick response, and the helpful answers everyone.

@spedigos I'm glad it helped.   Based on your experience,  I would like to keep this issue open and have @SamMacy update the documentation so the proper expectations are set.  I completely understand why you thought it was hanging.   Makes perfect sense.   (Aside:  I've been doing it so long, I didn't thing twice about someone new giving it a try)
@SamMacy I'll assign this to you.  Can you make the updates suggested 3 posts up?

@spedigos I'm glad it helped.   Based on your experience,  I would like to keep this issue open and have @SamMacy update the documentation so the proper expectations are set.  I completely understand why you thought it was hanging.   Makes perfect sense.   (Aside:  I've been doing it so long, I didn't thing twice about someone new giving it a try)
@SamMacy I'll assign this to you.  Can you make the updates suggested 3 posts up?


Adding Xbox One UWP hello world sample

Thanks! I'll check this out.

As I dropped the ball on this and so much has changed, I'm going to close this. This should be looked at again for v9 when that releases.


Add serial-monitor subcommand

Include serial-monitor subcommand in cargo-espflash and espflash to allow monitoring a serial monitor without flashing.
Closes #197

LGTM! Could you run rustfmt to fix the CI?
It should now be fixed!


removed future requirement

Removal of future library in response to issue : dependency on deprecated 'future' #201

Maybe we should hold off on merging this until the renaming has been done.


Adding normalization for parameter and current values

Pull Request (PR) description
Adding normalization for parameter and current values
This Pull Request (PR) fixes the following issues
#82
Task list

[x] Added an entry under the Unreleased section of file CHANGELOG.md.
Entry should say what was changed, and how that affects users (if applicable).
[x] Resource documentation added/updated in README.md.
[x] Resource parameter descriptions added/updated in README.md, schema.mof
and comment-based help.
[x] Comment-based help added/updated.
[x] Localization strings added/updated in all localization files as appropriate.
[x] Examples appropriately added/updated.
[x] Unit tests added/updated. See DSC Community Testing Guidelines.
[x] Integration tests added/updated (where possible). See DSC Community Testing Guidelines.
[x] New/changed code adheres to DSC Community Style Guidelines.

This change is

Hi @jeremyciak, sorry for the delay in response. I had a look at this PR and remembered about Test-DscParameterState, a function that is included in the DscRsource.Common module (see here: https://github.com/dsccommunity/DscResource.Common/blob/master/source/Public/Test-DscParameterState.ps1). I think that might be the way to fix this, but I did not have time to test integrating that module yet, would you be up for that?
As an intermediate step we could also merge your code in it's current form, although I would prefer the previous. Let me know your thoughts.

@danielboth, I believe I have a functional implementation of the Test-DscParameterState function, which of course has set the foundation to implement this and other functions from the DscResource.Common module across more DSC resources in this xRemoteDesktopSessionHost module.

Hi @jeremyciak, thanks for this work, looks good at first sight! I'll do my best to do a full review by tomorrow.

@danielboth, alright thanks! I also have a lot of other fixes that I would love to implement so if all goes well here you can expect more Issues and PR's to come through. I'm curious how does one become an official Contributor for this repository?

Hi @jeremyciak, just some minor things, if you can change / update those we're ready for merge.
You become an official contributor the first time you merge a PR, so once this one is approved & merged.

@danielboth, I suppose the question I was really meaning to ask was how to become a Reviewer and not just a Contributor

@danielboth, how do I join this DSC community call? Also, does this PR need to be merged to master?

Hi @jeremyciak, yes this PR needs to be merged to master. After it gets merged, we'll do an automatic release of the module with a preview tag (e.g. 2.0.0-preview0004). You should be able to merge this PR now, so please go ahead and do that.
On the DSC community, you can get more information here: https://dsccommunity.org/community_calls/. Also, for the schedule of the calls, please follow @dsccommunity on twitter.

@danielboth, I don't believe I have write access to this repository so I am unable to merge my PR:

Hi @jeremyciak, got it, I thought merges were allowed when an approval was given, apparently not the case. I merged it now, thank you for your contribution!


fix a test case: Use NArrayAdapter instead of HashAdapter

@data was Array class before this change, thus we were using HashAdapter in this test case. It fixes to use NArrayAdapter.
Notes: I noticed it when I tried to implement NArrayAdapter that can be accessed by both string and symbol. I will send other pull-request about it.

I was mistaken. This test case is "an array of vectors as records". It is not wrong that HashAdapter is used.
I will close this issue.


Fix - Change background color of dataset (#7546)

This is a proposal to fix the problem (# 7546)

Thanks for the proposal!
This would be a workaround for a bug, so I don't think it should be done this way. I've submitted a PR fixing the issues with shared options (had been working on that for couple of days already).
Next time, you should make sure tests pass locally, before submitting (by running npm test, the npm run dev command skips linting)


Does it support multi-gpu training?

Hi there, thanks for this nice work! Your code looks very neat and clear. However, when I am trying gradient surgery on my own task, where 4 GPUs are utilized to load 4 source datasets, the error throws AttributeError: 'DataParallel' object has no attribute 'get_grads '. So I am wondering this may be caused by the multi-GPU training process. Can you kindly elaborate on this? How many GPUs do you use in your experiments?  Thanks!

Hi @BJTUJia,
I only used one GPU in my experiments, but I think what happens is that the model is wrapped by the DataParallel class and it is not possible to access its attributes, like get_grads. Anyway, I will do some research to try to add support for multiple GPUs soon.

Thanks! I will look into this issue as well！


missing function download_geofence

I am currently looking into bringing the geofence feature to an application I am developing using Mavsdk. For the mission feature I am currently downloading the mission from the autopilot on connect and on changes. With geofences this is not possible, because there is no download function and also no callback to get notified on changes.
Is there a reason for not having these functions or is there just a pr needed? If latter is the case, what would be the best way to implement them?
This also applies to the rally point feature.

No reason, just no one asked for it yet :). Feel free to make a pull request.