January 2020: Warp 10 release 2.4.0

We just published the 2.4.0 release of Warp 10. Discover all the details in this post.

Release Warp 10 2.4.0

On Tuesday, January the 28th of 2020, one month and a half after the release of the 2.3.0, we published the 2.4.0 release of Warp 10. On the menu, some bug fixes and a lot of new functionalities.

Bug fixes

A full bug fix list is available on this google group post. The most important one is a bug correction which could lead to a FETCH for the latest value (-1) to return the entire data points before the 'end' timestamp. For this correction alone we encourage all users of 2.3.0 to upgrade to 2.4.0.

Changes and new features

GOLDWRAP

GOLDWRAP now includes labels and attributes. This function was designed for notarization. Data and metadata are sorted to create a gold standard blob from its input. If you do use attributes, which are mutable, we strongly advise you to remove them before calling GOLDWRAP:

[ 'readToken' 'account' { 'unit' 'euro' 'number' $AccountNumber } $startdate $enddate ] 
FETCH 0 GET
{ NULL NULL } SETATTRIBUTES 
GOLDWRAP SHA256 
[ $AccountNumber $startdate $enddate ] '-' JOIN STORE

Then, store the digest somewhere else in a safe place to ensure your data for this account between these two dates were not altered.

->GTS

->GTS has a new signature to save coding time when handling multi-value GTS. A blog article will be available to explain this in detail.

C style block comments

Block comments were strictly limited to /* comments */ in previous versions. You can now write some fancy block comments:

/***********valid**************/

/**
 * Also valid
 */

This comment style will be activated by default on new installations and disabled by default if the configuration is not set. To allow this comment style on an existing install, add this line to your conf.d/99-personalconfig.conf:

warpscript.comments.loose = true

Disabling loop indices

When you use LMAP, you sometimes need the current index, sometimes not, so you start your macro with DROP. For example, if you want to double every input number of a list:

// double each input [ 4 5 6 ] <% DROP 2 * %> LMAP

Index (=number of iteration - 1) was always available on top of the stack for LMAP, LFLATMAP, FOR, FORSTEP. It was never available in FOREACH, UNTIL, WHILE. You can now override the index presence with a boolean:

// double each input [ 4 5 6 ] <% 2 * %> F LMAP // F is a faster way to write false

New filter filter.bysize

25 500 filter.bysize allows keeping GTS which size is greater than 25 and less than 500.

New filter filter.byselector

This new filter allows filtering GTS by a selector. It supports existing selectors and extended selectors such as class{labels}{attributes}.

New filters filter.any.* and filter.all.*

These new filters are similar to the previously implemented filter.last.* which filters a list of GTS by retaining those whose last value satisfies some criteria. With filter.any.*, the GTS is retained if any of its value satisfies the criteria. With filter.all.*, the GTS is retained if each of its values satisfies the criteria.

New ADDDURATION function

The new function ADDDURATION adds an ISO 8601 duration to a timestamp or a TSELEMENTS.

Note that a calendar duration is dependent on the basis of when it is added. For example, adding a month to the 31st of January will generally result in the 28th of February. But that can result in the 29th of February on leap years.

This new function is useful to add a complex duration that can be a composite of years and months for example.

New HHCODE functions

These new functions allow manipulation on HHCode cells.

  • HHCODE.CENTER gets the latitude and longitude coordinates of the center of the given HHCode cell.
  • HHCODE.BBOX gets the bounding box of the HHCode cell by returning the coordinates of the northwest and southeast points.

The following functions retrieve the neighboring cells of a reference cell:

Graphical representation of HHCode cells
Graphical representation of HHCode cells

Details on EVAL exceptions

On previous versions of Warp 10, when you did something wrong in a remote execution, you get a 500 error that does not help so much. For example, try this invalid WarpScript on your instance, with REXEC activated:

" 2 + " 'http://localhost:8080/api/v0/exec' REXEC

With previous version, output is : java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8080/api/v0/exec (Server returned HTTP response code: 500 for URL: http://localhost:8080/api/v0/exec)

Since 2.4.0 release, output is : (REXEC remote execution failed: Exception at '2 =>+<=' in section [TOP] (Empty stack.))

Warp 10 - 2.4.0

Download the Most Advanced Time Series Platform