{"action":"published","release":{"url":"https://api.github.com/repos/qminer/qminer/releases/2887790","assets_url":"https://api.github.com/repos/qminer/qminer/releases/2887790/assets","upload_url":"https://uploads.github.com/repos/qminer/qminer/releases/2887790/assets{?name,label}","html_url":"https://github.com/qminer/qminer/releases/tag/v4.10.0","id":2887790,"tag_name":"v4.10.0","target_commitish":"master","name":"4.10.0","draft":false,"author":{"login":"blazf","id":775988,"avatar_url":"https://avatars.githubusercontent.com/u/775988?v=3","gravatar_id":"","url":"https://api.github.com/users/blazf","html_url":"https://github.com/blazf","followers_url":"https://api.github.com/users/blazf/followers","following_url":"https://api.github.com/users/blazf/following{/other_user}","gists_url":"https://api.github.com/users/blazf/gists{/gist_id}","starred_url":"https://api.github.com/users/blazf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/blazf/subscriptions","organizations_url":"https://api.github.com/users/blazf/orgs","repos_url":"https://api.github.com/users/blazf/repos","events_url":"https://api.github.com/users/blazf/events{/privacy}","received_events_url":"https://api.github.com/users/blazf/received_events","type":"User","site_admin":false},"prerelease":false,"created_at":"2016-03-25T10:57:44Z","published_at":"2016-03-25T12:36:27Z","assets":[],"tarball_url":"https://api.github.com/repos/qminer/qminer/tarball/v4.10.0","zipball_url":"https://api.github.com/repos/qminer/qminer/zipball/v4.10.0","body":"**Non-breaking with new features**\r\n\r\nNew features:\r\n- `TStreamAggrOnAddFilter` class can be extended to override `CallOnAdd` method that takes a record and returns true if the aggregate should process it. Currently we have two filters: default that passes every record and `TOnAddSubsampler`, which can skip a given amount of records for every time the aggregate is actually updated. `TSimpleLinReg` is currently the only aggregate that supports filtering. Example:\r\n```\r\nvar linReg = store.addStreamAggr({\r\n    filter: { type: \"subsamplingFilter\", skip: 3 },\r\n    type: 'simpleLinearRegression',\r\n    inAggrX: winX.name,\r\n    inAggrY: winY.name,\r\n    storeX: \"Function\",\r\n    storeY: \"Function\",\r\n    quantiles: [0.25, 0.75]\r\n});\r\n```\r\n\r\nBug fixes:\r\n- #394. Added asserts for invalid record IDs in the buffer which are a result of store window being too short (incompatible with the window aggregate).\r\n- #264 (incorrect exception handling) `TJsonVal` has two new functions: `AssertObjKeyStr`, `AssertObjKeyNum`. The functions take a second parameter (function name), where `__FUNCTION__` can be used (not standard but works on msvc and gcc). \r\nExample: `ParamVal->AssertObjKeyStr(\"timestamp\", __FUNCTION__);`\r\n- #372. all JS vectors have `toArray` function.\r\n- #350. arm publish script added\r\n\r\nOther:\r\n- deleted example tests (generated by travis)\r\n- removed datasets tests (will be moved to `qminer-data-loader`)\r\n- global mocha instalation is not required any more. tests can be run by calling `npm test`\r\n- made tests in `store_partial_flush.js` silent \r\n- updated GitHub Wiki (part of #351)"}}