edgent-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (QUARKS-107) Add sample use of new Range class in recipe3 - detect value out of range?
Date Tue, 05 Apr 2016 17:19:25 GMT

    [ https://issues.apache.org/jira/browse/QUARKS-107?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15226693#comment-15226693

ASF GitHub Bot commented on QUARKS-107:

Github user queeniema commented on a diff in the pull request:

    --- Diff: site/recipes/recipe_value_out_of_range.md ---
    @@ -137,6 +137,36 @@ When the final application is run, the output looks something like
the following
     Note that the deadband filter outputs a warning message for the very first temperature
reading of 79.1°F. When the temperature falls to 76.5°F (which is outside the optimal range),
both the simple filter and deadband filter print out a warning message. However, when the
temperature returns to normal at 77.5°F, only the deadband filter prints out a message as
it is the first value inside the optimal range after a period of being outside it.
    +## Range values
    +Filtering against a range of values is such a common analytic activity that the ``quarks.analytics.sensors.Range``
class is provided to assist with that.
    +Using a Range can simplify and clarify your application code and lessen mistakes that
may occur when writing expressions to deal with ranges.
    +Though not covered in this recipe, Ranges offer additional conveniences for creating
applications with external range specifications and adaptable filters.
    +In the above examples, a single Range can be used in place of the two
    +different expressions for the same logical range:
    --- End diff --
    @dlaboss For consistency, could you combine these two lines into one?

> Add sample use of new Range class in recipe3 - detect value out of range?
> -------------------------------------------------------------------------
>                 Key: QUARKS-107
>                 URL: https://issues.apache.org/jira/browse/QUARKS-107
>             Project: Quarks
>          Issue Type: Improvement
>            Reporter: Dale LaBossiere
>            Assignee: Dale LaBossiere
>              Labels: newbie
> Add sample use of new Range class in recipe3 - detect value out of range?
> Either or both of the recipe's existing samples could be use Range, or one of them could
be cloned to use it.
> ```
> TStream<Double> simpleFiltered = temp.filter(tuple ->
>             tuple < TEMP_LOW || tuple > TEMP_HIGH);
> // could be
> TStream<Double> simpleFiltered = temp.filter(Ranges.open(TEMP_LOW, TEMP_HIGH);
> TStream<Double> deadbandFiltered = Filters.deadband(temp,
>             identity(), tuple -> tuple >= TEMP_LOW && tuple <= TEMP_HIGH);
> // could instead be
> TStream<Double> deadbandFiltered = Filters.deadband(temp,
>             identity(), Ranges.closed(TEMP_LOW, TEMP_HIGH));
> ```
> Use of a Range simplifies the code a bit.  I can also avoid mistakes if one's code "duplicates"
the expressions for a particular range in multiple places.  
> Using Range can be more compelling for the simplicity with which a range may be expressed
and created from a config file for an app.  e.g. imagine how one would express the range in
a Properties config file.  A range property value in a Properties file would simply be:
> ```
> # my sensor filter range
> myFilterRange=[71.0..98.0]
> ```
> and the app code to create the Range would simply be:
> ```
> Range<Double> myFilterRange = Ranges.valueOfDouble(props.getProperty("myFilterRange"));
> ```
> Another compelling case is making a filter range dynamically changeable, for example
as a result of some received IoT "device command".  The range could be declared like:
> ```
> AtomicReference<Range<Double>> myFilterRange = new AtomicReference<>(
>     Ranges.valueOfDouble(props.getProperty("myFilterRange"));  // initial range value
> // code in the device's set-filter-range cmd handler is ultimately:
> //   myFilterRange.set(Ranges.valueOfDouble(the-new-range-string-from-the-cmd));  //
sets a new Range object
> // Using the changeable filter range is simply:
> TStream<Double> simpleFiltered = temp.filter(myFilterRange.get());
> ```
> Dynamic filter Predicates is probably a good recipe unto itself :-)

This message was sent by Atlassian JIRA

View raw message